aboutsummaryrefslogtreecommitdiff
path: root/std/special/bootstrap.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2018-11-27 21:06:35 -0500
committerAndrew Kelley <andrew@ziglang.org>2018-11-27 21:06:35 -0500
commit57f44eb2bd17fc0c4e9d09b8c8621867f784d2f0 (patch)
tree51f46cdc8f8ea0f4e642d62b3bf8fce58034362e /std/special/bootstrap.zig
parent1fb15be05f1037aad53d2db32d13123363365d10 (diff)
parentdd2450b1b21809c3fe62920498c318fbe519f579 (diff)
downloadzig-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.zig18
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);