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