diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2018-02-23 19:30:48 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2018-02-23 19:30:48 +0000 |
commit | 922f2aa9b2f13631febe7167e6db3cd3b421e161 (patch) | |
tree | bdbcb27e99714519c2e27a4358ce87c069bc4ad9 /clang/lib/CodeGen/CodeGenModule.cpp | |
parent | 1afffac05b37af21c6df63ef5e662e2e1b81c2f8 (diff) | |
download | bcm5719-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.cpp | 14 |
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; |