| author | |
| committer | |
| log | 1be84a39b8489c3d14d9233c288a505b69665caf |
| tree | 209ac4665178713a6fca1c0417926e7fc27a20eb |
| parent | a8e624d7f1220da166a61c5eb5956a5569188856 |
| signature |
See: https://github.com/llvm/llvm-project/pull/1716803 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; |
| 21 | 21 | ||
| 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 | } |
| 73 | 74 | ||
| 74 | fn _DllMainCRTStartup( | 75 | fn 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 | } |
| 1751 | 1752 |
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 | } |
| 639 | 639 | ||
| 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) { |