diff options
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/include/llvm/Target/TargetAsmInfo.h | 7 | ||||
| -rw-r--r-- | llvm/include/llvm/Target/TargetLoweringObjectFile.h | 8 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfException.cpp | 9 | ||||
| -rw-r--r-- | llvm/lib/Target/PowerPC/PPCTargetAsmInfo.cpp | 2 | ||||
| -rw-r--r-- | llvm/lib/Target/TargetAsmInfo.cpp | 1 | ||||
| -rw-r--r-- | llvm/lib/Target/TargetLoweringObjectFile.cpp | 11 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86TargetAsmInfo.cpp | 2 | 
7 files changed, 21 insertions, 19 deletions
diff --git a/llvm/include/llvm/Target/TargetAsmInfo.h b/llvm/include/llvm/Target/TargetAsmInfo.h index 0eff044c45e..5574ad5bc6b 100644 --- a/llvm/include/llvm/Target/TargetAsmInfo.h +++ b/llvm/include/llvm/Target/TargetAsmInfo.h @@ -371,10 +371,6 @@ namespace llvm {      ///      const char *DwarfEHFrameSection; // Defaults to ".eh_frame". -    /// DwarfExceptionSection - Section directive for Exception table. -    /// -    const char *DwarfExceptionSection; // Defaults to ".gcc_except_table". -      //===--- CBE Asm Translation Table -----------------------------------===//      const char *const *AsmTransCBE; // Defaults to empty @@ -637,9 +633,6 @@ namespace llvm {      const char *getDwarfEHFrameSection() const {        return DwarfEHFrameSection;      } -    const char *getDwarfExceptionSection() const { -      return DwarfExceptionSection; -    }      const char *const *getAsmCBE() const {        return AsmTransCBE;      } diff --git a/llvm/include/llvm/Target/TargetLoweringObjectFile.h b/llvm/include/llvm/Target/TargetLoweringObjectFile.h index ec6b6975855..377b9eeae41 100644 --- a/llvm/include/llvm/Target/TargetLoweringObjectFile.h +++ b/llvm/include/llvm/Target/TargetLoweringObjectFile.h @@ -58,6 +58,10 @@ protected:    /// list.    const MCSection *StaticDtorSection; +  /// LSDASection - If exception handling is supported by the target, this is +  /// the section the Language Specific Data Area information is emitted to. +  const MCSection *LSDASection; +    public:    // FIXME: NONPUB.    const MCSection *getOrCreateSection(const char *Name, @@ -77,10 +81,10 @@ public:    const MCSection *getTextSection() const { return TextSection; }    const MCSection *getDataSection() const { return DataSection; } -    const MCSection *getStaticCtorSection() const { return StaticCtorSection; }    const MCSection *getStaticDtorSection() const { return StaticDtorSection; } - +  const MCSection *getLSDASection() const { return LSDASection; } +      /// shouldEmitUsedDirectiveFor - This hook allows targets to selectively    /// decide not to emit the UsedDirective for some symbols in llvm.used.    /// FIXME: REMOVE this (rdar://7071300) diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfException.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfException.cpp index 8eb97af0f94..b051f7138ef 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfException.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfException.cpp @@ -20,10 +20,11 @@  #include "llvm/Support/Timer.h"  #include "llvm/Support/raw_ostream.h"  #include "llvm/Target/TargetAsmInfo.h" -#include "llvm/Target/TargetRegisterInfo.h"  #include "llvm/Target/TargetData.h"  #include "llvm/Target/TargetFrameInfo.h" +#include "llvm/Target/TargetLoweringObjectFile.h"  #include "llvm/Target/TargetOptions.h" +#include "llvm/Target/TargetRegisterInfo.h"  #include "llvm/ADT/StringExtras.h"  using namespace llvm; @@ -539,10 +540,8 @@ void DwarfException::EmitExceptionTable() {    unsigned SizeAlign = (4 - TotalSize) & 3;    // Begin the exception table. -  //MCSection *LSDASection = TAI->getLSDASection(); -  //Asm->SwitchToSection(LSDASection); -   -  Asm->SwitchToDataSection(TAI->getDwarfExceptionSection()); +  const MCSection *LSDASection = Asm->getObjFileLowering().getLSDASection(); +  Asm->SwitchToSection(LSDASection);    Asm->EmitAlignment(2, 0, 0, false);    O << "GCC_except_table" << SubprogramCount << ":\n"; diff --git a/llvm/lib/Target/PowerPC/PPCTargetAsmInfo.cpp b/llvm/lib/Target/PowerPC/PPCTargetAsmInfo.cpp index 3c8ab94da5a..2e66cb80646 100644 --- a/llvm/lib/Target/PowerPC/PPCTargetAsmInfo.cpp +++ b/llvm/lib/Target/PowerPC/PPCTargetAsmInfo.cpp @@ -28,7 +28,6 @@ PPCDarwinTargetAsmInfo::PPCDarwinTargetAsmInfo(const PPCTargetMachine &TM) :    DwarfEHFrameSection =     ".section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support"; -  DwarfExceptionSection = ".section __DATA,__gcc_except_tab";    GlobalEHDirective = "\t.globl\t";    SupportsWeakOmittedEHFrame = false;  } @@ -73,7 +72,6 @@ PPCLinuxTargetAsmInfo::PPCLinuxTargetAsmInfo(const PPCTargetMachine &TM) :      SupportsExceptionHandling = true;    AbsoluteEHSectionOffsets = false;    DwarfEHFrameSection = "\t.section\t.eh_frame,\"aw\",@progbits"; -  DwarfExceptionSection = "\t.section\t.gcc_except_table,\"a\",@progbits";  } diff --git a/llvm/lib/Target/TargetAsmInfo.cpp b/llvm/lib/Target/TargetAsmInfo.cpp index 80bb90e0651..e961f2ad74f 100644 --- a/llvm/lib/Target/TargetAsmInfo.cpp +++ b/llvm/lib/Target/TargetAsmInfo.cpp @@ -108,7 +108,6 @@ TargetAsmInfo::TargetAsmInfo(const TargetMachine &tm) : TM(tm) {    DwarfRangesSection = ".debug_ranges";    DwarfMacroInfoSection = ".debug_macinfo";    DwarfEHFrameSection = ".eh_frame"; -  DwarfExceptionSection = ".gcc_except_table";    AsmTransCBE = 0;  } diff --git a/llvm/lib/Target/TargetLoweringObjectFile.cpp b/llvm/lib/Target/TargetLoweringObjectFile.cpp index a86946da9f1..d04e5c0cd60 100644 --- a/llvm/lib/Target/TargetLoweringObjectFile.cpp +++ b/llvm/lib/Target/TargetLoweringObjectFile.cpp @@ -36,6 +36,7 @@ TargetLoweringObjectFile::TargetLoweringObjectFile() : Ctx(0) {    ReadOnlySection = 0;    StaticCtorSection = 0;    StaticDtorSection = 0; +  LSDASection = 0;  }  TargetLoweringObjectFile::~TargetLoweringObjectFile() { @@ -302,6 +303,14 @@ void TargetLoweringObjectFileELF::Initialize(MCContext &Ctx,      getOrCreateSection(".ctors", false, SectionKind::getDataRel());    StaticDtorSection =      getOrCreateSection(".dtors", false, SectionKind::getDataRel()); +   +   +  // FIXME: We're emitting LSDA info into a readonly section on ELF, even though +  // it contains relocatable pointers.  In PIC mode, this is probably a big +  // runtime hit for C++ apps.  Either the contents of the LSDA need to be +  // adjusted or this should be a data section. +  LSDASection = +    getOrCreateSection(".gcc_except_table", false, SectionKind::getReadOnly());  } @@ -537,6 +546,8 @@ void TargetLoweringObjectFileMachO::Initialize(MCContext &Ctx,        getOrCreateSection(".mod_term_func", true, SectionKind::getDataRel());    } +  LSDASection = getOrCreateSection("__DATA,__gcc_except_tab", false, +                                   SectionKind::getDataRel());  }  const MCSection *TargetLoweringObjectFileMachO:: diff --git a/llvm/lib/Target/X86/X86TargetAsmInfo.cpp b/llvm/lib/Target/X86/X86TargetAsmInfo.cpp index c30f3378b7b..4c9030845a0 100644 --- a/llvm/lib/Target/X86/X86TargetAsmInfo.cpp +++ b/llvm/lib/Target/X86/X86TargetAsmInfo.cpp @@ -84,7 +84,6 @@ X86DarwinTargetAsmInfo::X86DarwinTargetAsmInfo(const X86TargetMachine &TM):    AbsoluteEHSectionOffsets = false;    DwarfEHFrameSection =    ".section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support"; -  DwarfExceptionSection = ".section __DATA,__gcc_except_tab";  }  unsigned X86DarwinTargetAsmInfo::PreferredEHDataFormat() const { @@ -133,7 +132,6 @@ X86ELFTargetAsmInfo::X86ELFTargetAsmInfo(const X86TargetMachine &TM) :    SupportsExceptionHandling = true;    AbsoluteEHSectionOffsets = false;    DwarfEHFrameSection = "\t.section\t.eh_frame,\"aw\",@progbits"; -  DwarfExceptionSection = "\t.section\t.gcc_except_table,\"a\",@progbits";    // On Linux we must declare when we can use a non-executable stack.    if (TM.getSubtarget<X86Subtarget>().isLinux())  | 

