From: Reid Kleckner Date: Wed, 28 Dec 2016 17:41:36 +0000 (+0000) Subject: Revert "Driver: switch Windows to static RelocModel" X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2b63cb59bd2ffc91a89e5125642fd99c5bf0603c;p=clang Revert "Driver: switch Windows to static RelocModel" This reverts commit r290569. It caused unforeseen codegen changes for switch jump tables described in PR31488. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@290672 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Driver/MSVCToolChain.cpp b/lib/Driver/MSVCToolChain.cpp index 0bbe79c3aa..95cf056f7a 100644 --- a/lib/Driver/MSVCToolChain.cpp +++ b/lib/Driver/MSVCToolChain.cpp @@ -82,6 +82,18 @@ bool MSVCToolChain::IsUnwindTablesDefault() const { return getArch() == llvm::Triple::x86_64; } +bool MSVCToolChain::isPICDefault() const { + return getArch() == llvm::Triple::x86_64; +} + +bool MSVCToolChain::isPIEDefault() const { + return false; +} + +bool MSVCToolChain::isPICDefaultForced() const { + return getArch() == llvm::Triple::x86_64; +} + #ifdef USE_WIN32 static bool readFullStringValue(HKEY hkey, const char *valueName, std::string &value) { diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp index d831ba8adc..968b0cb472 100644 --- a/lib/Driver/ToolChains.cpp +++ b/lib/Driver/ToolChains.cpp @@ -2880,13 +2880,22 @@ bool Generic_GCC::IsUnwindTablesDefault() const { bool Generic_GCC::isPICDefault() const { switch (getArch()) { - default: return false; + case llvm::Triple::x86_64: + return getTriple().isOSWindows(); case llvm::Triple::ppc64: case llvm::Triple::ppc64le: return !getTriple().isOSBinFormatMachO() && !getTriple().isMacOSX(); + default: + return false; } } +bool Generic_GCC::isPIEDefault() const { return false; } + +bool Generic_GCC::isPICDefaultForced() const { + return getArch() == llvm::Triple::x86_64 && getTriple().isOSWindows(); +} + bool Generic_GCC::IsIntegratedAssemblerDefault() const { switch (getTriple().getArch()) { case llvm::Triple::x86: diff --git a/lib/Driver/ToolChains.h b/lib/Driver/ToolChains.h index c8b7931cac..7dab08915d 100644 --- a/lib/Driver/ToolChains.h +++ b/lib/Driver/ToolChains.h @@ -232,8 +232,8 @@ public: bool IsUnwindTablesDefault() const override; bool isPICDefault() const override; - bool isPIEDefault() const override { return false; } - bool isPICDefaultForced() const override { return false; } + bool isPIEDefault() const override; + bool isPICDefaultForced() const override; bool IsIntegratedAssemblerDefault() const override; llvm::opt::DerivedArgList * TranslateArgs(const llvm::opt::DerivedArgList &Args, StringRef BoundArch, @@ -1136,9 +1136,9 @@ public: bool IsIntegratedAssemblerDefault() const override; bool IsUnwindTablesDefault() const override; - bool isPICDefault() const override { return false; } - bool isPIEDefault() const override { return false; } - bool isPICDefaultForced() const override { return false; } + bool isPICDefault() const override; + bool isPIEDefault() const override; + bool isPICDefaultForced() const override; void AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs, diff --git a/test/Driver/pic.c b/test/Driver/pic.c index 57d1e3fd7d..9f9d09c54c 100644 --- a/test/Driver/pic.c +++ b/test/Driver/pic.c @@ -255,4 +255,9 @@ // RUN: | FileCheck %s --check-prefix=CHECK-PIC1 // RUN: %clang -c %s -target arm64-linux-android -### 2>&1 \ // RUN: | FileCheck %s --check-prefix=CHECK-PIC1 - +// +// On Windows-X64 PIC is enabled by default +// RUN: %clang -c %s -target x86_64-pc-windows-msvc18.0.0 -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-PIC2 +// RUN: %clang -c %s -target x86_64-pc-windows-gnu -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-PIC2