<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/68178>68178</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            LLD puts .ARM.exidx section between .rel.dyn and .rel.plt, yielding a crash with glibc >= 2.16 < 2.23
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            lld
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          glandium
      </td>
    </tr>
</table>

<pre>
    STR:
- Create a `foo.c` file with the following content:
```
#include <stdio.h>

int main() {
        printf("Hello world\n");
        return 0;
}
```
- Download jessie-chroot.tar.xz from https://drive.google.com/file/d/1GhGeWRsw5RB6k0JAJZRK_EXtCwuEiAHi/view?usp=sharing and unpack it.
- Build with `clang --target=armv7-unknown-linux-gnueabihf -o foo foo.c -fuse-ld=lld --sysroot=/path/to/jessie-chroot -Wl,-z,now`
- Copy the `foo` executable to somewhere in the `jessie-chroot` directory.
- On a armhf/arm64 system, or a system with qemu-user binfmt setup, run `chroot /path/to/jessie-chroot`
- Execute `foo`

Expected result:
```
Hello world
```

Actual result:
A crash.

The crash itself is due to https://sourceware.org/bugzilla/show_bug.cgi?id=14341
BFD ld places .ARM.exidx closer to .eh_frame, and places nothing between .rel.dyn and .rel.plt (except for .relr.dyn when enabled).

Section table from the binary linked with lld:
```
  [ 0]                   NULL 00000000 000000 000000 00      0   0  0
  [ 1] .interp           PROGBITS 000001b4 0001b4 000019 00   A  0   0  1
  [ 2] .note.ABI-tag NOTE            000001d0 0001d0 000020 00   A  0   0  4
  [ 3] .dynsym DYNSYM          000001f0 0001f0 000080 10   A  7   1  4
  [ 4] .gnu.version      VERSYM          00000270 000270 000010 02   A  3   0  2
 [ 5] .gnu.version_r    VERNEED         00000280 000280 000020 00   A  7   1 4
  [ 6] .gnu.hash         GNU_HASH        000002a0 0002a0 000018 00   A 3   0  4
  [ 7] .dynstr           STRTAB          000002b8 0002b8 000088 00   A  0   0  1
  [ 8] .rel.dyn          REL             00000340 000340 000050 08   A  3   0  4
  [ 9] .ARM.exidx        ARM_EXIDX       00000390 000390 000010 00  AL 15   0  4
  [10] .rel.plt          REL 000003a0 0003a0 000028 08  AI  3  25  4
  [11] .rodata           PROGBITS 000003c8 0003c8 000011 00 AMS  0   0  4
  [12] .ARM.extab PROGBITS        000003d9 0003d9 000000 00   A  0   0  1
  [13] .eh_frame_hdr     PROGBITS        000003dc 0003dc 00000c 00   A  0   0  4
 [14] .eh_frame         PROGBITS        000003e8 0003e8 000004 00   A  0   0 4
  [15] .text             PROGBITS        000103ec 0003ec 000184 00  AX 0   0  4
  [16] .init             PROGBITS        00010570 000570 00000c 00  AX  0   0  4
  [17] .fini             PROGBITS        0001057c 00057c 000008 00  AX  0   0  4
  [18] .plt              PROGBITS        00010590 000590 000070 00  AX  0   0 16
  [19] .fini_array       FINI_ARRAY 00020600 000600 000004 04  WA  0   0  4
  [20] .init_array INIT_ARRAY      00020604 000604 000004 04  WA  0   0  4
  [21] .dynamic DYNAMIC         00020608 000608 0000d0 08  WA  7   0  4
  [22] .got PROGBITS        000206d8 0006d8 00001c 00  WA  0   0  4
  [23] .data             PROGBITS        000306f4 0006f4 000008 00  WA  0   0  4
 [24] .tm_clone_table   PROGBITS        000306fc 0006fc 000000 00  WA  0   0 4
  [25] .got.plt          PROGBITS        000306fc 0006fc 000020 00  WA 0   0  4
  [26] .bss              NOBITS          0003071c 00071c 000001 00  WA  0   0  1
  [27] .ARM.attributes   ARM_ATTRIBUTES  00000000 00071c 000033 00      0   0  1
  [28] .comment          PROGBITS        00000000 00074f 00006a 01  MS  0   0  1
  [29] .symtab           SYMTAB 00000000 0007bc 0004c0 10     31  62  4
  [30] .shstrtab         STRTAB 00000000 000c7c 000129 00      0   0  1
  [31] .strtab STRTAB          00000000 000da5 00028f 00      0   0  1
```

Section table from the binary linked with BFD ld:
```
  [ 0] NULL            00000000 000000 000000 00      0   0  0
  [ 1] .interp PROGBITS        00000194 000194 000019 00   A  0   0  1
  [ 2] .note.ABI-tag     NOTE            000001b0 0001b0 000020 00   A  0   0  4
 [ 3] .gnu.hash         GNU_HASH        000001d0 0001d0 000018 04   A  4   0 4
  [ 4] .dynsym           DYNSYM          000001e8 0001e8 0000b0 10   A 5   3  4
  [ 5] .dynstr           STRTAB          00000298 000298 00009c 00   A  0   0  1
  [ 6] .gnu.version      VERSYM          00000334 000334 000016 02   A  4   0  2
  [ 7] .gnu.version_r    VERNEED         0000034c 00034c 000020 00   A  5   1  4
  [ 8] .rel.dyn          REL 0000036c 00036c 000058 08   A  4   0  4
  [ 9] .rel.plt          REL 000003c4 0003c4 000028 08  AI  4  21  4
  [10] .init PROGBITS        00001000 001000 00000c 00  AX  0   0  4
  [11] .plt PROGBITS        0000100c 00100c 000050 04  AX  0   0  4
  [12] .text PROGBITS        0000105c 00105c 0001b0 00  AX  0   0  4
  [13] .fini             PROGBITS        0000120c 00120c 000008 00  AX  0   0  4
 [14] .rodata           PROGBITS        00002000 002000 000011 00   A  0   0 4
  [15] .ARM.exidx        ARM_EXIDX       00002014 002014 000008 00  AL 12   0  4
  [16] .eh_frame         PROGBITS        0000201c 00201c 000004 00   A  0   0  4
  [17] .init_array       INIT_ARRAY      00003ebc 002ebc 000004 04  WA  0   0  4
  [18] .fini_array       FINI_ARRAY      00003ec0 002ec0 000004 04  WA  0   0  4
  [19] .jcr              PROGBITS 00003ec4 002ec4 000004 00  WA  0   0  4
  [20] .dynamic          DYNAMIC 00003ec8 002ec8 0000f8 08  WA  5   0  4
  [21] .got PROGBITS        00003fc0 002fc0 000040 04  WA  0   0  4
  [22] .data PROGBITS        00004000 003000 000008 00  WA  0   0  4
  [23] .bss NOBITS          00004008 003008 000004 00  WA  0   0  1
  [24] .comment          PROGBITS        00000000 003008 00007a 01  MS  0   0  1
 [25] .ARM.attributes   ARM_ATTRIBUTES  00000000 003082 000039 00      0   0 1
  [26] .symtab           SYMTAB          00000000 0030bc 0006e0 10 27  84  4
  [27] .strtab           STRTAB          00000000 00379c 000288 00      0   0  1
  [28] .shstrtab         STRTAB          00000000 003a24 0000f7 00      0   0  1
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycmVFzosoSgH_N5KVLaphBxIc8mKi7OTfJ3jI5d3fvS2qAQWYXwTsMa9xffwt6RDBosofapMuI3_Y03cOnirJU61zKazK-IeP5lahMWujrdSbyWFWbq7CI99dPzyvCZ4TOCZ2N4FZLYSQIID5NisKJiE8hUZmEnTIpmFRCUmRZsVP5GqIiNzI37cuJT-0_fMi4yqOsiiUQfluaWBVOSvjCPtv8VrmBjVA5YQFhUyCTm8Oz061WuUmaJ9hnmWUF7AqdxWR8mxPGCJsSfjxZS1PpHOjxb5P5YFIjmBe7PCtEDD9kWSo5ilJdFMYxQjuvvyHRxQZSY7ZlvSy2JGwZa_VLOuuiWGfSiYoNYcu6IvUzhC3dT-kn-XVV7sarG_8n_Wv2139X_3pZfDO3u2qhZp8VYctfSu4IX1bllvB5mQpdV0_kMVT5VkQ_QRnnkN1NpbIYi018GmUiX8NoZIReS0P4XOjNr8moyn_mxS4fZSqvXkfrvJIiVGkCowKSovlxIhglVSlHWUz4PMtiGI3KfVmvlPA5YcutMClhS1MQtuwVAkZfM8JuR78Ju82LXadwt8V233QA9kbdGfJVRpURYSbBFFAWG7lLpZag8sOJPXb9klhpGZlC79slf8lBgNCbNCFsKfTG96Dcl0ZuCLuFQoOwD7Eq_5ObalSVUkOo8mRjoJSm2tan6ipvaobLuLTGzqIWzQo6a-p25-J1KyMjY9CyrLKzjd7tzsFBaH7PIlOJ7BQ1g0iLMnW6Zz6nEv8KypQyS0CVEFdNifudWRaVjuROaOkUek3YMqzWv1WWifq5tNi9hNXaidaK8KWq-8D1uOfi_3GznEMWwzYTkSzBma0eHPmq4leIsqIurinAkelLosVG1sWtu9WenBcmrRs4lGYnZQ6OlpkT7_PmnObBNqvrH8jXSG4NJIVu_qybk3apzEHmdc_EhE17C3-SkVFFDthRzSjWbRSqXOg9ZCr_Ke1sZHVfD18NADK-AUrGc3h7PP59fw_UHnAa8ByKPz2cW-MclRuptx3cv1dfPt3cPT8hwg09OAbqThE5a5FuF8kaZF4Y6cxu7kZGrOHxy_Oimy1S4yZDGyijp1SvS-UNNd7n5X4D8--PT98fTnkJ8jDQgIJreRMAcE94XsNb55XzS-qyvjjN8Z_F6i2ZTRqkDdSlQBmSOWbKLLkGj0_BL9qCHxeL-Qk4QHDwpgSYci9jvwWn9Qgdjk-Pf798nj197oMFgoXNODiA-UBpJ21pje5cpKfn1fPs5rQUYQDHQIPgYisEDfkwRu2xWtzDm3bgXpOrDXRMgQa9Ivdynjbk43TbY7Z6eFl8u5t_65GnSJ4eLx8FmN2DO35Ldmmbcz3tvZyRhjW1gbKgyXN21-TJxic0nC9dxMKIs_PFo6aaNlDXrROcPTwNToLLOks3IjyyemuOp3AM7S4wfJ1cHK7DtviSxrqfZZ8cwTFQGp0b2xrs9cBvl98DS6wCBkq9E3CvCDhlRr6aXicNgF3KJWaMwQ0QPPs2WF3fbojqA-Axbgg2HEox-zZ83XDMEpWrj5AjJNsiBxfJOGa9dj1PximwgU7oCdn1u-Rpm_OL0FrsLWl593j3MlutZt-bzYD6eLPxD_ccD6gH8HV4K2e0LbGF3j3ePVvcIdGa6SHT-wjTPexhYqOi-v4we7i77W4wNTBAIPZXjBvMV7vZngJxytaFGSojo36MsNiOLF76c9nZm1d_Dxi8QJz6Ca478bqXfoBcg3G-zOYlyopcvqBfnAVHCI66W8LXwfli48Py-231ETBrwUOlwPkKy7Lfq49fulgLnjRlPQRK3dNSdDcxNmn3RWGMVmFlZGlvCbPn59Xdzd_PiyfoSdKBzPmpJPXIOF9RsdnI_HIxjmQvaR77AqgL0NnLe2Scr3K_qTfy4_H0_aG-9faAYZOqF1mtAeAugM_65eU4W2VaGt1F2nt5Fxjh3uKy6aW1cxwsixtUAsuLxRhdJjnDG3zz8HEzRrH_gBw3KgzDSf4TKx68zO4UlXj6T5UYm35Ii0PU2PA9LT5a8cec8MS3ayf0EOy9mX-rx1a3j8eweOMd2wYatuJd6xU_Ebfxn8jmFGUTA52-UQ132I_fN3rOm-tmA3X91ui9vtF3BPljSs89lA0vOr1844F3IRcEGWk-0jDQcdBKsXdWii-oa4SrxtBVVw-AuYMi3JjQ0Ai4OERuO1KX7cdtHeUMLII2oP1752HsaH_DtDHSxtFxlM7T-IfFjLoM82T0PTE72u95-e-AGZaRHaqJ7wEu2--H3v0w6nrQhmPG9-Cys_r7IWFnaD02DAj7kP52rA-PAfejXDY3O4bhPfez-ntJUjvkqCkzhnfJOFA_Ig3DnWGRHiK9bhkuy-9BVNvjYKyWGCAR970kaE114A2rVd8zpkp5gitO7Io9etGj2dFUh2ge9idvh_6snXa8t5a9Ab-rYQHCgjOV67mS98cW1pInZy3s6Lp_Io6cBgyreypP7lvXPWd3MJgxtrwvm5somwAE3klRJ10j61DPuxmfNLdOyg4f11z03HPyOEgWDLs-mbxnfVfxNY-nfCqu5LXrT30-ra__VXodjCUXUvAoiNjYDakfiiTkImBuMmFTGlypa0YZd-uG8ThngcNpHHOXjbn0wkDKKfGo3AiVOVn2a-MUen2lyrKS137gToKrTIQyK5vvihjLspg0TX6lr-uzR2G1LolHM1Wa8vh6o0wmr-_v57CtTO9j5NIK68UPiQm7hb2SWdx8H2I_824sdp2pMALCF4TPgTmuD4TfAnMYv6p0dt3_GHytTFqF9quZOjcbRltd_JCRIWzZLLQkbNms9f8BAAD__8qmgeg">