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

    <tr>
        <th>Summary</th>
        <td>
            lld: syntax error in linker script triggers a sef-fault
        </td>
    </tr>

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

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

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

<pre>
    I was experimenting with a change to a linker script when I encountered a segmentation fault triggered by a syntax error:

ld.lld: error: kernel.ld:3: ( expected, but got 0
>>>     .data : { LONG 0; }
>>> ^
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: ld.lld -melf_i386 -static -o lld.elf --emit-relocs -Tkernel.ld tst.o
 #0 0x00001465ce217b7a llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/lib64/libLLVM.so.19.1+0x217b7a)
 #1 0x00001465ce214b24 llvm::sys::RunSignalHandlers() (/lib64/libLLVM.so.19.1+0x214b24)
 #2 0x00001465ce2182eb (/lib64/libLLVM.so.19.1+0x2182eb)
 #3 0x00001465cda25dd0 __restore_rt (/lib64/libc.so.6+0x19dd0)
 #4 0x00001465d61a96a0 (/lib64/liblldELF.so.19.1+0x1a96a0)
 #5 0x00001465d61a71e4 (/lib64/liblldELF.so.19.1+0x1a71e4)
 #6 0x00001465d618dfc5 lld::elf::readLinkerScript(llvm::MemoryBufferRef) (/lib64/liblldELF.so.19.1+0x18dfc5)
 #7 0x00001465d6068ce6 lld::elf::LinkerDriver::createFiles(llvm::opt::InputArgList&) (/lib64/liblldELF.so.19.1+0x68ce6)
 #8 0x00001465d605cc73 lld::elf::LinkerDriver::linkerMain(llvm::ArrayRef<char const*>) (/lib64/liblldELF.so.19.1+0x5cc73)
 #9 0x00001465d605c0da lld::elf::link(llvm::ArrayRef<char const*>, llvm::raw_ostream&, llvm::raw_ostream&, bool, bool) (/lib64/liblldELF.so.19.1+0x5c0da)
#10 0x00001465d5d22c5e lld::unsafeLldMain(llvm::ArrayRef<char const*>, llvm::raw_ostream&, llvm::raw_ostream&, llvm::ArrayRef<lld::DriverDef>, bool) (/lib64/liblldCommon.so.19.1+0x3c5e)
#11 0x0000556d45ff8937 lld_main(int, char**, llvm::ToolContext const&) (/usr/bin/lld+0x1937)
#12 0x0000556d45ff8f32 main (/usr/bin/lld+0x1f32)
#13 0x00001465cda0f248 __libc_start_call_main (/lib64/libc.so.6+0x3248)
#14 0x00001465cda0f30b __libc_start_main@GLIBC_2.2.5 (/lib64/libc.so.6+0x330b)
#15 0x0000556d45ff86c5 _start (/usr/bin/lld+0x16c5)
Segmentation fault (core dumped)

This was with LLD 19.1.5 running on Fedora 41.

The full linker script looks like this:

SECTIONS
  {
    .data : { LONG 0; }
    TTT = .;
    _LGROUP = .;

    . = SIZEOF_HEADERS;
    . = ALIGN(0x100);
 .text : {
                *(TEXT)
                . = ALIGN(0x100);
    }
  }

Obviously I should have written "LONG (0)" instead of "LONG 0", but I figured that you might wish to fix the seg-fault anyway.

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJycV11v4roW_TXmZYvIcT4IDzzQFuYgMdPRwL26ui_IsZ3gW2NXttOWf39lpzTAVD2cQZGC_LH22ts7KyvUOdlqIWaouEPFw4h2fm_sTEv2xJRsvNGj2vDjbAWv1IF4exZWHoT2UrfwKv0eKLA91a0Ab4CCkvpJWHDMymcPr3uhYQVCM9NpL6zgQMGJNgBQL42GhnbKg7eybeN0fQwrjtrTNxDWGouyOcLhUjxRiqNs_jEOT8JqoZI4moUBRKpIkXnBEbmHuvPQGg84QGSL_oLwSzj1FOKeyR2sH398A4yyO0CTh4u1qFggPP-5Xsw3C3BdfZAeKNRdC1Y8G-tD1nvvn13gSZaILFvp912dMHNAZKnUy-k2frbmf4J5RJbSuU44RJZANQepmeq4AL8XwCx1e6gpe_KWMpEgPN94yp6Ad4fnvhQ4QXj605rW0gNQ23ahmCE89BWC8UGoZiezqoSxC2VmMDagFE-EamA8Fgfpx1YowxyMtx81BO98YhAOVcww4DeMMU7zsmCCpJN6QiEmk81RNndH1__5aaX2keE28EWkGhZZ-rozzltBD4iU4Tik9ohMwymFmsi6zPv7ev3v74kzSTpNUkTu8FsfEJHpO530ik5ek_wzOr86vZGtpuovqrkS1sVQt0UMmENEchWxIqK-CSYsHGCycxhOScE5ht3OCueNFTvrf8dkAbCMaOmUczyA5WdgvEzptKT49_1K8cV6ecGqXzoAFVdAk1TkNwKFpQNQeQlU8YYV0D-lKJsL1bx3gqB8HYVhE3Xhok2-i4Oxx7uuaYT9JZpPj-szKjHYQGVyQQWXFRPlJ1R6Gg9WvgjbjzArqBdLqcITecbLPPv-z0o_d35u27V0PjbybQQjg4FfdcmvYGyS3cSvV9TvVOoLenNr6THUK7tne2qBGR3oRem6kWHkMDCcXjPEnH7CMPC5nck9fCUIX83VxqjhfmtGmL_LRlCNcxXjBSeEFWLIqNOONmKt-D-r7Z9n9GmADzr9mT-EwcXf5X1vDgejL1LPWCGGzE-CWRQlz4umqabZJGS-O_S5RiW-D29uG_IK1zm_rTHq3mgv3vwp-bO-75xFZFkHoGWg30tVNhnCk-vwTUYghP4KocnIgHAlnLgheQW7XdDHnfPU-h2jSu3OMD-X0Izk1YCaX6NmuL5EjfXJ8bf16u5-RxKSFF_DZ7ge4IvrtEtWQA_8VeLlScc2vzsjRCpmrIjv_-Bppr0Z2u6li4YsWrD1-gFCIyQF2E7rYM2MhqXgxlLI0-S0R0DTKXXl0ZQxTw6UfAoORLoPv7VZ3G9Xjz82QR2CSYr3vzNOYcV2uwWUPUCCstOm3frbr8d__TwfPsHFsc3qv4vH5e6vxfxh8Wsz7Otn5-vVtx-IVPgtxfEt1s8nsT3fmUTEabhCL1fbxX-2p2KF0S-BAD7Yv9s_PH-sX6TpnDrCCtzedIrDnr4IeLXSexF6jsTcA1pAIgSkdl5QDqb5mMWIkJMPXUEj2y54XL-nHo6mg4Ns9x5epdsHG9nIt-gBnWjH_eFTfXylx3B8Iz7L-DSb0pGYpZMsL3E5KavRflbQijQZb7JmyuuaVnUlKkbSCpe0SjmZjuSMYJKnJJ2maUryKmGs4ZmoJiXNs5qWBOVYHKhUSXj8E2PbUbSns5TgoiAjRWuhXPw6ICS2LAmfCXYWPW3dtQ7lWEnn3QDgpVdi9u7Wz808SH3Vfe_O38XvgqbPe9RZNftzU_1O_GVG_h8AAP__BAG9Sg">