[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