llvm / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
http://llvm.org
Other
28.35k stars 11.71k forks source link

llvm-objdump can reach llvm_unreachable("no symbol table pointer!"), causing later trouble #85783

Open emaste opened 6 months ago

emaste commented 6 months ago

Reported against FreeBSD in https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=277794 with a reproduction COFF file.

On a CURRENT system the assertion is triggered:

# objdump --version
LLVM (http://llvm.org/):
  LLVM version 17.0.6
  Optimized build with assertions.
...
# objdump -x objdump3d.exe
...
RELOCATION RECORDS FOR []:
OFFSET   TYPE                     VALUE
no symbol table pointer!
UNREACHABLE executed at /usr/src/contrib/llvm-project/llvm/lib/Object/COFFObjectFile.cpp:1300!
PLEASE submit a bug report to https://bugs.freebsd.org/submit/ and include the crash backtrace.
Stack dump:
0.      Program arguments: objdump -x objdump3d.exe
 #0 0x0000000001230c41 PrintStackTrace /usr/src/contrib/llvm-project/llvm/lib/Support/Unix/Signals.inc:602:13
 #1 0x000000000122f0b5 RunSignalHandlers /usr/src/contrib/llvm-project/llvm/lib/Support/Signals.cpp:105:18
 #2 0x0000000001231365 SignalHandler /usr/src/contrib/llvm-project/llvm/lib/Support/Unix/Signals.inc:0:3
 #3 0x00000008243d95ff handle_signal /usr/src/lib/libthr/thread/thr_sig.c:0:3
 #4 0x00000008243d8bbb thr_sighandler /usr/src/lib/libthr/thread/thr_sig.c:244:1
 #5 0x0000000821ee52d3 ([vdso]+0x2d3)
 #6 0x000000082928b35a thr_kill /usr/obj/usr/src/amd64.amd64/lib/libsys/thr_kill.S:4:0
 #7 0x0000000827353014 _raise /usr/src/lib/libc/gen/raise.c:0:10
 #8 0x0000000827406589 abort /usr/src/lib/libc/stdlib/abort.c:67:17
 #9 0x000000000121537b (/usr/bin/objdump+0x121537b)
#10 0x0000000000f81059 (/usr/bin/objdump+0xf81059)
#11 0x0000000000dd74c4 operator bool /usr/src/contrib/llvm-project/llvm/include/llvm/Support/Error.h:559:17
#12 0x0000000000dd74c4 getCOFFRelocationValueString /usr/src/contrib/llvm-project/llvm/tools/llvm-objdump/COFFDump.cpp:627:8
#13 0x0000000000e5f893 getRelocationValueString /usr/src/contrib/llvm-project/llvm/tools/llvm-objdump/llvm-objdump.cpp:0:12
#14 0x0000000000e5f22f getPtr /usr/src/contrib/llvm-project/llvm/include/llvm/Support/Error.h:270:42
#15 0x0000000000e5f22f operator bool /usr/src/contrib/llvm-project/llvm/include/llvm/Support/Error.h:233:16
#16 0x0000000000e5f22f printRelocations /usr/src/contrib/llvm-project/llvm/tools/llvm-objdump/llvm-objdump.cpp:2235:19
#17 0x0000000000e6a596 dumpObject /usr/src/contrib/llvm-project/llvm/tools/llvm-objdump/llvm-objdump.cpp:2831:7
#18 0x0000000000e654b0 dumpInput /usr/src/contrib/llvm-project/llvm/tools/llvm-objdump/llvm-objdump.cpp:0:5
#19 0x0000000000e654b0 for_each<std::__1::__wrap_iter<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > *>, void (*)(llvm::StringRef)> /usr/obj/usr/src/amd64.amd64/tmp/usr/include/c++/v1/__algorithm/for_each.h:26:5
#20 0x0000000000e654b0 for_each<std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > &, void (*)(llvm::StringRef)> /usr/src/contrib/llvm-project/llvm/include/llvm/ADT/STLExtras.h:1731:10
#21 0x0000000000e654b0 main /usr/src/contrib/llvm-project/llvm/tools/llvm-objdump/llvm-objdump.cpp:3248:3
#22 0x00000008273280aa __libc_start1 /usr/src/lib/libc/csu/libc_start1.c:157:2
Abort (core dumped)
# objdump --version
llvmbot commented 6 months ago

@llvm/issue-subscribers-tools-llvm-objdump

Author: Ed Maste (emaste)

Reported against FreeBSD in https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=277794 with a reproduction COFF file. ``` On a CURRENT system the assertion is triggered: # objdump --version LLVM (http://llvm.org/): LLVM version 17.0.6 Optimized build with assertions. ... # objdump -x objdump3d.exe ... RELOCATION RECORDS FOR []: OFFSET TYPE VALUE no symbol table pointer! UNREACHABLE executed at /usr/src/contrib/llvm-project/llvm/lib/Object/COFFObjectFile.cpp:1300! PLEASE submit a bug report to https://bugs.freebsd.org/submit/ and include the crash backtrace. Stack dump: 0. Program arguments: objdump -x objdump3d.exe #0 0x0000000001230c41 PrintStackTrace /usr/src/contrib/llvm-project/llvm/lib/Support/Unix/Signals.inc:602:13 #1 0x000000000122f0b5 RunSignalHandlers /usr/src/contrib/llvm-project/llvm/lib/Support/Signals.cpp:105:18 #2 0x0000000001231365 SignalHandler /usr/src/contrib/llvm-project/llvm/lib/Support/Unix/Signals.inc:0:3 #3 0x00000008243d95ff handle_signal /usr/src/lib/libthr/thread/thr_sig.c:0:3 #4 0x00000008243d8bbb thr_sighandler /usr/src/lib/libthr/thread/thr_sig.c:244:1 #5 0x0000000821ee52d3 ([vdso]+0x2d3) #6 0x000000082928b35a thr_kill /usr/obj/usr/src/amd64.amd64/lib/libsys/thr_kill.S:4:0 #7 0x0000000827353014 _raise /usr/src/lib/libc/gen/raise.c:0:10 #8 0x0000000827406589 abort /usr/src/lib/libc/stdlib/abort.c:67:17 #9 0x000000000121537b (/usr/bin/objdump+0x121537b) #10 0x0000000000f81059 (/usr/bin/objdump+0xf81059) #11 0x0000000000dd74c4 operator bool /usr/src/contrib/llvm-project/llvm/include/llvm/Support/Error.h:559:17 #12 0x0000000000dd74c4 getCOFFRelocationValueString /usr/src/contrib/llvm-project/llvm/tools/llvm-objdump/COFFDump.cpp:627:8 #13 0x0000000000e5f893 getRelocationValueString /usr/src/contrib/llvm-project/llvm/tools/llvm-objdump/llvm-objdump.cpp:0:12 #14 0x0000000000e5f22f getPtr /usr/src/contrib/llvm-project/llvm/include/llvm/Support/Error.h:270:42 #15 0x0000000000e5f22f operator bool /usr/src/contrib/llvm-project/llvm/include/llvm/Support/Error.h:233:16 #16 0x0000000000e5f22f printRelocations /usr/src/contrib/llvm-project/llvm/tools/llvm-objdump/llvm-objdump.cpp:2235:19 #17 0x0000000000e6a596 dumpObject /usr/src/contrib/llvm-project/llvm/tools/llvm-objdump/llvm-objdump.cpp:2831:7 #18 0x0000000000e654b0 dumpInput /usr/src/contrib/llvm-project/llvm/tools/llvm-objdump/llvm-objdump.cpp:0:5 #19 0x0000000000e654b0 for_each<std::__1::__wrap_iter<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > *>, void (*)(llvm::StringRef)> /usr/obj/usr/src/amd64.amd64/tmp/usr/include/c++/v1/__algorithm/for_each.h:26:5 #20 0x0000000000e654b0 for_each<std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > &, void (*)(llvm::StringRef)> /usr/src/contrib/llvm-project/llvm/include/llvm/ADT/STLExtras.h:1731:10 #21 0x0000000000e654b0 main /usr/src/contrib/llvm-project/llvm/tools/llvm-objdump/llvm-objdump.cpp:3248:3 #22 0x00000008273280aa __libc_start1 /usr/src/lib/libc/csu/libc_start1.c:157:2 Abort (core dumped) # objdump --version ```
emaste commented 6 months ago

reproducible on git main at bf4fc00bb73c73ccc7a78cd6d28287dd58c71e2c

$ fetch -o pr249284.coff 'https://bugs.freebsd.org/bugzilla/attachment.cgi?id=249284'
$ bin/llvm-objdump -x pr249284.coff

pr249284.coff:  file format coff-<unknown arch>
architecture: unknown
...
RELOCATION RECORDS FOR []:
OFFSET   TYPE                     VALUE
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: bin/llvm-objdump -x pr249284.coff
 #0 0x0000000001ab7968 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/emaste/src/llvm-project/llvm/lib/Support/Unix/Signals.inc:731:8
 #1 0x0000000001ab5da5 llvm::sys::RunSignalHandlers() /home/emaste/src/llvm-project/llvm/lib/Support/Signals.cpp:106:18
 #2 0x0000000001ab80f6 SignalHandler(int) /home/emaste/src/llvm-project/llvm/lib/Support/Unix/Signals.inc:0:3
 #3 0x00000008230966ef handle_signal /usr/home/emaste/src/freebsd/lib/libthr/thread/thr_sig.c:0:3
 #4 0x0000000823095cab thr_sighandler /usr/home/emaste/src/freebsd/lib/libthr/thread/thr_sig.c:244:1
...