Closed
Description
I initially thought this is identical to #431, but the error pattern is slightly different and the problem still persists with c90801e.
How to reproduce
This is on Fedora 35 x86_64, with GCC 11.2.1. The script is a distilled version of test/elf/gdb-index.sh.
cat <<EOF | gcc -o b.o -c -xc -ggnu-pubnames -g -
void greet() {
}
EOF
cat <<EOF | gcc -o d.o -c -xc -ggnu-pubnames -g -
int main() {
}
EOF
gcc -B. -o exe1 b.o d.o -Wl,--gdb-index -Wl,--no-fork
Object files are here:
https://www4.cs.fau.de/~erhardt/foo/mold/gdb-index-segfault/b.o
https://www4.cs.fau.de/~erhardt/foo/mold/gdb-index-segfault/d.o
Output
mold: error: b.o: --gdb-index: .debug_abbrev does not contain DW_TAG_compile_unit
mold: error: b.o: --gdb-index: unknown debug info form: 0x0collect2: fatal error: ld terminated with signal 11 [Segmentation fault], core dumped
compilation terminated.
Stack trace
Program terminated with signal SIGSEGV, Segmentation fault.
#0 mold::read_uleb (buf=<synthetic pointer>: 0x7f472f5ebd56 <error: Cannot access memory at address 0x7f472f5ebd56>) at elf/../mold.h:257
257 } while (byte & 0x80);
[Current thread is 1 (Thread 0x7f472e2cc640 (LWP 337936))]
(gdb) bt
#0 mold::read_uleb (buf=<synthetic pointer>: 0x7f472f5ebd56 <error: Cannot access memory at address 0x7f472f5ebd56>) at elf/../mold.h:257
#1 mold::elf::GdbIndexSection<mold::elf::X86_64>::read_address_areas (this=<optimized out>, ctx=..., file=..., offset=offset@entry=73) at elf/output-chunks.cc:2521
#2 0x0000000000643e30 in mold::elf::GdbIndexSection<mold::elf::X86_64>::write_address_areas(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::ObjectFile<mold::elf::X86_64>*)#1}::operator()(mold::elf::ObjectFile<mold::elf::X86_64>*) const (__closure=0x7ffd944ab5e0, file=0x2bb841c0e80) at elf/output-chunks.cc:2381
#3 0x00000000006b1ef1 in tbb::detail::d2::parallel_for_each_operator_selector<mold::elf::GdbIndexSection<mold::elf::X86_64>::write_address_areas(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::ObjectFile<mold::elf::X86_64>*)#1}>::call<mold::elf::ObjectFile<mold::elf::X86_64>*&, tbb::detail::d2::feeder_impl<mold::elf::GdbIndexSection<mold::elf::X86_64>::write_address_areas(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::ObjectFile<mold::elf::X86_64>*)#1}, mold::elf::ObjectFile<mold::elf::X86_64>*> >(mold::elf::GdbIndexSection<mold::elf::X86_64>::write_address_areas(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::ObjectFile<mold::elf::X86_64>*)#1} const&, mold::elf::ObjectFile<mold::elf::X86_64>*&, tbb::detail::d2::feeder_impl<mold::elf::GdbIndexSection<mold::elf::X86_64>::write_address_areas(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::ObjectFile<mold::elf::X86_64>*)#1}, mold::elf::ObjectFile<mold::elf::X86_64>*>*) (item=<optimized out>, body=...) at third-party/tbb/include/tbb/../oneapi/tbb/parallel_for_each.h:87
#4 tbb::detail::d2::parallel_for_body_wrapper<__gnu_cxx::__normal_iterator<mold::elf::ObjectFile<mold::elf::X86_64>**, std::vector<mold::elf::ObjectFile<mold::elf::X86_64>*, std::allocator<mold::elf::ObjectFile<mold::elf::X86_64>*> > >, mold::elf::GdbIndexSection<mold::elf::X86_64>::write_address_areas(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::ObjectFile<mold::elf::X86_64>*)#1}, mold::elf::ObjectFile<mold::elf::X86_64>*>::operator()(tbb::detail::d1::blocked_range<unsigned long>) const (range=..., this=0x2bb84280ed8) at third-party/tbb/include/tbb/../oneapi/tbb/parallel_for_each.h:400
#5 tbb::detail::d1::start_for<tbb::detail::d1::blocked_range<unsigned long>, tbb::detail::d2::parallel_for_body_wrapper<__gnu_cxx::__normal_iterator<mold::elf::ObjectFile<mold::elf::X86_64>**, std::vector<mold::elf::ObjectFile<mold::elf::X86_64>*, std::allocator<mold::elf::ObjectFile<mold::elf::X86_64>*> > >, mold::elf::GdbIndexSection<mold::elf::X86_64>::write_address_areas(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::ObjectFile<mold::elf::X86_64>*)#1}, mold::elf::ObjectFile<mold::elf::X86_64>*>, tbb::detail::d1::auto_partitioner const>::run_body(tbb::detail::d1::blocked_range<unsigned long>&) (r=..., this=0x2bb84280e80)
at third-party/tbb/include/tbb/../oneapi/tbb/parallel_for.h:119
#6 tbb::detail::d1::dynamic_grainsize_mode<tbb::detail::d1::adaptive_mode<tbb::detail::d1::auto_partition_type> >::work_balance<tbb::detail::d1::start_for<tbb::detail::d1::blocked_range<unsigned long>, tbb::detail::d2::parallel_for_body_wrapper<__gnu_cxx::__normal_iterator<mold::elf::ObjectFile<mold::elf::X86_64>**, std::vector<mold::elf::ObjectFile<mold::elf::X86_64>*, std::allocator<mold::elf::ObjectFile<mold::elf::X86_64>*> > >, mold::elf::GdbIndexSection<mold::elf::X86_64>::write_address_areas(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::ObjectFile<mold::elf::X86_64>*)#1}, mold::elf::ObjectFile<mold::elf::X86_64>*>, tbb::detail::d1::auto_partitioner const>, tbb::detail::d1::blocked_range<unsigned long> >(tbb::detail::d1::start_for<tbb::detail::d1::blocked_range<unsigned long>, tbb::detail::d2::parallel_for_body_wrapper<__gnu_cxx::__normal_iterator<mold::elf::ObjectFile<mold::elf::X86_64>**, std::vector<mold::elf::ObjectFile<mold::elf::X86_64>*, std::allocator<mold::elf::ObjectFile<mold::elf::X86_64>*> > >, mold::elf::GdbIndexSection<mold::elf::X86_64>::write_address_areas(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::ObjectFile<mold::elf::X86_64>*)#1}, mold::elf::ObjectFile<mold::elf::X86_64>*>, tbb::detail::d1::auto_partitioner const>&, tbb::detail::d1::blocked_range<unsigned long>&, tbb::detail::d1::execution_data&) (this=this@entry=0x2bb84280ef8, start=warning: RTTI symbol not found for class 'tbb::detail::d1::start_for<tbb::detail::d1::blocked_range<unsigned long>, tbb::detail::d2::parallel_for_body_wrapper<__gnu_cxx::__normal_iterator<mold::elf::ObjectFile<mold::elf::X86_64>**, std::vector<mold::elf::ObjectFile<mold::elf::X86_64>*, std::allocator<mold::elf::ObjectFile<mold::elf::X86_64>*> > >, mold::elf::GdbIndexSection<mold::elf::X86_64>::write_address_areas(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::ObjectFile<mold::elf::X86_64>*)#1}, mold::elf::ObjectFile<mold::elf::X86_64>*>, tbb::detail::d1::auto_partitioner const>'
..., range=..., ed=...) at third-party/tbb/include/tbb/../oneapi/tbb/partitioner.h:447
#7 0x00000000006b24aa in tbb::detail::d1::partition_type_base<tbb::detail::d1::auto_partition_type>::execute<tbb::detail::d1::start_for<tbb::detail::d1::blocked_range<unsigned long>, tbb::detail::d2::parallel_for_body_wrapper<__gnu_cxx::__normal_iterator<mold::elf::ObjectFile<mold::elf::X86_64>**, std::vector<mold::elf::ObjectFile<mold::elf::X86_64>*, std::allocator<mold::elf::ObjectFile<mold::elf::X86_64>*> > >, mold::elf::GdbIndexSection<mold::elf::X86_64>::write_address_areas(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::ObjectFile<mold::elf::X86_64>*)#1}, mold::elf::ObjectFile<mold::elf::X86_64>*>, tbb::detail::d1::auto_partitioner const>, tbb::detail::d1::blocked_range<unsigned long> >(tbb::detail::d1::start_for<tbb::detail::d1::blocked_range<unsigned long>, tbb::detail::d2::parallel_for_body_wrapper<__gnu_cxx::__normal_iterator<mold::elf::ObjectFile<mold::elf::X86_64>**, std::vector<mold::elf::ObjectFile<mold::elf::X86_64>*, std::allocator<mold::elf::ObjectFile<mold::elf::X86_64>*> > >, mold::elf::GdbIndexSection<mold::elf::X86_64>::write_address_areas(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::ObjectFile<mold::elf::X86_64>*)#1}, mold::elf::ObjectFile<mold::elf::X86_64>*>, tbb::detail::d1::auto_partitioner const>&, tbb::detail::d1::blocked_range<unsigned long>&, tbb::detail::d1::execution_data&) (ed=..., range=..., start=warning: RTTI symbol not found for class 'tbb::detail::d1::start_for<tbb::detail::d1::blocked_range<unsigned long>, tbb::detail::d2::parallel_for_body_wrapper<__gnu_cxx::__normal_iterator<mold::elf::ObjectFile<mold::elf::X86_64>**, std::vector<mold::elf::ObjectFile<mold::elf::X86_64>*, std::allocator<mold::elf::ObjectFile<mold::elf::X86_64>*> > >, mold::elf::GdbIndexSection<mold::elf::X86_64>::write_address_areas(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::ObjectFile<mold::elf::X86_64>*)#1}, mold::elf::ObjectFile<mold::elf::X86_64>*>, tbb::detail::d1::auto_partitioner const>'
..., this=0x2bb84280ef8)
at third-party/tbb/include/tbb/../oneapi/tbb/partitioner.h:288
#8 tbb::detail::d1::start_for<tbb::detail::d1::blocked_range<unsigned long>, tbb::detail::d2::parallel_for_body_wrapper<__gnu_cxx::__normal_iterator<mold::elf::ObjectFile<mold::elf::X86_64>**, std::vector<mold::elf::ObjectFile<mold::elf::X86_64>*, std::allocator<mold::elf::ObjectFile<mold::elf::X86_64>*> > >, mold::elf::GdbIndexSection<mold::elf::X86_64>::write_address_areas(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::ObjectFile<mold::elf::X86_64>*)#1}, mold::elf::ObjectFile<mold::elf::X86_64>*>, tbb::detail::d1::auto_partitioner const>::execute(tbb::detail::d1::execution_data&) (this=0x2bb84280e80, ed=...) at third-party/tbb/include/tbb/../oneapi/tbb/parallel_for.h:172
#9 0x000000000083e64a in tbb::detail::r1::task_dispatcher::local_wait_for_all<false, tbb::detail::r1::outermost_worker_waiter> (waiter=..., t=0x2bb84280e80, this=0x2bb84270a00)
at /home/erhardt/Projects/mold/third-party/tbb/src/tbb/task_dispatcher.h:322
#10 tbb::detail::r1::task_dispatcher::local_wait_for_all<tbb::detail::r1::outermost_worker_waiter> (waiter=..., t=0x0, this=0x2bb84270a00) at /home/erhardt/Projects/mold/third-party/tbb/src/tbb/task_dispatcher.h:463
#11 tbb::detail::r1::arena::process (this=<optimized out>, tls=...) at /home/erhardt/Projects/mold/third-party/tbb/src/tbb/arena.cpp:138
#12 0x000000000084c3ab in tbb::detail::r1::market::process (this=0x2bb841d0080, j=...) at /home/erhardt/Projects/mold/third-party/tbb/src/tbb/market.cpp:597
#13 0x000000000084f074 in tbb::detail::r1::rml::private_worker::run (this=0x2bb841f7f00) at /home/erhardt/Projects/mold/third-party/tbb/src/tbb/private_server.cpp:267
#14 0x000000000084f2c9 in tbb::detail::r1::rml::private_worker::thread_routine (arg=<optimized out>) at /home/erhardt/Projects/mold/third-party/tbb/src/tbb/private_server.cpp:221
#15 0x00007f472eb61b1a in start_thread (arg=<optimized out>) at pthread_create.c:443
#16 0x00007f472ebe6660 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81
Metadata
Metadata
Assignees
Labels
No labels