LinkerDriver::inferSubsystem() used to do Symtab->findUnderscore("WinMain"),
but WinMain is stdcall in 32-bit and is hence is called _WinMain@16. Instead,
Symtab->findMangle(mangle("WinMain")) needs to be called.
But since LinkerDriver::inferSubsystem() and LinkerDriver::findDefaultEntry()
both need to call this, introduce a common helper function for this and call it
from both places. (Also call it for "main" for consistency, even though
findUnderscore() is enough for main since that's __cdecl on 32-bit).
This also exposed a bug for /nodefaultlib entrypoint inference: The code here
called findMangle(Sym) instead of findMangle(mangle(Sym)), again doing the
wrong thing on 32-bit. Fix that too.
While here, make Driver::mangle() a static free function.
https://reviews.llvm.org/D50184
llvm-svn: 338877
75 lines
2.5 KiB
Plaintext
75 lines
2.5 KiB
Plaintext
# RUN: sed -e s/ENTRYNAME/_main/ %s | yaml2obj > %t.obj
|
|
# RUN: lld-link /out:%t.exe %t.obj
|
|
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=MAIN %s
|
|
|
|
# RUN: sed s/ENTRYNAME/_wmain/ %s | yaml2obj > %t.obj
|
|
# RUN: lld-link /out:%t.exe %t.obj
|
|
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=WMAIN %s
|
|
|
|
# RUN: sed s/ENTRYNAME/_WinMain@16/ %s | yaml2obj > %t.obj
|
|
# RUN: lld-link /out:%t.exe %t.obj
|
|
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=WINMAIN %s
|
|
|
|
# RUN: sed s/ENTRYNAME/_wWinMain@16/ %s | yaml2obj > %t.obj
|
|
# RUN: lld-link /out:%t.exe %t.obj
|
|
# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=WWINMAIN %s
|
|
|
|
# MAIN: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_CUI
|
|
# WMAIN: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_CUI
|
|
# WINMAIN: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_GUI
|
|
# WWINMAIN: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_GUI
|
|
|
|
--- !COFF
|
|
header:
|
|
Machine: IMAGE_FILE_MACHINE_I386
|
|
Characteristics: []
|
|
sections:
|
|
- Name: .text
|
|
Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
|
|
Alignment: 4
|
|
SectionData: B82A000000C3
|
|
symbols:
|
|
- Name: .text
|
|
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
|
|
- Name: ENTRYNAME
|
|
Value: 0
|
|
SectionNumber: 1
|
|
SimpleType: IMAGE_SYM_TYPE_NULL
|
|
ComplexType: IMAGE_SYM_DTYPE_NULL
|
|
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
|
|
- Name: _mainCRTStartup
|
|
Value: 0
|
|
SectionNumber: 1
|
|
SimpleType: IMAGE_SYM_TYPE_NULL
|
|
ComplexType: IMAGE_SYM_DTYPE_NULL
|
|
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
|
|
- Name: _wmainCRTStartup
|
|
Value: 0
|
|
SectionNumber: 1
|
|
SimpleType: IMAGE_SYM_TYPE_NULL
|
|
ComplexType: IMAGE_SYM_DTYPE_NULL
|
|
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
|
|
- Name: _WinMainCRTStartup
|
|
Value: 0
|
|
SectionNumber: 1
|
|
SimpleType: IMAGE_SYM_TYPE_NULL
|
|
ComplexType: IMAGE_SYM_DTYPE_NULL
|
|
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
|
|
- Name: _wWinMainCRTStartup
|
|
Value: 0
|
|
SectionNumber: 1
|
|
SimpleType: IMAGE_SYM_TYPE_NULL
|
|
ComplexType: IMAGE_SYM_DTYPE_NULL
|
|
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
|
|
...
|