[llvm-commits] [llvm] r41675 - /llvm/trunk/lib/CodeGen/DwarfWriter.cpp

Anton Korobeynikov asl at math.spbu.ru
Sun Sep 2 15:07:21 PDT 2007


Author: asl
Date: Sun Sep  2 17:07:21 2007
New Revision: 41675

URL: http://llvm.org/viewvc/llvm-project?rev=41675&view=rev
Log:
Emit proper "secrel" directive, where possible. This fixes invalid asm syntax of debug info on mingw32. Also, cleanup 
some stuff.

Modified:
    llvm/trunk/lib/CodeGen/DwarfWriter.cpp

Modified: llvm/trunk/lib/CodeGen/DwarfWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/DwarfWriter.cpp?rev=41675&r1=41674&r2=41675&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/DwarfWriter.cpp (original)
+++ llvm/trunk/lib/CodeGen/DwarfWriter.cpp Sun Sep  2 17:07:21 2007
@@ -823,17 +823,24 @@
   MachineModuleInfo *getMMI() const { return MMI; }
   const TargetAsmInfo *getTargetAsmInfo() const { return TAI; }
 
+  void PrintRelDirective(bool Force32Bit = false, bool isInSection = false)
+                                                                         const {
+    if (isInSection && TAI->getDwarfSectionOffsetDirective())
+      O << TAI->getDwarfSectionOffsetDirective();
+    else if (Force32Bit || TAI->getAddressSize() == sizeof(int32_t))
+      O << TAI->getData32bitsDirective();
+    else
+      O << TAI->getData64bitsDirective();
+  }
+  
   /// PrintLabelName - Print label name in form used by Dwarf writer.
   ///
   void PrintLabelName(DWLabel Label) const {
     PrintLabelName(Label.Tag, Label.Number);
   }
-  void PrintLabelName(const char *Tag, unsigned Number,
-                      bool isInSection = false) const {
-    if (isInSection && TAI->getDwarfSectionOffsetDirective())
-      O << TAI->getDwarfSectionOffsetDirective() << Tag;
-    else
-      O << TAI->getPrivateGlobalPrefix() << Tag;
+  void PrintLabelName(const char *Tag, unsigned Number) const {
+    
+    O << TAI->getPrivateGlobalPrefix() << Tag;
     if (Number) O << Number;
   }
   
@@ -854,21 +861,14 @@
   }
   void EmitReference(const char *Tag, unsigned Number,
                      bool IsPCRelative = false) const {
-    if (TAI->getAddressSize() == sizeof(int32_t))
-      O << TAI->getData32bitsDirective();
-    else
-      O << TAI->getData64bitsDirective();
-      
+    PrintRelDirective();
     PrintLabelName(Tag, Number);
     
     if (IsPCRelative) O << "-" << TAI->getPCSymbol();
   }
   void EmitReference(const std::string &Name, bool IsPCRelative = false) const {
-    if (TAI->getAddressSize() == sizeof(int32_t))
-      O << TAI->getData32bitsDirective();
-    else
-      O << TAI->getData64bitsDirective();
-      
+    PrintRelDirective();
+    
     O << Name;
     
     if (IsPCRelative) O << "-" << TAI->getPCSymbol();
@@ -894,20 +894,14 @@
       O << "-";
       PrintLabelName(TagLo, NumberLo);
       O << "\n";
-      
-      if (IsSmall || TAI->getAddressSize() == sizeof(int32_t))
-        O << TAI->getData32bitsDirective();
-      else
-        O << TAI->getData64bitsDirective();
+
+      PrintRelDirective(IsSmall);
         
       PrintLabelName("set", SetCounter);
       
       ++SetCounter;
     } else {
-      if (IsSmall || TAI->getAddressSize() == sizeof(int32_t))
-        O << TAI->getData32bitsDirective();
-      else
-        O << TAI->getData64bitsDirective();
+      PrintRelDirective(IsSmall);
         
       PrintLabelName(TagHi, NumberHi);
       O << "-";
@@ -923,7 +917,7 @@
       O << "\t.set\t";
       PrintLabelName("set", SetCounter);
       O << ",";
-      PrintLabelName(Label, LabelNumber, true);
+      PrintLabelName(Label, LabelNumber);
 
       if (isEH)
         printAbsolute = TAI->isAbsoluteEHSectionOffsets();
@@ -935,21 +929,15 @@
         PrintLabelName(Section, SectionNumber);
       }      
       O << "\n";
-      
-      if (IsSmall || TAI->getAddressSize() == sizeof(int32_t))
-        O << TAI->getData32bitsDirective();
-      else
-        O << TAI->getData64bitsDirective();
+
+      PrintRelDirective(IsSmall);
         
       PrintLabelName("set", SetCounter);
       ++SetCounter;
     } else {
-      if (IsSmall || TAI->getAddressSize() == sizeof(int32_t))
-        O << TAI->getData32bitsDirective();
-      else
-        O << TAI->getData64bitsDirective();
+      PrintRelDirective(IsSmall, true);
         
-      PrintLabelName(Label, LabelNumber, true);
+      PrintLabelName(Label, LabelNumber);
 
       if (isEH)
         printAbsolute = TAI->isAbsoluteEHSectionOffsets();
@@ -2811,12 +2799,12 @@
         Asm->EmitExternalGlobal((const GlobalVariable *)(Personality));
         O << "-" << TAI->getPCSymbol();
         Asm->EOL("Set Personality");
-        O << TAI->getData32bitsDirective();
+        PrintRelDirective();
         PrintLabelName("set", SetCounter);
         Asm->EOL("Personality");
         ++SetCounter;
       } else {
-        O << TAI->getData32bitsDirective();
+        PrintRelDirective();
         Asm->EmitExternalGlobal((const GlobalVariable *)(Personality));
         O << "-" << TAI->getPCSymbol();
         Asm->EOL("Personality");
@@ -3188,11 +3176,8 @@
     // Emit the type ids.
     for (unsigned M = TypeInfos.size(); M; --M) {
       GlobalVariable *GV = TypeInfos[M - 1];
-      
-      if (TAI->getAddressSize() == sizeof(int32_t))
-        O << TAI->getData32bitsDirective();
-      else
-        O << TAI->getData64bitsDirective();
+
+      PrintRelDirective();
 
       if (GV)
         O << Asm->getGlobalLinkName(GV);





More information about the llvm-commits mailing list