summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CodeGenModule.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2018-02-23 19:30:48 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2018-02-23 19:30:48 +0000
commit922f2aa9b2f13631febe7167e6db3cd3b421e161 (patch)
treebdbcb27e99714519c2e27a4358ce87c069bc4ad9 /clang/lib/CodeGen/CodeGenModule.cpp
parent1afffac05b37af21c6df63ef5e662e2e1b81c2f8 (diff)
downloadbcm5719-llvm-922f2aa9b2f13631febe7167e6db3cd3b421e161.tar.gz
bcm5719-llvm-922f2aa9b2f13631febe7167e6db3cd3b421e161.zip
Bring r325915 back.
The tests that failed on a windows host have been fixed. Original message: Start setting dso_local for COFF. With this there are still some GVs where we don't set dso_local because setGVProperties is never called. I intend to fix that in followup commits. This is just the bare minimum to teach shouldAssumeDSOLocal what it should do for COFF. llvm-svn: 325940
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
-rw-r--r--clang/lib/CodeGen/CodeGenModule.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp
index e8577b0153f..03bf2169157 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -713,8 +713,20 @@ void CodeGenModule::setGlobalVisibility(llvm::GlobalValue *GV,
static bool shouldAssumeDSOLocal(const CodeGenModule &CGM,
llvm::GlobalValue *GV) {
+ // DLLImport explicitly marks the GV as external.
+ if (GV->hasDLLImportStorageClass())
+ return false;
+
const llvm::Triple &TT = CGM.getTriple();
- // Only handle ELF for now.
+ // Every other GV is local on COFF.
+ // Make an exception for windows OS in the triple: Some firmware builds use
+ // *-win32-macho triples. This (accidentally?) produced windows relocations
+ // without GOT tables in older clang versions; Keep this behaviour.
+ // FIXME: even thread local variables?
+ if (TT.isOSBinFormatCOFF() || (TT.isOSWindows() && TT.isOSBinFormatMachO()))
+ return true;
+
+ // Only handle COFF and ELF for now.
if (!TT.isOSBinFormatELF())
return false;
OpenPOWER on IntegriCloud