COFF: Fix /include. Included symbols are GC-roots.

llvm-svn: 238717
This commit is contained in:
Rui Ueyama 2015-06-01 03:42:54 +00:00
parent f5147ef0b9
commit 78aefcb238
2 changed files with 69 additions and 5 deletions

View File

@ -356,6 +356,10 @@ bool LinkerDriver::link(int Argc, const char *Argv[]) {
if (Symtab.reportRemainingUndefines())
return false;
// /include option takes precedence over garbage collection.
for (auto *Arg : Args->filtered(OPT_incl))
Symtab.find(Arg->getValue())->markLive();
// Windows specific -- if no /subsystem is given, we need to infer
// that from entry point name.
if (Config->Subsystem == IMAGE_SUBSYSTEM_UNKNOWN) {

View File

@ -1,7 +1,67 @@
# RUN: yaml2obj < %p/Inputs/ret42.yaml > %t.obj
# RUN: yaml2obj < %s > %t.obj
# RUN: lld -flavor link2 /out:%t.exe %t.obj
# RUN: not lld -flavor link2 /out:%t.exe %t.obj /include:xyz >& %t.log
# RUN: FileCheck %s < %t.log
# RUN: lld -flavor link2 /out:%t.exe %t.obj /verbose >& %t.log
### FileCheck doesn't like empty input, so write something.
# RUN: echo dummy >> %t.log
# RUN: FileCheck -check-prefix=CHECK1 %s < %t.log
CHECK: undefined symbol: xyz
# RUN: lld -flavor link2 /out:%t.exe %t.obj /verbose /include:unused >& %t.log
# RUN: echo dummy >> %t.log
# RUN: FileCheck -check-prefix=CHECK2 %s < %t.log
# CHECK1: Discarded unused
# CHECK2-NOT: Discarded unused
---
header:
Machine: IMAGE_FILE_MACHINE_AMD64
Characteristics: []
sections:
- Name: '.text$mn'
Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
Alignment: 4
SectionData: B82A000000C3
- Name: '.text$mn'
Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
Alignment: 4
SectionData: B82A000000C3
symbols:
- Name: '.text$mn'
Value: 0
SectionNumber: 1
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: '.text$mn'
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: mainCRTStartup
Value: 0
SectionNumber: 1
SimpleType: IMAGE_SYM_TYPE_NULL
ComplexType: IMAGE_SYM_DTYPE_FUNCTION
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- Name: unused
Value: 0
SectionNumber: 2
SimpleType: IMAGE_SYM_TYPE_NULL
ComplexType: IMAGE_SYM_DTYPE_FUNCTION
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
...