authorgravatar for koachan@protonmail.comKoakuma <koachan@protonmail.com> 2020-10-27 22:46:18+07:00
committergravatar for koachan@protonmail.comKoakuma <koachan@protonmail.com> 2020-10-27 22:46:18+07:00
log2b87cc7ed31062ca8d814f4971a77952a473703c
tree3e421ff40c494c56cc58c4e77a573de69be7e941
parentcbc8750502630cc38c0c776a76393e766c609124

starting_stack_ptr -> argc_argv_ptr to reflect actual use


1 files changed, 10 insertions(+), 10 deletions(-)

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