[llvm-commits] CVS: llvm/include/llvm/CodeGen/AsmPrinter.h DwarfWriter.h

Jim Laskey jlaskey at apple.com
Wed Jan 4 05:52:43 PST 2006



Changes in directory llvm/include/llvm/CodeGen:

AsmPrinter.h updated: 1.23 -> 1.24
DwarfWriter.h updated: 1.3 -> 1.4
---
Log message:

Tie dwarf generation to darwin assembler.


---
Diffs of the changes:  (+180 -3)

 AsmPrinter.h  |   41 ++++++++++++++++
 DwarfWriter.h |  142 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 180 insertions(+), 3 deletions(-)


Index: llvm/include/llvm/CodeGen/AsmPrinter.h
diff -u llvm/include/llvm/CodeGen/AsmPrinter.h:1.23 llvm/include/llvm/CodeGen/AsmPrinter.h:1.24
--- llvm/include/llvm/CodeGen/AsmPrinter.h:1.23	Tue Dec 13 00:31:41 2005
+++ llvm/include/llvm/CodeGen/AsmPrinter.h	Wed Jan  4 07:52:30 2006
@@ -35,7 +35,7 @@
     /// IncrementFunctionNumber().
     ///
     unsigned FunctionNumber;
-    
+
   protected:
     /// Output stream on which we're printing assembly code.
     ///
@@ -165,6 +165,7 @@
 
     AsmPrinter(std::ostream &o, TargetMachine &TM);
     
+  public:
     /// SwitchSection - Switch to the specified section of the executable if we
     /// are not already in it!  If GV is non-null and if the global has an
     /// explicitly requested section, we switch to the section indicated for the
@@ -175,6 +176,7 @@
     ///
     void SwitchSection(const char *NewSection, const GlobalValue *GV);
 
+  protected:
     /// getFunctionNumber - Return a unique ID for the current function.
     ///
     unsigned getFunctionNumber() const { return FunctionNumber; }
@@ -229,6 +231,43 @@
     
   private:
     void EmitXXStructorList(Constant *List);
+    
+  public:
+    /// getCommentString - get the comment string.
+    ///
+    const char *getCommentString() {
+      return CommentString;
+    }
+    
+    /// getData8bitsDirective - get the 8-bit data directive string.
+    ///
+    const char *getData8bitsDirective() {
+      return Data8bitsDirective;
+    }
+    
+    /// getData16bitsDirective - get the 16-bit data directive string.
+    ///
+    const char *getData16bitsDirective() {
+      return Data16bitsDirective;
+    }
+    
+    /// getData32bitsDirective - get the 32-bit data directive string.
+    ///
+    const char *getData32bitsDirective() {
+      return Data32bitsDirective;
+    }
+    
+    /// getData64bitsDirective - get the 64-bit data directive string.
+    ///
+    const char *getData64bitsDirective() {
+      return Data64bitsDirective;
+    }
+    
+    /// getPrivateGlobalPrefix - get private label prefix.
+    ///
+    const char *getPrivateGlobalPrefix() {
+      return PrivateGlobalPrefix;
+    }
   };
 }
 


Index: llvm/include/llvm/CodeGen/DwarfWriter.h
diff -u llvm/include/llvm/CodeGen/DwarfWriter.h:1.3 llvm/include/llvm/CodeGen/DwarfWriter.h:1.4
--- llvm/include/llvm/CodeGen/DwarfWriter.h:1.3	Wed Dec 21 19:40:06 2005
+++ llvm/include/llvm/CodeGen/DwarfWriter.h	Wed Jan  4 07:52:30 2006
@@ -14,11 +14,14 @@
 #ifndef LLVM_CODEGEN_DWARFPRINTER_H
 #define LLVM_CODEGEN_DWARFPRINTER_H
 
+#include <iostream>
+#include "llvm/CodeGen/MachineDebugInfo.h"
+
 namespace llvm {
 
-  //===----------------------------------------------------------------------===//
+  //===--------------------------------------------------------------------===//
   // Dwarf constants as gleaned from the DWARF Debugging Information Format V.3
-  // reference manual http://dwarf.freestandards.org. 
+  // reference manual http://dwarf.freestandards.org .
   //
   enum dwarf_constants {
    // Tags
@@ -422,6 +425,141 @@
     DW_CFA_lo_user = 0x1c,
     DW_CFA_hi_user = 0x3f
   };
+  
+  // Forward declarations.
+  //
+  class AsmPrinter;
+  
+  //===--------------------------------------------------------------------===//
+  // DwarfWriter - emits dwarf debug and exception handling directives.
+  //
+  class DwarfWriter {
+  
+  protected:
+  
+    /// O - Stream to .s file.
+    ///
+    std::ostream &O;
+
+    /// Asm - Target of dwarf emission.
+    ///
+    AsmPrinter *Asm;
+    
+    /// DebugInfo - Collected debug information.
+    ///
+    MachineDebugInfo &DebugInfo;
+    
+    /// hasLEB128 - True if target asm supports leb128 directives.
+    ///
+    bool hasLEB128; /// Defaults to false.
+    
+    /// needsSet - True if target asm can't compute addresses on data
+    /// directives.
+    bool needsSet; /// Defaults to false.
+    
+    /// DwarfAbbrevSection - section directive arg for dwarf abbrev.
+    ///
+    const char *DwarfAbbrevSection; /// Defaults to ".debug_abbrev".
+
+    /// DwarfInfoSection - section directive arg for dwarf info.
+    ///
+    const char *DwarfInfoSection; /// Defaults to ".debug_info".
+
+    /// DwarfLineSection - section directive arg for dwarf info.
+    ///
+    const char *DwarfLineSection; /// Defaults to ".debug_line".
+
+  public:
+    
+    // Ctor.
+    DwarfWriter(std::ostream &o, AsmPrinter *ap, MachineDebugInfo &di)
+    : O(o)
+    , Asm(ap)
+    , DebugInfo(di)
+    , hasLEB128(false)
+    , needsSet(false)
+    , DwarfAbbrevSection(".debug_abbrev")
+    , DwarfInfoSection(".debug_info")
+    , DwarfLineSection(".debug_line")
+    {}
+    
+    /// EmitHex - Emit a hexidecimal string to the output stream.
+    ///
+    void EmitHex(unsigned Value) {
+      O << "0x"
+        << std::hex
+        << Value
+        << std::dec;
+    }
+    
+    /// EmitComment - Emit a simple string comment.
+    ///
+    void EmitComment(const char *Comment) {
+      O << "\t"
+        << Asm->getCommentString()
+        << " "
+        << Comment
+        << "\n";
+    }
+
+    /// EmitULEB128 - Emit a series of hexidecimal values (separated by commas)
+    /// representing an unsigned leb128 value.
+    ///
+    void EmitULEB128(unsigned Value) {
+      do {
+        unsigned Byte = Value & 0x7f;
+        Value >>= 7;
+        if (Value) Byte |= 0x80;
+        EmitHex(Byte);
+        if (Value) O << ", ";
+      } while (Value);
+    }
+
+    /// EmitSLEB128 - Emit a series of hexidecimal values (separated by commas)
+    /// representing a signed leb128 value.
+    ///
+    void EmitSLEB128(int Value) {
+      int Sign = Value >> (8 * sizeof(Value) - 1);
+      bool IsMore;
+      
+      do {
+        unsigned Byte = Value & 0x7f;
+        Value >>= 7;
+        IsMore = Value != Sign || ((Byte ^ Sign) & 0x40) != 0;
+        if (IsMore) Byte |= 0x80;
+        EmitHex(Byte);
+        if (IsMore) O << ", ";
+      } while (IsMore);
+    }
+    
+    /// EmitLabelName - Emit label name for internal use by dwarf.
+    ///
+    void EmitLabelName(const char *Tag, int Num) {
+      O << Asm->getPrivateGlobalPrefix()
+        << "debug_"
+        << Tag
+        << Num;
+    }
+    
+    /// EmitLabel - Emit location label for internal use by dwarf.
+    ///
+    void EmitLabel(const char *Tag, int Num) {
+      EmitLabelName(Tag, Num);
+      O << ":\n";
+    }
+    
+    // Defined elsewhere
+
+    void EmitULEB128Bytes(unsigned Value, std::string Comment);
+    void EmitSLEB128Bytes(int Value, std::string Comment);
+
+    void BeginModule();
+    void EndModule();
+    
+    void BeginFunction();
+    void EndFunction();
+  };
+  
 
 } // end llvm namespace
 






More information about the llvm-commits mailing list