From: Adhemerval Zanella Date: Fri, 13 Jun 2025 14:23:44 +0000 (-0300) Subject: sparc: Fix sparc32 Fix argument passing to __libc_start_main (BZ 32981) X-Git-Tag: glibc-2.42~110 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8788bd77d68c6429c7f2dcbd22765525555c3cd8;p=thirdparty%2Fglibc.git sparc: Fix sparc32 Fix argument passing to __libc_start_main (BZ 32981) Commit 404526ee2e58f3c075253943ddc9988f4bd6b80c changed _start to write the last argument to __libc_start_main without taking into consideration that the function did not create a full stack frame, which leads to overwriting the argv[0]. --- diff --git a/sysdeps/sparc/sparc32/start.S b/sysdeps/sparc/sparc32/start.S index cef7c96cac..8393760da6 100644 --- a/sysdeps/sparc/sparc32/start.S +++ b/sysdeps/sparc/sparc32/start.S @@ -35,6 +35,7 @@ #include +#define FRAME_SIZE 104 .section ".text" .align 4 @@ -48,12 +49,12 @@ _start: /* Terminate the stack frame, and reserve space for functions to drop their arguments. */ mov %g0, %fp - sub %sp, 6*4, %sp + sub %sp, FRAME_SIZE, %sp /* Extract the arguments and environment as encoded on the stack. The argument info starts after one register window (16 words) past the SP. */ - ld [%sp+22*4], %o1 - add %sp, 23*4, %o2 + ld [%sp+168], %o1 + add %sp, 172, %o2 /* Load the addresses of the user entry points. */ #ifndef PIC