forked from OSchip/llvm-project
[LLD] [COFF] Fix automatically importing data symbols from DLLs with LTO
This broke in 51dcb292cc
, "[lld-link] diagnose undefined symbols
before LTO when possible" (very soon after the 9.0 branch, so
luckily the 9.0 release is unaffected).
The code for loading objects we believe might be needed for autoimport
(loadMinGWAutomaticImports()) does run before the new
reportUnresolvable() function, but it had a condition to only operate
on symbols from regular object files. This condition came from
resolveRemainingUndefines(), but as loadMinGWAutomaticImports() now
has to operate before the LTO, it has to operate on undefineds from
LTO objects as well.
Differential Revision: https://reviews.llvm.org/D70166
This commit is contained in:
parent
597b77fb7f
commit
38bc9559ba
|
@ -227,8 +227,6 @@ void SymbolTable::loadMinGWAutomaticImports() {
|
|||
auto *undef = dyn_cast<Undefined>(sym);
|
||||
if (!undef)
|
||||
continue;
|
||||
if (!sym->isUsedInRegularObj)
|
||||
continue;
|
||||
if (undef->getWeakAlias())
|
||||
continue;
|
||||
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
; REQUIRES: x86
|
||||
|
||||
; RUN: echo -e ".global variable\n.global DllMainCRTStartup\n.text\nDllMainCRTStartup:\nret\n.data\nvariable:\n.long 42" > %t-lib.s
|
||||
; RUN: llvm-mc -triple=x86_64-windows-gnu %t-lib.s -filetype=obj -o %t-lib.obj
|
||||
; RUN: lld-link -out:%t-lib.dll -dll -entry:DllMainCRTStartup %t-lib.obj -lldmingw -implib:%t-lib.lib
|
||||
|
||||
; RUN: llvm-as -o %t.obj %s
|
||||
; RUN: lld-link -lldmingw -out:%t.exe -entry:entry %t.obj %t-lib.lib
|
||||
|
||||
; RUN: llvm-readobj --coff-imports %t.exe | FileCheck -check-prefix=IMPORTS %s
|
||||
|
||||
; IMPORTS: Import {
|
||||
; IMPORTS-NEXT: Name: autoimport-lto.ll.tmp-lib.dll
|
||||
; IMPORTS-NEXT: ImportLookupTableRVA:
|
||||
; IMPORTS-NEXT: ImportAddressTableRVA:
|
||||
; IMPORTS-NEXT: Symbol: variable (0)
|
||||
; IMPORTS-NEXT: }
|
||||
|
||||
target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
|
||||
target triple = "x86_64-w64-windows-gnu"
|
||||
|
||||
@variable = external global i32
|
||||
|
||||
define i32 @entry() {
|
||||
entry:
|
||||
%0 = load i32, i32* @variable
|
||||
ret i32 %0
|
||||
}
|
Loading…
Reference in New Issue