[llvm-commits] [llvm] r100360 - in /llvm/trunk/lib/CodeGen/AsmPrinter: DwarfDebug.cpp DwarfPrinter.cpp DwarfPrinter.h

Chris Lattner sabre at nondot.org
Sun Apr 4 15:25:14 PDT 2010


Author: lattner
Date: Sun Apr  4 17:25:14 2010
New Revision: 100360

URL: http://llvm.org/viewvc/llvm-project?rev=100360&view=rev
Log:
simplify EmitSectionOffset a little bit, improve comments.

Modified:
    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfPrinter.cpp
    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfPrinter.h

Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=100360&r1=100359&r2=100360&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Sun Apr  4 17:25:14 2010
@@ -2566,8 +2566,7 @@
   Asm->OutStreamer.AddComment("DWARF version number");
   Asm->EmitInt16(dwarf::DWARF_VERSION);
   Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
-  EmitSectionOffset(Asm->GetTempSymbol("abbrev_begin"),
-                    Asm->GetTempSymbol("section_abbrev"));
+  EmitSectionOffset(Asm->GetTempSymbol("abbrev_begin"), "section_abbrev");
   Asm->OutStreamer.AddComment("Address Size (in bytes)");
   Asm->EmitInt8(TD->getPointerSize());
 
@@ -2879,7 +2878,7 @@
 
   Asm->OutStreamer.AddComment("FDE CIE offset");
   EmitSectionOffset(Asm->GetTempSymbol("debug_frame_common"), 
-                    Asm->GetTempSymbol("section_debug_frame"));
+                    "section_debug_frame");
 
   Asm->OutStreamer.AddComment("FDE initial location");
   MCSymbol *FuncBeginSym =
@@ -2918,7 +2917,7 @@
 
   Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
   EmitSectionOffset(Asm->GetTempSymbol("info_begin", ModuleCU->getID()), 
-                    Asm->GetTempSymbol("section_info"));
+                    "section_info");
 
   Asm->OutStreamer.AddComment("Compilation Unit Length");
   Asm->EmitLabelDifference(Asm->GetTempSymbol("info_end", ModuleCU->getID()),
@@ -2962,7 +2961,7 @@
 
   Asm->OutStreamer.AddComment("Offset of Compilation ModuleCU Info");
   EmitSectionOffset(Asm->GetTempSymbol("info_begin", ModuleCU->getID()),
-                    Asm->GetTempSymbol("section_info"));
+                    "section_info");
 
   Asm->OutStreamer.AddComment("Compilation ModuleCU Length");
   Asm->EmitLabelDifference(Asm->GetTempSymbol("info_end", ModuleCU->getID()),
@@ -3108,11 +3107,10 @@
       Asm->OutStreamer.EmitIntValue(0, 1, 0); // nul terminator.
     } else 
       EmitSectionOffset(getStringPoolEntry(getRealLinkageName(LName)),
-                        Asm->GetTempSymbol("section_str"));
+                        "section_str");
 
     Asm->OutStreamer.AddComment("Function name");
-    EmitSectionOffset(getStringPoolEntry(Name),
-                      Asm->GetTempSymbol("section_str"));
+    EmitSectionOffset(getStringPoolEntry(Name), "section_str");
     Asm->EmitULEB128(Labels.size(), "Inline count");
 
     for (SmallVector<InlineInfoLabels, 4>::iterator LI = Labels.begin(),

Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfPrinter.cpp?rev=100360&r1=100359&r2=100360&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfPrinter.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfPrinter.cpp Sun Apr  4 17:25:14 2010
@@ -39,17 +39,23 @@
 
 
 void DwarfPrinter::EmitSectionOffset(const MCSymbol *Label,
-                                     const MCSymbol *Section) {
-  if (!MAI->isAbsoluteDebugSectionOffsets())
-    return Asm->EmitLabelDifference(Label, Section, 4);
-  
-  // On COFF targets, we have to emit the weird .secrel32 directive.
+                                     const char *SectionLabel) {
+  // On COFF targets, we have to emit the special .secrel32 directive.
   if (const char *SecOffDir = MAI->getDwarfSectionOffsetDirective()) {
     // FIXME: MCize.
     Asm->OutStreamer.EmitRawText(SecOffDir + Twine(Label->getName()));
-  } else {
+    return;
+  }
+  
+  // If the section in question will end up with an address of 0 anyway, we can
+  // just emit an absolute reference to save a relocation.
+  if (MAI->isAbsoluteDebugSectionOffsets()) {
     Asm->OutStreamer.EmitSymbolValue(Label, 4, 0/*AddrSpace*/);
+    return;
   }
+
+  MCSymbol *SectionSym = Asm->GetTempSymbol(SectionLabel);
+  Asm->EmitLabelDifference(Label, SectionSym, 4);
 }
 
 /// EmitFrameMoves - Emit frame instructions to describe the layout of the

Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfPrinter.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfPrinter.h?rev=100360&r1=100359&r2=100360&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfPrinter.h (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfPrinter.h Sun Apr  4 17:25:14 2010
@@ -74,9 +74,14 @@
   const MCAsmInfo *getMCAsmInfo() const { return MAI; }
   const TargetData *getTargetData() const { return TD; }
 
-  /// EmitSectionOffset - Emit a 4-byte "Label-Section" value or use a special
-  /// purpose directive to emit a section offset if the target has one.
-  void EmitSectionOffset(const MCSymbol *Label, const MCSymbol *Section);
+  /// 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 the name of a temporary label emitted at the start of the
+  /// section.
+  void EmitSectionOffset(const MCSymbol *Label, const char *SectionLabel);
   
   /// EmitFrameMoves - Emit frame instructions to describe the layout of the
   /// frame.





More information about the llvm-commits mailing list