summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorReid Kleckner <rnk@google.com>2016-12-28 17:41:36 +0000
committerReid Kleckner <rnk@google.com>2016-12-28 17:41:36 +0000
commit8c19083f76c2187f4dfa287dedfdfaadd7f3f217 (patch)
tree472249eb79826c8afb801053e748d6f89e1f9adf /clang/lib
parent3f4c87d0b5c3bf2fa342b3196d6e420b85487069 (diff)
downloadbcm5719-llvm-8c19083f76c2187f4dfa287dedfdfaadd7f3f217.tar.gz
bcm5719-llvm-8c19083f76c2187f4dfa287dedfdfaadd7f3f217.zip
Revert "Driver: switch Windows to static RelocModel"
This reverts commit r290569. It caused unforeseen codegen changes for switch jump tables described in PR31488. llvm-svn: 290672
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Driver/MSVCToolChain.cpp12
-rw-r--r--clang/lib/Driver/ToolChains.cpp11
-rw-r--r--clang/lib/Driver/ToolChains.h10
3 files changed, 27 insertions, 6 deletions
diff --git a/clang/lib/Driver/MSVCToolChain.cpp b/clang/lib/Driver/MSVCToolChain.cpp
index 0bbe79c3aa7..95cf056f7a7 100644
--- a/clang/lib/Driver/MSVCToolChain.cpp
+++ b/clang/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/clang/lib/Driver/ToolChains.cpp b/clang/lib/Driver/ToolChains.cpp
index d831ba8adc3..968b0cb4724 100644
--- a/clang/lib/Driver/ToolChains.cpp
+++ b/clang/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/clang/lib/Driver/ToolChains.h b/clang/lib/Driver/ToolChains.h
index c8b7931cac8..7dab08915d4 100644
--- a/clang/lib/Driver/ToolChains.h
+++ b/clang/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,
OpenPOWER on IntegriCloud