aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@efficios.com>2025-02-25 15:54:56 -0500
committerSimon Marchi <simon.marchi@polymtl.ca>2025-02-25 22:43:49 -0500
commit2f0521c0d6f6ea6fecef96cf825656263abb570d (patch)
tree9b183e8be4672b4f2bc641112047bd185f445a96
parent2b5a48b6a9dddd6a2f7d189f3fa906adcab51b92 (diff)
downloadbinutils-2f0521c0d6f6ea6fecef96cf825656263abb570d.zip
binutils-2f0521c0d6f6ea6fecef96cf825656263abb570d.tar.gz
binutils-2f0521c0d6f6ea6fecef96cf825656263abb570d.tar.bz2
gdb/dwarf: fix signature_type created with nullptr section
Commit c44ab627b02 ("gdb/dwarf: pass section to dwarf2_per_cu_data constructor") introduced a regression when using dwp. It can be reproduced with: $ make check TESTS="gdb.base/ptype-offsets.exp" RUNTESTFLAGS="--target_board=fission-dwp" Then, to investigate: $ ./gdb -nx -q --data-directory=data-directory testsuite/outputs/gdb.base/ptype-offsets/ptype-offsets -ex 'ptype int' Reading symbols from testsuite/outputs/gdb.base/ptype-offsets/ptype-offsets... /home/smarchi/src/binutils-gdb/gdb/dwarf2/read.c:3195:38: runtime error: member call on null pointer of type 'struct dwarf2_section_info' Commit c44ab627b02 removed the assignment of signatured_type::section (dwarf2_per_cu_data::section, really) in fill_in_sig_entry_from_dwo_entry with the justification that the section was already set when constructing the signatured_type. Well, that was true except for one spot in lookup_dwp_signatured_type which passes a nullptr section to add_type_unit. Fix that by passing the section to add_type_unit in that one spot. This is the same section that would have been set by fill_in_sig_entry_from_dwo_entry before. Add some asserts in the dwarf2_per_cu_data constructor to verity that the passed dwarf2_per_bfd and dwarf2_section_info are non-nullptr. Change-Id: If27dae6b4727957c96defc058c7e4be31472005b Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32739 Co-Authored-By: Tom de Vries <tdevries@suse.de> Approved-By: Tom Tromey <tom@tromey.com>
-rw-r--r--gdb/dwarf2/read.c3
-rw-r--r--gdb/dwarf2/read.h2
2 files changed, 4 insertions, 1 deletions
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index 27f4f09..e044d1e 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -2836,7 +2836,8 @@ lookup_dwp_signatured_type (struct dwarf2_cu *cu, ULONGEST sig)
if (dwo_entry == NULL)
return NULL;
- sig_type_it = add_type_unit (per_bfd, nullptr, dwo_entry->sect_off, sig);
+ sig_type_it
+ = add_type_unit (per_bfd, dwo_entry->section, dwo_entry->sect_off, sig);
fill_in_sig_entry_from_dwo_entry (per_objfile, *sig_type_it, dwo_entry);
return *sig_type_it;
diff --git a/gdb/dwarf2/read.h b/gdb/dwarf2/read.h
index 5965789..e0c0e1f 100644
--- a/gdb/dwarf2/read.h
+++ b/gdb/dwarf2/read.h
@@ -112,6 +112,8 @@ struct dwarf2_per_cu_data
section (section),
per_bfd (per_bfd)
{
+ gdb_assert (per_bfd != nullptr);
+ gdb_assert (section != nullptr);
}
/* The start offset and length of this compilation unit.