diff options
| author | Jacob G-W <jacoblevgw@gmail.com> | 2021-06-12 16:51:51 -0400 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2021-07-08 14:10:49 -0700 |
| commit | 72bb6bb1430f0b3b32f0cb5e52054293a59abca6 (patch) | |
| tree | 2a9fd4c878ef85491f09ae5290d75e2fe76c2197 /lib/std/start.zig | |
| parent | 3e59c1502556493b29171c2d22447dd70670ca02 (diff) | |
| download | zig-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.zig | 59 |
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"), } |
