OSDN Git Service

make PIC vs DynamicNoPIC be explicit in PICStyles.
authorChris Lattner <sabre@nondot.org>
Fri, 10 Jul 2009 20:58:47 +0000 (20:58 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 10 Jul 2009 20:58:47 +0000 (20:58 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75275 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86Subtarget.cpp
lib/Target/X86/X86Subtarget.h
lib/Target/X86/X86TargetMachine.cpp

index db9a09f..8259629 100644 (file)
@@ -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.
index 6509f04..9bba940 100644 (file)
@@ -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.
index eb0cf93..92a98a0 100644 (file)
@@ -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);