[PATCH 3/4] ARC/signal: shield sa_restorer from compiler toggle side-effects

Bernhard Reutner-Fischer rep.dot.nop at gmail.com
Thu Mar 26 11:19:04 UTC 2015


On 26 March 2015 at 09:55, Vineet Gupta <Vineet.Gupta1 at synopsys.com> wrote:
> when building uClibc with -O0 (DODEBUG build) the default sigrestorer
> had some extra glue code generated for stack manipulation which was
> messing up resume from signal path.
>
> So annotate the function with -Os so that gcc would only generate the
> bare min 2 instruction TRAP sequence

.. which is the reason the rt_sigrestorer and default_sigrestorer are
usually implemented in a separate file (usually asm, IIRC).
I think the toplevel impl that is used in x86_64 works fine and has
the nice benefit to be in one source-file.
See e.g.: libc/sysdeps/linux/x86_64/sigaction.c

This would have avoided all the sigaction dance in
65bc357213f1c08e339757923740f5d68212cf76 and
f74294bd6768af59e33dc14c6fed41f01d0adc5b it seems, but anyway.

Do you think the x86_64 scheme makes sense for you and you can peruse it?

thanks,
>
> Reported-and-Debugged-by: Alexey Brodkin <abrodkin at synopsys.com>
> Signed-off-by: Vineet Gupta <vgupta at synopsys.com>
> ---
>  libc/sysdeps/linux/arc/sigaction.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/libc/sysdeps/linux/arc/sigaction.c b/libc/sysdeps/linux/arc/sigaction.c
> index 4a4c9e2d0821..3e2f91cd73e8 100644
> --- a/libc/sysdeps/linux/arc/sigaction.c
> +++ b/libc/sysdeps/linux/arc/sigaction.c
> @@ -13,7 +13,8 @@
>  /*
>   * Default sigretrun stub if user doesn't specify SA_RESTORER
>   */
> -static void __default_rt_sa_restorer(void)
> +static void __attribute__((noinline, optimize ("-Os")))
> +__default_rt_sa_restorer(void)
>  {
>         INTERNAL_SYSCALL_NCS(__NR_rt_sigreturn, , 0);
>  }
> --
> 1.9.1
>
> _______________________________________________
> uClibc mailing list
> uClibc at uclibc.org
> http://lists.busybox.net/mailman/listinfo/uclibc


More information about the uClibc mailing list