public inbox for dwz@sourceware.org
 help / color / mirror / Atom feed
* [committed] Dump more information with --devel-dump-dies
@ 2019-01-01  0:00 Tom de Vries
  0 siblings, 0 replies; only message in thread
From: Tom de Vries @ 2019-01-01  0:00 UTC (permalink / raw)
  To: dwz, jakub

Hi,

For --devel-dump-dies, additionally dump the tag (without the DW_TAG_ prefix
for brevity) as well as the DW_AT_type attribute of a DIE:
...
-  88 O b500801d ccbaf67d
+  88 O b500801d ccbaf67d  pointer_type (type: 8e char base_type)
...

Committed to trunk.

Thanks,
- Tom

Dump more information with --devel-dump-dies

2019-11-30  Tom de Vries  <tdevries@suse.de>

	* dwz.c (dump_type): New function.
	(dump_die_with_indent): Print tag and type.

---
 dwz.c | 37 +++++++++++++++++++++++++++++++++++--
 1 file changed, 35 insertions(+), 2 deletions(-)

diff --git a/dwz.c b/dwz.c
index f7b2cae..d417c94 100644
--- a/dwz.c
+++ b/dwz.c
@@ -4128,15 +4128,48 @@ find_dups_fi (dw_die_ref parent)
   return 0;
 }
 
+/* Dump type of DIE to stderr.  */
+static void
+dump_type (dw_die_ref die)
+{
+  bool present;
+  enum dwarf_form form;
+  unsigned int value = get_AT_int (die, DW_AT_type, &present, &form);
+  if (!present)
+    return;
+
+  dw_cu_ref cu = die_cu (die);
+  if (cu == NULL)
+    return;
+
+  dw_die_ref ref;
+  if (form != DW_FORM_ref_addr)
+    value = cu->cu_offset + value;
+  fprintf (stderr, " (type: %x", value);
+  ref = off_htab_lookup (cu, value);
+  if (ref != NULL)
+    {
+      const char *type_name = get_AT_string (ref, DW_AT_name);
+      if (type_name)
+	fprintf (stderr, " %s", type_name);
+    }
+  fprintf (stderr, " %s", get_DW_TAG_name (ref->die_tag) + 7);
+  dump_type (ref);
+  fprintf (stderr, ")");
+}
+
 /* Dump DIE to stderr with INDENT.  */
 static void
 dump_die_with_indent (int indent, dw_die_ref die)
 {
   const char *name = get_AT_string (die, DW_AT_name);
-  fprintf (stderr, "%*s %x %c %x %x %s\n", indent, "", die->die_offset,
+  fprintf (stderr, "%*s %x %c %x %x %s %s", indent, "", die->die_offset,
 	   die->die_ck_state == CK_KNOWN ? 'O' : 'X',
 	   (unsigned) die->u.p1.die_hash,
-	   (unsigned) die->u.p1.die_ref_hash, name ? name : "");
+	   (unsigned) die->u.p1.die_ref_hash, name ? name : "",
+	   get_DW_TAG_name (die->die_tag) + 7);
+  dump_type (die);
+  fprintf (stderr, "\n");
 }
 
 /* Dump DIE tree at tree depth DEPTH.  */

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2019-12-01  9:08 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-01-01  0:00 [committed] Dump more information with --devel-dump-dies Tom de Vries

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).