From: Devang Patel Date: Mon, 5 Jan 2009 17:57:47 +0000 (+0000) Subject: Construct basic and derived type DIEs using DebugInfo. X-Git-Tag: android-x86-6.0-r1~1047^2~16517 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=fc187160d216bb1adca9e8f622c7d2ff9301a6f6;p=android-x86%2Fexternal-llvm.git Construct basic and derived type DIEs using DebugInfo. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61714 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/AsmPrinter/DwarfWriter.cpp b/lib/CodeGen/AsmPrinter/DwarfWriter.cpp index 13ea22cb289..30f14b7c9f3 100644 --- a/lib/CodeGen/AsmPrinter/DwarfWriter.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfWriter.cpp @@ -23,6 +23,7 @@ #include "llvm/CodeGen/MachineModuleInfo.h" #include "llvm/CodeGen/MachineFrameInfo.h" #include "llvm/CodeGen/MachineLocation.h" +#include "llvm/Analysis/DebugInfo.h" #include "llvm/Support/Debug.h" #include "llvm/Support/Dwarf.h" #include "llvm/Support/CommandLine.h" @@ -1496,6 +1497,49 @@ private: } } + /// ConstructType - Construct basic type die from DIBasicType. + void ConstructType(CompileUnit *DW_Unit, DIE &Buffer, + DIBasicType *BTy) { + + // Get core information. + const std::string &Name = BTy->getName(); + Buffer.setTag(DW_TAG_base_type); + AddUInt(&Buffer, DW_AT_encoding, DW_FORM_data1, BTy->getEncoding()); + // Add name if not anonymous or intermediate type. + if (!Name.empty()) + AddString(&Buffer, DW_AT_name, DW_FORM_string, Name); + uint64_t Size = BTy->getSizeInBits() >> 3; + AddUInt(&Buffer, DW_AT_byte_size, 0, Size); + } + + void ConstructType(CompileUnit *DW_Unit, DIE &Buffer, + DIDerivedType *DTy) { + + // Get core information. + const std::string &Name = DTy->getName(); + uint64_t Size = DTy->getSizeInBits() >> 3; + unsigned Tag = DTy->getTag(); + // FIXME - Workaround for templates. + if (Tag == DW_TAG_inheritance) Tag = DW_TAG_reference_type; + + Buffer.setTag(Tag); + // Map to main type, void will not have a type. + DIType FromTy = DTy->getTypeDerivedFrom(); + // FIXME - Enable this. AddType(&Buffer, FromTy, DW_Unit); + + // Add name if not anonymous or intermediate type. + if (!Name.empty()) AddString(&Buffer, DW_AT_name, DW_FORM_string, Name); + + // Add size if non-zero (derived types might be zero-sized.) + if (Size) + AddUInt(&Buffer, DW_AT_byte_size, 0, Size); + + // Add source line info if available and TyDesc is not a forward + // declaration. + // FIXME - Enable this. if (!DTy->isForwardDecl()) + // FIXME - Enable this. AddSourceLine(&Buffer, *DTy); + } + /// ConstructType - Adds all the required attributes to the type. /// void ConstructType(DIE &Buffer, TypeDesc *TyDesc, CompileUnit *Unit) {