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

    <tr>
        <th>Summary</th>
        <td>
            [LLD] Crash when linking `lli` on mingw with address sanitizer
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          Il-Capitano
      </td>
    </tr>
</table>

<pre>
    Building LLVM on mingw with address sanitizer fails when linking `lli.exe`. Backtrace of `ld.lld.exe` with debug info (same backtrace for `lld-link.exe`):

```
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: C:\\dev\\downloads\\llvm-project\\build-17-debug-info\\install\\bin\\ld.lld.exe tools/lli/CMakeFiles/lli.dir/lli.cpp.obj
Exception Code: 0xC0000005
 #0 0x00007ff66779e4f4 lld::coff::ObjFile::createDefined(llvm::object::COFFSymbolRef, std::__1::vector<llvm::object::coff_aux_section_definition const*, std::__1::allocator<llvm::object::coff_aux_section_definition const*>>&, bool&) C:/dev/downloads/llvm-project/lld/COFF/InputFiles.cpp:664:14
 #1 0x00007ff66779ba6a std::__1::__optional_storage_base<lld::coff::Symbol*, false>::has_value[abi:v170001]() const C:/dev/install/llvm-17/bin/../include/c++/v1/optional:387:22
 #2 0x00007ff66779ba6a std::__1::optional<lld::coff::Symbol*>::operator bool[abi:v170001]() const C:/dev/install/llvm-17/bin/../include/c++/v1/optional:1049:64
 #3 0x00007ff66779ba6a lld::coff::ObjFile::initializeSymbols() C:/dev/downloads/llvm-project/lld/COFF/InputFiles.cpp:400:40
 #4 0x00007ff66779b4fd lld::coff::ObjFile::parse() C:/dev/downloads/llvm-project/lld/COFF/InputFiles.cpp:169:3
 #5 0x00007ff667775974 lld::coff::InputFile::kind() const C:/dev/downloads/llvm-project/lld/COFF/InputFiles.h:75:30
 #6 0x00007ff667775974 lld::coff::ObjFile::classof(lld::coff::InputFile const*) C:/dev/downloads/llvm-project/lld/COFF/InputFiles.h:133:55
 #7 0x00007ff667775974 llvm::isa_impl<lld::coff::ObjFile, lld::coff::InputFile, void>::doit(lld::coff::InputFile const&) C:/dev/downloads/llvm-project/llvm/include/llvm/Support/Casting.h:64:53
 #8 0x00007ff667775974 llvm::isa_impl_cl<lld::coff::ObjFile, lld::coff::InputFile const*>::doit(lld::coff::InputFile const*) C:/dev/downloads/llvm-project/llvm/include/llvm/Support/Casting.h:110:12
 #9 0x00007ff667775974 llvm::isa_impl_wrap<lld::coff::ObjFile, lld::coff::InputFile const*, lld::coff::InputFile const*>::doit(lld::coff::InputFile const* const&) C:/dev/downloads/llvm-project/llvm/include/llvm/Support/Casting.h:137:12
#10 0x00007ff667775974 llvm::isa_impl_wrap<lld::coff::ObjFile, lld::coff::InputFile* const, lld::coff::InputFile const*>::doit(lld::coff::InputFile* const&) C:/dev/downloads/llvm-project/llvm/include/llvm/Support/Casting.h:127:12
#11 0x00007ff667775974 llvm::CastIsPossible<lld::coff::ObjFile, lld::coff::InputFile*, void>::isPossible(lld::coff::InputFile* const&) C:/dev/downloads/llvm-project/llvm/include/llvm/Support/Casting.h:255:12
#12 0x00007ff667775974 llvm::CastInfo<lld::coff::ObjFile, lld::coff::InputFile*, void>::doCastIfPossible(lld::coff::InputFile* const&) C:/dev/downloads/llvm-project/llvm/include/llvm/Support/Casting.h:493:10
#13 0x00007ff667775974 decltype(auto) llvm::dyn_cast<lld::coff::ObjFile, lld::coff::InputFile>(lld::coff::InputFile*) C:/dev/downloads/llvm-project/llvm/include/llvm/Support/Casting.h:663:10
#14 0x00007ff667775974 lld::coff::SymbolTable::addFile(lld::coff::InputFile*) C:/dev/downloads/llvm-project/lld/COFF/SymbolTable.cpp:61:19
#15 0x00007ff667709da1 lld::coff::LinkerDriver::addBuffer(std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, bool, bool) C:/dev/downloads/llvm-project/lld/COFF/Driver.cpp:0:0
#16 0x00007ff6677199b5 std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>::reset[abi:v170001](llvm::MemoryBuffer*) C:/dev/install/llvm-17/bin/../include/c++/v1/__memory/unique_ptr.h:297:28
#17 0x00007ff6677199b5 std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>::~unique_ptr[abi:v170001]() C:/dev/install/llvm-17/bin/../include/c++/v1/__memory/unique_ptr.h:266:75
#18 0x00007ff6677199b5 lld::coff::LinkerDriver::enqueuePath(llvm::StringRef, bool, bool)::$_0::operator()() const C:/dev/downloads/llvm-project/lld/COFF/Driver.cpp:283:7
#19 0x00007ff6677199b5 decltype(std::declval<lld::coff::LinkerDriver::enqueuePath(llvm::StringRef, bool, bool)::$_0&>()()) std::__1::__invoke[abi:v170001]<lld::coff::LinkerDriver::enqueuePath(llvm::StringRef, bool, bool)::$_0&>(lld::coff::LinkerDriver::enqueuePath(llvm::StringRef, bool, bool)::$_0&) C:/dev/install/llvm-17/bin/../include/c++/v1/__type_traits/invoke.h:340:25
#20 0x00007ff6677199b5 void std::__1::__invoke_void_return_wrapper<void, true>::__call[abi:v170001]<lld::coff::LinkerDriver::enqueuePath(llvm::StringRef, bool, bool)::$_0&>(lld::coff::LinkerDriver::enqueuePath(llvm::StringRef, bool, bool)::$_0&) C:/dev/install/llvm-17/bin/../include/c++/v1/__type_traits/invoke.h:415:5
#21 0x00007ff6677199b5 std::__1::__function::__alloc_func<lld::coff::LinkerDriver::enqueuePath(llvm::StringRef, bool, bool)::$_0, std::__1::allocator<lld::coff::LinkerDriver::enqueuePath(llvm::StringRef, bool, bool)::$_0>, void ()>::operator()[abi:v170001]() C:/dev/install/llvm-17/bin/../include/c++/v1/__functional/function.h:192:16
#22 0x00007ff6677199b5 std::__1::__function::__func<lld::coff::LinkerDriver::enqueuePath(llvm::StringRef, bool, bool)::$_0, std::__1::allocator<lld::coff::LinkerDriver::enqueuePath(llvm::StringRef, bool, bool)::$_0>, void ()>::operator()() C:/dev/install/llvm-17/bin/../include/c++/v1/__functional/function.h:363:12
#23 0x00007ff66771314b std::__1::list<std::__1::function<void ()>, std::__1::allocator<std::__1::function<void ()>>>::pop_front() C:/dev/install/llvm-17/bin/../include/c++/v1/list:1592:39
#24 0x00007ff66771314b lld::coff::LinkerDriver::run() C:/dev/downloads/llvm-project/lld/COFF/Driver.cpp:1105:15
#25 0x00007ff6677069fe lld::coff::LinkerDriver::linkerMain(llvm::ArrayRef<char const*>) C:/dev/downloads/llvm-project/lld/COFF/Driver.cpp:2069:7
#26 0x00007ff667701c6d lld::coff::link(llvm::ArrayRef<char const*>, llvm::raw_ostream&, llvm::raw_ostream&, bool, bool) C:/dev/downloads/llvm-project/lld/COFF/Driver.cpp:77:10
#27 0x00007ff667759a95 lld::mingw::link(llvm::ArrayRef<char const*>, llvm::raw_ostream&, llvm::raw_ostream&, bool, bool) C:/dev/downloads/llvm-project/lld/MinGW/Driver.cpp:489:10
#28 0x00007ff6676f27b2 lld::unsafeLldMain(llvm::ArrayRef<char const*>, llvm::raw_ostream&, llvm::raw_ostream&, llvm::ArrayRef<lld::DriverDef>, bool) C:/dev/downloads/llvm-project/lld/Common/DriverDispatcher.cpp:164:11
#29 0x00007ff6676f1855 lld_main(int, char**, llvm::ToolContext const&) C:/dev/downloads/llvm-project/lld/tools/lld/lld.cpp:93:9
#30 0x00007ff6676f1e07 main C:/dev/downloads/llvm-project/build-17-debug-info/tools/lld/tools/lld/lld-driver.cpp:15:3
#31 0x00007ff6676f12ee __tmainCRTStartup C:/M/B/src/mingw-w64/mingw-w64-crt/crt/crtexe.c:268:8
#32 0x00007ff6676f1406 mainCRTStartup C:/M/B/src/mingw-w64/mingw-w64-crt/crt/crtexe.c:190:3
#33 0x00007ffb00f97344 (C:\WINDOWS\System32\KERNEL32.DLL+0x17344)
#34 0x00007ffb01b226b1 (C:\WINDOWS\SYSTEM32\ntdll.dll+0x526b1)
```

The crash happends with simply passing `lli.cpp.obj` to LLD.

Poking around with a debugger, the issue happens on the comdat symbol `_ZL13export_chkstk`, followed by a `.drectve` containing `"-export:___chkstk_ms"`. Because of the section name `.drectve`, `readSection(sectionNumber, def, getName())` will return null at `COFF/InputFiles.cpp:662`, causing an invalid write to address `0x00000018` on line 664.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWltv2zoS_jXMCxFDom7WQx4cO14U6_QUTbHF7otAiZTNhiJ1SCqX87C_fUFKtmRHSZ3EDbrAKVxH1mU43zfkcGY0WGu2FpRegOgSRIsz3JiNVBef-Pkc18xgIc9ySR4vLhvGCRNruFr96xpKASsm1vfwnpkNxIQoqjXUWDDD_qIKlphxDe83VEDOxK19DsQe52xCHyiIvQm8xMWtUbigUJbuGplwTrrLrVhC82YNmSglBGiqcUVhvnuqlKoVSc7tCN2DAKUgmAFvAbztd-x1H_fzy-pqdnMFdZNXzEAM7QiK1lIZaCTcGFNrKwAtAVqumdk0-aSQFUBLzu-2f85rJX_QwgC0ZFo3VAO0hFgQyETBG0Kh2VBYKKw3vb6Tdvgbg4tbSJqq3qnpTaD790XJtcIVxGrdVFQYqwec29uiOYjmhN51B_JecImJbn_uKeTO5NZS535y7vg7t_y1F5jQBnPe3cVEJ2BHPDRScu1AMoCW82t8S5eM0-7UhDDVHRV1PZH5jxbA1UNBa8OkgHNJqNXae5h77l_U3gEBCjzoPdhTSVnGcZKkNCxDyDmxAINZIcuyPfoj_2HH7E4rig1d0JIJSgCaOiO4KzJ3gN3x_I_l8uaxyiX_SkuA5lCbTmyW-e3BHS2MVCCYj0uww2e4ecg0LSySjNghmQNVSKENQLNxwZhzWeB3yw6u7AfFdpBcSu4O09b8aGltj5a94Z9MQ8sjWloeAFp-EnVjnN2snUAwi-MQBDM_7I3hHxgjxzEeAZdl0hkW80wbqfCaZjnW1EF9YrjWAh1RJeb2vqv20gbr7A7zhoLoEufM2sNPPM_zQbQAaGqROib28W6na4fWTwBa2lmLlpOJu-wWG0DLAqBL91ne-QAttzqDYBZMExDMEOqRo-OQ9zJehrpFKGuq7CxojffBKH0vtF4vHhg4GIP5s9XmZiXm7C_aAtSd1qeZhaHnue9eyfBQybAkP1WyxkrTkyrmx5a9oNcr2tcridJk1FXtJLU_b5kgz9v5DeptQDBLIqvbgLT4SOX2_SjHWsvSedDnYQxc3fu5tcr7QQCCWTTYBZJx7bd-k2mcsap-ZtltIaH5y9ZAc3gnGdktTiKZORL6K72uCwn6JdqduGlqG1BYWrA2TKwdGc4JR4NpNj2Oi6x4Hx37m8wr-XjlVHgNH75v_YE_8M3pkYTcK1yfiJJfyt0HTCo_SAYk2p3d-ygSBwB_AYkfRB86pM9_mT778Cf9RWrNcv5MIHQ8f088FetF_w70oCg6oAcdQY_NN05NDJFOdPlb0ROmgYu-enqCMXoILbh5rK3OuDHS6tMzRh5FVmBt3seYzR1-Rsgv3NniQx7CI4OUNs78hvNtoIIJadU9LZpBiDIYcpse2ZjfT3vtD-I_LyXYH9N-xcQtVQvF7qjaqX_ZlCVVAE2fJhWNYH82NKvNfrJ4TSupHrfPjSWZhJa44SYjlFNDn3-4yyK3KeT27xuZaoF1JHnu_46igyjUT9M8GlH8gxC784pqasZTr-dGfjqL3pqNZVnlJAO07DG3PjR1Kei05y75_bj772CwZ5PXX01UHLf5zo6o6RhRR61DKv5saEO_YLPZM_-NUUysuyrRwSJp7wAozLz9nL6F__7Mbm89oan1mUkPNh0DO9g6dna25-6eq0ycngoUt7vLjgLLwlipiIk7eTta4flgTT9qsNMtCWvizCjMjHY3WiLdmghCz4Vhu2mCvLFpYkOlF2yS2euZoqZRwsX9tWVh7gIsNIdGNX2pLssKVyL-24qns2Lo2zB6YET_uB0gy8pGuJrx9rerNruzH2aOnxe9P8IfX20zAtg5ocPCa3f6V29eW4Ng-_D2R5tKpsjVEnsro7da-W_7PmvfDzJm0GY0feKLDjI7P_DDfIQ5zlwq9_RCb-P5AcyfWuA1wgYxXS3rrFRSmFOS1uKb-ZGb7UGfNKFwjKCjJo9qxHvq-Xthle97rmQxcLaH2VyclvQ4xbg7c40tL4NJPVMKP9o5HcyLDVZ75a2TgECeeyPRB4foIN3y_CIefVNiNT5e1_mgDqHwfSa1URRX3WvIl66dPr9Mkv0SAjrIkqIUp4Pg3zUf_D9hvmbiH98PQYfT9AD1fsoTlyjJUY-6ERqXdMXJ6-bk2zGPDrBTp8WysCev3jEbZFVJsaNmwXSNTbHpl3T79trvSUoPSPKnkZsaWdXSwoSrSVsiXI4_24fyTUo-l8LQB_PGIqFVu--VIO13p66rCfZ-8aDvIS596iXQKnr0eGP9HIfjP9HmnOy5xah_w2mV8g-VQpTCLDNWr_nXbzcGK9PUWw2vAVraHUCrAqClW3rn93E4PD4vXFVw900f6KRwSf0UBLO--HHw_j0u_dCL4cmH9VNvH_Bg-849r0yTIAztttn113z_9Hnxx_cbEM1vHrWhVYBANP_n1dfPV6sATRarFUCX3oNvn7Ib7U5sOBTr5wjFuT8u9t83366unVhhCOcTYjffS-8hso_0Mvebldrvb7tuoo1N3QTRbXuUZlXNH2GNtR70V21bc2IPGglXq8VkKOuLdL1YWMlGkK55q-2zWrflJLOh0DU1dYNpKEXbzyQrgg3UrnxqB8v-s_ID-lBLZbJic6vNreu_msNSci7vKYH5I8T2zglRtDB3rrGrkMJgJjqFAULnrQgX3nRyskoDhNouMVrgRrseMatE10IDBa7ogWQ7Mog9RTG5ae8CaNrd_7mp8hYeaUPRNTWfcUV3BY225Yxz2CbJUDScQ2yswOebalA3qtXQkSogE3eYMwLvFTPU8r_tjAOx184Uz_OndjTpGuMojONwckYuApIGKT6jF36cRlEURFFwtrlI4iLySi9KpiQp08L3p0Uahz7JgzzI0zw8YxfIQ4GXotAGPlEwSZM4D9OYeDTBuRdMQejRCjM-sT5lItX6zBn3Ik5Q7J9xnFOuXecfQs51IBAtztSF80B5s9Yg9GzIp_vnDTPcNQuuVgsQLeDczcyRTr8O5UttgmeN4hdv77lzIP4XAAD__xkOJYA">