[17/22] Change dwarf2_attr_no_follow to be a method

Message ID 20200322184523.28959-18-tom@tromey.com
State New
Headers show
Series
  • More splitting of dwarf2/read.c
Related show

Commit Message

Tom Tromey March 22, 2020, 6:45 p.m.
This changes dwarf2_attr_no_follow to be a method on die_info.

gdb/ChangeLog
2020-03-22  Tom Tromey  <tom@tromey.com>

	* dwarf2/read.c (lookup_addr_base, lookup_ranges_base)
	(build_type_psymtabs_reader, read_structure_type)
	(read_enumeration_type, read_full_die_1): Update.
	(dwarf2_attr_no_follow): Move to die.h.
	* dwarf2/die.h (struct die_info) <attr>: New method.
---
 gdb/ChangeLog     |  8 ++++++++
 gdb/dwarf2/die.h  | 11 +++++++++++
 gdb/dwarf2/read.c | 37 ++++++++-----------------------------
 3 files changed, 27 insertions(+), 29 deletions(-)

-- 
2.17.2

Patch

diff --git a/gdb/dwarf2/die.h b/gdb/dwarf2/die.h
index f8826a276e8..3a265b7df03 100644
--- a/gdb/dwarf2/die.h
+++ b/gdb/dwarf2/die.h
@@ -23,6 +23,17 @@ 
 /* This data structure holds a complete die structure.  */
 struct die_info
 {
+  /* Return the named attribute or NULL if not there, but do not
+     follow DW_AT_specification, etc.  */
+  struct attribute *attr (dwarf_attribute name)
+  {
+    for (unsigned i = 0; i < num_attrs; ++i)
+      if (attrs[i].name == name)
+	return &attrs[i];
+    return NULL;
+  }
+
+
   /* DWARF-2 tag for this DIE.  */
   ENUM_BITFIELD(dwarf_tag) tag : 16;
 
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index 3479cd55a2e..87c4cae9b01 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -1224,9 +1224,6 @@  static void set_cu_language (unsigned int, struct dwarf2_cu *);
 static struct attribute *dwarf2_attr (struct die_info *, unsigned int,
 				      struct dwarf2_cu *);
 
-static struct attribute *dwarf2_attr_no_follow (struct die_info *,
-						unsigned int);
-
 static const char *dwarf2_string_attr (struct die_info *die, unsigned int name,
                                        struct dwarf2_cu *cu);
 
@@ -6397,9 +6394,9 @@  static gdb::optional<ULONGEST>
 lookup_addr_base (struct die_info *comp_unit_die)
 {
   struct attribute *attr;
-  attr = dwarf2_attr_no_follow (comp_unit_die, DW_AT_addr_base);
+  attr = comp_unit_die->attr (DW_AT_addr_base);
   if (attr == nullptr)
-    attr = dwarf2_attr_no_follow (comp_unit_die, DW_AT_GNU_addr_base);
+    attr = comp_unit_die->attr (DW_AT_GNU_addr_base);
   if (attr == nullptr)
     return gdb::optional<ULONGEST> ();
   return DW_UNSND (attr);
@@ -6411,9 +6408,9 @@  static ULONGEST
 lookup_ranges_base (struct die_info *comp_unit_die)
 {
   struct attribute *attr;
-  attr = dwarf2_attr_no_follow (comp_unit_die, DW_AT_rnglists_base);
+  attr = comp_unit_die->attr (DW_AT_rnglists_base);
   if (attr == nullptr)
-    attr = dwarf2_attr_no_follow (comp_unit_die, DW_AT_GNU_ranges_base);
+    attr = comp_unit_die->attr (DW_AT_GNU_ranges_base);
   if (attr == nullptr)
     return 0;
   return DW_UNSND (attr);
@@ -7399,7 +7396,7 @@  build_type_psymtabs_reader (const struct die_reader_specs *reader,
   if (! type_unit_die->has_children)
     return;
 
-  attr = dwarf2_attr_no_follow (type_unit_die, DW_AT_stmt_list);
+  attr = type_unit_die->attr (DW_AT_stmt_list);
   tu_group = get_type_unit_group (cu, attr);
 
   if (tu_group->tus == nullptr)
@@ -14977,7 +14974,7 @@  read_structure_type (struct die_info *die, struct dwarf2_cu *cu)
   /* If the definition of this type lives in .debug_types, read that type.
      Don't follow DW_AT_specification though, that will take us back up
      the chain and we want to go down.  */
-  attr = dwarf2_attr_no_follow (die, DW_AT_signature);
+  attr = die->attr (DW_AT_signature);
   if (attr != nullptr)
     {
       type = get_DW_AT_signature_type (die, attr, cu);
@@ -15513,7 +15510,7 @@  read_enumeration_type (struct die_info *die, struct dwarf2_cu *cu)
   /* If the definition of this type lives in .debug_types, read that type.
      Don't follow DW_AT_specification though, that will take us back up
      the chain and we want to go down.  */
-  attr = dwarf2_attr_no_follow (die, DW_AT_signature);
+  attr = die->attr (DW_AT_signature);
   if (attr != nullptr)
     {
       type = get_DW_AT_signature_type (die, attr, cu);
@@ -17539,7 +17536,7 @@  read_full_die_1 (const struct die_reader_specs *reader,
         indexes_that_need_reprocess.push_back (i);
     }
 
-  struct attribute *attr = dwarf2_attr_no_follow (die, DW_AT_str_offsets_base);
+  struct attribute *attr = die->attr (DW_AT_str_offsets_base);
   if (attr != nullptr)
     cu->str_offsets_base = DW_UNSND (attr);
 
@@ -18984,24 +18981,6 @@  dwarf2_attr (struct die_info *die, unsigned int name, struct dwarf2_cu *cu)
   return NULL;
 }
 
-/* Return the named attribute or NULL if not there,
-   but do not follow DW_AT_specification, etc.
-   This is for use in contexts where we're reading .debug_types dies.
-   Following DW_AT_specification, DW_AT_abstract_origin will take us
-   back up the chain, and we want to go down.  */
-
-static struct attribute *
-dwarf2_attr_no_follow (struct die_info *die, unsigned int name)
-{
-  unsigned int i;
-
-  for (i = 0; i < die->num_attrs; ++i)
-    if (die->attrs[i].name == name)
-      return &die->attrs[i];
-
-  return NULL;
-}
-
 /* Return the string associated with a string-typed attribute, or NULL if it
    is either not found or is of an incorrect type.  */