summaryrefslogtreecommitdiffstats
path: root/loc2c-test.c
diff options
context:
space:
mode:
authorroland <roland>2005-08-27 20:45:57 +0000
committerroland <roland>2005-08-27 20:45:57 +0000
commit49411102ab6ef673dd2aa8afb0df641f2c908d14 (patch)
treeef6440b78b522da8ce986e08609cc5449ac12c95 /loc2c-test.c
parentb5fe05bcdeb21d1b13d61ab85d32084311df2d29 (diff)
downloadsystemtap-steved-49411102ab6ef673dd2aa8afb0df641f2c908d14.tar.gz
systemtap-steved-49411102ab6ef673dd2aa8afb0df641f2c908d14.tar.xz
systemtap-steved-49411102ab6ef673dd2aa8afb0df641f2c908d14.zip
2005-08-27 Roland McGrath <roland@redhat.com>
* loc2c-test.c (print_type): New function. (print_vars): Use it.
Diffstat (limited to 'loc2c-test.c')
-rw-r--r--loc2c-test.c52
1 files changed, 51 insertions, 1 deletions
diff --git a/loc2c-test.c b/loc2c-test.c
index 908d68b6..6a4c7f9d 100644
--- a/loc2c-test.c
+++ b/loc2c-test.c
@@ -291,6 +291,49 @@ paddr (const char *prefix, Dwarf_Addr addr, Dwfl_Line *line)
}
static void
+print_type (Dwarf_Die *typedie, char space)
+{
+ if (typedie == NULL)
+ printf ("%c<no type>", space);
+ else
+ {
+ const char *name = dwarf_diename (typedie);
+ if (name != NULL)
+ printf ("%c%s", space, name);
+ else
+ {
+ Dwarf_Attribute attr_mem;
+ Dwarf_Die die_mem;
+ Dwarf_Die *die = dwarf_formref_die
+ (dwarf_attr_integrate (typedie, DW_AT_type, &attr_mem), &die_mem);
+ int tag = dwarf_tag (typedie);
+ switch (tag)
+ {
+ case DW_TAG_pointer_type:
+ print_type (die, space);
+ putchar ('*');
+ break;
+ case DW_TAG_array_type:
+ print_type (die, space);
+ printf ("[]");
+ break;
+ case DW_TAG_const_type:
+ print_type (die, space);
+ printf (" const");
+ break;
+ case DW_TAG_volatile_type:
+ print_type (die, space);
+ printf (" volatile");
+ break;
+ default:
+ printf ("%c<unknown %#x>", space, tag);
+ break;
+ }
+ }
+ }
+}
+
+static void
print_vars (unsigned int indent, Dwarf_Die *die)
{
Dwarf_Die child;
@@ -300,9 +343,16 @@ print_vars (unsigned int indent, Dwarf_Die *die)
{
case DW_TAG_variable:
case DW_TAG_formal_parameter:
- printf ("%*s%-30s[%6" PRIx64 "]\n", indent, "",
+ printf ("%*s%-30s[%6" PRIx64 "]", indent, "",
dwarf_diename (&child),
(uint64_t) dwarf_dieoffset (&child));
+ Dwarf_Attribute attr_mem;
+ Dwarf_Die typedie_mem;
+ Dwarf_Die *typedie = dwarf_formref_die
+ (dwarf_attr_integrate (&child, DW_AT_type, &attr_mem),
+ &typedie_mem);
+ print_type (typedie, '\t');
+ puts ("");
break;
default:
break;