aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2021-06-18 12:23:01 +0200
committerTom de Vries <tdevries@suse.de>2021-06-24 17:44:35 +0200
commit7545a484ad391f59690d747eff32c8beb04c68bd (patch)
tree5585de23e907fbf9436918db419750371f2d62b9
parenta3d638484949f751aa8c7a8612faf49b6c761812 (diff)
downloadbinutils-7545a484ad391f59690d747eff32c8beb04c68bd.zip
binutils-7545a484ad391f59690d747eff32c8beb04c68bd.tar.gz
binutils-7545a484ad391f59690d747eff32c8beb04c68bd.tar.bz2
[gdb/symtab] Initialize sect_off field of partial_symtab
Initialize sect_off field of partial_tab using the sect_offset of the top-level DIE of the partial_symbol.
-rw-r--r--gdb/dwarf2/read.c12
-rw-r--r--gdb/psympriv.h2
-rw-r--r--gdb/psymtab.c5
3 files changed, 16 insertions, 3 deletions
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index 435e2ff..16ca352 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -7813,6 +7813,16 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu)
partial_symbol psymbol;
memset (&psymbol, 0, sizeof (psymbol));
psymbol.ginfo.set_language (cu->language, &objfile->objfile_obstack);
+ sect_offset sect_off = sect_offset (0);
+ if (lazy_expand_symtab_p)
+ {
+ struct partial_die_info *top_level = pdi;
+ while (top_level->die_parent != nullptr
+ && top_level->die_parent->tag != DW_TAG_compile_unit
+ && top_level->die_parent->tag != DW_TAG_partial_unit)
+ top_level = top_level->die_parent;
+ sect_off = top_level->sect_off;
+ }
psymbol.ginfo.set_section_index (-1);
/* The code below indicates that the psymbol should be installed by
@@ -7980,7 +7990,7 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu)
}
cu->per_cu->v.psymtab->add_psymbol
(psymbol, *where, per_objfile->per_bfd->partial_symtabs.get (),
- objfile);
+ objfile, sect_off);
}
}
diff --git a/gdb/psympriv.h b/gdb/psympriv.h
index 246891d..adbced8 100644
--- a/gdb/psympriv.h
+++ b/gdb/psympriv.h
@@ -253,7 +253,7 @@ struct partial_symtab
void add_psymbol (const partial_symbol &psym,
psymbol_placement where,
psymtab_storage *partial_symtabs,
- struct objfile *objfile);
+ struct objfile *objfile, sect_offset sect_off = sect_offset (0));
/* Indicate that this partial symtab is complete. */
diff --git a/gdb/psymtab.c b/gdb/psymtab.c
index e395a10..64f0921 100644
--- a/gdb/psymtab.c
+++ b/gdb/psymtab.c
@@ -1335,7 +1335,7 @@ void
partial_symtab::add_psymbol (const partial_symbol &psymbol,
psymbol_placement where,
psymtab_storage *partial_symtabs,
- struct objfile *objfile)
+ struct objfile *objfile, sect_offset sect_off)
{
bool added;
@@ -1355,6 +1355,9 @@ partial_symtab::add_psymbol (const partial_symbol &psymbol,
? static_psymbols
: global_psymbols);
list.push_back (psym);
+
+ if (to_underlying (sect_off) != 0)
+ this->sect_off.emplace (psym, sect_off);
}
/* See psympriv.h. */