mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-17 03:26:48 +00:00

ICF and GC impair debugging, so MSVC disables these optimizations when /debug is passed. They are still on by default when no PDB is produced. This change also makes /opt:ref enable ICF, which is consistent with MSVC: https://msdn.microsoft.com/en-us/library/bxwfs976.aspx We should consider making /opt:icf fold readonly data in the near future. LLD used to do this, but we disabled it because it breaks too many programs. MSVC only does this if the user explicitly passes /opt:icf. Reviewers: ruiu, pcc Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D39885 llvm-svn: 318071
119 lines
4.1 KiB
YAML
119 lines
4.1 KiB
YAML
# RUN: yaml2obj %s -o %t.obj
|
|
# RUN: lld-link %t.obj %S/Inputs/pdb-import-gc.lib -debug -entry:main \
|
|
# RUN: -nodefaultlib -opt:ref -out:%t.exe -pdb:%t.pdb
|
|
# RUN: llvm-pdbutil dump -globals -symbols %t.pdb | FileCheck %s
|
|
|
|
# This tests the case where an __imp_ chunk is discarded by linker GC. The debug
|
|
# info may refer to the __imp_ symbol still.
|
|
|
|
# Compile this code with MSVC to regenerate the test case:
|
|
# extern char __declspec(dllimport) __wc_mb_cur;
|
|
# int discarded() { return __wc_mb_cur; }
|
|
# int main() { return g2; }
|
|
|
|
# CHECK: Global Symbols
|
|
# CHECK-NEXT: ============================================================
|
|
# CHECK-NEXT: Records
|
|
# CHECK-NEXT: 20 | S_GDATA32 [size = 32] `__imp___wc_mb_cur`
|
|
# CHECK-NEXT: type = 0x0070 (char), addr = 0000:0000
|
|
|
|
# CHECK: Symbols
|
|
# CHECK-NEXT: ============================================================
|
|
# CHECK-NEXT: Mod 0000 | `{{.*}}pdb-import-gc.yaml.tmp.obj`:
|
|
# CHECK-NEXT: Mod 0001 | `* Linker *`:
|
|
|
|
--- !COFF
|
|
header:
|
|
Machine: IMAGE_FILE_MACHINE_AMD64
|
|
Characteristics: [ ]
|
|
sections:
|
|
- Name: '.debug$S'
|
|
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
|
|
Alignment: 1
|
|
Subsections:
|
|
- !Symbols
|
|
Records:
|
|
- Kind: S_GDATA32
|
|
DataSym:
|
|
Type: 112
|
|
DisplayName: __imp___wc_mb_cur
|
|
- !StringTable
|
|
Strings:
|
|
Relocations:
|
|
- VirtualAddress: 20
|
|
SymbolName: __imp___wc_mb_cur
|
|
Type: IMAGE_REL_AMD64_SECREL
|
|
- VirtualAddress: 24
|
|
SymbolName: __imp___wc_mb_cur
|
|
Type: IMAGE_REL_AMD64_SECTION
|
|
- Name: '.text$mn'
|
|
Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
|
|
Alignment: 16
|
|
SectionData: 488B05000000000FBE00C3
|
|
Relocations:
|
|
- VirtualAddress: 3
|
|
SymbolName: __imp___wc_mb_cur
|
|
Type: IMAGE_REL_AMD64_REL32
|
|
- Name: '.text$mn'
|
|
Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
|
|
Alignment: 16
|
|
SectionData: B82A000000C3
|
|
symbols:
|
|
- Name: '.debug$S'
|
|
Value: 0
|
|
SectionNumber: 1
|
|
SimpleType: IMAGE_SYM_TYPE_NULL
|
|
ComplexType: IMAGE_SYM_DTYPE_NULL
|
|
StorageClass: IMAGE_SYM_CLASS_STATIC
|
|
SectionDefinition:
|
|
Length: 240
|
|
NumberOfRelocations: 2
|
|
NumberOfLinenumbers: 0
|
|
CheckSum: 0
|
|
Number: 0
|
|
- Name: '.text$mn'
|
|
Value: 0
|
|
SectionNumber: 2
|
|
SimpleType: IMAGE_SYM_TYPE_NULL
|
|
ComplexType: IMAGE_SYM_DTYPE_NULL
|
|
StorageClass: IMAGE_SYM_CLASS_STATIC
|
|
SectionDefinition:
|
|
Length: 11
|
|
NumberOfRelocations: 1
|
|
NumberOfLinenumbers: 0
|
|
CheckSum: 2906070869
|
|
Number: 0
|
|
Selection: IMAGE_COMDAT_SELECT_NODUPLICATES
|
|
- Name: '.text$mn'
|
|
Value: 0
|
|
SectionNumber: 3
|
|
SimpleType: IMAGE_SYM_TYPE_NULL
|
|
ComplexType: IMAGE_SYM_DTYPE_NULL
|
|
StorageClass: IMAGE_SYM_CLASS_STATIC
|
|
SectionDefinition:
|
|
Length: 6
|
|
NumberOfRelocations: 0
|
|
NumberOfLinenumbers: 0
|
|
CheckSum: 2139436471
|
|
Number: 0
|
|
Selection: IMAGE_COMDAT_SELECT_NODUPLICATES
|
|
- Name: discarded
|
|
Value: 0
|
|
SectionNumber: 2
|
|
SimpleType: IMAGE_SYM_TYPE_NULL
|
|
ComplexType: IMAGE_SYM_DTYPE_FUNCTION
|
|
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
|
|
- Name: main
|
|
Value: 0
|
|
SectionNumber: 3
|
|
SimpleType: IMAGE_SYM_TYPE_NULL
|
|
ComplexType: IMAGE_SYM_DTYPE_FUNCTION
|
|
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
|
|
- Name: __imp___wc_mb_cur
|
|
Value: 0
|
|
SectionNumber: 0
|
|
SimpleType: IMAGE_SYM_TYPE_NULL
|
|
ComplexType: IMAGE_SYM_DTYPE_NULL
|
|
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
|
|
...
|