I'd guess that this is a bug in DyninstAPI's DWARF parsing.  In 
symtabAPI/src/dwarfWalker.C, function 
DwarfWalker::parseStructUnionClass(), the code calculates a 
structure's size, but then doesn't do anything with the result (I'd 
guess this bug appeared with the DWARF rewrite from a couple years 
ago).  I think the calculated size should be set in the new 
typeStruct/typeUnion objects via setSize().
 Thanks for your help Matt!You're right, the size gets never set and the 
following snippet solves my issue for structs (didn't looked at other 
types).
--- a/symtabAPI/src/dwarfWalker.C
+++ b/symtabAPI/src/dwarfWalker.C
@@ -1091,6 +1091,7 @@ bool DwarfWalker::parseStructUnionClass()
        case DW_TAG_structure_type:
        case DW_TAG_class_type: {
            typeStruct *ts = new typeStruct( type_id(), curName());
+           ts->setSize(size);
            containingType = dynamic_cast<fieldListType 
*>(tc()->addOrUpdateType(ts));
            break;
        }
Best regards,
Fabian
 |