<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/83265>83265</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
s390/clang: relocation error : when there is a weak undefined symbol + -fno-PIE and -munaligned-symbols
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
sumanthkorikkar
</td>
</tr>
</table>
<pre>
Problem:
=======
When the symbol is weak and undefined + when the section layout is > 4GB, then it can end up with relocation error.
sample.c:6:(.text+0xc): relocation truncated to fit: R_390_PC32DBL against undefined symbol `kallsyms_markers'
Reproducer:
==========
1. cat sample.c
extern const char kallsyms_names[] __attribute__((weak));
extern const unsigned int kallsyms_markers[] __attribute__((weak));
const char *data;
int main(void)
{
data = &kallsyms_names[kallsyms_markers[0]];
}
2. clang -g -c sample.c -munaligned-symbols -fno-PIE
3. cat layout.ld
SECTIONS { . = 0x200000000; }
4. ld --script=layout.ld -o sample sample.o
sample.o: in function `main':
sample.c:6:(.text+0xc): relocation truncated to fit: R_390_PC32DBL against undefined symbol `kallsyms_markers'
Disassembly:
===========
`Disassembly of section .text:`
`0000000000000000 <main>:`
`extern const char kallsyms_names[] __attribute__((weak));`
`extern const unsigned int kallsyms_markers[] __attribute__((weak));`
`const char *data;`
`int main(void)`
`{`
`0: eb bf f0 58 00 24 stmg %r11,%r15,88(%r15)`
`6: b9 04 00 bf lgr %r11,%r15`
`data = &kallsyms_names[kallsyms_markers[0]];`
`a: c4 0e 00 00 00 00 llgfrl %r0,a <main+0xa>`
`c: R_390_PC32DBL kallsyms_markers+0x2` <<<<
`10: c4 18 00 00 00 00 lgrl %r1,10 <main+0x10>`
`12: R_390_GOTENT kallsyms_names+0x2`
`16: b9 08 00 01 agr %r0,%r1`
`1a: c4 0b 00 00 00 00 stgrl %r0,1a <main+0x1a>`
`1c: R_390_PC32DBL data+0x2`
` 20: a7 29 00 00 lghi %r2,0`
`}`
`24: eb bf b0 58 00 04 lmg %r11,%r15,88(%r11)`
` 2a: 07 fe br %r14`
When .text layout is > 4GB and when kallsyms_markers is weak undefined, then it could
end up with relocation truncated to fit: R_390_PC32DBL against undefined symbol `kallsyms_markers'
Misc:
=====
gcc doesnt have this problem with -mualigned-symbols and works fine with the same example
Thank you,
Sumanth
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMV1GPmzgQ_jWTl1EiYxICD3nYJLtVpbu2ale6x5UBA74YHNmm3f33J9uEhWyqXu960iGLJDAzfPPNfGbCjBF1x_kONnvYHBest43SO9O3rLPNSWlxOjG9yFX5svukVS55C_EdkCOQO4iPN5a_9UfDO7QNR_PS5kqiMPiNsxOyrsS-K3klOl4i0D1-Gy15YYXqULIX1VvnAfE9rt_tgR6cQYfCYsE65C7GGb8J26DmUhXM-3GtlV4NyPzZsPYs-aqA-C5xoGm6svzZAt2T5wJoBvHdNIDVfVcwy0u0Cith3e3PT3FGnj4dYnrc_4asZqIzdpLBkB4k5MSkNC-teWqZPnFtgG6nWML5Mz9rVfYF1z8gcc5mtMKCWRzz8Rf5s-W6w0I5REXDNI4QOtZyEwqKT0_MWi3y3vKnJ6Ap0NRVwqXvGNjfCNZ3vidKFJ3FN3n9TNgJOKB3JbNsvOVit0x0QNOvSpTOK_CxHQzgnkJKIKU_9cU9AyE-ItDkDR83ciGwObp1gQXb47RgdIWFZF2NyxqXxVgBXLZ9x6RnaRl6wOCy6tTy0_v7qX8cKhd6eiVLDJe_3B8e33_88AVhu8eVx0ueKRkOiPd4hWO9QlnicmkKLc4W4uNrxKUaYF3QqVn3K9fGosOq74K-ICGB9-3Yg_8_oYTzURhmDG9z-fJ39XKRDCRk4o2qGveXkFrsLGZPTMj1gRAfPFXx_cw-Ib9Ke98L-UsUOAl-W4cTgxtqnNx1mrz8RHRFJL4eGc8xr7AiuEmREKRrBJIZ29ZAMqAbHUVAD_7LBughTT3M8Cu7ipiEiHmGZO1i5RWGA0gma30j4AjwH20UkJB_sVfMsbOAvVgj4Q77uBx2WVdaDvAJ0AMb28rJi7nmeu3ELCwMcYs3ygKSvdXPnjy7dLxTfHhdA0JISERGhFH6BmE94nPsRmQG0LneQOiC0ld47z4-3n94nKILPF6wTbFMKh2wRK-VZmOlyaXQV94TrvPrTIytZ1RHc66j22S7qDeZ9jq5ysDxTAc22RZpNjx90quNGCBQoAcy19Fxng1dT3WUX3REvI7kD2UUzWTkoQ30kC1WHKeHY3xU0XriNfvwc5vfId_OYX548-PadQuO4924389mNtXLcoj_ndntP3qjXCX3uzDFd98jwaQuCiwVN53Fhn3laBth8Bzm3oB62fbXL37Pi9Ingw5ZMPMTLWs58mf_cp0jeWxYd8IX1bu6hktfwsS9KHdxmcUZW_BdtCVZRLNsmy2aXR5FW54V5SahW55vaU6reMMJqeIsTTiNFmJHCV0TStNoHWVxuopLRrM8oVVMKh7nDNaEt0zIlZRf25XS9UIY0_NdGtNks5As59Jc_gbonTNa5n1tYE2kMNa8ullhJd-ZOCNAH_x4dDUg-FEc3cXLdK-56xF21SVjDekex_HJ03ljvlr0Wu4aa8_GjygPQB9qYZs-XxWqBfrg4A0fy7NWf_LCAn3wKRqgDz7LvwIAAP__lQ2nQg">