[2/2] Set is_debug_types in allocate_signatured_type

Message ID 20210530151403.1635684-3-tom@tromey.com
State New
Headers show
Series
  • Two minor DWARF reader tweaks
Related show

Commit Message

Tom Tromey May 30, 2021, 3:14 p.m.
All callers of allocate_signatured_type set the is_debug_types flag on
the result -- in fact, they are required to, because this is the sign
that downcasting the object to signatured_type is safe.  This patch
moves this assignment into the allocation function.

gdb/ChangeLog
2021-05-30  Tom Tromey  <tom@tromey.com>

	* dwarf2/read.c (dwarf2_per_bfd::allocate_signatured_type): Set
	is_debug_types.
	(create_signatured_type_table_from_index)
	(create_signatured_type_table_from_debug_names, add_type_unit)
	(read_comp_units_from_section): Update.
---
 gdb/ChangeLog     | 8 ++++++++
 gdb/dwarf2/read.c | 5 +----
 2 files changed, 9 insertions(+), 4 deletions(-)

-- 
2.26.3

Comments

Philippe Waroquiers via Gdb-patches May 31, 2021, 12:54 a.m. | #1
On 2021-05-30 11:14 a.m., Tom Tromey wrote:
> All callers of allocate_signatured_type set the is_debug_types flag on

> the result -- in fact, they are required to, because this is the sign

> that downcasting the object to signatured_type is safe.  This patch

> moves this assignment into the allocation function.


LGTM.

I'm thinking that allocate_signatured_type and the signatured_type
constructor could accept some parameters for the fields that are
mandatory, such as the signature.

Simon
Tom Tromey May 31, 2021, 1:41 a.m. | #2
Simon> I'm thinking that allocate_signatured_type and the signatured_type
Simon> constructor could accept some parameters for the fields that are
Simon> mandatory, such as the signature.

Yeah, that would be an improvement.

Tom

Patch

diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index 6da31241367..9e5c3afafcc 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -2300,6 +2300,7 @@  dwarf2_per_bfd::allocate_signatured_type ()
   std::unique_ptr<signatured_type> result (new signatured_type);
   result->per_bfd = this;
   result->index = all_comp_units.size ();
+  result->is_debug_types = true;
   tu_stats.nr_tus++;
   return result;
 }
@@ -2398,7 +2399,6 @@  create_signatured_type_table_from_index
       sig_type = per_bfd->allocate_signatured_type ();
       sig_type->signature = signature;
       sig_type->type_offset_in_tu = type_offset_in_tu;
-      sig_type->is_debug_types = 1;
       sig_type->section = section;
       sig_type->sect_off = sect_off;
       sig_type->v.quick
@@ -2450,7 +2450,6 @@  create_signatured_type_table_from_debug_names
       sig_type = per_objfile->per_bfd->allocate_signatured_type ();
       sig_type->signature = cu_header.signature;
       sig_type->type_offset_in_tu = cu_header.type_cu_offset_in_tu;
-      sig_type->is_debug_types = 1;
       sig_type->section = section;
       sig_type->sect_off = sect_off;
       sig_type->v.quick
@@ -5896,7 +5895,6 @@  add_type_unit (dwarf2_per_objfile *per_objfile, ULONGEST sig, void **slot)
   per_objfile->per_bfd->all_comp_units.emplace_back
     (sig_type_holder.release ());
   sig_type->signature = sig;
-  sig_type->is_debug_types = 1;
   if (per_objfile->per_bfd->using_index)
     {
       sig_type->v.quick =
@@ -7500,7 +7498,6 @@  read_comp_units_from_section (dwarf2_per_objfile *per_objfile,
 		       hex_string (sig_ptr->signature));
 	  *slot = sig_ptr;
 	}
-      this_cu->is_debug_types = (cu_header.unit_type == DW_UT_type);
       this_cu->sect_off = sect_off;
       this_cu->length = cu_header.length + cu_header.initial_length_size;
       this_cu->is_dwz = is_dwz;