| ... | ... | @@ -11,7 +11,7 @@ const builtin = std.builtin; |
| 11 | 11 | const assert = std.debug.assert; |
| 12 | 12 | const uefi = std.os.uefi; |
| 13 | 13 | |
| 14 | | var starting_stack_ptr: [*]usize = undefined; |
| 14 | var argc_argv_ptr: [*]usize = undefined; |
| 15 | 15 | |
| 16 | 16 | const start_sym_name = if (builtin.arch.isMIPS()) "__start" else "_start"; |
| 17 | 17 | |
| ... | ... | @@ -102,26 +102,26 @@ fn _start() callconv(.Naked) noreturn { |
| 102 | 102 | |
| 103 | 103 | switch (builtin.arch) { |
| 104 | 104 | .x86_64 => { |
| 105 | | starting_stack_ptr = asm volatile ( |
| 105 | argc_argv_ptr = asm volatile ( |
| 106 | 106 | \\ xor %%rbp, %%rbp |
| 107 | 107 | : [argc] "={rsp}" (-> [*]usize) |
| 108 | 108 | ); |
| 109 | 109 | }, |
| 110 | 110 | .i386 => { |
| 111 | | starting_stack_ptr = asm volatile ( |
| 111 | argc_argv_ptr = asm volatile ( |
| 112 | 112 | \\ xor %%ebp, %%ebp |
| 113 | 113 | : [argc] "={esp}" (-> [*]usize) |
| 114 | 114 | ); |
| 115 | 115 | }, |
| 116 | 116 | .aarch64, .aarch64_be, .arm, .armeb => { |
| 117 | | starting_stack_ptr = asm volatile ( |
| 117 | argc_argv_ptr = asm volatile ( |
| 118 | 118 | \\ mov fp, #0 |
| 119 | 119 | \\ mov lr, #0 |
| 120 | 120 | : [argc] "={sp}" (-> [*]usize) |
| 121 | 121 | ); |
| 122 | 122 | }, |
| 123 | 123 | .riscv64 => { |
| 124 | | starting_stack_ptr = asm volatile ( |
| 124 | argc_argv_ptr = asm volatile ( |
| 125 | 125 | \\ li s0, 0 |
| 126 | 126 | \\ li ra, 0 |
| 127 | 127 | : [argc] "={sp}" (-> [*]usize) |
| ... | ... | @@ -129,7 +129,7 @@ fn _start() callconv(.Naked) noreturn { |
| 129 | 129 | }, |
| 130 | 130 | .mips, .mipsel => { |
| 131 | 131 | // The lr is already zeroed on entry, as specified by the ABI. |
| 132 | | starting_stack_ptr = asm volatile ( |
| 132 | argc_argv_ptr = asm volatile ( |
| 133 | 133 | \\ move $fp, $0 |
| 134 | 134 | : [argc] "={sp}" (-> [*]usize) |
| 135 | 135 | ); |
| ... | ... | @@ -137,7 +137,7 @@ fn _start() callconv(.Naked) noreturn { |
| 137 | 137 | .powerpc64le => { |
| 138 | 138 | // Setup the initial stack frame and clear the back chain pointer. |
| 139 | 139 | // TODO: Support powerpc64 (big endian) on ELFv2. |
| 140 | | starting_stack_ptr = asm volatile ( |
| 140 | argc_argv_ptr = asm volatile ( |
| 141 | 141 | \\ mr 4, 1 |
| 142 | 142 | \\ li 0, 0 |
| 143 | 143 | \\ stdu 0, -32(1) |
| ... | ... | @@ -149,7 +149,7 @@ fn _start() callconv(.Naked) noreturn { |
| 149 | 149 | }, |
| 150 | 150 | .sparcv9 => { |
| 151 | 151 | // argc is stored after a register window (16 registers) plus stack bias |
| 152 | | starting_stack_ptr = asm ( |
| 152 | argc_argv_ptr = asm ( |
| 153 | 153 | \\ mov %%g0, %%i6 |
| 154 | 154 | \\ add %%o6, 2175, %[argc] |
| 155 | 155 | : [argc] "=r" (-> [*]usize) |
| ... | ... | @@ -190,8 +190,8 @@ fn posixCallMainAndExit() noreturn { |
| 190 | 190 | if (builtin.os.tag == .freebsd) { |
| 191 | 191 | @setAlignStack(16); |
| 192 | 192 | } |
| 193 | | const argc = starting_stack_ptr[0]; |
| 194 | | const argv = @ptrCast([*][*:0]u8, starting_stack_ptr + 1); |
| 193 | const argc = argc_argv_ptr[0]; |
| 194 | const argv = @ptrCast([*][*:0]u8, argc_argv_ptr + 1); |
| 195 | 195 | |
| 196 | 196 | const envp_optional = @ptrCast([*:null]?[*:0]u8, @alignCast(@alignOf(usize), argv + argc + 1)); |
| 197 | 197 | var envp_count: usize = 0; |