From 8097b65c432c3cc39339b6bb0ead9e1e09232ff7 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 10 Jul 2009 20:58:47 +0000 Subject: [PATCH] make PIC vs DynamicNoPIC be explicit in PICStyles. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75275 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/X86Subtarget.cpp | 12 ------------ lib/Target/X86/X86Subtarget.h | 22 +++++++++++++++------- lib/Target/X86/X86TargetMachine.cpp | 8 ++++++-- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/lib/Target/X86/X86Subtarget.cpp b/lib/Target/X86/X86Subtarget.cpp index db9a09f76da..8259629b818 100644 --- a/lib/Target/X86/X86Subtarget.cpp +++ b/lib/Target/X86/X86Subtarget.cpp @@ -34,18 +34,6 @@ AsmWriterFlavor("x86-asm-syntax", cl::init(X86Subtarget::Unset), clEnumValN(X86Subtarget::Intel, "intel", "Emit Intel-style assembly"), clEnumValEnd)); -bool X86Subtarget::isPICStyleStubPIC(const TargetMachine &TM) const { - return PICStyle == PICStyles::Stub && - TM.getRelocationModel() == Reloc::PIC_; -} - -bool X86Subtarget::isPICStyleStubNoDynamic(const TargetMachine &TM) const { - return PICStyle == PICStyles::Stub && - TM.getRelocationModel() == Reloc::DynamicNoPIC; -} - - - /// ClassifyGlobalReference - Classify a global variable reference for the /// current subtarget according to how we should reference it in a non-pcrel /// context. diff --git a/lib/Target/X86/X86Subtarget.h b/lib/Target/X86/X86Subtarget.h index 6509f04e33a..9bba9401b58 100644 --- a/lib/Target/X86/X86Subtarget.h +++ b/lib/Target/X86/X86Subtarget.h @@ -26,10 +26,11 @@ class TargetMachine; /// namespace PICStyles { enum Style { - Stub, // Used on i386-darwin - GOT, // Used on many 32-bit unices. - RIPRel, // Used on X86-64 when not in -static mode. - None // Set when in -static mode (not PIC or DynamicNoPIC mode). + StubPIC, // Used on i386-darwin in -fPIC mode. + StubDynamicNoPIC, // Used on i386-darwin in -mdynamic-no-pic mode. + GOT, // Used on many 32-bit unices in -fPIC mode. + RIPRel, // Used on X86-64 when not in -static mode. + None // Set when in -static mode (not PIC or DynamicNoPIC mode). }; } @@ -186,9 +187,16 @@ public: bool isPICStyleGOT() const { return PICStyle == PICStyles::GOT; } bool isPICStyleRIPRel() const { return PICStyle == PICStyles::RIPRel; } - bool isPICStyleStubPIC(const TargetMachine &TM) const; - bool isPICStyleStubNoDynamic(const TargetMachine &TM) const; - bool isPICStyleStubAny() const { return PICStyle == PICStyles::Stub; } + bool isPICStyleStubPIC(const TargetMachine &TM) const { + return PICStyle == PICStyles::StubPIC; + } + + bool isPICStyleStubNoDynamic(const TargetMachine &TM) const { + return PICStyle == PICStyles::StubDynamicNoPIC; + } + bool isPICStyleStubAny() const { + return PICStyle == PICStyles::StubDynamicNoPIC || + PICStyle == PICStyles::StubPIC; } /// getDarwinVers - Return the darwin version number, 8 = Tiger, 9 = Leopard, /// 10 = Snow Leopard, etc. diff --git a/lib/Target/X86/X86TargetMachine.cpp b/lib/Target/X86/X86TargetMachine.cpp index eb0cf93562e..92a98a065b4 100644 --- a/lib/Target/X86/X86TargetMachine.cpp +++ b/lib/Target/X86/X86TargetMachine.cpp @@ -183,8 +183,12 @@ X86TargetMachine::X86TargetMachine(const Module &M, const std::string &FS, } else if (Subtarget.isTargetDarwin()) { if (Subtarget.is64Bit()) Subtarget.setPICStyle(PICStyles::RIPRel); - else - Subtarget.setPICStyle(PICStyles::Stub); + else if (getRelocationModel() == Reloc::PIC_) + Subtarget.setPICStyle(PICStyles::StubPIC); + else { + assert(getRelocationModel() == Reloc::DynamicNoPIC); + Subtarget.setPICStyle(PICStyles::StubDynamicNoPIC); + } } else if (Subtarget.isTargetELF()) { if (Subtarget.is64Bit()) Subtarget.setPICStyle(PICStyles::RIPRel);