<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/127284>127284</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[ELF][LTO] Invalid relocations when libcalls are synthesized by ISel
</td>
</tr>
<tr>
<th>Labels</th>
<td>
lld:ELF,
LTO
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
arichardson
</td>
</tr>
</table>
<pre>
I was trying to build an arm32 binary that uses 64-bit division a LTO build of compiler-rt.
The 64-bit division function in compiler-rt (`__aeabi_ldivmod`) is written in assembly and calls the C function `__divmoddi4`, which works fine normally. However, when building with LTO the call inside __aeabi_ldivmod is replaced with a jump to address zero, which then crashes my program.
__aeabi_ldivmod dump:
```
Disassembly of section .text:
00000000 <__aeabi_ldivmod>:
0: e92d4040 push {r6, lr}
4: e24dd010 sub sp, sp, #16
8: e28d6008 add r6, sp, #8
c: e58d6000 str r6, [sp]
10: ebfffffe bl 0x10 <__aeabi_ldivmod+0x10> @ imm = #-0x8
00000010: R_ARM_CALL __divmoddi4
14: e59d2008 ldr r2, [sp, #0x8]
18: e59d300c ldr r3, [sp, #0xc]
1c: e28dd010 add sp, sp, #16
20: e8bd8040 pop {r6, pc}
```
I discussed this issue with @ilovepi and it appears that one problem here is that the call to __aeabi_ldivmod is generated post-LTO and the __divmoddi4 symbol is marked as not needed before final codegen.
However, it does seem like lld should be reporting an error for the missing __divmoddi4 instead of using address zero (it is not marked as weak, so that is invalid).
When building with `-pie` instead of position dependent static linking, I do get an error:
```
ld.lld: error: relocation R_ARM_CALL cannot refer to absolute symbol: __divmoddi4
>>> defined in divmoddi4.bc
>>> referenced by aeabi_ldivmod.o:(__aeabi_ldivmod)
```
This suggests __divmoddi4 was replaced with and absolute zero symbol.
I have created a minimized test case which I will upload as a PR shortly.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJx0Vl1v4joT_jXmZlRknISPCy5o2eqt1Fd7tKfSuawceyDeOnbkcWDZX39kmwJt90SIoHiemWe-niCJzN4hrllzz5rtRI6x82Etg1GdDJq8m7Ren9ZPcJQEMZyM20P00I7GapAOZOgrAa1xMpwgdjLCSEgwr-9aE0GbgyHjHUh4fvl-RvkdKN8PxmK4C3HK-IbxzUuHX0C70amYfhh3iwAmlmzOX18lyta8Wm0OvddszplYgSE4BhMjZpQkwr61J5BOg5LWEsQO4eHqOjsqHrSps5MHOHZGdXD04Y1gZxyC86GX1p6m8D9_xAOGYoWupJSKcjSxy0mmACkUGEdGI3zimRgGHKxUqAtIws-xH1JVpdYBieA3Bn_lEVMcFSR1SNCfYAh-H2R_Lhzjm88R9NgPrMqHc37-8M3W0KUcfgeEpQDTiL_i2Zpv-PkCVj18LnD1rZhBuTirNoAroWte8_JoGKkDtrgP88TeBrbYXu3rbC9qrfnsbE9jW-5Dsi_fTFSz-RW1LKilnnO-TAXKT0uAC2B5tVfZvsn271FiuAGx5p4G1lyJzUoi7S5dWJ619pzjr9kfSyHu0wmrvgGrOZi-B1ZtE5M7_iuTKVUsruHH6-bH_18fNs_PAHA7bRcKpTbNSouUZb6sDhDElXHJNLm_5b58B1acqyswp1t9BasPYPVe22tH3gv83x0RpVzLVi-vffdDvl9aP6jS-tv5Y3zzBNqQGolQQ-wMgSEasWwBq7mx_oCDyctqIshhQBmoqIp3mAa_tdhDhwHTGuWDy7pF_6dV26PDICNqGDzFu7SgyX1C3XQC6NS33iZAL8MbapAEzkdwiBo1tLjzAZMWSAvKa9yjS_t3owZJuDwSEGIP1rwhWKuBOj_ahE8770NMSiEdYAg-wM6HTKQ3ROnglpBxFFFmsRzz4a02JAU0MbFNHK-Mjyjfct98qU2qsDtIazQTq8T3n6-Sxeb8bjDI5vw25uDJZHnQOKDT6CJQlNEosMa9GbdPYZ5Ae9hjvGT0VXSsnlqr88ScDSCg9Upm5zeLoaRLuQTcYchS2JK3Y8RzZxLw4-ZkOUof0Jg0Wie9vxhMW_XBJvtFlzS3PcGHKZn6RFssv-z46lMuL2liadzvkSJ9aFZ6N37SdKevKeSWlTymeQs6eUBQAfNcSuiNM735nZYCKYKShGfpf4KjsRbGwXqZOyzhrx9pqEK0p-lEryu9qlZyguvZolo1i9VqsZh067adzdpGqMVqUel5reVOSq1apXij5zNcTsxacNFwMWs4r1bVYoq7BhfzxUrtZF3vlorVHHtp7NTaQz_1YT_Jq7qeiYVY1hMrW7SU_zQIURr87fmRiaRXTIjnl-_pd7OdhHVycNeOe2I1t4YiXV1GE23-55GwzZY19wnYbOGpDO3NqFB521rTlre4DGkyXOyQcuHaEzz9jXYyBrvuYhwo9_SRice9id3YTpXvmXhMoc-3uyH4n6giE485NWLi8ZzdYS3-DQAA___-iNj4">