[PATCH v2] sparc: Remove unwind information from signal return stubs [BZ #31244]
Adhemerval Zanella Netto
adhemerval.zanella@linaro.org
Tue Jan 16 13:59:53 GMT 2024
On 16/01/24 05:31, Daniel Cederman wrote:
> The functions were previously written in C, but were not compiled
> with unwind information. The ENTRY/END macros includes .cfi_startproc
> and .cfi_endproc which adds unwind information. This caused the
> tests cleanup-8 and cleanup-10 in the GCC testsuite to fail.
> This patch adds a version of the ENTRY/END macros without the
> CFI instructions that can be used instead.
>
> sigaction registers a restorer address that is located two instructions
> before the stub function. This patch adds a two instruction padding to
> avoid that the unwinder accesses the unwind information from the function
> that the linker has placed right before it in memory. This fixes an issue
> with pthread_cancel that caused tst-mutex8-static (and other tests) to fail.
>
> Signed-off-by: Daniel Cederman <cederman@gaisler.com>
LGTM, thanks.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
> ---
> sysdeps/sparc/sysdep.h | 9 +++++++++
> .../unix/sysv/linux/sparc/sparc32/sigreturn_stub.S | 11 +++++++----
> 2 files changed, 16 insertions(+), 4 deletions(-)
>
> diff --git a/sysdeps/sparc/sysdep.h b/sysdeps/sparc/sysdep.h
> index c00fe79fec..44a6952bff 100644
> --- a/sysdeps/sparc/sysdep.h
> +++ b/sysdeps/sparc/sysdep.h
> @@ -76,6 +76,15 @@ C_LABEL(name) \
> cfi_endproc; \
> .size name, . - name
>
> +#define ENTRY_NOCFI(name) \
> + .align 4; \
> + .global C_SYMBOL_NAME(name); \
> + .type name, @function; \
> +C_LABEL(name)
> +
> +#define END_NOCFI(name) \
> + .size name, . - name
> +
> #undef LOC
> #define LOC(name) .L##name
>
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/sigreturn_stub.S b/sysdeps/unix/sysv/linux/sparc/sparc32/sigreturn_stub.S
> index 832223f8ce..21d36c50df 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/sigreturn_stub.S
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/sigreturn_stub.S
> @@ -23,12 +23,15 @@
>
> [1] https://lkml.org/lkml/2016/5/27/465 */
>
> -ENTRY (__rt_sigreturn_stub)
> + nop
> + nop
> +
> +ENTRY_NOCFI (__rt_sigreturn_stub)
> mov __NR_rt_sigreturn, %g1
> ta 0x10
> -END (__rt_sigreturn_stub)
> +END_NOCFI (__rt_sigreturn_stub)
>
> -ENTRY (__sigreturn_stub)
> +ENTRY_NOCFI (__sigreturn_stub)
> mov __NR_sigreturn, %g1
> ta 0x10
> -END (__sigreturn_stub)
> +END_NOCFI (__sigreturn_stub)
More information about the Libc-alpha
mailing list