<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/67111>67111</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Wasm] wasm-ld crashed when using `--emit-relocs`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
MarcoPoloPie
</td>
</tr>
</table>
<pre>
When compiling a C file that calls `malloc`, if `-Wl,-emit-relocs` is added, wasm-ld will report an error:
#0 0x000055f608fd22e8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (.../bin/wasm-ld+0xf052e8)
#1 0x000055f608fcfbfe llvm::sys::RunSignalHandlers() (.../bin/wasm-ld+0xf02bfe)
#2 0x000055f608fd2ef5 SignalHandler(int) Signals.cpp:0:0
#3 0x00007fa79ec89420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
#4 0x000055f6093e6d67 lld::wasm::LinkingSection::writeBody() (.../bin/wasm-ld+0x1319d67)
#5 0x000055f6093d50ea lld::wasm::SyntheticSection::finalizeContents() Writer.cpp:0:0
#6 0x000055f6093d0141 lld::wasm::(anonymous namespace)::Writer::run() Writer.cpp:0:0
#7 0x000055f6093c11c1 lld::wasm::writeResult() (.../bin/wasm-ld+0x12f41c1)
#8 0x000055f609399d1f lld::wasm::(anonymous namespace)::LinkerDriver::linkerMain(llvm::ArrayRef<char const*>) Driver.cpp:0:0
#9 0x000055f609395acf lld::wasm::link(llvm::ArrayRef<char const*>, llvm::raw_ostream&, llvm::raw_ostream&, bool, bool) (.../bin/wasm-ld+0x12c8acf)
#10 0x000055f608fd4d7f lld::unsafeLldMain(llvm::ArrayRef<char const*>, llvm::raw_ostream&, llvm::raw_ostream&, llvm::ArrayRef<lld::DriverDef>, bool) (.../bin/wasm-ld+0xf07d7f)
It appears that `createOptionalSymbols()` created `WasmSym::heapBase` and `WasmSym::heapEnd` with the `DefinedData` type, and leaves their `segment` fields as `nullptr`. However, `LinkingSection::writeBody()` does not check their `segment` fields before dereferencing them in `getOutputSegmentIndex()`, causing wasm-ld to crash.
Is this a bug or an expected behavior?
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycVktv2zoT_TX0hrBBUe-FF4ldowVatKg_IMtgRI4sfqVIgaRi-_76C0pOGgdGk9uFHuAM55w5fMyA9-pgENckvyf5dgFj6KxbfwMn7A-r7Q-Fi8bK8_qhQ0OF7QellTlQoBvaKo00dBCoAK09JQXrQWsrSMEI31DVxqHlgyZ8s8RehaVDbYUnBaPKU5ASZfQ7gu-XWtKj0po6HKwLFAxF56wj6R1hW8Ke3zxllJ0YYyzP24JVreQcK6r1Ux9d0zt_9vPPD6dM2AcQv_7nQCDh1W8nB8dH64ND6AkvJq4mEF5TwqvVakX4rlGG8N2FGeH37NSynGNFeD0zoYSnyTUV0TYt3qLyczR7dTCgP4ORGp0nvHoXjTctXqHxt4ljm9OruIRXlzzmYb8Sw0DSOzY9L4HSS6CyhbJGUdUZZ_Tx0aEP1uGjC3Tit9OqIXx3qorHIltqZcbT8mDG2TCEziHIlbcrNhFOsoyzK77Za751ioUsSqq1nDWJyc5_X5X5pcxhjyIoay5WpwLeW3l-X6kkTWpZlFfQ-TW0zBnCLej92YQOgxJX4K0yoNU_uLEmoAnPq_UQObnbkhZvAFmSJbcACa_AWHPu7eipgR79MO3NejbPEJc9OpoPAJfXwCJJxE3gSdCf6EcdPiApb7NEJFeSVtdAdS2T9i8yjIuNbuvU03Oeehr5BpHFqyN65xycf2JL0o3owFFhjQ-E35H0U2Q_R7itSf2Gag7iJtWI_HHMDf3T_fEnW2Ot_v19R3lRgWhflI-XzNsLL5Plq3RG46HFr1r-NwX_PpubAC905nXZxsFPH8y5ZaUsX6U8vb8ECsOA4PxcYUjBhEMI-H2IBxX0_tw3Vl_OZqwos1lGzwfw_f58YdkhDPfgMfqAuW3_ZGQ0H1XoaOgw-myxVQblFgJEUzgPGPOJETTCE0ZeqFx09Xjo0YTo1irU0lOYiqEZtR6CIwVb0c_2iHHL8020fODKi9GkRU-NDVR0KH79CbDB1jqkEh226NCIWKNDhz1VJs44YPg-hmEM-3nqFyPx9AIUWQkYfZz0XIyDpcKB71ZXqxKzjqWbNuOBWjeV6dOAIgrfYAdPKpbs3es5C7lOZZ3WsMB1UtR5WpZlXSy6dYqybLKC1QyyDKu6EmmWZkWLVZNDmdQLteaMp6zmPGFJkRarGhNZ5E2aVJjxrGhIxrAHpVdxT66sOyyU9yOuizJJkoWGBrWfGhvODR7pZCScxz7HreOcZTMePMmYVj7431GCCnrqiOJGIfn2RZRJEZT0GJuhWa_Y4bxpbhaj0-suhGEq_3xH-O6gQjc2K2H7WD7jCZo_y8HZ_6MIhO8mdp7w3cT-3wAAAP__bGvf0Q">