1. Support standard dwarf format (was bootstrapping in Apple format.)
authorJim Laskey <jlaskey@mac.com>
Thu, 15 Jun 2006 20:51:43 +0000 (20:51 +0000)
committerJim Laskey <jlaskey@mac.com>
Thu, 15 Jun 2006 20:51:43 +0000 (20:51 +0000)
2. Add vector support.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28807 91177308-0d34-0410-b5e6-96231b3b80d8

docs/SourceLevelDebugging.html
include/llvm/CodeGen/MachineDebugInfo.h
include/llvm/Support/Dwarf.h
lib/CodeGen/DwarfWriter.cpp
lib/CodeGen/MachineDebugInfo.cpp
lib/Support/Dwarf.cpp
lib/Target/PowerPC/PPCAsmPrinter.cpp

index 447a659dec03cc362b4562b664f7c5681d2c68bb..2538aeaa109c996b29783ab5aed86939ebbd2752 100644 (file)
@@ -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"
 
index 8a7160caca245b004254f430bb353351a2a7b083..ba135def3f03012b743527c2b0f98a45b9f6a623 100644 (file)
@@ -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; }
index fb434f64652207c74621701f849212687d6709f6..49a7d3de990f1affceec88bbdb250895036de525 100644 (file)
@@ -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,
 
index 3aadd97f2a13494e8174816ce72619807c20d1de..7805bbcbbf02122026d1eff64455f33513fa8b96 100644 (file)
@@ -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);
index fcdf30d9c9652d26048aa4aa16aee9ff362a0e18..a3013e9608ec7ad446290e52cbcb9ec1e02ac78c 100644 (file)
@@ -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);
 }
 
index 1f2eef4dfd8b7f73e49fe1c4159380469b3b38f6..409eadd560744516328a86220f2d650860082f2b 100644 (file)
@@ -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";
   }
index 44ab7f83c2dbdbd89a92307bddc25ea9262698a0..6d78a5d0aefcc09da0676b455db1099d5e9f1f41 100644 (file)
@@ -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";
     }