diff options
author | Vineet Gupta <vgupta@synopsys.com> | 2015-02-14 15:25:43 +0530 |
---|---|---|
committer | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2015-02-16 21:52:13 +0100 |
commit | 65bc357213f1c08e339757923740f5d68212cf76 (patch) | |
tree | 32cf153ea1fb1843987041386a735c3bdf985807 /libc/sysdeps | |
parent | 90b115c036d68c4c581ae974cdbf5352ad7daa84 (diff) |
ARC: sigaction: fold default sigrestorer into "C"
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Diffstat (limited to 'libc/sysdeps')
-rw-r--r-- | libc/sysdeps/linux/arc/Makefile.arch | 3 | ||||
-rw-r--r-- | libc/sysdeps/linux/arc/sigaction.c | 14 | ||||
-rw-r--r-- | libc/sysdeps/linux/arc/sigrestorer.S | 21 |
3 files changed, 8 insertions, 30 deletions
diff --git a/libc/sysdeps/linux/arc/Makefile.arch b/libc/sysdeps/linux/arc/Makefile.arch index 656ea3518..1a52fc9bf 100644 --- a/libc/sysdeps/linux/arc/Makefile.arch +++ b/libc/sysdeps/linux/arc/Makefile.arch @@ -7,5 +7,4 @@ CSRC-y := syscall.c sigaction.c __syscall_error.c cacheflush.c -SSRC-y := sigrestorer.S __longjmp.S setjmp.S bsd-setjmp.S bsd-_setjmp.S \ - vfork.S clone.S +SSRC-y := __longjmp.S setjmp.S bsd-setjmp.S bsd-_setjmp.S vfork.S clone.S diff --git a/libc/sysdeps/linux/arc/sigaction.c b/libc/sysdeps/linux/arc/sigaction.c index a34c7cf4c..96c9983b1 100644 --- a/libc/sysdeps/linux/arc/sigaction.c +++ b/libc/sysdeps/linux/arc/sigaction.c @@ -10,8 +10,13 @@ #include <sys/syscall.h> #include <bits/kernel_sigaction.h> -extern void __default_rt_sa_restorer(void); -//libc_hidden_proto(__default_rt_sa_restorer); +/* + * 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; diff --git a/libc/sysdeps/linux/arc/sigrestorer.S b/libc/sysdeps/linux/arc/sigrestorer.S deleted file mode 100644 index 24531d89d..000000000 --- a/libc/sysdeps/linux/arc/sigrestorer.S +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com) - * - * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball. - */ - -#include <sysdep.h> -#include <sys/syscall.h> - -/* - * Provide 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 - */ - -ENTRY(__default_rt_sa_restorer) - mov r8, __NR_rt_sigreturn - ARC_TRAP_INSN -END(__default_rt_sa_restorer) -libc_hidden_def(__default_rt_sa_restorer) |