|
@@ -10,8 +10,13 @@
|
|
|
#include <sys/syscall.h>
|
|
|
#include <bits/kernel_sigaction.h>
|
|
|
|
|
|
-extern void __default_rt_sa_restorer(void);
|
|
|
-
|
|
|
+
|
|
|
+ * Default sigretrun stub if user doesn't specify SA_RESTORER
|
|
|
+ */
|
|
|
+static void __default_rt_sa_restorer(void)
|
|
|
+{
|
|
|
+ INTERNAL_SYSCALL_NCS(__NR_rt_sigreturn, , 0);
|
|
|
+}
|
|
|
|
|
|
#define SA_RESTORER 0x04000000
|
|
|
|
|
@@ -25,11 +30,6 @@ __libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact)
|
|
|
|
|
|
* SA_RESTORER is only relevant for act != NULL case
|
|
|
* (!act means caller only wants to know @oact)
|
|
|
- *
|
|
|
- * For the normal/default cases (user not providing SA_RESTORER) use
|
|
|
- * a real sigreturn stub to avoid kernel synthesizing one on user stack
|
|
|
- * at runtime, which needs PTE permissions update (hence TLB entry
|
|
|
- * update) and costly cache line flushes for code modification
|
|
|
*/
|
|
|
if (act && !(act->sa_flags & SA_RESTORER)) {
|
|
|
kact.sa_restorer = __default_rt_sa_restorer;
|