<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/108971>108971</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
clang refuses to pass --no-demangle to lld on aarch64-none-elf
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang,
lld
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
fruityloops1
</td>
</tr>
</table>
<pre>
With the following source:
a.cpp
```cpp
int a();
int main(){ return a(); }
```
Running the following with a `x86_64-pc-linux-gnu` host will have the expected behavior, not demangling the symbol:
```
{14:19}~ ➭ clang++ -fuse-ld=lld a.cpp -Wl,--no-demangle
ld.lld: error: undefined symbol: _Z1av
>>> referenced by a.cpp
>>> /tmp/a-0e458f.o:(main)
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
{14:34}~ ➭
```
But once you switch to aarch64-none-elf:
```
{14:34}~ ➭ clang++ -fuse-ld=lld a.cpp -Wl,--no-demangle --target=aarch64-none-elf -nodefaultlibs
ld.lld: error: undefined symbol: a()
>>> referenced by a.cpp
>>> /tmp/a-89189f.o:(main)
clang++: error: ld.lld command failed with exit code 1 (use -v to see invocation)
{14:34}~ ➭
```
The -Wl,--no-demangle argument is ignored. With verbose output it can be seen that the --no-demangle argument is discarded by clang before being (not) passed to lld:
```
{14:34}~ ➭ clang++ -fuse-ld=lld a.cpp -Wl,--no-demangle --target=aarch64-none-elf -nodefaultlibs -v
clang version 18.1.8
Target: aarch64-none-unknown-elf
Thread model: posix
InstalledDir: /usr/bin
"/usr/bin/clang++" -cc1 -triple aarch64-none-unknown-elf -emit-obj -mrelax-all -dumpdir a- -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name a.cpp -mrelocation-model static -mframe-pointer=non-leaf -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -nostdsysteminc -target-cpu generic -target-feature +v8a -target-feature +fp-armv8 -target-feature +neon -target-abi aapcs -debugger-tuning=gdb -fdebug-compilation-dir=/home/nala -v -fcoverage-compilation-dir=/home/nala -resource-dir /usr/lib/clang/18 -internal-isystem /usr/bin/../lib/clang-runtimes/aarch64-none-elf/include/c++/v1 -internal-isystem /usr/lib/clang/18/include -internal-isystem /usr/bin/../lib/clang-runtimes/aarch64-none-elf/include -fdeprecated-macro -ferror-limit 19 -fno-signed-char -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fcxx-exceptions -fexceptions -fcolor-diagnostics -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/a-c3607f.o -x c++ a.cpp
clang -cc1 version 18.1.8 based upon LLVM 18.1.8 default target x86_64-pc-linux-gnu
ignoring nonexistent directory "/usr/bin/../lib/clang-runtimes/aarch64-none-elf/include/c++/v1"
ignoring nonexistent directory "/usr/bin/../lib/clang-runtimes/aarch64-none-elf/include"
ignoring duplicate directory "/usr/lib/clang/18/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/clang/18/include
End of search list.
"/usr/bin/ld.lld" /tmp/a-c3607f.o -Bstatic -EL -L/usr/bin/../lib/clang-runtimes/aarch64-none-elf/lib -L/usr/bin/../lib/clang-runtimes/aarch64-none-elf/lib -L/usr/lib/clang/18/lib/baremetal -o a.out
ld.lld: error: undefined symbol: a()
>>> referenced by a.cpp
>>> /tmp/a-c3607f.o:(main)
clang++: error: ld.lld command failed with exit code 1 (use -v to see invocation)
{14:36}~ ➭
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMV01z47gR_TXwpatZIijr46CDbVnJVs1eNqmdqlxcINAksQYBFj5k-ZLfngIpjWStPZlNJpl1qSyx2ex-eP3QaIoQdGuJNuz2nt1ub0SKnfObxicdX41zQyhvaqdeN5917CB2BI0zxr1o20JwyUti1R2bbdnsThRyGKafbDGbPl8s2kYQjK8YX7Pq_mzrhbZH8_IePMXk7YUjsOX2KuTxcvz_S7I2I3mL6yVDFcAWs8Nq8bSY4yDRaJsO2NrEFjPoXIjwoo2BTuxpfJoOA8lICmrqxF47z_gDWBdBUS9sa05ZwmtfO_NlzdeolvflnFV35Zott_8E9sjZ-pHdbUEaYVvG7xm_B2xSIDSKVVtjFIy0AX42jD8gWofHjATf-jflNqowOegdkPfO5x_JKmq0JXWGDU__KMX-iLZ6nD7gqSFPVub1v8JlIb-4XKXku9gPjO8Ezmh-u2oKlznhq6me6-npi1W_wWW0fSYP0vW9sAoaoQ2pqWx00BGkUwQlML5KgQD3EB0EItB276SI2p1TnBiv5leMf0U19ymCs5Lg1SUILzrKLmcQwstuMUfrLCGZ5t8V-Xcp_6MiI0bhW4qs2l4DALROUSOSiUbX4Q-V-bSFvmOhV-tytf6DhR7B_rBC_72jdzkXvk092Qg6gG6t86QKGBvcnnztAoFLcUgRMkRhoaaMykLsRBy7wMfhlA5SeDXxO9ICNTXOE9SUewjjK-si42sYRAik8oqnev6ptAa4v6hspiVoZ6FcFWWxOpJ7DHX3duMk-2zdix030LEInoSC3ikalTm4oA_TrZ9siMIYUls9yoXxXQqe8V2t7eQBjPM3Vr671BrngFKWgNHrIVfiAySA1OuIrv4NsPdkxAGFMYAq9YPSHgQCKh1EbQgbTwQoDQmPIkScyoe1kM9k1dnPmH2Pe_K60eRHcy487oVJhFb0FADzJsFGm8lwqkxGcJQ3jrRAiCJqCdg3XvSEg9M2kmfV1jqLhkQD2PQidkjeWwfYNANKZ6MXMhfTWcDGOvQuWaVti9kXsJfOhuiTjM6jMFqEjMm6EFV4DZF6bSUcJYFySNCSJa_PtoZETJ6A8fv9SrxnbgYUvt-v3rtnKeM62kWtQYhBBkBFdWpb8hhTPrxZtW1VDdiMdpSuH7SZyFFZFlvGd53rifGdFUbkLoGNdHvyoqVvcPc0zSn59llhRtdnLe3KFeBIuRUG9UQOXOmuKN4-hj7ZqHsKuTleHx18p600SWUY8iTW3b78WpprSOcg_ytwI-mDJykiKeyF9FlbY_dGo3sdoVxPyhqHRIWyEx6waW2SeOwJrNrOC16UgE141gM65VF2JJ9RW2z7rFx5OCAdJA25SiFnuLyQzjiPSos2K1NnhTRCKR90C7h9evrLw8PTX-9-fXzafr77ZcefHnY_Pd397WdWbUtAd3lAyWoxWzaFAzzAkfTLI25qZWO_eNvPoBa5E6fBWfj06defT-ZjP4RJwvDeMDnNsfkIyc09M3zQIeazQGlPeeO9vtPCvouUctj_b_rrfCoNRmftfJDtY0F_icV4ddIi47zIyDgEyiByU_QxQEf-_I5x6V89ZP_q8Wv-37K7Js9Hq8A1p1hGh1h8eAQdZzDO31ff_amdP34C_PTfkW90_b1jvMPEZKqFp56iMHlficKl-KNHzhOnP3jkXHx95LxRm0qtq7W4oU255Ivb5WI1v73pNouZvF3XNRfNoiq5mss556tGcLqldT1b0o3e8Bmfz9blsuTz2fy2qGVZL24rta7nZaOoZPMZ9UKbIk8bhfPtjQ4h0aacrdbL8saImkwY3905PzLCGX9gnE8Cza_0fjOOKnVqA5vPsrLDOVzU0dBmao2e8iAZMiN5OL2acqdBFZz93YvSTfJm08U4hLFOO8Z3rY5dqgvp-qwusz994eDdbyRj3n15IVmxx7XsN_xfAQAA__8IGCPp">