[PATCH] sparc: Fix argument passing to __libc_start_main (BZ 32981)
Florian Weimer
fweimer@redhat.com
Tue Jun 3 08:45:40 GMT 2025
* Adhemerval Zanella:
> sparc start.S does not provide the final argument for
> __libc_start_main, which is the highest stack address used to
> update the __libc_stack_end.A
>
> This fixes elf/tst-execstack-prog-static-tunable on sparc64.
> On sparcv9 this does not happen because the kernel puts an
> auxv value, which turns to point to a value in the stack itself.
>
> Checked on sparc64-linux-gnu.
> ---
> sysdeps/sparc/sparc32/start.S | 4 ++++
> sysdeps/sparc/sparc64/start.S | 4 ++++
> 2 files changed, 8 insertions(+)
>
> diff --git a/sysdeps/sparc/sparc32/start.S b/sysdeps/sparc/sparc32/start.S
> index 694b020ce0..cef7c96cac 100644
> --- a/sysdeps/sparc/sparc32/start.S
> +++ b/sysdeps/sparc/sparc32/start.S
> @@ -73,6 +73,10 @@ _start:
> be NULL. */
> mov %g1, %o5
>
> + /* Provide the highest stack address to update the __libc_stack_end (used
> + to enable executable stacks if required). */
> + st %sp, [%sp+23*4]
> +
> /* Let libc do the rest of the initialization, and call main. */
> call __libc_start_main
> nop
> diff --git a/sysdeps/sparc/sparc64/start.S b/sysdeps/sparc/sparc64/start.S
> index c9c25c2e47..08e1e77210 100644
> --- a/sysdeps/sparc/sparc64/start.S
> +++ b/sysdeps/sparc/sparc64/start.S
> @@ -74,6 +74,10 @@ _start:
> be NULL. */
> mov %g1, %o5
>
> + /* Provide the highest stack address to update the __libc_stack_end (used
> + to enable executable stacks if required). */
> + stx %sp, [%sp+STACK_BIAS+22*8]
Double-checked by compiling a similar call. The offsets appear to be
correct.
Reviewed-by: Florian Weimer <fweimer@redhat.com>
Thanks,
Florian
More information about the Libc-alpha
mailing list