Set per_bfd->partial_symtabs earlier
authorTom Tromey <tom@tromey.com>
Sat, 20 Mar 2021 23:23:40 +0000 (17:23 -0600)
committerTom Tromey <tom@tromey.com>
Sat, 20 Mar 2021 23:23:43 +0000 (17:23 -0600)
dwarf2_build_psymtabs sets per_bfd->partial_symtabs at its end, in
order to facilitate sharing.

However, in order to diassociate partial symtabs from the objfile, we
want to change the DWARF reader to reference partial symtabs via the
per_bfd.  So, we want to set this reference before reading psymtabs.
This is safe to do because the assignment is done unconditionally.

gdb/ChangeLog
2021-03-20  Tom Tromey  <tom@tromey.com>

* dwarf2/read.c (dwarf2_build_psymtabs): Set partial_symtabs
earlier.

gdb/ChangeLog
gdb/dwarf2/read.c

index 7bb862e43f002793b7e8c9f2ebb78b63db61bd1d..61232703b6f11edb4b816164ab9757564a393673 100644 (file)
@@ -1,3 +1,8 @@
+2021-03-20  Tom Tromey  <tom@tromey.com>
+
+       * dwarf2/read.c (dwarf2_build_psymtabs): Set partial_symtabs
+       earlier.
+
 2021-03-20  Tom Tromey  <tom@tromey.com>
 
        * psympriv.h (psymtab_discarder): Take psymtab_storage parameter.
index aad25f7c086306b5a2902ed42d41f87c3602d986..9de9e48c7bbd011936c24a63514735c1cd64800c 100644 (file)
@@ -6137,6 +6137,12 @@ dwarf2_build_psymtabs (struct objfile *objfile)
       return;
     }
 
+  /* Set the local reference to partial symtabs, so that we don't try
+     to read them again if reading another objfile with the same BFD.
+     If we can't in fact share, this won't make a difference anyway as
+     the dwarf2_per_bfd object won't be shared.  */
+  per_bfd->partial_symtabs = objfile->partial_symtabs;
+
   try
     {
       /* This isn't really ideal: all the data we allocate on the
@@ -6155,12 +6161,6 @@ dwarf2_build_psymtabs (struct objfile *objfile)
     {
       exception_print (gdb_stderr, except);
     }
-
-  /* Finish by setting the local reference to partial symtabs, so that
-     we don't try to read them again if reading another objfile with the same
-     BFD.  If we can't in fact share, this won't make a difference anyway as
-     the dwarf2_per_bfd object won't be shared.  */
-  per_bfd->partial_symtabs = objfile->partial_symtabs;
 }
 
 /* Find the base address of the compilation unit for range lists and