<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/141680>141680</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
llvm-dwarfdump doesn't support CREL
</td>
</tr>
<tr>
<th>Labels</th>
<td>
tools:llvm-dwarfdump
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ZequanWu
</td>
</tr>
</table>
<pre>
llvm-dwarfdump crash repro with CREL:
```
$ cat main.cpp
bool bar();
int foo(int x) {
if (bar()) {
x = x * 2;
return x;
}
else {
x = x + 1;
return x;
}
}
$ clang++ -O1 -Wa,--crel,--allow-experimental-crel -g -c main.cpp && llvm-dwarfdump main.o
main.o: file format elf64-x86-64
.debug_info contents:
0x00000000: Compile Unit: length = 0x00000055, format = DWARF32, version = 0x0005, unit_type = DW_UT_compile, abbr_offset = 0x0000, addr_size = 0x08 (next unit at 0x00000059)
error: invalid reference to or invalid content in .debug_str_offsets[.dwo]: insufficient space for 32 bit header prefix
0x0000000c: DW_TAG_compile_unit
DW_AT_producer ()
DW_AT_language (DW_LANG_C_plus_plus_14)
DW_AT_name ()
DW_AT_str_offsets_base (0x00000000)
DW_AT_stmt_list (0x00000000)
DW_AT_comp_dir ()
DW_AT_low_pc (0x0008000500000014)
DW_AT_high_pc (0x000800050000002a)
DW_AT_addr_base (0x00000000)
DW_AT_loclists_base (0x00000000)
0x00000027: DW_TAG_subprogram
DW_AT_low_pc (0x0008000500000014)
DW_AT_high_pc (0x000800050000002a)
DW_AT_frame_base (DW_OP_reg7 RSP)
DW_AT_call_all_calls (true)
DW_AT_linkage_name ()
DW_AT_name ()
DW_AT_decl_file ("/tmp")
DW_AT_decl_line (2)
DW_AT_type (0x00000054 "base ")
DW_AT_external (true)
0x00000037: DW_TAG_formal_parameter
DW_AT_location (indexed (0x0) loclist = PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: llvm-dwarfdump main.o
#0 0x000055f4e6e270a8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/local/google/home/zequanwu/work/llvm-project/out/cmake/bin/llvm-dwarfdump+0x1ba80a8)
#1 0x000055f4e6e24cae llvm::sys::RunSignalHandlers() (/usr/local/google/home/zequanwu/work/llvm-project/out/cmake/bin/llvm-dwarfdump+0x1ba5cae)
#2 0x000055f4e6e278c1 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
#3 0x00007f9adcc49df0 (/lib/x86_64-linux-gnu/libc.so.6+0x3fdf0)
#4 0x000055f4e6a4c86f llvm::DWARFUnit::getLoclistOffset(unsigned int) (/usr/local/google/home/zequanwu/work/llvm-project/out/cmake/bin/llvm-dwarfdump+0x17cd86f)
#5 0x000055f4e6a36dba dumpLocationList(llvm::raw_ostream&, llvm::DWARFFormValue const&, llvm::DWARFUnit*, unsigned int, llvm::DIDumpOptions) DWARFDie.cpp:0:0
#6 0x000055f4e6a35980 dumpAttribute(llvm::raw_ostream&, llvm::DWARFDie const&, llvm::DWARFAttribute const&, unsigned int, llvm::DIDumpOptions) DWARFDie.cpp:0:0
#7 0x000055f4e6a342e4 llvm::DWARFDie::dump(llvm::raw_ostream&, unsigned int, llvm::DIDumpOptions) const (/usr/local/google/home/zequanwu/work/llvm-project/out/cmake/bin/llvm-dwarfdump+0x17b52e4)
#8 0x000055f4e6a3473a llvm::DWARFDie::dump(llvm::raw_ostream&, unsigned int, llvm::DIDumpOptions) const (/usr/local/google/home/zequanwu/work/llvm-project/out/cmake/bin/llvm-dwarfdump+0x17b573a)
#9 0x000055f4e6a3473a llvm::DWARFDie::dump(llvm::raw_ostream&, unsigned int, llvm::DIDumpOptions) const (/usr/local/google/home/zequanwu/work/llvm-project/out/cmake/bin/llvm-dwarfdump+0x17b573a)
#10 0x000055f4e6a504e8 llvm::DWARFCompileUnit::dump(llvm::raw_ostream&, llvm::DIDumpOptions) (/usr/local/google/home/zequanwu/work/llvm-project/out/cmake/bin/llvm-dwarfdump+0x17d14e8)
#11 0x000055f4e69f519c llvm::DWARFContext::dump(llvm::raw_ostream&, llvm::DIDumpOptions, std::array<std::optional<unsigned long>, 28ul>)::$_1::operator()(char const*, llvm::iterator_range<std::unique_ptr<llvm::DWARFUnit, std::default_delete<llvm::DWARFUnit>>*>) const DWARFContext.cpp:0:0
#12 0x000055f4e69eeb42 llvm::DWARFContext::dump(llvm::raw_ostream&, llvm::DIDumpOptions, std::array<std::optional<unsigned long>, 28ul>) (/usr/local/google/home/zequanwu/work/llvm-project/out/cmake/bin/llvm-dwarfdump+0x176fb42)
#13 0x000055f4e69d6def dumpObjectFile(llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&) llvm-dwarfdump.cpp:0:0
#14 0x000055f4e69d8cd6 handleBuffer(llvm::StringRef, llvm::MemoryBufferRef, std::function<bool (llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&)>, llvm::raw_ostream&) llvm-dwarfdump.cpp:0:0
#15 0x000055f4e69d3a27 handleFile(llvm::StringRef, std::function<bool (llvm::object::ObjectFile&, llvm::DWARFContext&, llvm::Twine const&, llvm::raw_ostream&)>, llvm::raw_ostream&) llvm-dwarfdump.cpp:0:0
#16 0x000055f4e69d3652 main (/usr/local/google/home/zequanwu/work/llvm-project/out/cmake/bin/llvm-dwarfdump+0x1754652)
#17 0x00007f9adcc33ca8 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#18 0x00007f9adcc33d65 call_init ./csu/../csu/libc-start.c:128:20
#19 0x00007f9adcc33d65 __libc_start_main ./csu/../csu/libc-start.c:347:5
#20 0x000055f4e69c0841 _start (/usr/local/google/home/zequanwu/work/llvm-project/out/cmake/bin/llvm-dwarfdump+0x1741841)
[2] 675271 segmentation fault (core dumped) llvm-dwarfdump main.o
```
It's crashed [here](https://github.com/llvm/llvm-project/blob/0354491bea04beb6d1db44f8ca522bfc597ab0d3/llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp#L1230) because `LocTable` failed to initialize due to not handling CREL.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzkWV9v47gR_zTMC2FDJvXPD3lQ7PX1gLS72M01QF8EihrJ7NKkjqQ2zn76gpT8N0q21x5yxTVIbEacGc7vN0MOSTFrRasAblFyh5L1DevdVpvbf8CvPVOP_U2l6-dbKb_tZvUTM03d7zrMDbNbbKAzGj8Jt8Wrzx_uES1QVKA0Gn-jApEYc-bwjgk1512HoqLSWuKKGURyRJaI3qGoEMrhRmtEct_aI7LEKPMdWDQYkfwkfurBGO8xomv_SQpMBkv-sQHXG4X3hycoW4dvkBYmte_wYpSdVh0_PRbJVIvIndeZfVzg2SNDZDWbcQMyNJiU-mkG-w6M2IFyTIY-PGvxjB9pwIikiKT4itTQrVFUjA1a4EZIwI02O-YwyCaNZ_s8naWx9ycq5jVUfVsK1WjMtXKgnB2CEO2j8cdbWeld5w39ooTz_0tQrdsG_AfBJEFkdRjJd6wfi88bSvzTb2Cs0OokH2R7JVzpnjsYxctfHko-DOS7WVWZUjeNBXc2UOipa1Na8R0Oz3MfYwV7F2xi5k5e-YijqABjtPGeC_WNSVFjAw0YUByw01ib4_ORBSwUHsmx7uCGRcndvH7SKFkPpmzfNIILL287xgPRmBJcCYe3wGowuDPQiP3A9pFT7tXXj-VD8dMBcek9HxPr9LN-LIuHsjO67jkY_2RM46gY-3w-9ayFsW_9WN4Xf_upXJWd7O3wsYhHjQnTiu3gzOaExBn8smL2MNBZfpy7Y93OlVJY94rUxACegLIW0-j0U9nxQfpgLvdhHYy-hWwr2q3XnVAj7HW1kFsjztdhSs09yBMj09JnMSfZWcxtX3VGt4btXniBXyB_C_cl1EnZI9hBtjFsB-duj1nz8VNpoM3w5y-fLuQ5k7L0f75hR3lnepii8Oi8UF9ZC0N24anATvVMmqqByzIsYkGQILJxuy40fqAkhQpKb0oOy88pckmMESGBnh-MAXsHRjF5ycdZxGmI-Kjgox7WRll2zIfAgblIJ-b8AnkKiVA17KEeffNla8y5sOZ9uv9QfPmAbV_t_HqHq771tVQb55ezrXNdWMbJBpFNK9y2r-Zc7xDZ-IIxfs06o_8J3CGyEdb2YBHZYKZqLBSXfQ3YbWEs0xXjX51hHOYoKr44xr9iX2_GSjEfnP40ZDRmpu13YyF5tUBhRGg0rtJJ0sSQAskilgcFb5cW9tkOjU9GKBdGffA-IJKfhAx7KrV1BtgulMQVFsqFIu-zZdNb49FqzqRnQuvW15bNVu_81_ewQXnqEdk8afP1JS-69598x7568Uqog8gRESJ30X5RsTxihzRGhC6ukMWcwRSyz736IlrF5F-YqiUYO0yG93Y-4QxOzpPrsOR8gS_cHLZZnmwrWr93KB0iRSj0WtShuRw1bNi00SIKf8MAdBwga5as5jxe1k00QpaiQmSzz9MyjWdSqH4_a1U_dPC51fM0-EybuolOHscXHrOY52lzRnfYiIw7F0SLFtz9MJU-hrKGSN6rsIGt_5DkyXidp80JTXKJhqZ1xcJ0ux9XiXth3Q8mwRX4jTa7vzPZg9_eeOUpocDQEMZLPi4kf173u-5j5_2wnqqguhYwEef0CkiyzKMApHDOiKp3P5rKVw6uxZv-H61eCP0-ULIrKDGBeMK94b8htG8i-w1eBTDvnJFVQiA-ZWR-jT6j7E-NPqPshH75f4veV7LLIs2SKIb8Gv14Ojwtsf8GC2-gfl-89SKG_IT3snQvm2Sx5C_xKgf73wHrCltXDz3MGPaM6Or4QAchJhFdHTNGatUi-sErkryXobkcxBGJy8VBEwxz-njjkfMtM4dFsbh0SLhBtjRMtXA-fq_Erz2UnTOIriZLxZn3NTSsl66sQYKDVxToh-BwMbg9Jvc5oVcLrw_H5WZkCVDF5H87HO-cvmlTxeSUvvSSrzqtoQk192PlLW_C3coZOzo8HtrnIlMF9sDzdefDkz9pTVfma_aXVyeCiZDHVxByXqd4G3aed33ThO3naYAvzgjVfobmcty_wk6b50F-7DyGsukV98FEdBXuEv9YQsYE-q8oS64oo4xkI2UvIn5B2J-Yk_SakzQh4fz5zhM0idPkbIJml4cfSjnLcVn6801pHTNuuHEJjs79CNb7MPdN-2xr6PwxXXVOjoeia6X5FtEiixEt6Dhifj1inSY4yAsl3PUgQ9NbngXLc45osSA5ogU5ULucsniBYcr9Scs0zhAtksEwudxsLHmUxws8mHznqMWLPF6MUUvuCErWOM0Ski2whTbcy4f7mlD1vGtcGwjrLNQ-O1-997h4txEVPztEMjvcskCNUXK3BQMoWSOS_-ZbnEpqf3qOaBLHy0UFLIorqNJ6UVdx3OScJYRUDU-WGauimp7ZCafuNVR9-7NqtG_7qXz49sU7TDBC7xeEhsuoCjjrLWCURveaP7BKAkoj3DAhocZOY59bgknx3dMSLtmVdsOaJFQb3vbMb-pbWi_pkt3A7SKLc5rTJI1utrcAWbXkNFmQpIqaCCJCs2oZAc0ryiOW3ohbEpEkSkhGSJRG0ZwTRmMOnJIKUp6kKI5gx4Sce4hzbdqbcMd1u4gXaR7dSFaBtOF9FSFOa-mJvk4EH_UbM7y4qvrWojgKl74nm044CddvtmoNViGSOWz7LlzJebA3vZG3__nF3Oj3t1vyrwAAAP__1aRCOA">