Make some DWARF complaints clearer
authorTom Tromey <tromey@adacore.com>
Wed, 22 May 2019 13:08:49 +0000 (09:08 -0400)
committerTom Tromey <tromey@adacore.com>
Wed, 29 May 2019 15:57:47 +0000 (09:57 -0600)
I noticed that the complaint in partial_die_parent_scope was not using
dwarf_tag_name, so I changed that.  Then I noticed that dwarf_tag_name
does not show the numeric value for an unrecognized tag, so I changed
that function and all the related functions to do so.

gdb/ChangeLog
2019-05-29  Tom Tromey  <tromey@adacore.com>

* dwarf2read.c (partial_die_parent_scope): Call dwarf_tag_name.
(dwarf_unknown): New function.
(dwarf_tag_name, dwarf_attr_name, dwarf_form_name)
(dwarf_type_encoding_name): Use dwarf_unknown.

gdb/ChangeLog
gdb/dwarf2read.c

index 82655ea247b1df6c0aa0f595759f5d45833d1ac2..37c0069e3f2193ae4f2f715937ec81fb94ef30e9 100644 (file)
@@ -1,3 +1,10 @@
+2019-05-29  Tom Tromey  <tromey@adacore.com>
+
+       * dwarf2read.c (partial_die_parent_scope): Call dwarf_tag_name.
+       (dwarf_unknown): New function.
+       (dwarf_tag_name, dwarf_attr_name, dwarf_form_name)
+       (dwarf_type_encoding_name): Use dwarf_unknown.
+
 2019-05-29  Tom Tromey  <tromey@adacore.com>
 
        PR c++/20020:
index f48b931a3f3d5c012573db886f4a2ee381e6bd57..f47d130fa220123843798f33e0844c53f02107b9 100644 (file)
@@ -8831,8 +8831,9 @@ partial_die_parent_scope (struct partial_die_info *pdi,
       /* FIXME drow/2004-04-01: What should we be doing with
         function-local names?  For partial symbols, we should probably be
         ignoring them.  */
-      complaint (_("unhandled containing DIE tag %d for DIE at %s"),
-                parent->tag, sect_offset_str (pdi->sect_off));
+      complaint (_("unhandled containing DIE tag %s for DIE at %s"),
+                dwarf_tag_name (parent->tag),
+                sect_offset_str (pdi->sect_off));
       parent->scope = grandparent_scope;
     }
 
@@ -22829,6 +22830,18 @@ dwarf2_extension (struct die_info *die, struct dwarf2_cu **ext_cu)
   return follow_die_ref (die, attr, ext_cu);
 }
 
+/* A convenience function that returns an "unknown" DWARF name,
+   including the value of V.  STR is the name of the entity being
+   printed, e.g., "TAG".  */
+
+static const char *
+dwarf_unknown (const char *str, unsigned v)
+{
+  char *cell = get_print_cell ();
+  xsnprintf (cell, PRINT_CELL_SIZE, "DW_%s_<unknown: %u>", str, v);
+  return cell;
+}
+
 /* Convert a DIE tag into its string name.  */
 
 static const char *
@@ -22837,7 +22850,7 @@ dwarf_tag_name (unsigned tag)
   const char *name = get_DW_TAG_name (tag);
 
   if (name == NULL)
-    return "DW_TAG_<unknown>";
+    return dwarf_unknown ("TAG", tag);
 
   return name;
 }
@@ -22860,7 +22873,7 @@ dwarf_attr_name (unsigned attr)
   name = get_DW_AT_name (attr);
 
   if (name == NULL)
-    return "DW_AT_<unknown>";
+    return dwarf_unknown ("AT", attr);
 
   return name;
 }
@@ -22873,7 +22886,7 @@ dwarf_form_name (unsigned form)
   const char *name = get_DW_FORM_name (form);
 
   if (name == NULL)
-    return "DW_FORM_<unknown>";
+    return dwarf_unknown ("FORM", form);
 
   return name;
 }
@@ -22895,7 +22908,7 @@ dwarf_type_encoding_name (unsigned enc)
   const char *name = get_DW_ATE_name (enc);
 
   if (name == NULL)
-    return "DW_ATE_<unknown>";
+    return dwarf_unknown ("ATE", enc);
 
   return name;
 }