| ... | @@ -1,5 +1,3 @@ | ... | @@ -1,5 +1,3 @@ |
| 1 | // TODO: A lot of this file is very likely wrong. | | |
| 2 | | | |
| 3 | const builtin = @import("builtin"); | 1 | const builtin = @import("builtin"); |
| 4 | const std = @import("../../std.zig"); | 2 | const std = @import("../../std.zig"); |
| 5 | const SYS = std.os.linux.SYS; | 3 | const SYS = std.os.linux.SYS; |
| ... | @@ -84,20 +82,20 @@ pub fn syscall6( | ... | @@ -84,20 +82,20 @@ pub fn syscall6( |
| 84 | | 82 | |
| 85 | pub fn clone() callconv(.naked) u32 { | 83 | pub fn clone() callconv(.naked) u32 { |
| 86 | asm volatile ( | 84 | asm volatile ( |
| 87 | \\ movl $56,%%eax // SYS_clone | 85 | \\ movl $0x40000038,%%eax // SYS_clone |
| 88 | \\ movq %%rdi,%%r11 | 86 | \\ mov %%rdi,%%r11 |
| 89 | \\ movq %%rdx,%%rdi | 87 | \\ mov %%rdx,%%rdi |
| 90 | \\ movq %%r8,%%rdx | 88 | \\ mov %%r8,%%rdx |
| 91 | \\ movq %%r9,%%r8 | 89 | \\ mov %%r9,%%r8 |
| 92 | \\ movq 8(%%rsp),%%r10 | 90 | \\ mov 8(%%rsp),%%r10 |
| 93 | \\ movq %%r11,%%r9 | 91 | \\ mov %%r11,%%r9 |
| 94 | \\ andq $-16,%%rsi | 92 | \\ and $-16,%%rsi |
| 95 | \\ subq $8,%%rsi | 93 | \\ sub $8,%%rsi |
| 96 | \\ movq %%rcx,(%%rsi) | 94 | \\ mov %%rcx,(%%rsi) |
| 97 | \\ syscall | 95 | \\ syscall |
| 98 | \\ testq %%rax,%%rax | 96 | \\ test %%eax,%%eax |
| 99 | \\ jz 1f | 97 | \\ jz 1f |
| 100 | \\ retq | 98 | \\ ret |
| 101 | \\ | 99 | \\ |
| 102 | \\1: | 100 | \\1: |
| 103 | ); | 101 | ); |
| ... | @@ -105,12 +103,12 @@ pub fn clone() callconv(.naked) u32 { | ... | @@ -105,12 +103,12 @@ pub fn clone() callconv(.naked) u32 { |
| 105 | \\ .cfi_undefined %%rip | 103 | \\ .cfi_undefined %%rip |
| 106 | ); | 104 | ); |
| 107 | asm volatile ( | 105 | asm volatile ( |
| 108 | \\ xorl %%ebp,%%ebp | 106 | \\ xor %%ebp,%%ebp |
| 109 | \\ | 107 | \\ |
| 110 | \\ popq %%rdi | 108 | \\ pop %%rdi |
| 111 | \\ callq *%%r9 | 109 | \\ call *%%r9 |
| 112 | \\ movl %%eax,%%edi | 110 | \\ mov %%eax,%%edi |
| 113 | \\ movl $60,%%eax // SYS_exit | 111 | \\ movl $0x4000003c,%%eax // SYS_exit |
| 114 | \\ syscall | 112 | \\ syscall |
| 115 | \\ | 113 | \\ |
| 116 | ); | 114 | ); |