diff options
author | Jim Laskey <jlaskey@mac.com> | 2006-06-15 20:51:43 +0000 |
---|---|---|
committer | Jim Laskey <jlaskey@mac.com> | 2006-06-15 20:51:43 +0000 |
commit | f8a01a966120a041fe96300271573a8bf5a3e668 (patch) | |
tree | b9470b8d3bd8be4edbffa9928f0b2016e87487e5 | |
parent | d5a932b92af122209bfb53fc3198698a4af18371 (diff) | |
download | external_llvm-f8a01a966120a041fe96300271573a8bf5a3e668.zip external_llvm-f8a01a966120a041fe96300271573a8bf5a3e668.tar.gz external_llvm-f8a01a966120a041fe96300271573a8bf5a3e668.tar.bz2 |
1. Support standard dwarf format (was bootstrapping in Apple format.)
2. Add vector support.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28807 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | docs/SourceLevelDebugging.html | 7 | ||||
-rw-r--r-- | include/llvm/CodeGen/MachineDebugInfo.h | 5 | ||||
-rw-r--r-- | include/llvm/Support/Dwarf.h | 13 | ||||
-rw-r--r-- | lib/CodeGen/DwarfWriter.cpp | 16 | ||||
-rw-r--r-- | lib/CodeGen/MachineDebugInfo.cpp | 2 | ||||
-rw-r--r-- | lib/Support/Dwarf.cpp | 7 | ||||
-rw-r--r-- | lib/Target/PowerPC/PPCAsmPrinter.cpp | 22 |
7 files changed, 52 insertions, 20 deletions
diff --git a/docs/SourceLevelDebugging.html b/docs/SourceLevelDebugging.html index 447a659..2538aea 100644 --- a/docs/SourceLevelDebugging.html +++ b/docs/SourceLevelDebugging.html @@ -575,6 +575,7 @@ NULL derived type.</p> uint, ;; Size in bits uint, ;; Alignment in bits uint, ;; Offset in bits + bool, ;; Is vector flag { }* ;; Reference to array of member descriptors } </pre> @@ -590,6 +591,8 @@ are possible tag values;</p> DW_TAG_union_type = 23 </pre> +<p>The vector flag indicates that an array type is a native packed vector.</p> + <p>The members of array types (tag = <tt>DW_TAG_array_type</tt>) are <a href="#format_subrange">subrange descriptors</a>, each representing the range of subscripts at that level of indexing.</p> @@ -1600,7 +1603,8 @@ struct Color { uint 96, uint 32, uint 0, - { }* null, + { }* null, + bool false, { }* cast ([3 x { }*]* %llvm.dbg.array to { }*) }, section "llvm.metadata" %str2 = internal constant [6 x sbyte] c"Color\00", section "llvm.metadata" @@ -1693,6 +1697,7 @@ enum Trees { uint 32, uint 0, { }* null, + bool false, { }* cast ([3 x { }*]* %llvm.dbg.array to { }*) }, section "llvm.metadata" %str1 = internal constant [6 x sbyte] c"Trees\00", section "llvm.metadata" diff --git a/include/llvm/CodeGen/MachineDebugInfo.h b/include/llvm/CodeGen/MachineDebugInfo.h index 8a7160c..ba135de 100644 --- a/include/llvm/CodeGen/MachineDebugInfo.h +++ b/include/llvm/CodeGen/MachineDebugInfo.h @@ -57,7 +57,7 @@ class StructType; // Debug info constants. enum { - LLVMDebugVersion = 3 // Current version of debug information. + LLVMDebugVersion = 4 // Current version of debug information. }; //===----------------------------------------------------------------------===// @@ -400,13 +400,16 @@ public: /// array/struct types (eg., arrays, struct, union, enums.) class CompositeTypeDesc : public DerivedTypeDesc { private: + bool IsVector; // packed/vector array std::vector<DebugInfoDesc *> Elements;// Information used to compose type. public: CompositeTypeDesc(unsigned T); // Accessors + bool isVector() const { return IsVector; } std::vector<DebugInfoDesc *> &getElements() { return Elements; } + void setIsVector() { IsVector = true; } // Implement isa/cast/dyncast. static bool classof(const CompositeTypeDesc *) { return true; } diff --git a/include/llvm/Support/Dwarf.h b/include/llvm/Support/Dwarf.h index fb434f6..49a7d3d 100644 --- a/include/llvm/Support/Dwarf.h +++ b/include/llvm/Support/Dwarf.h @@ -37,10 +37,10 @@ enum llvm_dwarf_constants { DW_TAG_arg_variable = 0x101, // Tag for argument variables. DW_TAG_return_variable = 0x102, // Tag for return variables. - DW_TAG_user_base = 0x1000, // Recommended base for user tags. + DW_TAG_user_base = 0x1000, // Recommended base for user tags. - DW_CIE_VERSION = 1, // Common frame information version. - DW_CIE_ID = 0xffffffff // Common frame information mark. + DW_CIE_VERSION = 1, // Common frame information version. + DW_CIE_ID = 0xffffffff // Common frame information mark. }; enum dwarf_constants { @@ -198,6 +198,13 @@ enum dwarf_constants { DW_AT_elemental = 0x66, DW_AT_pure = 0x67, DW_AT_recursive = 0x68, + DW_AT_sf_names = 0x2101, + DW_AT_src_info = 0x2102, + DW_AT_mac_info = 0x2103, + DW_AT_src_coords = 0x2104, + DW_AT_body_begin = 0x2105, + DW_AT_body_end = 0x2106, + DW_AT_GNU_vector = 0x2107, DW_AT_lo_user = 0x2000, DW_AT_hi_user = 0x3fff, diff --git a/lib/CodeGen/DwarfWriter.cpp b/lib/CodeGen/DwarfWriter.cpp index 3aadd97..7805bbc 100644 --- a/lib/CodeGen/DwarfWriter.cpp +++ b/lib/CodeGen/DwarfWriter.cpp @@ -1265,7 +1265,7 @@ DIE *DwarfWriter::NewType(DIE *Context, TypeDesc *TyDesc, CompileUnit *Unit) { // Fundamental types like int, float, bool Slot = Ty = new DIE(DW_TAG_base_type); unsigned Encoding = BasicTy->getEncoding(); - Ty->AddUInt (DW_AT_encoding, DW_FORM_data1, Encoding); + Ty->AddUInt(DW_AT_encoding, DW_FORM_data1, Encoding); } else if (DerivedTypeDesc *DerivedTy = dyn_cast<DerivedTypeDesc>(TyDesc)) { // Create specific DIE. Slot = Ty = new DIE(DerivedTy->getTag()); @@ -1287,6 +1287,12 @@ DIE *DwarfWriter::NewType(DIE *Context, TypeDesc *TyDesc, CompileUnit *Unit) { Ty->AddDIEntry(DW_AT_type, DW_FORM_ref4, NewType(Context, FromTy, Unit)); } + + // check for vector type + if (CompTy->isVector()) { + Ty->AddUInt(DW_AT_GNU_vector, DW_FORM_flag, 1); + } + // Don't emit size attribute. Size = 0; @@ -1419,7 +1425,8 @@ CompileUnit *DwarfWriter::NewCompileUnit(CompileUnitDesc *UnitDesc, unsigned ID) { // Construct debug information entry. DIE *Die = new DIE(DW_TAG_compile_unit); - Die->AddLabel (DW_AT_stmt_list, DW_FORM_data4, DWLabel("line", 0)); + Die->AddDelta (DW_AT_stmt_list, DW_FORM_data4, DWLabel("line", 0), + DWLabel("section_line", 0)); Die->AddLabel (DW_AT_high_pc, DW_FORM_addr, DWLabel("text_end", 0)); Die->AddLabel (DW_AT_low_pc, DW_FORM_addr, DWLabel("text_begin", 0)); Die->AddString(DW_AT_producer, DW_FORM_string, UnitDesc->getProducer()); @@ -1842,7 +1849,7 @@ void DwarfWriter::EmitFrameMoves(const char *BaseLabel, unsigned BaseLabelID, int stackGrowth = Asm->TM.getFrameInfo()->getStackGrowthDirection() == TargetFrameInfo::StackGrowsUp ? - AddressSize : -AddressSize; + AddressSize : -AddressSize; EmitULEB128Bytes(Src.getOffset() / stackGrowth); EOL("Offset"); @@ -1875,7 +1882,8 @@ void DwarfWriter::EmitDebugInfo() const { EmitInt32(ContentSize); EOL("Length of Compilation Unit Info"); EmitInt16(DWARF_VERSION); EOL("DWARF version number"); - EmitReference("abbrev_begin", 0); EOL("Offset Into Abbrev. Section"); + EmitDifference("abbrev_begin", 0, "section_abbrev", 0); + EOL("Offset Into Abbrev. Section"); EmitInt8(AddressSize); EOL("Address Size (in bytes)"); EmitDIE(Die); diff --git a/lib/CodeGen/MachineDebugInfo.cpp b/lib/CodeGen/MachineDebugInfo.cpp index fcdf30d..a3013e9 100644 --- a/lib/CodeGen/MachineDebugInfo.cpp +++ b/lib/CodeGen/MachineDebugInfo.cpp @@ -817,6 +817,7 @@ void DerivedTypeDesc::dump() { CompositeTypeDesc::CompositeTypeDesc(unsigned T) : DerivedTypeDesc(T) +, IsVector(false) , Elements() {} @@ -839,6 +840,7 @@ bool CompositeTypeDesc::classof(const DebugInfoDesc *D) { void CompositeTypeDesc::ApplyToFields(DIVisitor *Visitor) { DerivedTypeDesc::ApplyToFields(Visitor); + Visitor->Apply(IsVector); Visitor->Apply(Elements); } diff --git a/lib/Support/Dwarf.cpp b/lib/Support/Dwarf.cpp index 1f2eef4..409eadd 100644 --- a/lib/Support/Dwarf.cpp +++ b/lib/Support/Dwarf.cpp @@ -188,6 +188,13 @@ const char *AttributeString(unsigned Attribute) { case DW_AT_elemental: return "AT_elemental"; case DW_AT_pure: return "AT_pure"; case DW_AT_recursive: return "AT_recursive"; + case DW_AT_sf_names: return "AT_sf_names"; + case DW_AT_src_info: return "AT_src_info"; + case DW_AT_mac_info: return "AT_mac_info"; + case DW_AT_src_coords: return "AT_src_coords"; + case DW_AT_body_begin: return "AT_body_begin"; + case DW_AT_body_end: return "AT_body_end"; + case DW_AT_GNU_vector: return "AT_GNU_vector"; case DW_AT_lo_user: return "AT_lo_user"; case DW_AT_hi_user: return "AT_hi_user"; } diff --git a/lib/Target/PowerPC/PPCAsmPrinter.cpp b/lib/Target/PowerPC/PPCAsmPrinter.cpp index 44ab7f8..6d78a5d 100644 --- a/lib/Target/PowerPC/PPCAsmPrinter.cpp +++ b/lib/Target/PowerPC/PPCAsmPrinter.cpp @@ -246,17 +246,17 @@ namespace { : DwarfWriter(o, ap) { needsSet = true; - DwarfAbbrevSection = ".section __DWARFA,__debug_abbrev"; - DwarfInfoSection = ".section __DWARFA,__debug_info"; - DwarfLineSection = ".section __DWARFA,__debug_line"; - DwarfFrameSection = ".section __DWARFA,__debug_frame"; - DwarfPubNamesSection = ".section __DWARFA,__debug_pubnames"; - DwarfPubTypesSection = ".section __DWARFA,__debug_pubtypes"; - DwarfStrSection = ".section __DWARFA,__debug_str"; - DwarfLocSection = ".section __DWARFA,__debug_loc"; - DwarfARangesSection = ".section __DWARFA,__debug_aranges"; - DwarfRangesSection = ".section __DWARFA,__debug_ranges"; - DwarfMacInfoSection = ".section __DWARFA,__debug_macinfo"; + DwarfAbbrevSection = ".section __DWARF,__debug_abbrev"; + DwarfInfoSection = ".section __DWARF,__debug_info"; + DwarfLineSection = ".section __DWARF,__debug_line"; + DwarfFrameSection = ".section __DWARF,__debug_frame"; + DwarfPubNamesSection = ".section __DWARF,__debug_pubnames"; + DwarfPubTypesSection = ".section __DWARF,__debug_pubtypes"; + DwarfStrSection = ".section __DWARF,__debug_str"; + DwarfLocSection = ".section __DWARF,__debug_loc"; + DwarfARangesSection = ".section __DWARF,__debug_aranges"; + DwarfRangesSection = ".section __DWARF,__debug_ranges"; + DwarfMacInfoSection = ".section __DWARF,__debug_macinfo"; TextSection = ".text"; DataSection = ".data"; } |