summaryrefslogtreecommitdiffstats
path: root/loc2c.c
diff options
context:
space:
mode:
authorDave Brolley <brolley@redhat.com>2009-08-04 12:35:41 -0400
committerDave Brolley <brolley@redhat.com>2009-08-04 12:35:41 -0400
commitbc9077d171b8250a93a1b5a481e34913e5585dd5 (patch)
tree1fa945c76a66e297e783354ccd7a860aa65d304b /loc2c.c
parent3174c3ca37371d738b86d630dc4d8b15104e57d0 (diff)
parent8b095b454b34e88c04592be6c651153f802eced6 (diff)
downloadsystemtap-steved-bc9077d171b8250a93a1b5a481e34913e5585dd5.tar.gz
systemtap-steved-bc9077d171b8250a93a1b5a481e34913e5585dd5.tar.xz
systemtap-steved-bc9077d171b8250a93a1b5a481e34913e5585dd5.zip
Merge branch 'master' of git://sources.redhat.com/git/systemtap
Conflicts: cache.cxx
Diffstat (limited to 'loc2c.c')
-rw-r--r--loc2c.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/loc2c.c b/loc2c.c
index f5efccfe..26ca3ba1 100644
--- a/loc2c.c
+++ b/loc2c.c
@@ -1749,6 +1749,19 @@ array_stride (Dwarf_Die *typedie, struct location *origin)
dwarf_diename (typedie) ?: "<anonymous>",
dwarf_errmsg (-1));
+ int typetag = dwarf_tag(&die_mem);
+ while (typetag == DW_TAG_typedef ||
+ typetag == DW_TAG_const_type ||
+ typetag == DW_TAG_volatile_type)
+ {
+ if (dwarf_attr_integrate (&die_mem, DW_AT_type, &attr_mem) == NULL
+ || dwarf_formref_die (&attr_mem, &die_mem) == NULL)
+ FAIL (origin, N_("cannot get inner type of type %s: %s"),
+ dwarf_diename (&die_mem) ?: "<anonymous>",
+ dwarf_errmsg (-1));
+ typetag = dwarf_tag(&die_mem);
+ }
+
if (dwarf_attr_integrate (&die_mem, DW_AT_byte_size, &attr_mem) != NULL)
{
Dwarf_Word stride;