diff options
author | roland <roland> | 2005-08-27 20:45:57 +0000 |
---|---|---|
committer | roland <roland> | 2005-08-27 20:45:57 +0000 |
commit | 49411102ab6ef673dd2aa8afb0df641f2c908d14 (patch) | |
tree | ef6440b78b522da8ce986e08609cc5449ac12c95 /loc2c-test.c | |
parent | b5fe05bcdeb21d1b13d61ab85d32084311df2d29 (diff) | |
download | systemtap-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.c | 52 |
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; |