Move line_header_hash to dwarf2_per_objfile
authorSimon Marchi <simon.marchi@efficios.com>
Wed, 27 May 2020 15:14:12 +0000 (11:14 -0400)
committerSimon Marchi <simon.marchi@efficios.com>
Wed, 27 May 2020 15:19:41 +0000 (11:19 -0400)
The `line_header_hash` field of `struct dwarf2_per_bfd` contains some
`struct line_header` objects.  A `struct line_header` objects contains
some `file_entry` objects.  A `file_entry` object contains a pointer to
the `symtab` object created from it.  The `line_header_hash` is
therefore ultimately objfile-dependent and can't be shared as-is between
objfiles.

Move it from `dwarf2_per_bfd` to `dwarf2_per_objfile`.

gdb/ChangeLog:

* dwarf2/read.h (struct dwarf2_per_bfd) <line_header_hash>: Move
to...
(struct dwarf2_per_objfile) <line_header_hash>: ... here.
* dwarf2/read.c (handle_DW_AT_stmt_list): Update.

Change-Id: I8d2ee04df4f4847c2db99061fc976c35af98ac71

gdb/ChangeLog
gdb/dwarf2/read.c
gdb/dwarf2/read.h

index a7f989ec71818fbcdfec8546ec5dbc2225b7af69..589c3f4b262785a6ba0c50db06f2ff4009a1d76d 100644 (file)
@@ -1,3 +1,10 @@
+2020-05-27  Simon Marchi  <simon.marchi@efficios.com>
+
+       * dwarf2/read.h (struct dwarf2_per_bfd) <line_header_hash>: Move
+       to...
+       (struct dwarf2_per_objfile) <line_header_hash>: ... here.
+       * dwarf2/read.c (handle_DW_AT_stmt_list): Update.
+
 2020-05-27  Simon Marchi  <simon.marchi@efficios.com>
 
        * dwarf2/read.c (struct mapped_index_base) <symbol_name_at,
index df15068269cc1ad71d0c05019d371666e421a5b3..c77c356212309b3bbe920807330690401eee2980 100644 (file)
@@ -10888,10 +10888,10 @@ handle_DW_AT_stmt_list (struct die_info *die, struct dwarf2_cu *cu,
      compile_unit, then use the line header hash table if it's already
      created, but don't create one just yet.  */
 
-  if (dwarf2_per_objfile->per_bfd->line_header_hash == NULL
+  if (dwarf2_per_objfile->line_header_hash == NULL
       && die->tag == DW_TAG_partial_unit)
     {
-      dwarf2_per_objfile->per_bfd->line_header_hash
+      dwarf2_per_objfile->line_header_hash
        .reset (htab_create_alloc (127, line_header_hash_voidp,
                                   line_header_eq_voidp,
                                   free_line_header_voidp,
@@ -10901,9 +10901,9 @@ handle_DW_AT_stmt_list (struct die_info *die, struct dwarf2_cu *cu,
   line_header_local.sect_off = line_offset;
   line_header_local.offset_in_dwz = cu->per_cu->is_dwz;
   line_header_local_hash = line_header_hash (&line_header_local);
-  if (dwarf2_per_objfile->per_bfd->line_header_hash != NULL)
+  if (dwarf2_per_objfile->line_header_hash != NULL)
     {
-      slot = htab_find_slot_with_hash (dwarf2_per_objfile->per_bfd->line_header_hash.get (),
+      slot = htab_find_slot_with_hash (dwarf2_per_objfile->line_header_hash.get (),
                                       &line_header_local,
                                       line_header_local_hash, NO_INSERT);
 
@@ -10927,11 +10927,11 @@ handle_DW_AT_stmt_list (struct die_info *die, struct dwarf2_cu *cu,
   cu->line_header = lh.release ();
   cu->line_header_die_owner = die;
 
-  if (dwarf2_per_objfile->per_bfd->line_header_hash == NULL)
+  if (dwarf2_per_objfile->line_header_hash == NULL)
     slot = NULL;
   else
     {
-      slot = htab_find_slot_with_hash (dwarf2_per_objfile->per_bfd->line_header_hash.get (),
+      slot = htab_find_slot_with_hash (dwarf2_per_objfile->line_header_hash.get (),
                                       &line_header_local,
                                       line_header_local_hash, INSERT);
       gdb_assert (slot != NULL);
index 996cf55af22b2f56f6000f833544bb337beefd5e..b53aab7be6383e1a0c94a54ba55afa0e5f0c235a 100644 (file)
@@ -234,9 +234,6 @@ public:
   /* The CUs we recently read.  */
   std::vector<dwarf2_per_cu_data *> just_read_cus;
 
-  /* Table containing line_header indexed by offset and offset_in_dwz.  */
-  htab_up line_header_hash;
-
   /* Table containing all filenames.  This is an optional because the
      table is lazily constructed on first access.  */
   gdb::optional<filename_seen_cache> filenames_cache;
@@ -368,6 +365,9 @@ struct dwarf2_per_objfile
      The mapping is done via (CU/TU + DIE offset) -> type.  */
   htab_up die_type_hash;
 
+  /* Table containing line_header indexed by offset and offset_in_dwz.  */
+  htab_up line_header_hash;
+
 private:
   /* Hold the corresponding compunit_symtab for each CU or TU.  This
      is indexed by dwarf2_per_cu_data::index.  A NULL value means