[klibc] sparc: Set sa_restorer for signals and disable executable stack
authorBen Hutchings <ben@decadent.org.uk>
Thu, 30 Apr 2020 12:56:47 +0000 (13:56 +0100)
committerThorsten Glaser <tg@mirbsd.de>
Wed, 26 May 2021 22:12:10 +0000 (23:12 +0100)
Origin: https://git.kernel.org/pub/scm/libs/klibc/klibc.git/commit/?id=05350b72cace18417c1ba00c4796a5e19ebb908b

sparc allows specifiying a signal restorer in the usual way.  We
should do this to avoid needing an executable stack.

* Define a __sigreturn() routine that calls rt_sigreturn
* Force the SA_RESTORER flag on for all signal handlers, and set
  __sigreturn as the restorer if none is already set
* Force the SA_SIGINFO flag on for all signal handlers, so that we can
  always return from them with rt_sigreturn
* Set KLIBCEXECSTACK=n

Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Gbp-Pq: Name 0005-klibc-sparc-Set-sa_restorer-for-signals-and-disable-.patch

usr/include/arch/sparc/klibc/archconfig.h
usr/klibc/SYSCALLS.def
usr/klibc/arch/sparc/MCONFIG

index 70d5ef083965dc122207e95040fe08d30bcb2e37..651b213d5d5a6328361296ac2a3db45c58a94482 100644 (file)
@@ -12,4 +12,9 @@
 #define _KLIBC_USE_RT_SIG 1    /* Use rt_* signals */
 #define _KLIBC_SYS_SOCKETCALL 1 /* Use sys_socketcall unconditionally */
 
+/* So that we can avoid stack trampolines */
+#define _KLIBC_NEEDS_SA_RESTORER 1
+/* Our restorer will call rt_sigreturn() */
+#define _KLIBC_NEEDS_SA_SIGINFO 1
+
 #endif                         /* _KLIBC_ARCHCONFIG_H */
index 30ff58b88d98e3359859478c78824c0101b4dc99..b639fceb19aee84a27b45087cbb1877db01d98e3 100644 (file)
@@ -228,7 +228,7 @@ int sigprocmask(int, const sigset_t *, sigset_t *);
 <sh,sparc,alpha,ppc,sparc64> int sigsuspend::__sigsuspend_s(sigset_t);
 <arm,frv,i386,m68k,mn10300,s390,s390x> int sigsuspend::__sigsuspend_xxs(int, int, sigset_t);
 #endif
-<s390,s390x,sparc64> void rt_sigreturn::__sigreturn();
+<s390,s390x,sparc,sparc64> void rt_sigreturn::__sigreturn();
 int kill(pid_t, int);
 <?> unsigned int alarm(unsigned int);
 int getitimer(int, struct itimerval *);
index cabc7cd45bc4c87bdf5bfeaa003c49fd7363be2e..fb68ba3f5e5946d18c3a7a634ab67dba2781d651 100644 (file)
@@ -18,6 +18,5 @@ KLIBCARCHREQFLAGS     += -D__sparc32__
 # and call instructions have a 30-bit signed offset, << 2.
 KLIBCSHAREDFLAGS        = -Ttext-segment 0x40000000
 
-# Kernel uses stack trampoline for signal return unless we set
-# sa_restorer
-KLIBCEXECSTACK := y
+# Kernel uses our sa_restorer for signal return
+KLIBCEXECSTACK := n