From f8a01a966120a041fe96300271573a8bf5a3e668 Mon Sep 17 00:00:00 2001 From: Jim Laskey Date: Thu, 15 Jun 2006 20:51:43 +0000 Subject: [PATCH] 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 --- docs/SourceLevelDebugging.html | 7 ++++++- include/llvm/CodeGen/MachineDebugInfo.h | 5 ++++- include/llvm/Support/Dwarf.h | 13 ++++++++++--- lib/CodeGen/DwarfWriter.cpp | 16 ++++++++++++---- lib/CodeGen/MachineDebugInfo.cpp | 2 ++ lib/Support/Dwarf.cpp | 7 +++++++ lib/Target/PowerPC/PPCAsmPrinter.cpp | 22 +++++++++++----------- 7 files changed, 52 insertions(+), 20 deletions(-) diff --git a/docs/SourceLevelDebugging.html b/docs/SourceLevelDebugging.html index 447a659dec0..2538aeaa109 100644 --- a/docs/SourceLevelDebugging.html +++ b/docs/SourceLevelDebugging.html @@ -575,6 +575,7 @@ NULL derived type.

uint, ;; Size in bits uint, ;; Alignment in bits uint, ;; Offset in bits + bool, ;; Is vector flag { }* ;; Reference to array of member descriptors } @@ -590,6 +591,8 @@ are possible tag values;

DW_TAG_union_type = 23 +

The vector flag indicates that an array type is a native packed vector.

+

The members of array types (tag = DW_TAG_array_type) are subrange descriptors, each representing the range of subscripts at that level of indexing.

@@ -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 8a7160caca2..ba135def3f0 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 Elements;// Information used to compose type. public: CompositeTypeDesc(unsigned T); // Accessors + bool isVector() const { return IsVector; } std::vector &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 fb434f64652..49a7d3de990 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 3aadd97f2a1..7805bbcbbf0 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(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 fcdf30d9c96..a3013e9608e 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 1f2eef4dfd8..409eadd5607 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 44ab7f83c2d..6d78a5d0aef 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"; }