[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