[llvm] r369426 - [TargetMachine] Don't try to create COFFSTUB references on windows on non-COFF

Hans Wennborg via llvm-commits llvm-commits at lists.llvm.org
Thu Aug 22 07:27:32 PDT 2019


Merged to release_90 together with r369443 in r369654.

On Tue, Aug 20, 2019 at 8:56 PM Martin Storsjo via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
>
> Author: mstorsjo
> Date: Tue Aug 20 11:58:05 2019
> New Revision: 369426
>
> URL: http://llvm.org/viewvc/llvm-project?rev=369426&view=rev
> Log:
> [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
>
> Modified:
>     llvm/trunk/lib/Target/TargetMachine.cpp
>     llvm/trunk/lib/Target/X86/X86Subtarget.cpp
>     llvm/trunk/test/CodeGen/X86/mingw-refptr.ll
>
> Modified: llvm/trunk/lib/Target/TargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetMachine.cpp?rev=369426&r1=369425&r2=369426&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/TargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/TargetMachine.cpp Tue Aug 20 11:58:05 2019
> @@ -128,8 +128,8 @@ bool TargetMachine::shouldAssumeDSOLocal
>    // 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
>    // 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
>
> Modified: llvm/trunk/lib/Target/X86/X86Subtarget.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Subtarget.cpp?rev=369426&r1=369425&r2=369426&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86Subtarget.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86Subtarget.cpp Tue Aug 20 11:58:05 2019
> @@ -146,6 +146,9 @@ unsigned char X86Subtarget::classifyGlob
>        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
>
> Modified: llvm/trunk/test/CodeGen/X86/mingw-refptr.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/mingw-refptr.ll?rev=369426&r1=369425&r2=369426&view=diff
> ==============================================================================
> --- llvm/trunk/test/CodeGen/X86/mingw-refptr.ll (original)
> +++ llvm/trunk/test/CodeGen/X86/mingw-refptr.ll Tue Aug 20 11:58:05 2019
> @@ -1,5 +1,6 @@
>  ; RUN: llc < %s -mtriple=x86_64-w64-mingw32 | FileCheck %s -check-prefix=CHECK-X64
>  ; RUN: llc < %s -mtriple=i686-w64-mingw32 | FileCheck %s -check-prefix=CHECK-X86
> +; RUN: llc < %s -mtriple=i686-w64-mingw32-none-elf | FileCheck %s -check-prefix=CHECK-X86-ELF
>
>  @var = external local_unnamed_addr global i32, align 4
>  @dsolocalvar = external dso_local local_unnamed_addr global i32, align 4
> @@ -16,6 +17,9 @@ define dso_local i32 @getVar() {
>  ; CHECK-X86:    movl .refptr._var, %eax
>  ; CHECK-X86:    movl (%eax), %eax
>  ; CHECK-X86:    retl
> +; CHECK-X86-ELF-LABEL: getVar:
> +; CHECK-X86-ELF:    movl var, %eax
> +; CHECK-X86-ELF:    retl
>  entry:
>    %0 = load i32, i32* @var, align 4
>    ret i32 %0
> @@ -66,6 +70,9 @@ define dso_local i32 @getExtVar() {
>  ; CHECK-X86:    movl __imp__extvar, %eax
>  ; CHECK-X86:    movl (%eax), %eax
>  ; CHECK-X86:    retl
> +; CHECK-X86-ELF-LABEL: getExtVar:
> +; CHECK-X86-ELF:    movl extvar, %eax
> +; CHECK-X86-ELF:    retl
>  entry:
>    %0 = load i32, i32* @extvar, align 4
>    ret i32 %0
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list