[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 1940319c0e "[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.
This commit is contained in:
Tom de Vries 2021-02-05 17:47:07 +01:00
parent e77b0004dd
commit 7c6944ab9b
2 changed files with 10 additions and 5 deletions

View File

@ -1,3 +1,9 @@
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

View File

@ -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;
}
}