authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-01-19 23:09:56+01:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-04-25 21:54:48+02:00
log1be84a39b8489c3d14d9233c288a505b69665caf
tree209ac4665178713a6fca1c0417926e7fc27a20eb
parenta8e624d7f1220da166a61c5eb5956a5569188856
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

compiler: fix and simplify DllMainCRTStartup handling

See: https://github.com/llvm/llvm-project/pull/171680

3 files changed, 6 insertions(+), 14 deletions(-)

lib/std/start.zig+4-3
...@@ -20,8 +20,9 @@ comptime {...@@ -20,8 +20,9 @@ comptime {
20 _ = root;20 _ = root;
2121
22 if (builtin.output_mode == .Lib and builtin.link_mode == .dynamic) {22 if (builtin.output_mode == .Lib and builtin.link_mode == .dynamic) {
23 if (native_os == .windows and !@hasDecl(root, "_DllMainCRTStartup")) {23 const dll_main_crt_startup = if (builtin.abi.isGnu()) "DllMainCRTStartup" else "_DllMainCRTStartup";
24 @export(&_DllMainCRTStartup, .{ .name = "_DllMainCRTStartup" });24 if (native_os == .windows and !builtin.link_libc and !@hasDecl(root, dll_main_crt_startup)) {
25 @export(&DllMainCRTStartup, .{ .name = dll_main_crt_startup });
25 }26 }
26 } else if (builtin.output_mode == .Exe or @hasDecl(root, "main")) {27 } else if (builtin.output_mode == .Exe or @hasDecl(root, "main")) {
27 if (builtin.link_libc and @hasDecl(root, "main")) {28 if (builtin.link_libc and @hasDecl(root, "main")) {
...@@ -71,7 +72,7 @@ comptime {...@@ -71,7 +72,7 @@ comptime {
71 }72 }
72}73}
7374
74fn _DllMainCRTStartup(75fn DllMainCRTStartup(
75 hinstDLL: std.os.windows.HINSTANCE,76 hinstDLL: std.os.windows.HINSTANCE,
76 fdwReason: std.os.windows.DWORD,77 fdwReason: std.os.windows.DWORD,
77 lpReserved: std.os.windows.LPVOID,78 lpReserved: std.os.windows.LPVOID,
src/codegen/llvm.zig+1
...@@ -1746,6 +1746,7 @@ pub const Object = struct {...@@ -1746,6 +1746,7 @@ pub const Object = struct {
1746 if (name.eqlSlice("WinMainCRTStartup", ip)) flags.winmain_crt_startup = true;1746 if (name.eqlSlice("WinMainCRTStartup", ip)) flags.winmain_crt_startup = true;
1747 if (name.eqlSlice("wWinMainCRTStartup", ip)) flags.wwinmain_crt_startup = true;1747 if (name.eqlSlice("wWinMainCRTStartup", ip)) flags.wwinmain_crt_startup = true;
1748 if (name.eqlSlice("DllMainCRTStartup", ip)) flags.dllmain_crt_startup = true;1748 if (name.eqlSlice("DllMainCRTStartup", ip)) flags.dllmain_crt_startup = true;
1749 if (name.eqlSlice("_DllMainCRTStartup", ip)) flags.dllmain_crt_startup = true;
1749 }1750 }
1750 }1751 }
17511752
src/link/Lld.zig+1-11
...@@ -637,17 +637,7 @@ fn coffLink(lld: *Lld, arena: Allocator) !void {...@@ -637,17 +637,7 @@ fn coffLink(lld: *Lld, arena: Allocator) !void {
637 try argv.append("-ALTERNATENAME:__image_base__=__ImageBase");637 try argv.append("-ALTERNATENAME:__image_base__=__ImageBase");
638 }638 }
639639
640 if (is_dyn_lib) {640 try argv.append(try comp.crtFileAsString(arena, if (is_dyn_lib) "dllcrt2.obj" else "crt2.obj"));
641 try argv.append(try comp.crtFileAsString(arena, "dllcrt2.obj"));
642 if (target.cpu.arch == .x86) {
643 try argv.append("-ALTERNATENAME:__DllMainCRTStartup@12=_DllMainCRTStartup@12");
644 } else {
645 try argv.append("-ALTERNATENAME:_DllMainCRTStartup=DllMainCRTStartup");
646 }
647 } else {
648 try argv.append(try comp.crtFileAsString(arena, "crt2.obj"));
649 }
650
651 try argv.append(try comp.crtFileAsString(arena, "libmingw32.lib"));641 try argv.append(try comp.crtFileAsString(arena, "libmingw32.lib"));
652 } else {642 } else {
653 try argv.append(switch (comp.config.link_mode) {643 try argv.append(switch (comp.config.link_mode) {