From a1cf3cf35678691f6c3cb574b94e7f67be61d18d Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Fri, 5 Feb 2021 20:54:39 +0100 Subject: [PATCH] [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 PR breakpoints/27330 * breakpoint.c (create_exception_master_breakpoint): Handle case that glibc object file has debug info. --- gdb/ChangeLog | 6 ++++++ gdb/breakpoint.c | 9 ++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 08e76c0c867..fde6f9c3830 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2021-02-05 Tom de Vries + + PR breakpoints/27330 + * breakpoint.c (create_exception_master_breakpoint): Handle case that + glibc object file has debug info. + 2021-02-02 Simon Marchi PR gdb/26813 diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 74b4fec72f8..0d9766418bb 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -3474,11 +3474,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; } } -- 2.47.2