[PATCH] [gdb/symtab] Handle failure to open .gnu_debugaltlink file
Tom de Vries
tdevries@suse.de
Sat Nov 19 10:32:16 GMT 2022
If we instrument cc-with-tweaks.sh to remove the .gnu_debugaltlink file after
dwz has created it, with test-case
gdb.threads/access-mem-running-thread-exit.exp and target board cc-with-dwz-m
we run into:
...
(gdb) file access-mem-running-thread-exit^M
Reading symbols from access-mem-running-thread-exit...^M
could not find '.gnu_debugaltlink' file for access-mem-running-thread-exit^M
...
followed a bit later by:
...
(gdb) file access-mem-running-thread-exit^M
Reading symbols from access-mem-running-thread-exit...^M
gdb/dwarf2/read.c:7284: internal-error: create_all_units: \
Assertion `per_objfile->per_bfd->all_units.empty ()' failed.^M
...
The problem is that create_units does not catch the error thrown by
dwarf2_get_dwz_file.
Fix this by catching the error and performing the necessary cleanup, getting
the same result for the first and second file command.
PR symtab/29805
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29805
---
gdb/dwarf2/read.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index 60e120a9d76..53a6a8b5e6d 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -7291,7 +7291,16 @@ create_all_units (dwarf2_per_objfile *per_objfile)
&per_objfile->per_bfd->abbrev, 0,
types_htab, rcuh_kind::TYPE);
- dwz_file *dwz = dwarf2_get_dwz_file (per_objfile->per_bfd);
+ dwz_file *dwz;
+ try
+ {
+ dwz = dwarf2_get_dwz_file (per_objfile->per_bfd);
+ }
+ catch (const gdb_exception_error &)
+ {
+ per_objfile->per_bfd->all_units.clear ();
+ throw;
+ }
if (dwz != NULL)
{
/* Pre-read the sections we'll need to construct an index. */
base-commit: 15253318be0995200cc59929ca32eedbfd041e45
--
2.35.3
More information about the Gdb-patches
mailing list