diff options
| author | Martin Storsjo <martin@martin.st> | 2019-08-20 18:58:05 +0000 | 
|---|---|---|
| committer | Martin Storsjo <martin@martin.st> | 2019-08-20 18:58:05 +0000 | 
| commit | 514f3a122d659dc45f272a1a519387680e221ffd (patch) | |
| tree | ecb467937ae8c870af45822eab5e3abb4f1fff7a /llvm/lib/Target | |
| parent | 8a91aa53a062a03e19e26e896ffdd10ffc67801b (diff) | |
| download | bcm5719-llvm-514f3a122d659dc45f272a1a519387680e221ffd.tar.gz bcm5719-llvm-514f3a122d659dc45f272a1a519387680e221ffd.zip | |
[TargetMachine] Don't try to create COFFSTUB references on windows on non-COFF
This avoids spurious relocation types for windows/elf targets.
Differential Revision: https://reviews.llvm.org/D66401
llvm-svn: 369426
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/TargetMachine.cpp | 8 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86Subtarget.cpp | 3 | 
2 files changed, 8 insertions, 3 deletions
| diff --git a/llvm/lib/Target/TargetMachine.cpp b/llvm/lib/Target/TargetMachine.cpp index 9ee71c41bc9..4c98e140f44 100644 --- a/llvm/lib/Target/TargetMachine.cpp +++ b/llvm/lib/Target/TargetMachine.cpp @@ -128,8 +128,8 @@ bool TargetMachine::shouldAssumeDSOLocal(const Module &M,    // don't assume the variables to be DSO local unless we actually know    // that for sure. This only has to be done for variables; for functions    // the linker can insert thunks for calling functions from another DLL. -  if (TT.isWindowsGNUEnvironment() && GV && GV->isDeclarationForLinker() && -      isa<GlobalVariable>(GV)) +  if (TT.isWindowsGNUEnvironment() && TT.isOSBinFormatCOFF() && GV && +      GV->isDeclarationForLinker() && isa<GlobalVariable>(GV))      return false;    // On COFF, don't mark 'extern_weak' symbols as DSO local. If these symbols @@ -142,7 +142,9 @@ bool TargetMachine::shouldAssumeDSOLocal(const Module &M,    // 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. -  if (TT.isOSBinFormatCOFF() || (TT.isOSWindows() && TT.isOSBinFormatMachO())) +  // Some JIT users use *-win32-elf triples; these shouldn't use GOT tables +  // either. +  if (TT.isOSBinFormatCOFF() || TT.isOSWindows())      return true;    // Most PIC code sequences that assume that a symbol is local cannot diff --git a/llvm/lib/Target/X86/X86Subtarget.cpp b/llvm/lib/Target/X86/X86Subtarget.cpp index d6d23abf045..c826fdf6964 100644 --- a/llvm/lib/Target/X86/X86Subtarget.cpp +++ b/llvm/lib/Target/X86/X86Subtarget.cpp @@ -146,6 +146,9 @@ unsigned char X86Subtarget::classifyGlobalReference(const GlobalValue *GV,        return X86II::MO_DLLIMPORT;      return X86II::MO_COFFSTUB;    } +  // Some JIT users use *-win32-elf triples; these shouldn't use GOT tables. +  if (isOSWindows()) +    return X86II::MO_NO_FLAG;    if (is64Bit()) {      // ELF supports a large, truly PIC code model with non-PC relative GOT | 

