Hi, Thomas > > On 2023-07-12 17:17:39+0800, Zhangjin Wu wrote: > [...] > > > +static void exit(int); > > > + > > > +void _start_c(long *sp) > > > +{ > > > + int argc, i; > > > + char **argv; > > > + char **envp; > > > + /* silence potential warning: conflicting types for 'main' */ > > > + _nolibc_main_fn _nolibc_main __asm__ ("main"); > > > > What about the stackprotector initialization? > > It would really fit great into this series. > > > > Ok, which gcc version supports stackprotector? seems the test even skip > on gcc 10, I will find one to verify the code change. > Thomas, please ignore this question, I forgot some options in my own script. Best regards, Zhangjin > > > + > > > + /* > > > + * sp : argc <-- argument count, required by main() > > > + * argv: argv[0] <-- argument vector, required by main() > > > + * argv[1] > > > + * ... > > > + * argv[argc-1] > > > + * null > > > + * envp: envp[0] <-- environment variables, required by main() and getenv() > > > + * envp[1] > > > + * ... > > > + * null > > > + * _auxv: auxv[0] <-- auxiliary vector, required by getauxval() > > > + * auxv[1] > > > + * ... > > > + * null > > > + */ > > > + > > > + /* assign argc and argv */ > > > + argc = sp[0]; > > > + argv = (void *)(sp + 1); > > > > Bit of a weird mismatch between array syntax and pointer arithmetic. > >