aboutsummaryrefslogtreecommitdiff
path: root/lib/std/start.zig
diff options
context:
space:
mode:
authorJacob G-W <jacoblevgw@gmail.com>2021-06-12 16:51:51 -0400
committerAndrew Kelley <andrew@ziglang.org>2021-07-08 14:10:49 -0700
commit72bb6bb1430f0b3b32f0cb5e52054293a59abca6 (patch)
tree2a9fd4c878ef85491f09ae5290d75e2fe76c2197 /lib/std/start.zig
parent3e59c1502556493b29171c2d22447dd70670ca02 (diff)
downloadzig-72bb6bb1430f0b3b32f0cb5e52054293a59abca6.tar.gz
zig-72bb6bb1430f0b3b32f0cb5e52054293a59abca6.zip
plan9 linker: produce an object file that can actually work!!!
Diffstat (limited to 'lib/std/start.zig')
-rw-r--r--lib/std/start.zig59
1 files changed, 36 insertions, 23 deletions
diff --git a/lib/std/start.zig b/lib/std/start.zig
index 0a6c0320d6..608b3997f1 100644
--- a/lib/std/start.zig
+++ b/lib/std/start.zig
@@ -95,30 +95,43 @@ fn _start2() callconv(.Naked) noreturn {
}
fn exit2(code: usize) noreturn {
- switch (builtin.stage2_arch) {
- .x86_64 => {
- asm volatile ("syscall"
- :
- : [number] "{rax}" (231),
- [arg1] "{rdi}" (code)
- : "rcx", "r11", "memory"
- );
- },
- .arm => {
- asm volatile ("svc #0"
- :
- : [number] "{r7}" (1),
- [arg1] "{r0}" (code)
- : "memory"
- );
+ switch (builtin.stage2_os) {
+ .linux => switch (builtin.stage2_arch) {
+ .x86_64 => {
+ asm volatile ("syscall"
+ :
+ : [number] "{rax}" (231),
+ [arg1] "{rdi}" (code)
+ : "rcx", "r11", "memory"
+ );
+ },
+ .arm => {
+ asm volatile ("svc #0"
+ :
+ : [number] "{r7}" (1),
+ [arg1] "{r0}" (code)
+ : "memory"
+ );
+ },
+ .aarch64 => {
+ asm volatile ("svc #0"
+ :
+ : [number] "{x8}" (93),
+ [arg1] "{x0}" (code)
+ : "memory", "cc"
+ );
+ },
+ else => @compileError("TODO"),
},
- .aarch64 => {
- asm volatile ("svc #0"
- :
- : [number] "{x8}" (93),
- [arg1] "{x0}" (code)
- : "memory", "cc"
- );
+ .plan9 => switch (builtin.stage2_arch) {
+ .x86_64 => {
+ asm volatile ("syscall"
+ :
+ : [number] "{rbp}" (8)
+ : "rcx", "r11", "memory"
+ );
+ },
+ else => @compileError("TODO"),
},
else => @compileError("TODO"),
}