aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2021-02-05 17:47:07 +0100
committerTom de Vries <tdevries@suse.de>2021-02-05 17:47:07 +0100
commit7c6944ab9bc4fd6e641c59f7c78ca4e1ec78fe7e (patch)
tree763a574f3d9807001063d180b6282de956f1900e
parente77b0004dd114d6ddf3bb92b521b2854341f3f85 (diff)
downloadgdb-7c6944ab9bc4fd6e641c59f7c78ca4e1ec78fe7e.zip
gdb-7c6944ab9bc4fd6e641c59f7c78ca4e1ec78fe7e.tar.gz
gdb-7c6944ab9bc4fd6e641c59f7c78ca4e1ec78fe7e.tar.bz2
[gdb/breakpoints] Handle glibc with debuginfo in create_exception_master_breakpoint
The test-case nextoverthrow.exp is failing on targets with unstripped libc. This is a regression since commit 1940319c0ef "[gdb] Fix internal-error in process_event_stop_test". The problem is that this code in create_exception_master_breakpoint: ... for (objfile *sepdebug = obj->separate_debug_objfile; sepdebug != nullptr; sepdebug = sepdebug->separate_debug_objfile) if (create_exception_master_breakpoint_hook (sepdebug)) ... iterates over all the separate debug object files, but fails to handle the case that obj itself has the debug info we're looking for. Fix this by using the separate_debug_objfiles () range instead, which does iterate both over obj and the obj->separate_debug_objfile chain. Tested on x86_64-linux. gdb/ChangeLog: 2021-02-05 Tom de Vries <tdevries@suse.de> PR breakpoints/27330 * breakpoint.c (create_exception_master_breakpoint): Handle case that glibc object file has debug info.
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/breakpoint.c9
2 files changed, 10 insertions, 5 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 8c2953a..1f5840e 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,11 @@
2021-02-05 Tom de Vries <tdevries@suse.de>
+ PR breakpoints/27330
+ * breakpoint.c (create_exception_master_breakpoint): Handle case that
+ glibc object file has debug info.
+
+2021-02-05 Tom de Vries <tdevries@suse.de>
+
PR symtab/27333
* dwarf2/read.c (process_psymtab_comp_unit): Handle DW_TAG_type_unit.
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index f318a12..c20c0d7 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -3625,11 +3625,10 @@ create_exception_master_breakpoint (void)
if (create_exception_master_breakpoint_probe (obj))
continue;
- /* Iterate over separate debug objects and try an _Unwind_DebugHook
- kind breakpoint. */
- for (objfile *sepdebug = obj->separate_debug_objfile;
- sepdebug != nullptr; sepdebug = sepdebug->separate_debug_objfile)
- if (create_exception_master_breakpoint_hook (sepdebug))
+ /* Iterate over main and separate debug objects and try an
+ _Unwind_DebugHook kind breakpoint. */
+ for (objfile *debug_objfile : obj->separate_debug_objfiles ())
+ if (create_exception_master_breakpoint_hook (debug_objfile))
break;
}
}