[lld] r243735 - COFF: When resolving _load_config_used, add it as a GC root.
Peter Collingbourne
peter at pcc.me.uk
Thu Jul 30 22:33:34 PDT 2015
Author: pcc
Date: Fri Jul 31 00:33:34 2015
New Revision: 243735
URL: http://llvm.org/viewvc/llvm-project?rev=243735&view=rev
Log:
COFF: When resolving _load_config_used, add it as a GC root.
This fixes the cases where the symbol is defined in a comdat or by bitcode.
Differential Revision: http://reviews.llvm.org/D11673
Added:
lld/trunk/test/COFF/loadcfg.ll
Modified:
lld/trunk/COFF/Driver.cpp
lld/trunk/test/COFF/loadcfg.test
Modified: lld/trunk/COFF/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Driver.cpp?rev=243735&r1=243734&r2=243735&view=diff
==============================================================================
--- lld/trunk/COFF/Driver.cpp (original)
+++ lld/trunk/COFF/Driver.cpp Fri Jul 31 00:33:34 2015
@@ -662,9 +662,8 @@ bool LinkerDriver::link(llvm::ArrayRef<c
}
// Windows specific -- if __load_config_used can be resolved, resolve it.
- if (Symbol *Sym = Symtab.find(Config->LoadConfigUsed))
- if (isa<Lazy>(Sym->Body))
- Symtab.addUndefined(Config->LoadConfigUsed);
+ if (Symtab.find(Config->LoadConfigUsed))
+ addUndefined(Config->LoadConfigUsed);
if (Symtab.queueEmpty())
break;
Added: lld/trunk/test/COFF/loadcfg.ll
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/loadcfg.ll?rev=243735&view=auto
==============================================================================
--- lld/trunk/test/COFF/loadcfg.ll (added)
+++ lld/trunk/test/COFF/loadcfg.ll Fri Jul 31 00:33:34 2015
@@ -0,0 +1,15 @@
+; RUN: llvm-as -o %t.obj %s
+; RUN: lld -flavor link2 /out:%t.exe %t.obj /entry:main /subsystem:console
+; RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
+
+; CHECK: LoadConfigTableRVA: 0x1000
+; CHECK: LoadConfigTableSize: 0x70
+
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc"
+
+ at _load_config_used = constant i32 1
+
+define void @main() {
+ ret void
+}
Modified: lld/trunk/test/COFF/loadcfg.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/loadcfg.test?rev=243735&r1=243734&r2=243735&view=diff
==============================================================================
--- lld/trunk/test/COFF/loadcfg.test (original)
+++ lld/trunk/test/COFF/loadcfg.test Fri Jul 31 00:33:34 2015
@@ -2,7 +2,7 @@
# RUN: lld -flavor link2 /out:%t.exe %t.obj /entry:main /subsystem:console
# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
-# CHECK: LoadConfigTableRVA: 0x1000
+# CHECK: LoadConfigTableRVA: 0x1008
# CHECK: LoadConfigTableSize: 0x70
---
@@ -14,6 +14,10 @@ sections:
Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
Alignment: 4
SectionData: B82A000000C3
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: B82A000000C3
symbols:
- Name: .text
Value: 0
@@ -27,6 +31,19 @@ symbols:
NumberOfLinenumbers: 0
CheckSum: 0
Number: 0
+ - Name: .text
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 6
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ Selection: IMAGE_COMDAT_SELECT_ANY
- Name: main
Value: 0
SectionNumber: 1
@@ -35,7 +52,7 @@ symbols:
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- Name: _load_config_used
Value: 0
- SectionNumber: 1
+ SectionNumber: 2
SimpleType: IMAGE_SYM_TYPE_NULL
ComplexType: IMAGE_SYM_DTYPE_NULL
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
More information about the llvm-commits
mailing list