remove the didInitial ivar, rename emitInitial to be more
authorChris Lattner <sabre@nondot.org>
Sun, 4 Apr 2010 22:33:59 +0000 (22:33 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 4 Apr 2010 22:33:59 +0000 (22:33 +0000)
descriptive, change EmitSectionOffset back to taking a
symbol instead of a string.

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

lib/CodeGen/AsmPrinter/DwarfDebug.cpp
lib/CodeGen/AsmPrinter/DwarfDebug.h
lib/CodeGen/AsmPrinter/DwarfPrinter.cpp
lib/CodeGen/AsmPrinter/DwarfPrinter.h

index 32a632aa33696a3e46655cf035c3fff5aeedfa28..72bf0ad81a6f03e46ab2c7d1f5dfeee9598ac816 100644 (file)
@@ -301,8 +301,7 @@ DbgScope::~DbgScope() {
 
 DwarfDebug::DwarfDebug(AsmPrinter *A)
   : DwarfPrinter(A), ModuleCU(0),
-    AbbreviationsSet(InitAbbreviationsSetSize), Abbreviations(),
-    DIEBlocks(), SectionSourceLines(), didInitial(false), shouldEmit(false),
+    AbbreviationsSet(InitAbbreviationsSetSize), shouldEmit(false),
     CurrentFnDbgScope(0), DebugTimer(0) {
   NextStringPoolNumber = 0;
   if (TimePassesIsEnabled)
@@ -1835,7 +1834,7 @@ void DwarfDebug::beginModule(Module *M) {
   }
 
   // Emit initial sections
-  emitInitial();
+  EmitSectionLabels();
 }
 
 /// endModule - Emit all Dwarf sections that should come after the content.
@@ -2438,13 +2437,9 @@ void DwarfDebug::computeSizeAndOffsets() {
   CompileUnitOffsets[ModuleCU] = 0;
 }
 
-/// emitInitial - Emit initial Dwarf declarations.  This is necessary for cc
+/// EmitSectionLabels - Emit initial Dwarf declarations.  This is necessary for cc
 /// tools to recognize the object file contains Dwarf information.
-void DwarfDebug::emitInitial() {
-  // Check to see if we already emitted intial headers.
-  if (didInitial) return;
-  didInitial = true;
-
+void DwarfDebug::EmitSectionLabels() {
   const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
 
   // Dwarf sections base addresses.
@@ -2566,7 +2561,8 @@ void DwarfDebug::emitDebugInfo() {
   Asm->OutStreamer.AddComment("DWARF version number");
   Asm->EmitInt16(dwarf::DWARF_VERSION);
   Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
-  EmitSectionOffset(Asm->GetTempSymbol("abbrev_begin"), "section_abbrev");
+  EmitSectionOffset(Asm->GetTempSymbol("abbrev_begin"),
+                    Asm->GetTempSymbol("section_abbrev"));
   Asm->OutStreamer.AddComment("Address Size (in bytes)");
   Asm->EmitInt8(TD->getPointerSize());
 
@@ -2878,7 +2874,7 @@ emitFunctionDebugFrame(const FunctionDebugFrameInfo &DebugFrameInfo) {
 
   Asm->OutStreamer.AddComment("FDE CIE offset");
   EmitSectionOffset(Asm->GetTempSymbol("debug_frame_common"), 
-                    "section_debug_frame");
+                    Asm->GetTempSymbol("section_debug_frame"));
 
   Asm->OutStreamer.AddComment("FDE initial location");
   MCSymbol *FuncBeginSym =
@@ -2917,7 +2913,7 @@ void DwarfDebug::emitDebugPubNames() {
 
   Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
   EmitSectionOffset(Asm->GetTempSymbol("info_begin", ModuleCU->getID()), 
-                    "section_info");
+                    Asm->GetTempSymbol("section_info"));
 
   Asm->OutStreamer.AddComment("Compilation Unit Length");
   Asm->EmitLabelDifference(Asm->GetTempSymbol("info_end", ModuleCU->getID()),
@@ -2961,7 +2957,7 @@ void DwarfDebug::emitDebugPubTypes() {
 
   Asm->OutStreamer.AddComment("Offset of Compilation ModuleCU Info");
   EmitSectionOffset(Asm->GetTempSymbol("info_begin", ModuleCU->getID()),
-                    "section_info");
+                    Asm->GetTempSymbol("section_info"));
 
   Asm->OutStreamer.AddComment("Compilation ModuleCU Length");
   Asm->EmitLabelDifference(Asm->GetTempSymbol("info_end", ModuleCU->getID()),
@@ -3107,10 +3103,11 @@ void DwarfDebug::emitDebugInlineInfo() {
       Asm->OutStreamer.EmitIntValue(0, 1, 0); // nul terminator.
     } else 
       EmitSectionOffset(getStringPoolEntry(getRealLinkageName(LName)),
-                        "section_str");
+                        Asm->GetTempSymbol("section_str"));
 
     Asm->OutStreamer.AddComment("Function name");
-    EmitSectionOffset(getStringPoolEntry(Name), "section_str");
+    EmitSectionOffset(getStringPoolEntry(Name),
+                      Asm->GetTempSymbol("section_str"));
     Asm->EmitULEB128(Labels.size(), "Inline count");
 
     for (SmallVector<InlineInfoLabels, 4>::iterator LI = Labels.begin(),
index 5dabd8e48a36df7feb2f3275a93e1f45094b38c3..2268de528fcd168aaa85e2d3c144ee08bbb5f4f7 100644 (file)
@@ -120,10 +120,6 @@ class DwarfDebug : public DwarfPrinter {
   ///
   std::vector<std::vector<SrcLineInfo> > SectionSourceLines;
 
-  /// didInitial - Flag to indicate if initial emission has been done.
-  ///
-  bool didInitial;
-
   /// shouldEmit - Flag to indicate if debug information should be emitted.
   ///
   bool shouldEmit;
@@ -396,9 +392,9 @@ class DwarfDebug : public DwarfPrinter {
   /// constructScopeDIE - Construct a DIE for this scope.
   DIE *constructScopeDIE(DbgScope *Scope);
 
-  /// emitInitial - Emit initial Dwarf declarations.  This is necessary for cc
-  /// tools to recognize the object file contains Dwarf information.
-  void emitInitial();
+  /// EmitSectionLabels - Emit initial Dwarf sections with a label at
+  /// the start of each one.
+  void EmitSectionLabels();
 
   /// emitDIE - Recusively Emits a debug information entry.
   ///
index 895898594ebd147787cf19029fdd4a6dd4941808..71bdd52762f1b1b765d4e152cecb69753411dd7a 100644 (file)
@@ -35,11 +35,19 @@ using namespace llvm;
 DwarfPrinter::DwarfPrinter(AsmPrinter *A)
 : Asm(A), MAI(A->MAI), TD(Asm->TM.getTargetData()),
   RI(Asm->TM.getRegisterInfo()), M(NULL), MF(NULL), MMI(NULL),
-  SubprogramCount(0) {}
+  SubprogramCount(0) {
+}
 
 
+/// EmitSectionOffset - Emit the 4-byte offset of Label from the start of its
+/// section.  This can be done with a special directive if the target supports
+/// it (e.g. cygwin) or by emitting it as an offset from a label at the start
+/// of the section.
+///
+/// SectionLabel is a temporary label emitted at the start of the section that
+/// Label lives in.
 void DwarfPrinter::EmitSectionOffset(const MCSymbol *Label,
-                                     const char *SectionLabel) {
+                                     const MCSymbol *SectionLabel) const {
   // On COFF targets, we have to emit the special .secrel32 directive.
   if (const char *SecOffDir = MAI->getDwarfSectionOffsetDirective()) {
     // FIXME: MCize.
@@ -54,8 +62,7 @@ void DwarfPrinter::EmitSectionOffset(const MCSymbol *Label,
     return;
   }
 
-  MCSymbol *SectionSym = Asm->GetTempSymbol(SectionLabel);
-  Asm->EmitLabelDifference(Label, SectionSym, 4);
+  Asm->EmitLabelDifference(Label, SectionLabel, 4);
 }
 
 /// EmitFrameMoves - Emit frame instructions to describe the layout of the
index 20bfbf92697a58d9ee1cde13ef925cfb1c122a4d..1c18490a71c877cffcd63ac52ad9bd4c1abf257d 100644 (file)
@@ -79,9 +79,10 @@ public:
   /// it (e.g. cygwin) or by emitting it as an offset from a label at the start
   /// of the section.
   ///
-  /// SectionLabel is the name of a temporary label emitted at the start of the
-  /// section.
-  void EmitSectionOffset(const MCSymbol *Label, const char *SectionLabel);
+  /// SectionLabel is a temporary label emitted at the start of the section that
+  /// Label lives in.
+  void EmitSectionOffset(const MCSymbol *Label,
+                         const MCSymbol *SectionLabel) const;
   
   /// EmitFrameMoves - Emit frame instructions to describe the layout of the
   /// frame.