@@ -48,3 +48,5 @@ CFLAGS-sigsuspend.c = -fexceptions -fasynchronous-unwind-tables
CFLAGS-sigtimedwait.c = -fexceptions -fasynchronous-unwind-tables
CFLAGS-sigwait.c = -fexceptions -fasynchronous-unwind-tables
CFLAGS-sigwaitinfo.c = -fexceptions -fasynchronous-unwind-tables
+
+CFLAGS-sigreturn.c = $(no-stack-protector)
@@ -65,7 +65,9 @@ libc_hidden_def (__libc_sigaction)
#include <nptl/sigaction.c>
-static void
+static
+inhibit_stack_protector
+void
__rt_sigreturn_stub (void)
{
__asm__ ("mov %0, %%g1\n\t"
@@ -74,7 +76,9 @@ __rt_sigreturn_stub (void)
: "i" (__NR_rt_sigreturn));
}
-static void
+static
+inhibit_stack_protector
+void
__sigreturn_stub (void)
{
__asm__ ("mov %0, %%g1\n\t"
@@ -66,7 +66,9 @@ libc_hidden_def (__libc_sigaction)
#include <nptl/sigaction.c>
-static void
+static
+inhibit_stack_protector
+void
__rt_sigreturn_stub (void)
{
__asm__ ("mov %0, %%g1\n\t"
From: Nick Alcock <nick.alcock@oracle.com> These are called from the kernel with the stack at a carefully- chosen location so that the stack frame can be restored: they must not move the stack pointer lest garbage be restored into the registers. We explicitly inhibit protection for SPARC and for signal/sigreturn.c: other arches either define their sigreturn stubs in .S files, or (i386, x86_64, mips) use macros expanding to top-level asm blocks and explicit labels in the text section to mock up a "function" without telling the compiler that one is there at all. v2: New. v3: Use $(no-stack-protector). v4: Use inhibit_stack_protector. v7: Add sigreturn.c. * signal/Makefile (CFLAGS-sigreturn.c): Use $(no-stack-protector). * sysdeps/unix/sysv/linux/sparc/sparc64/sigaction.c: (__rt_sigreturn_stub): Use inhibit_stack_protector. * sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c (__rt_sigreturn_stub): Likewise. (__sigreturn_stub): Likewise. --- signal/Makefile | 2 ++ sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c | 8 ++++++-- sysdeps/unix/sysv/linux/sparc/sparc64/sigaction.c | 4 +++- 3 files changed, 11 insertions(+), 3 deletions(-)