On 26 March 2015 at 09:55, Vineet Gupta <vineet.gup...@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 <abrod...@synopsys.com>
> Signed-off-by: Vineet Gupta <vgu...@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@uclibc.org
> http://lists.busybox.net/mailman/listinfo/uclibc
_______________________________________________
uClibc mailing list
uClibc@uclibc.org
http://lists.busybox.net/mailman/listinfo/uclibc

Reply via email to