diff options
| author | Chris Lattner <sabre@nondot.org> | 2010-03-09 00:17:58 +0000 | 
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2010-03-09 00:17:58 +0000 | 
| commit | ef6b14f51c137e7386d8a2fb568c5a96defc2d36 (patch) | |
| tree | 76d8d4542708920608c7cb6b6bfc184f90059f45 | |
| parent | 8f03d751619b72bffebbcd2161dcdaa4578a31e0 (diff) | |
| download | external_llvm-ef6b14f51c137e7386d8a2fb568c5a96defc2d36.zip external_llvm-ef6b14f51c137e7386d8a2fb568c5a96defc2d36.tar.gz external_llvm-ef6b14f51c137e7386d8a2fb568c5a96defc2d36.tar.bz2 | |
eliminate an argument from PrintRelDirective, sinking
the one special case into EmitSectionOffset.  MCize
the non-special case in EmitSectionOffset.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98014 91177308-0d34-0410-b5e6-96231b3b80d8
| -rw-r--r-- | lib/CodeGen/AsmPrinter/DwarfPrinter.cpp | 24 | ||||
| -rw-r--r-- | lib/CodeGen/AsmPrinter/DwarfPrinter.h | 5 | 
2 files changed, 17 insertions, 12 deletions
| diff --git a/lib/CodeGen/AsmPrinter/DwarfPrinter.cpp b/lib/CodeGen/AsmPrinter/DwarfPrinter.cpp index a40bd54..8dd72c4 100644 --- a/lib/CodeGen/AsmPrinter/DwarfPrinter.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfPrinter.cpp @@ -77,10 +77,8 @@ unsigned DwarfPrinter::SizeOfEncodedValue(unsigned Encoding) const {    return 0;  } -void DwarfPrinter::PrintRelDirective(bool Force32Bit, bool isInSection) const { -  if (isInSection && MAI->getDwarfSectionOffsetDirective()) -    O << MAI->getDwarfSectionOffsetDirective(); -  else if (Force32Bit || TD->getPointerSize() == sizeof(int32_t)) +void DwarfPrinter::PrintRelDirective(bool Force32Bit) const { +  if (Force32Bit || TD->getPointerSize() == sizeof(int32_t))      O << MAI->getData32bitsDirective();    else      O << MAI->getData64bitsDirective(); @@ -253,17 +251,23 @@ void DwarfPrinter::EmitDifference(const MCSymbol *TagHi, const MCSymbol *TagLo,  void DwarfPrinter::EmitSectionOffset(const MCSymbol *Label,                                       const MCSymbol *Section,                                       bool IsSmall, bool isEH) { -  bool printAbsolute = false; +  bool isAbsolute;    if (isEH) -    printAbsolute = MAI->isAbsoluteEHSectionOffsets(); +    isAbsolute = MAI->isAbsoluteEHSectionOffsets();    else -    printAbsolute = MAI->isAbsoluteDebugSectionOffsets(); +    isAbsolute = MAI->isAbsoluteDebugSectionOffsets(); -  if (!printAbsolute) +  if (!isAbsolute)      return EmitDifference(Label, Section, IsSmall); -  PrintRelDirective(IsSmall, true); -  PrintLabelName(Label); +  // On COFF targets, we have to emit the weird .secrel32 directive. +  if (const char *SecOffDir = MAI->getDwarfSectionOffsetDirective()) +    O << SecOffDir << Label->getName(); +  else { +    unsigned Size = IsSmall ? 4 : TD->getPointerSize(); +    Asm->OutStreamer.EmitValue(MCSymbolRefExpr::Create(Label, Asm->OutContext), +                               Size, 0/*AddrSpace*/); +  }  }  /// EmitFrameMoves - Emit frame instructions to describe the layout of the diff --git a/lib/CodeGen/AsmPrinter/DwarfPrinter.h b/lib/CodeGen/AsmPrinter/DwarfPrinter.h index fc9f3fe..cce62aa 100644 --- a/lib/CodeGen/AsmPrinter/DwarfPrinter.h +++ b/lib/CodeGen/AsmPrinter/DwarfPrinter.h @@ -89,8 +89,7 @@ public:    unsigned SizeOfEncodedValue(unsigned Encoding) const;    void PrintRelDirective(unsigned Encoding) const; -  void PrintRelDirective(bool Force32Bit = false, -                         bool isInSection = false) const; +  void PrintRelDirective(bool Force32Bit = false) const;    /// EOL - Print a newline character to asm stream.  If a comment is present    /// then it will be printed first.  Comments should not contain '\n'. @@ -130,6 +129,8 @@ public:    void EmitDifference(const MCSymbol *LabelHi, const MCSymbol *LabelLo,                        bool IsSmall = false); +  /// EmitSectionOffset - Emit Label-Section or use a special purpose directive +  /// to emit a section offset if the target has one.    void EmitSectionOffset(const MCSymbol *Label, const MCSymbol *Section,                           bool IsSmall = false, bool isEH = false); | 
