From: Tom de Vries Date: Fri, 18 Jun 2021 10:23:01 +0000 (+0200) Subject: [gdb/symtab] Initialize sect_off field of partial_symtab X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7545a484ad391f59690d747eff32c8beb04c68bd;p=thirdparty%2Fbinutils-gdb.git [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. --- diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index 435e2ff7539..16ca352a748 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 246891d65d2..adbced84b71 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 e395a10a85e..64f092150d5 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. */