]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
sparc: Fix sparc32 Fix argument passing to __libc_start_main (BZ 32981)
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Fri, 13 Jun 2025 14:23:44 +0000 (11:23 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Wed, 18 Jun 2025 14:20:34 +0000 (11:20 -0300)
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].

sysdeps/sparc/sparc32/start.S

index cef7c96cac7253f9093c3bc6d54d714f17013ca5..8393760da684d4f333090d2dfb2aecbe8a8e87e9 100644 (file)
@@ -35,6 +35,7 @@
 
 #include <sysdep.h>
 
+#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