diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2018-11-27 21:06:35 -0500 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2018-11-27 21:06:35 -0500 |
| commit | 57f44eb2bd17fc0c4e9d09b8c8621867f784d2f0 (patch) | |
| tree | 51f46cdc8f8ea0f4e642d62b3bf8fce58034362e /std/special/bootstrap.zig | |
| parent | 1fb15be05f1037aad53d2db32d13123363365d10 (diff) | |
| parent | dd2450b1b21809c3fe62920498c318fbe519f579 (diff) | |
| download | zig-57f44eb2bd17fc0c4e9d09b8c8621867f784d2f0.tar.gz zig-57f44eb2bd17fc0c4e9d09b8c8621867f784d2f0.zip | |
Merge branch 'freebsd2'
Tier 2 support for FreeBSD
Diffstat (limited to 'std/special/bootstrap.zig')
| -rw-r--r-- | std/special/bootstrap.zig | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/std/special/bootstrap.zig b/std/special/bootstrap.zig index 53c646abdc..a15be317ab 100644 --- a/std/special/bootstrap.zig +++ b/std/special/bootstrap.zig @@ -20,10 +20,17 @@ comptime { nakedcc fn _start() noreturn { switch (builtin.arch) { - builtin.Arch.x86_64 => { - argc_ptr = asm ("lea (%%rsp), %[argc]" - : [argc] "=r" (-> [*]usize) - ); + builtin.Arch.x86_64 => switch (builtin.os) { + builtin.Os.freebsd => { + argc_ptr = asm ("lea (%%rdi), %[argc]" + : [argc] "=r" (-> [*]usize) + ); + }, + else => { + argc_ptr = asm ("lea (%%rsp), %[argc]" + : [argc] "=r" (-> [*]usize) + ); + }, }, builtin.Arch.i386 => { argc_ptr = asm ("lea (%%esp), %[argc]" @@ -50,6 +57,9 @@ extern fn WinMainCRTStartup() noreturn { // TODO https://github.com/ziglang/zig/issues/265 fn posixCallMainAndExit() noreturn { + if (builtin.os == builtin.Os.freebsd) { + @setAlignStack(16); + } const argc = argc_ptr[0]; const argv = @ptrCast([*][*]u8, argc_ptr + 1); |
