]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
[gdb/symtab] Initialize sect_off field of partial_symtab
authorTom de Vries <tdevries@suse.de>
Fri, 18 Jun 2021 10:23:01 +0000 (12:23 +0200)
committerTom de Vries <tdevries@suse.de>
Thu, 24 Jun 2021 15:44:35 +0000 (17:44 +0200)
Initialize sect_off field of partial_tab using the sect_offset of the
top-level DIE of the partial_symbol.

gdb/dwarf2/read.c
gdb/psympriv.h
gdb/psymtab.c

index 435e2ff75393ca6b75295d29447fe6a009d60d70..16ca352a7483acf053b0e8937a6ca27dd73605d4 100644 (file)
@@ -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);
     }
 }
 
index 246891d65d2f1edb10efd35ca3fe5a8c17941c3a..adbced84b71fc8676efa6d22e528b5b49dd93b56 100644 (file)
@@ -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.  */
index e395a10a85e94dce93c059334023055153ccb05d..64f092150d5d8514a821c949bab47fd36a7ca35f 100644 (file)
@@ -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.  */