diff options
author | Tom de Vries <tdevries@suse.de> | 2021-06-18 12:23:01 +0200 |
---|---|---|
committer | Tom de Vries <tdevries@suse.de> | 2021-06-24 17:44:35 +0200 |
commit | 7545a484ad391f59690d747eff32c8beb04c68bd (patch) | |
tree | 5585de23e907fbf9436918db419750371f2d62b9 | |
parent | a3d638484949f751aa8c7a8612faf49b6c761812 (diff) | |
download | binutils-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.c | 12 | ||||
-rw-r--r-- | gdb/psympriv.h | 2 | ||||
-rw-r--r-- | gdb/psymtab.c | 5 |
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. */ |