[PATCH] D52931: [LLD] [COFF] Do MinGW specific entry/subsystem inference
Martin Storsjö via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 5 12:45:29 PDT 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rL343879: [COFF] Do MinGW specific entry/subsystem inference (authored by mstorsjo, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D52931?vs=168506&id=168510#toc
Repository:
rL LLVM
https://reviews.llvm.org/D52931
Files:
lld/trunk/COFF/Driver.cpp
lld/trunk/test/COFF/entry-inference-mingw.s
lld/trunk/test/COFF/subsystem-inference-mingw.s
Index: lld/trunk/test/COFF/entry-inference-mingw.s
===================================================================
--- lld/trunk/test/COFF/entry-inference-mingw.s
+++ lld/trunk/test/COFF/entry-inference-mingw.s
@@ -0,0 +1,44 @@
+# REQUIRES: x86
+# RUN: llvm-mc -triple=x86_64-windows-gnu %s -filetype=obj -o %t.o
+
+# RUN: lld-link -lldmingw %t.o -out:%t-default.exe 2>&1 | FileCheck -allow-empty -check-prefix=LINK %s
+# RUN: lld-link -lldmingw %t.o -out:%t-cui.exe -subsystem:console 2>&1 | FileCheck -allow-empty -check-prefix=LINK %s
+# RUN: lld-link -lldmingw %t.o -out:%t-gui.exe -subsystem:windows 2>&1 | FileCheck -allow-empty -check-prefix=LINK %s
+
+# RUN: llvm-readobj -file-headers %t-default.exe | FileCheck -check-prefix=CUI %s
+# RUN: llvm-readobj -file-headers %t-cui.exe | FileCheck -check-prefix=CUI %s
+# RUN: llvm-readobj -file-headers %t-gui.exe | FileCheck -check-prefix=GUI %s
+
+# Check that this doesn't print any warnings.
+# LINK-NOT: found both wmain and main
+
+# CUI: AddressOfEntryPoint: 0x1001
+# CUI: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_CUI (0x3)
+
+# GUI: AddressOfEntryPoint: 0x1002
+# GUI: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_GUI (0x2)
+
+
+ .text
+ .globl mainCRTStartup
+ .globl WinMainCRTStartup
+# MinGW only uses the entry points above, these other ones aren't
+# used as entry.
+ .globl main
+ .globl wmain
+ .globl wmainCRTStartup
+ .globl wWinMainCRTStartup
+foo:
+ ret
+mainCRTStartup:
+ ret
+WinMainCRTStartup:
+ ret
+main:
+ ret
+wmain:
+ ret
+wmainCRTStartup:
+ ret
+wWinMainCRTStartup:
+ ret
Index: lld/trunk/test/COFF/subsystem-inference-mingw.s
===================================================================
--- lld/trunk/test/COFF/subsystem-inference-mingw.s
+++ lld/trunk/test/COFF/subsystem-inference-mingw.s
@@ -0,0 +1,17 @@
+# REQUIRES: x86
+# RUN: llvm-mc -triple=x86_64-windows-gnu %s -filetype=obj -o %t.o
+
+# RUN: lld-link -lldmingw %t.o -out:%t.exe
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
+
+# CHECK: AddressOfEntryPoint: 0x1001
+# CHECK: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_CUI (0x3)
+
+ .text
+ .globl foo
+ .globl mainCRTStartup
+foo:
+ ret
+mainCRTStartup:
+ call foo
+ ret
Index: lld/trunk/COFF/Driver.cpp
===================================================================
--- lld/trunk/COFF/Driver.cpp
+++ lld/trunk/COFF/Driver.cpp
@@ -430,6 +430,11 @@
assert(Config->Subsystem != IMAGE_SUBSYSTEM_UNKNOWN &&
"must handle /subsystem before calling this");
+ if (Config->MinGW)
+ return mangle(Config->Subsystem == IMAGE_SUBSYSTEM_WINDOWS_GUI
+ ? "WinMainCRTStartup"
+ : "mainCRTStartup");
+
if (Config->Subsystem == IMAGE_SUBSYSTEM_WINDOWS_GUI) {
if (findUnderscoreMangle("wWinMain")) {
if (!findUnderscoreMangle("WinMain"))
@@ -449,6 +454,8 @@
WindowsSubsystem LinkerDriver::inferSubsystem() {
if (Config->DLL)
return IMAGE_SUBSYSTEM_WINDOWS_GUI;
+ if (Config->MinGW)
+ return IMAGE_SUBSYSTEM_WINDOWS_CUI;
// Note that link.exe infers the subsystem from the presence of these
// functions even if /entry: or /nodefaultlib are passed which causes them
// to not be called.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D52931.168510.patch
Type: text/x-patch
Size: 3302 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20181005/ff3e31cb/attachment.bin>
More information about the llvm-commits
mailing list