aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/AsmPrinter/DwarfWriter.cpp
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2009-01-20 21:02:02 +0000
committerDevang Patel <dpatel@apple.com>2009-01-20 21:02:02 +0000
commit2be5893a0417313813739940b0347755234d2cc3 (patch)
treeee5d5de84a4038bd4a2cf9dd0e078e041214ee88 /lib/CodeGen/AsmPrinter/DwarfWriter.cpp
parentc99031b02ad35fdc6633c06263dd23f019a14ac1 (diff)
Fix struct member's debug info.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@62610 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/AsmPrinter/DwarfWriter.cpp')
-rw-r--r--lib/CodeGen/AsmPrinter/DwarfWriter.cpp31
1 files changed, 24 insertions, 7 deletions
diff --git a/lib/CodeGen/AsmPrinter/DwarfWriter.cpp b/lib/CodeGen/AsmPrinter/DwarfWriter.cpp
index cbe8d7048b..dccd59c872 100644
--- a/lib/CodeGen/AsmPrinter/DwarfWriter.cpp
+++ b/lib/CodeGen/AsmPrinter/DwarfWriter.cpp
@@ -1802,13 +1802,9 @@ private:
else if (Element.getTag() == dwarf::DW_TAG_variable) // ???
ElemDie = CreateGlobalVariableDIE(DW_Unit,
DIGlobalVariable(Element.getGV()));
- else {
- DIDerivedType DT = DIDerivedType(Element.getGV());
- assert (DT.isDerivedType(DT.getTag())
- && "Unexpected struct element type");
- ElemDie = new DIE(DT.getTag());
- AddType(DW_Unit, ElemDie, DT);
- }
+ else
+ ElemDie = CreateMemberDIE(DW_Unit,
+ DIDerivedType(Element.getGV()));
Buffer.AddChild(ElemDie);
}
}
@@ -1903,6 +1899,27 @@ private:
return GVDie;
}
+ /// CreateMemberDIE - Create new member DIE.
+ DIE *CreateMemberDIE(CompileUnit *DW_Unit, const DIDerivedType &DT) {
+ DIE *MemberDie = new DIE(DT.getTag());
+ std::string Name = DT.getName();
+ if (!Name.empty())
+ AddString(MemberDie, DW_AT_name, DW_FORM_string, Name);
+
+ AddType(DW_Unit, MemberDie, DT.getTypeDerivedFrom());
+
+ AddSourceLine(MemberDie, &DT);
+
+ AddUInt(MemberDie, DW_AT_bit_size, 0, DT.getSizeInBits());
+ DIEBlock *Block = new DIEBlock();
+ AddUInt(Block, 0, DW_FORM_data1, DW_OP_plus_uconst);
+ AddUInt(Block, 0, DW_FORM_udata, DT.getOffsetInBits() >> 3);
+ AddBlock(MemberDie, DW_AT_data_member_location, 0, Block);
+
+ // FIXME - Handle DW_AT_accessibility
+ return MemberDie;
+ }
+
/// CreateSubprogramDIE - Create new DIE using SP.
DIE *CreateSubprogramDIE(CompileUnit *DW_Unit,
const DISubprogram &SP,