<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/75074>75074</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Building a program with lld and stackmaps changes symbol visibility.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
lld
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
vext01
</td>
</tr>
</table>
<pre>
Take the following input programs:
```
$ cat no-stackmaps.ll
define void @main() noinline {
%1 = alloca i32
ret void
}
```
```
$ cat stackmaps.ll
declare void @llvm.experimental.stackmap(i64, i32, ...)
define void @main() noinline {
%1 = alloca i32
call void (i64, i32, ...) @llvm.experimental.stackmap(i64 0, i32 0, ptr %1)
ret void
}
```
Using LLVM as of the time of writing:
```
$ clang --version
clang version 18.0.0git (https://github.com/llvm/llvm-project 607f19cb947a25fe7ed131d983a90961f3c2541a)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/vext01/research/llvm-project/build/bin
```
If you use `lld` to link **and** emit a stackmap section, the `main` symbol becomes undefined.
## gnu ld, no stackmaps
```
$ clang -Wno-override-module no-stackmaps.ll && nm a.out | grep main | grep -v start
0000000000001130 T main
```
## gnu ld, with stackmaps
```
$ clang -Wno-override-module stackmaps.ll && nm a.out | grep main | grep -v start
/usr/bin/ld: /tmp/stackmaps-7c8644.o: warning: relocation against `main' in read-only section `.llvm_stackmaps'
/usr/bin/ld: warning: creating DT_TEXTREL in a PIE
0000000000001130 T main
```
## lld, no stackmaps
```
$ clang -Wno-override-module -fuse-ld=lld no-stackmaps.ll && nm a.out | grep main | grep -v start
00000000000016b0 T main
```
## lld, with stackmaps
```
$ clang -Wno-override-module -fuse-ld=lld stackmaps.ll && nm a.out | grep main | grep -v start
U main
```
Why is this? Is this bug?
This breaks something I'm working on that uses `dladdr(3)` at runtime.
CC @lhames
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0Vk2P2zYQ_TX0ZSCBor7sgw8bOwIWSIGicJreAkocSawp0iApe_3vC0r22km2m263FQyL0ow473HeDMmdk51GXJP8A8m3Cz763tj1EZ88TRa1Eef1ju8RfI_QGqXMSeoOpD6MHg7WdJYPjqQPhG4Jvf4X9PKbH1kGDfegTeQ8b_YDP7hYKZitAlupEY5GCiAZHbjUhC0JW4E2UqtgI-WH2RcuF2F5AiTdAlfKNBxkyr51sOinGS8Ayu3LwF5Dew_1irRR3N6gKnUcYnw6oJUDas9VfP2GsKUsMsI2EzK2gTiOCVvdR_3PaTdcqct0L0f_J5CBXj6bBwdvp6DP2P_N-n52QTCfPv3-C3AHpp2U5OWAYXyy0kvd3QT0QjIU1x1E0RGtk0bPhvnl5RUky5jGtJM-cO-9P0yKZBVhVSd9P9ZxYwbCqkD_cosO1vyJjYeClm2yaupVVnKWt1iiSNJErJYpX9FVkbRpw_Is4c9rsOO2Q0_SB3haFl-LLBr1XpuTjpTU41PU6fHi11vkAgYjUAXvg3HyaTY9aue5Uii20gYTYVVvBiSsmsuOsMqiQ26b_ju4hFX1KJUId6lfWfXHFs5mhNEhkIIqJUhBwRtQUu-BsAfCHrgW8wBwkB74s-TBYePDUrPNlCxSzPosKLjzUBsFNTZmQAejnnUs4m8qiqWEpdDpEQLSDWhzK6efld6c7S_aROaI1kqB0WDEqPDH_sEKwgrQA_DYjB5IuYHO4gEC2NtTdAzBrZ9j0LsrSVIKu8n9tf7wPZuT9P0PfN7E5P00CKtGZy8qYJUSFxn54UBY9Tx_VDbLIstiE8wnbvVca2AxNJCQY-Adl9r55ySzEqSGIN3IaHW-aiHY46DErzfmrHwFzF20xiIPVQ7b3dfdxz92v338FGJw-PXx4zuzov5WYG9KSNSODqMAfKuUgP9BakX9ZlIv6uz95N5PDL6_Pv-M2Jf-DNKB76UjaQWP8xDqsSNpde-4m15b5HsHzgzo-6CbR8LKAU7G7sOT0eB77kNvc0GWQnEhLGHLNPToggL3YEcdtphv2tJmM22BPR_QLcQ6Fat0xRe4TkrK0iQr83TRr0WW0CJvc75qmjwpljVtlm0iaIppm_KVWMg1C-4sSZIyYSmNU9ogLnNc5nWRN21LMooDl2qqltjYbiGdG3Fd5rTMForXqNx02GJsSjQLpy67nrp8PXYuYJTOu9v3XnqF6w-h7wf-_HrumhUScsr1XV6h6bnu0F2b9VE6WUsl_TlejFat37ZBElZN-B1h1UThrwAAAP__fTz8Ig">