<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">