When running test-case gdb.dwarf2/per-bfd-sharing.exp with make-check-all.sh, I run into: ... TARGET BOARD: stabs ERROR: Could not resync from internal error (eof) ERROR: GDB process no longer exists FAIL: gdb.dwarf2/per-bfd-sharing.exp: first=index: second=readnow: third=index: load third: file index (GDB internal error) FAIL: gdb.dwarf2/per-bfd-sharing.exp: first=index: second=readnow: third=readnow: load third: file readnow (GDB internal error) FAIL: gdb.dwarf2/per-bfd-sharing.exp: first=index: second=readnow: third=standard: load third: file (GDB internal error) # of expected passes 259 # of unexpected core files 6 # of unexpected failures 3 # of unresolved testcases 11 ... In more detail, using c++filt: ... (gdb) file build/gdb/testsuite/outputs/gdb.dwarf2/per-bfd-sharing/per-bfd-sharing Reading symbols from build/gdb/testsuite/outputs/gdb.dwarf2/per-bfd-sharing/per-bfd-sharing... Fatal signal: Segmentation fault ----- Backtrace ----- 0x59cca0 gdb_internal_backtrace_1 gdb/bt-utils.c:122 0x59cd43 gdb_internal_backtrace() gdb/bt-utils.c:168 0x790ce0 handle_fatal_signal gdb/event-top.c:889 0x790e4c handle_sigsegv gdb/event-top.c:962 0x7f91519d890f ??? /usr/src/debug/glibc-2.31-150300.52.2.x86_64/nptl/../sysdeps/unix/sysv/linux/x86_64/sigaction.c:0 0x7f914f9cbdf7 __strlen_avx2 ../sysdeps/x86_64/multiarch/strlen-avx2.S:100 0x14844ac xstrdup libiberty/xstrdup.c:33 0x7efa63 copy_type_recursive(type*, htab*) gdb/gdbtypes.c:5572 0xd1c7c3 value::preserve(objfile*, htab*) gdb/value.c:2388 0xd1ca39 preserve_values(objfile*) gdb/value.c:2448 0x9940e2 objfile::~objfile() gdb/objfiles.c:532 0x997ad5 std::default_delete<objfile>::operator()(objfile*) const /usr/include/c++/7/bits/unique_ptr.h:78 0x9974d2 std::unique_ptr<objfile, std::default_delete<objfile> >::~unique_ptr() /usr/include/c++/7/bits/unique_ptr.h:263 0x9fccc3 void __gnu_cxx::new_allocator<std::_List_node<std::unique_ptr<objfile, std::default_delete<objfile> > > >::destroy<std::unique_ptr<objfile, std::default_delete<objfile> > >(std::unique_ptr<objfile, std::default_delete<objfile> >*) /usr/include/c++/7/ext/new_allocator.h:140 0x9fc682 void std::allocator_traits<std::allocator<std::_List_node<std::unique_ptr<objfile, std::default_delete<objfile> > > > >::destroy<std::unique_ptr<objfile, std::default_delete<objfile> > >(std::allocator<std::_List_node<std::unique_ptr<objfile, std::default_delete<objfile> > > >&, std::unique_ptr<objfile, std::default_delete<objfile> >*) /usr/include/c++/7/bits/alloc_traits.h:487 0x9fc269 std::__cxx11::list<std::unique_ptr<objfile, std::default_delete<objfile> >, std::allocator<std::unique_ptr<objfile, std::default_delete<objfile> > > >::_M_erase(std::_List_iterator<std::unique_ptr<objfile, std::default_delete<objfile> > >) /usr/include/c++/7/bits/stl_list.h:1815 0x9fbabd std::__cxx11::list<std::unique_ptr<objfile, std::default_delete<objfile> >, std::allocator<std::unique_ptr<objfile, std::default_delete<objfile> > > >::erase(std::_List_const_iterator<std::unique_ptr<objfile, std::default_delete<objfile> > >) /usr/include/c++/7/bits/list.tcc:157 0x9fa07d program_space::remove_objfile(objfile*) gdb/progspace.c:175 0x993f9f objfile::unlink() gdb/objfiles.c:470 0xbc8ab7 syms_from_objfile_1 gdb/symfile.c:936 0xbc8c7b syms_from_objfile gdb/symfile.c:983 0xbc9176 symbol_file_add_with_addrs gdb/symfile.c:1086 0xbc9503 symbol_file_add_from_bfd(gdb::ref_ptr<bfd, gdb_bfd_ref_policy> const&, char const*, enum_flags<symfile_add_flag>, std::vector<other_sections, std::allocator<other_sections> >*, enum_flags<objfile_flag>, objfile*) gdb/symfile.c:1167 0xbc9552 symbol_file_add(char const*, enum_flags<symfile_add_flag>, std::vector<other_sections, std::allocator<other_sections> >*, enum_flags<objfile_flag>) gdb/symfile.c:1180 0xbc9617 symbol_file_add_main_1 gdb/symfile.c:1203 0xbcab69 symbol_file_command(char const*, int) gdb/symfile.c:1681 0x793660 file_command gdb/exec.c:554 0x5f5856 do_simple_func gdb/cli/cli-decode.c:95 0x5fa86a cmd_func(cmd_list_element*, char const*, int) gdb/cli/cli-decode.c:2735 0xc3f91f execute_command(char const*, int) gdb/top.c:575 0x790499 command_handler(char const*) gdb/event-top.c:552 0x7909a1 command_line_handler(std::unique_ptr<char, gdb::xfree_deleter<char> >&&) gdb/event-top.c:788 0xc6be4f tui_command_line_handler gdb/tui/tui-interp.c:104 0x78fdef gdb_rl_callback_handler gdb/event-top.c:259 0xd79293 rl_callback_read_char readline/readline/callback.c:290 0x78fc57 gdb_rl_callback_read_char_wrapper_noexcept gdb/event-top.c:195 0x78fcf3 gdb_rl_callback_read_char_wrapper gdb/event-top.c:234 0xc95597 stdin_event_handler gdb/ui.c:155 0x149fe51 handle_file_event gdbsupport/event-loop.cc:573 0x14a03e7 gdb_wait_for_event gdbsupport/event-loop.cc:694 0x149f2ad gdb_do_one_event(int) gdbsupport/event-loop.cc:264 0x8f869e start_event_loop gdb/main.c:412 0x8f87f8 captured_command_loop gdb/main.c:476 0x8f9fe4 captured_main gdb/main.c:1320 0x8fa07e gdb_main(captured_main_args*) gdb/main.c:1339 0x415f52 main gdb/gdb.c:39 --------------------- A fatal error internal to GDB has been detected, further debugging is not possible. GDB will now terminate. This is a bug, please report it. For instructions, see: <https://www.gnu.org/software/gdb/bugs/>. ERROR: GDB process no longer exists GDB process exited with wait status 3221 exp9 0 0 CHILDKILLED SIGSEGV {segmentation violation} ... When running from the command line instead: ... $ gdb -q -batch -x outputs/gdb.dwarf2/per-bfd-sharing/gdb.in.26 ... I get: ... /data/vries/gdb/src/gdb/gdbtypes.c:5596: internal-error: Unexpected type field location kind: 6 A problem internal to GDB has been detected, further debugging may prove unreliable. ----- Backtrace ----- 0x59cca0 gdb_internal_backtrace_1 /data/vries/gdb/src/gdb/bt-utils.c:122 0x59cd43 _Z22gdb_internal_backtracev /data/vries/gdb/src/gdb/bt-utils.c:168 0xce6b30 internal_vproblem /data/vries/gdb/src/gdb/utils.c:396 0xce6eff _Z15internal_verrorPKciS0_P13__va_list_tag /data/vries/gdb/src/gdb/utils.c:476 0x149ee84 _Z18internal_error_locPKciS0_z /data/vries/gdb/src/gdbsupport/errors.cc:58 0x7efc34 _Z19copy_type_recursiveP4typeP4htab /data/vries/gdb/src/gdb/gdbtypes.c:5595 ...
Tentative patch: ... diff --git a/gdb/buildsym.c b/gdb/buildsym.c index 832b689cf03..65ce3a0f5a8 100644 --- a/gdb/buildsym.c +++ b/gdb/buildsym.c @@ -267,7 +267,7 @@ buildsym_compunit::finish_block_internal ftype->set_num_fields (nparams); ftype->set_fields ((struct field *) - TYPE_ALLOC (ftype, nparams * sizeof (struct field))); + TYPE_ZALLOC (ftype, nparams * sizeof (struct field))); iparams = 0; /* Here we want to directly access the dictionary, because ...
https://sourceware.org/pipermail/gdb-patches/2023-August/202048.html
The master branch has been updated by Tom de Vries <vries@sourceware.org>: https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=0b8b932dce26ef8e907b3b3c06b01a99420245fe commit 0b8b932dce26ef8e907b3b3c06b01a99420245fe Author: Tom de Vries <tdevries@suse.de> Date: Thu Aug 31 09:37:44 2023 +0200 [gdb/symtab] Fix uninitialized memory in buildsym_compunit::finish_block_internal When running test-case gdb.dwarf2/per-bfd-sharing.exp with target board stabs, gdb either segfaults or asserts due to reading uninitialized memory, allocated here in buildsym_compunit::finish_block_internal: ... ftype->set_fields ((struct field *) TYPE_ALLOC (ftype, nparams * sizeof (struct field))); ... Fix this by using TYPE_ZALLOC instead. Tested on x86_64-linux. Approved-By: Tom Tromey <tom@tromey.com> PR symtab/30810 Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30810
Fixed.