From: Simon Marchi Date: Wed, 27 May 2020 15:14:12 +0000 (-0400) Subject: Move line_header_hash to dwarf2_per_objfile X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=39b16f87f720b5cc454eac1e668c2ce2c60bfe15;p=binutils-gdb.git Move line_header_hash to dwarf2_per_objfile 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) : Move to... (struct dwarf2_per_objfile) : ... here. * dwarf2/read.c (handle_DW_AT_stmt_list): Update. Change-Id: I8d2ee04df4f4847c2db99061fc976c35af98ac71 --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a7f989ec718..589c3f4b262 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2020-05-27 Simon Marchi + + * dwarf2/read.h (struct dwarf2_per_bfd) : Move + to... + (struct dwarf2_per_objfile) : ... here. + * dwarf2/read.c (handle_DW_AT_stmt_list): Update. + 2020-05-27 Simon Marchi * dwarf2/read.c (struct mapped_index_base) 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); diff --git a/gdb/dwarf2/read.h b/gdb/dwarf2/read.h index 996cf55af22..b53aab7be63 100644 --- a/gdb/dwarf2/read.h +++ b/gdb/dwarf2/read.h @@ -234,9 +234,6 @@ public: /* The CUs we recently read. */ std::vector 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 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