From 998dee96d3ca506cf73a617c0b7fc7f0e467a127 Mon Sep 17 00:00:00 2001 From: Bill Wendling Date: Mon, 29 Dec 2008 22:12:11 +0000 Subject: [PATCH] Linux wants the FDE initial location and address range to be forced to 32-bit. Darwin doesn't. Make this optional for platforms. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61484 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Target/TargetAsmInfo.h | 8 ++++++++ lib/CodeGen/AsmPrinter/DwarfWriter.cpp | 6 ++++-- lib/Target/TargetAsmInfo.cpp | 1 + lib/Target/X86/X86TargetAsmInfo.cpp | 1 + 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/include/llvm/Target/TargetAsmInfo.h b/include/llvm/Target/TargetAsmInfo.h index aa9c14514c9..c880179038d 100644 --- a/include/llvm/Target/TargetAsmInfo.h +++ b/include/llvm/Target/TargetAsmInfo.h @@ -457,6 +457,11 @@ namespace llvm { /// bool NonLocalEHFrameLabel; // Defaults to false. + /// Force32BitFDEReference - Force the FDE initial location and address + /// range to be 32-bit sized. + /// + bool Force32BitFDEReference; // Defaults to true. + /// GlobalEHDirective - This is the directive used to make exception frame /// tables globally visible. /// @@ -829,6 +834,9 @@ namespace llvm { bool doesRequireNonLocalEHFrameLabel() const { return NonLocalEHFrameLabel; } + bool doesRequire32BitFDEReference() const { + return Force32BitFDEReference; + } const char *getGlobalEHDirective() const { return GlobalEHDirective; } diff --git a/lib/CodeGen/AsmPrinter/DwarfWriter.cpp b/lib/CodeGen/AsmPrinter/DwarfWriter.cpp index 6534f401cc6..691c922d0af 100644 --- a/lib/CodeGen/AsmPrinter/DwarfWriter.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfWriter.cpp @@ -3119,10 +3119,12 @@ private: Asm->EOL("FDE CIE offset"); - EmitReference("eh_func_begin", EHFrameInfo.Number, true); + EmitReference("eh_func_begin", EHFrameInfo.Number, true, + TAI->doesRequire32BitFDEReference()); Asm->EOL("FDE initial location"); EmitDifference("eh_func_end", EHFrameInfo.Number, - "eh_func_begin", EHFrameInfo.Number); + "eh_func_begin", EHFrameInfo.Number, + TAI->doesRequire32BitFDEReference()); Asm->EOL("FDE address range"); // If there is a personality and landing pads then point to the language diff --git a/lib/Target/TargetAsmInfo.cpp b/lib/Target/TargetAsmInfo.cpp index c9a525a506e..5cf298aa95b 100644 --- a/lib/Target/TargetAsmInfo.cpp +++ b/lib/Target/TargetAsmInfo.cpp @@ -101,6 +101,7 @@ void TargetAsmInfo::fillDefaultValues() { DwarfRequiresFrameSection = true; FDEEncodingRequiresSData4 = true; NonLocalEHFrameLabel = false; + Force32BitFDEReference = true; GlobalEHDirective = 0; SupportsWeakOmittedEHFrame = true; DwarfSectionOffsetDirective = 0; diff --git a/lib/Target/X86/X86TargetAsmInfo.cpp b/lib/Target/X86/X86TargetAsmInfo.cpp index 4dfb214ec71..de655e732b2 100644 --- a/lib/Target/X86/X86TargetAsmInfo.cpp +++ b/lib/Target/X86/X86TargetAsmInfo.cpp @@ -72,6 +72,7 @@ X86DarwinTargetAsmInfo::X86DarwinTargetAsmInfo(const X86TargetMachine &TM): HasSingleParameterDotFile = false; FDEEncodingRequiresSData4 = false; NonLocalEHFrameLabel = true; + Force32BitFDEReference = false; if (TM.getRelocationModel() == Reloc::Static) { StaticCtorsSection = ".constructor"; StaticDtorsSection = ".destructor"; -- 2.34.1