http://sourceware.org/ml/gdb-patches/2014-02/msg00731.html Subject: [patch] gdb_assert -> complaint for weird DWARF --6TrnltStXW4iwmi0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi, PR 16581: GDB crash on inherit_abstract_dies infinite recursion https://sourceware.org/bugzilla/show_bug.cgi?id=16581 fixed crash from an infinite recursion. But in rare cases the new code can now gdb_assert() due to weird DWARF file. I do not yet fully understand why the DWARF is as it is but just GDB should never crash due to invalid DWARF anyway. The "invalid" DWARF I see only in Fedora GCC build, not in FSF GCC build, more info at: https://bugzilla.redhat.com/show_bug.cgi?id=1069382 http://people.redhat.com/jkratoch/gcc-debuginfo-4.8.2-7.fc20.x86_64-gnatbind.debug Thanks, Jan --6TrnltStXW4iwmi0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline; filename="complaint.patch" gdb/ 2014-02-24 Jan Kratochvil * dwarf2read.c (process_die): Change gdb_assert to complaint. Index: gdb-7.99.90.20170420/gdb/dwarf2read.c =================================================================== --- gdb-7.99.90.20170420.orig/gdb/dwarf2read.c 2017-04-20 23:15:26.578897210 +0200 +++ gdb-7.99.90.20170420/gdb/dwarf2read.c 2017-04-20 23:15:57.805106371 +0200 @@ -8426,7 +8426,13 @@ struct cleanup *in_process; /* We should only be processing those not already in process. */ - gdb_assert (!die->in_process); + if (die->in_process) + { + complaint (&symfile_complaints, + _("DIE at 0x%x attempted to be processed twice"), + to_underlying (die->sect_off)); + return; + } die->in_process = 1; in_process = make_cleanup (reset_die_in_process,die);