Crash with `-D_GLIBCXX_ASSERTIONS` when building dtrace
thesamesam opened this issue · 4 comments
thesamesam commented
When building dtrace, I hit a mold crash:
$ gdb --args /usr/sbin/ld.mold -plugin /usr/libexec/gcc/x86_64-pc-linux-gnu/15/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-pc-linux-gnu/15/lto-wrapper -plugin-opt=-fresolution=/tmp/cc3MaWFd.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -o /var/tmp/portage/dev-debug/dtrace-9999/work/dtrace-9999/build/usdt-tst-special /usr/lib/gcc/x86_64-pc-linux-gnu/15/../../../../lib64/Scrt1.o /usr/lib/gcc/x86_64-pc-linux-gnu/15/../../../../lib64/crti.o /usr/lib/gcc/x86_64-pc-linux-gnu/15/crtbeginS.o -L/var/tmp/portage/dev-debug/dtrace-9999/work/dtrace-9999/build -L/usr/lib/gcc/x86_64-pc-linux-gnu/15 -L/usr/lib/gcc/x86_64-pc-linux-gnu/15/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-pc-linux-gnu/15/../../../../x86_64-pc-linux-gnu/lib -L/usr/lib/gcc/x86_64-pc-linux-gnu/15/../../.. -O1 --as-needed -z pack-relative-relocs --defsym=__gentoo_check_ldflags__=0 /var/tmp/portage/dev-debug/dtrace-9999/work/dtrace-9999/build/test-triggers--usdt-tst-special.o /var/tmp/portage/dev-debug/dtrace-9999/work/dtrace-9999/build/test-triggers--usdt-tst-special-prov.o --repro -v -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-pc-linux-gnu/15/crtendS.o /usr/lib/gcc/x86_64-pc-linux-gnu/15/../../../../lib64/crtn.o
(gdb) set follow-fork-mode child
(gdb) r
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_vector.h:1130: constexpr std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::operator[](size_type) [with _Tp = std::unique_ptr<mold::elf::InputSection<mold::elf::X86_64>, std::default_delete<mold::elf::InputSection<mold::elf::X86_64> > >; _Alloc = std::allocator<std::unique_ptr<mold::elf::InputSection<mold::elf::X86_64>, std::default_delete<mold::elf::InputSection<mold::elf::X86_64> > > >; reference = std::unique_ptr<mold::elf::InputSection<mold::elf::X86_64>, std::default_delete<mold::elf::InputSection<mold::elf::X86_64> > >&; size_type = long unsigned int]: Assertion '__n < this->size()' failed.
Thread 2.1 "ld.mold" received signal SIGABRT, Aborted.
[Switching to Thread 0x7ffff7ce4780 (LWP 1275630)]
__pthread_kill_implementation (threadid=<optimized out>, signo=6, no_tid=0) at pthread_kill.c:44
44 return INTERNAL_SYSCALL_ERROR_P (ret) ? INTERNAL_SYSCALL_ERRNO (ret) : 0;
(gdb) bt
#0 __pthread_kill_implementation (threadid=<optimized out>, signo=6, no_tid=0) at pthread_kill.c:44
#1 __pthread_kill_internal (threadid=<optimized out>, signo=6) at pthread_kill.c:78
#2 __GI___pthread_kill (threadid=<optimized out>, signo=signo@entry=6) at pthread_kill.c:89
#3 0x00007ffff7842f22 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#4 0x00007ffff78254f2 in __GI_abort () at abort.c:79
#5 0x00007ffff7a54fcb in std::__glibcxx_assert_fail (file=file@entry=0x55555651d570 "/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_vector.h", line=line@entry=1130, function=function@entry=0x5555565354a8 "constexpr std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::operator[](size_type) [with _Tp = std::unique_ptr<mold::elf::InputSection<mold::elf::X86_64>, std::default_delete<mold::elf::Inp"..., condition=condition@entry=0x555556515c32 "__n < this->size()") at /usr/src/debug/sys-devel/gcc-15.0.9999/gcc-15.0.9999/libstdc++-v3/src/c++11/assert_fail.cc:41
#6 0x00005555558d9d8e in std::vector<std::unique_ptr<mold::elf::InputSection<mold::elf::X86_64>, std::default_delete<mold::elf::InputSection<mold::elf::X86_64> > >, std::allocator<std::unique_ptr<mold::elf::InputSection<mold::elf::X86_64>, std::default_delete<mold::elf::InputSection<mold::elf::X86_64> > > > >::operator[] (this=0x200001c0a48, __n=<optimized out>) at /usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_vector.h:1130
#7 mold::elf::ObjectFile<mold::elf::X86_64>::get_section (this=<optimized out>, esym=...) at /usr/src/debug/sys-devel/mold-2.33.0/mold-2.33.0/elf/mold.h:2582
#8 mold::elf::ObjectFile<mold::elf::X86_64>::resolve_symbols (this=0x200001c0900, ctx=...) at /usr/src/debug/sys-devel/mold-2.33.0/mold-2.33.0/elf/input-files.cc:944
#9 0x0000555555e9cc88 in mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1}::operator()(mold::elf::InputFile<mold::elf::X86_64>*) const (__closure=<optimized out>, file=<optimized out>) at /usr/src/debug/sys-devel/mold-2.33.0/mold-2.33.0/elf/passes.cc:295
#10 std::__invoke_impl<void, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1} const&, mold::elf::InputFile<mold::elf::X86_64>*&>(std::__invoke_other, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1} const&, mold::elf::InputFile<mold::elf::X86_64>*&) (__f=...) at /usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/invoke.h:61
#11 std::__invoke<mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1} const&, mold::elf::InputFile<mold::elf::X86_64>*&>(mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1} const&, mold::elf::InputFile<mold::elf::X86_64>*&) (__fn=...) at /usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/invoke.h:96
#12 std::invoke<mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1} const&, mold::elf::InputFile<mold::elf::X86_64>*&>(mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1} const&, mold::elf::InputFile<mold::elf::X86_64>*&) (__fn=...) at /usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/functional:120
#13 tbb::detail::d0::invoke<mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1} const&, mold::elf::InputFile<mold::elf::X86_64>*&>(mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1} const&, mold::elf::InputFile<mold::elf::X86_64>*&) (f=...) at /usr/include/oneapi/tbb/detail/_utils.h:356
#14 tbb::detail::d2::parallel_for_each_operator_selector<mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1}>::call<mold::elf::InputFile<mold::elf::X86_64>*&, tbb::detail::d2::feeder_impl<mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1}, mold::elf::InputFile<mold::elf::X86_64>*> >(mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1} const&, mold::elf::InputFile<mold::elf::X86_64>*&, tbb::detail::d2::feeder_impl<mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1}, mold::elf::InputFile<mold::elf::X86_64>*>*) (body=..., item=<optimized out>) at /usr/include/oneapi/tbb/parallel_for_each.h:91
#15 tbb::detail::d2::parallel_for_body_wrapper<__gnu_cxx::__normal_iterator<mold::elf::InputFile<mold::elf::X86_64>**, std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> > >, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1}, mold::elf::InputFile<mold::elf::X86_64>*>::operator()(tbb::detail::d1::blocked_range<unsigned long>) const (this=<optimized out>, range=...) at /usr/include/oneapi/tbb/parallel_for_each.h:398
#16 std::__invoke_impl<void, tbb::detail::d2::parallel_for_body_wrapper<__gnu_cxx::__normal_iterator<mold::elf::InputFile<mold::elf::X86_64>**, std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> > >, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1}, mold::elf::InputFile<mold::elf::X86_64>*> const&, tbb::detail::d1::blocked_range<unsigned long>&>(std::__invoke_other, tbb::detail::d2::parallel_for_body_wrapper<__gnu_cxx::__normal_iterator<mold::elf::InputFile<mold::elf::X86_64>**, std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> > >, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1}, mold::elf::InputFile<mold::elf::X86_64>*> const&, tbb::detail::d1::blocked_range<unsigned long>&) (__f=...) at /usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/invoke.h:61
#17 std::__invoke<tbb::detail::d2::parallel_for_body_wrapper<__gnu_cxx::__normal_iterator<mold::elf::InputFile<mold::elf::X86_64>**, std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> > >, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1}, mold::elf::InputFile<mold::elf::X86_64>*> const&, tbb::detail::d1::blocked_range<unsigned long>&>(tbb::detail::d2::parallel_for_body_wrapper<__gnu_cxx::__normal_iterator<mold::elf::InputFile<mold::elf::X86_64>**, std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> > >, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1}, mold::elf::InputFile<mold::elf::X86_64>*> const&, tbb::detail::d1::blocked_range<unsigned long>&) (__fn=...) at /usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/invoke.h:96
#18 std::invoke<tbb::detail::d2::parallel_for_body_wrapper<__gnu_cxx::__normal_iterator<mold::elf::InputFile<mold::elf::X86_64>**, std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> > >, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1}, mold::elf::InputFile<mold::elf::X86_64>*> const&, tbb::detail::d1::blocked_range<unsigned long>&>(tbb::detail::d2::parallel_for_body_wrapper<__gnu_cxx::__normal_iterator<mold::elf::InputFile<mold::elf::X86_64>**, std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> > >, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1}, mold::elf::InputFile<mold::elf::X86_64>*> const&, tbb::detail::d1::blocked_range<unsigned long>&) (__fn=...) at /usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/functional:120
#19 tbb::detail::d0::invoke<tbb::detail::d2::parallel_for_body_wrapper<__gnu_cxx::__normal_iterator<mold::elf::InputFile<mold::elf::X86_64>**, std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> > >, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1}, mold::elf::InputFile<mold::elf::X86_64>*> const&, tbb::detail::d1::blocked_range<unsigned long>&>(tbb::detail::d2::parallel_for_body_wrapper<__gnu_cxx::__normal_iterator<mold::elf::InputFile<mold::elf::X86_64>**, std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> > >, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1}, mold::elf::InputFile<mold::elf::X86_64>*> const&, tbb::detail::d1::blocked_range<unsigned long>&) (f=...) at /usr/include/oneapi/tbb/detail/_utils.h:356
#20 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::InputFile<mold::elf::X86_64>**, std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> > >, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1}, mold::elf::InputFile<mold::elf::X86_64>*>, tbb::detail::d1::auto_partitioner const>::run_body(tbb::detail::d1::blocked_range<unsigned long>&) (this=<optimized out>, r=...) at /usr/include/oneapi/tbb/parallel_for.h:117
#21 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::InputFile<mold::elf::X86_64>**, std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> > >, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1}, mold::elf::InputFile<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::InputFile<mold::elf::X86_64>**, std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> > >, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1}, mold::elf::InputFile<mold::elf::X86_64>*>, tbb::detail::d1::auto_partitioner const>&, tbb::detail::d1::blocked_range<unsigned long>&, tbb::detail::d1::execution_data&) (this=0x7ffff7723578, 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::InputFile<mold::elf::X86_64>**, std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> > >, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1}, mold::elf::InputFile<mold::elf::X86_64>*>, tbb::detail::d1::auto_partitioner const>'
..., range=..., ed=...) at /usr/include/oneapi/tbb/partitioner.h:450
#22 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::InputFile<mold::elf::X86_64>**, std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> > >, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1}, mold::elf::InputFile<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::InputFile<mold::elf::X86_64>**, std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> > >, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1}, mold::elf::InputFile<mold::elf::X86_64>*>, tbb::detail::d1::auto_partitioner const>&, tbb::detail::d1::blocked_range<unsigned long>&, tbb::detail::d1::execution_data&) (this=0x7ffff7723578, 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::InputFile<mold::elf::X86_64>**, std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> > >, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1}, mold::elf::InputFile<mold::elf::X86_64>*>, tbb::detail::d1::auto_partitioner const>'
..., range=..., ed=...) at /usr/include/oneapi/tbb/partitioner.h:289
#23 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::InputFile<mold::elf::X86_64>**, std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> > >, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1}, mold::elf::InputFile<mold::elf::X86_64>*>, tbb::detail::d1::auto_partitioner const>::execute(tbb::detail::d1::execution_data&) (this=0x7ffff7723500, ed=...) at /usr/include/oneapi/tbb/parallel_for.h:170
#24 0x00007ffff7ddd397 in tbb::detail::r1::task_dispatcher::local_wait_for_all<false, tbb::detail::r1::external_waiter>(tbb::detail::d1::task*, tbb::detail::r1::external_waiter&) [clone .constprop.0] [clone .isra.0] (this=0x7ffff7445400, t=0x7ffff7723500, waiter=...) at /usr/src/debug/dev-cpp/tbb-2021.13.0/oneTBB-2021.13.0/src/tbb/task_dispatcher.h:323
#25 0x00007ffff7dd0405 in tbb::detail::r1::task_dispatcher::local_wait_for_all<tbb::detail::r1::external_waiter> (this=0x7ffff7445400, t=0x7ffff7723500, waiter=...) at /usr/src/debug/dev-cpp/tbb-2021.13.0/oneTBB-2021.13.0/src/tbb/task_dispatcher.h:459
#26 tbb::detail::r1::task_dispatcher::execute_and_wait (t=0x7ffff7723500, wait_ctx=..., w_ctx=...) at /usr/src/debug/dev-cpp/tbb-2021.13.0/oneTBB-2021.13.0/src/tbb/task_dispatcher.cpp:168
#27 0x0000555555e9297a in tbb::detail::d1::execute_and_wait (t=..., t_ctx=..., wait_ctx=..., w_ctx=..., t=..., t_ctx=..., wait_ctx=..., w_ctx=...) at /usr/include/oneapi/tbb/detail/_task.h:191
#28 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::InputFile<mold::elf::X86_64>**, std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> > >, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1}, mold::elf::InputFile<mold::elf::X86_64>*>, tbb::detail::d1::auto_partitioner const>::run(tbb::detail::d1::blocked_range<unsigned long> const&, tbb::detail::d2::parallel_for_body_wrapper<__gnu_cxx::__normal_iterator<mold::elf::InputFile<mold::elf::X86_64>**, std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> > >, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1}, mold::elf::InputFile<mold::elf::X86_64>*> const&, tbb::detail::d1::auto_partitioner const&, tbb::detail::d1::task_group_context&) (range=..., body=..., partitioner=..., context=...) at /usr/include/oneapi/tbb/parallel_for.h:112
#29 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::InputFile<mold::elf::X86_64>**, std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> > >, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1}, mold::elf::InputFile<mold::elf::X86_64>*>, tbb::detail::d1::auto_partitioner const>::run(tbb::detail::d1::blocked_range<unsigned long> const&, tbb::detail::d2::parallel_for_body_wrapper<__gnu_cxx::__normal_iterator<mold::elf::InputFile<mold::elf::X86_64>**, std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> > >, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1}, mold::elf::InputFile<mold::elf::X86_64>*> const&, tbb::detail::d1::auto_partitioner const&, tbb::detail::d1::task_group_context&) (range=..., body=..., partitioner=..., context=...) at /usr/include/oneapi/tbb/parallel_for.h:104
#30 tbb::detail::d1::parallel_for<tbb::detail::d1::blocked_range<unsigned long>, tbb::detail::d2::parallel_for_body_wrapper<__gnu_cxx::__normal_iterator<mold::elf::InputFile<mold::elf::X86_64>**, std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> > >, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1}, mold::elf::InputFile<mold::elf::X86_64>*> >(tbb::detail::d1::blocked_range<unsigned long> const&, tbb::detail::d2::parallel_for_body_wrapper<__gnu_cxx::__normal_iterator<mold::elf::InputFile<mold::elf::X86_64>**, std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> > >, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1}, mold::elf::InputFile<mold::elf::X86_64>*> const&, tbb::detail::d1::task_group_context&) (range=..., body=..., context=...) at /usr/include/oneapi/tbb/parallel_for.h:269
#31 tbb::detail::d2::for_each_root_task<__gnu_cxx::__normal_iterator<mold::elf::InputFile<mold::elf::X86_64>**, std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> > >, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1}, mold::elf::InputFile<mold::elf::X86_64>*, std::random_access_iterator_tag>::execute(tbb::detail::d1::execution_data&) (this=0x7fffffffc200) at /usr/include/oneapi/tbb/parallel_for_each.h:583
#32 0x00007ffff7ddd397 in tbb::detail::r1::task_dispatcher::local_wait_for_all<false, tbb::detail::r1::external_waiter>(tbb::detail::d1::task*, tbb::detail::r1::external_waiter&) [clone .constprop.0] [clone .isra.0] (this=0x7ffff7445400, t=0x7fffffffc200, waiter=...) at /usr/src/debug/dev-cpp/tbb-2021.13.0/oneTBB-2021.13.0/src/tbb/task_dispatcher.h:323
#33 0x00007ffff7dd0405 in tbb::detail::r1::task_dispatcher::local_wait_for_all<tbb::detail::r1::external_waiter> (this=0x7ffff7445400, t=0x7fffffffc200, waiter=...) at /usr/src/debug/dev-cpp/tbb-2021.13.0/oneTBB-2021.13.0/src/tbb/task_dispatcher.h:459
#34 tbb::detail::r1::task_dispatcher::execute_and_wait (t=0x7fffffffc200, wait_ctx=..., w_ctx=...) at /usr/src/debug/dev-cpp/tbb-2021.13.0/oneTBB-2021.13.0/src/tbb/task_dispatcher.cpp:168
#35 0x0000555555e833d1 in tbb::detail::d1::execute_and_wait (t=..., t_ctx=..., wait_ctx=..., w_ctx=..., t=..., t_ctx=..., wait_ctx=..., w_ctx=...) at /usr/include/oneapi/tbb/detail/_task.h:191
#36 tbb::detail::d2::run_parallel_for_each<__gnu_cxx::__normal_iterator<mold::elf::InputFile<mold::elf::X86_64>**, std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> > >, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1}>(__gnu_cxx::__normal_iterator<mold::elf::InputFile<mold::elf::X86_64>**, std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> > >, __gnu_cxx::__normal_iterator<mold::elf::InputFile<mold::elf::X86_64>**, std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> > >, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1} const&, tbb::detail::d1::task_group_context&) (first=..., last=..., body=..., context=...) at /usr/include/oneapi/tbb/parallel_for_each.h:631
#37 tbb::detail::d2::parallel_for_each<__gnu_cxx::__normal_iterator<mold::elf::InputFile<mold::elf::X86_64>**, std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> > >, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1}>(__gnu_cxx::__normal_iterator<mold::elf::InputFile<mold::elf::X86_64>**, std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> > >, __gnu_cxx::__normal_iterator<mold::elf::InputFile<mold::elf::X86_64>**, std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> > >, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1} const&) (first=..., last=..., body=...) at /usr/include/oneapi/tbb/parallel_for_each.h:663
#38 tbb::detail::d2::parallel_for_each<std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> >, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1}>(std::vector<mold::elf::InputFile<mold::elf::X86_64>*, std::allocator<mold::elf::InputFile<mold::elf::X86_64>*> >&, mold::elf::do_resolve_symbols<mold::elf::X86_64>(mold::elf::Context<mold::elf::X86_64>&)::{lambda(mold::elf::InputFile<mold::elf::X86_64>*)#1} const&) (rng=std::vector of length 611, capacity 1216 = {...}, body=...) at /usr/include/oneapi/tbb/parallel_for_each.h:669
#39 mold::elf::do_resolve_symbols<mold::elf::X86_64> (ctx=...) at /usr/src/debug/sys-devel/mold-2.33.0/mold-2.33.0/elf/passes.cc:294
#40 0x0000555555e8bfb2 in mold::elf::resolve_symbols<mold::elf::X86_64> (ctx=...) at /usr/src/debug/sys-devel/mold-2.33.0/mold-2.33.0/elf/passes.cc:353
#41 0x0000555555a9dab7 in mold::elf::elf_main<mold::elf::X86_64> (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/sys-devel/mold-2.33.0/mold-2.33.0/elf/main.cc:423
#42 0x00007ffff7827407 in __libc_start_call_main (main=main@entry=0x555555562f70 <main(int, char**)>, argc=argc@entry=52, argv=argv@entry=0x7fffffffdbd8) at ../sysdeps/nptl/libc_start_call_main.h:58
#43 0x00007ffff78274b7 in __libc_start_main_impl (main=0x555555562f70 <main(int, char**)>, argc=52, argv=0x7fffffffdbd8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffdbc8) at ../csu/libc-start.c:360
#44 0x0000555555567031 in _start ()
$ mold --version
mold 2.33.0 (compatible with GNU ld)
My mold is built with -D_GLIBCXX_ASSERTIONS
.
thesamesam commented
It crashes with just:
$ /usr/sbin/ld.mold /var/tmp/portage/dev-debug/dtrace-9999/work/dtrace-9999/build/test-triggers--usdt-tst-special.o
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_vector.h:1130: constexpr std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::operator[](size_type) [with _Tp = std::unique_ptr<mold::elf::InputSection<mold::elf::X86_64>, std::default_delete<mold::elf::InputSection<mold::elf::X86_64> > >; _Alloc = std::allocator<std::unique_ptr<mold::elf::InputSection<mold::elf::X86_64>, std::default_delete<mold::elf::InputSection<mold::elf::X86_64> > > >; reference = std::unique_ptr<mold::elf::InputSection<mold::elf::X86_64>, std::default_delete<mold::elf::InputSection<mold::elf::X86_64> > >&; size_type = long unsigned int]: Assertion '__n < this->size()' failed.
thesamesam commented
(gdb) frame 8
#8 mold::elf::ObjectFile<mold::elf::X86_64>::resolve_symbols (this=0x20000180100, ctx=...) at /usr/src/debug/sys-devel/mold-2.33.0/mold-2.33.0/elf/input-files.cc:944
944 isec = get_section(esym);
(gdb) p esym
$7 = (const mold::elf::ElfSym<mold::elf::X86_64> &) @0x7ffff7fa3240: {st_name = {buf = "\246\n\000"}, st_type = 0 '\000', st_bind = 1 '\001', st_visibility = 0 '\000', st_shndx = {
buf = "?\377"}, st_value = {buf = "\000\000\000\000\000\000\000"}, st_size = {buf = "\000\000\000\000\000\000\000"}}
(gdb) p sections.size()
$10 = 192
(gdb) call get_shndx(esym)
$12 = 65343
rui314 commented
The above change should fix the crash bug, but I'm not sure if it makes dtrace to work correctly. Can you try again?
thesamesam commented
Thanks! I confirm it fixes the crash.
Linking with mold fails with:
test-triggers--usdt-tst-forker-prov.o:(.SUNW_dof): unknown relocation: R_X86_64_GLOB_DAT
But I'll file a proper bug for that when I'm done with other dtrace stuff. I just figured I'd report the crash early given it was clearly a problem either way.