summaryrefslogtreecommitdiffstats
path: root/arch/mips64
diff options
context:
space:
mode:
Diffstat (limited to 'arch/mips64')
-rw-r--r--arch/mips64/kernel/scall_o32.S2
-rw-r--r--arch/mips64/kernel/signal32.c19
2 files changed, 20 insertions, 1 deletions
diff --git a/arch/mips64/kernel/scall_o32.S b/arch/mips64/kernel/scall_o32.S
index 646876a04..847474ff3 100644
--- a/arch/mips64/kernel/scall_o32.S
+++ b/arch/mips64/kernel/scall_o32.S
@@ -328,7 +328,7 @@ illegal_syscall:
sys sys_ni_syscall 0 /* sys_modify_ldt */
sys sys_adjtimex 1
sys sys_mprotect 3 /* 4125 */
- sys sys_sigprocmask 3
+ sys sys32_sigprocmask 3
sys sys_create_module 2
sys sys_init_module 5
sys sys_delete_module 1
diff --git a/arch/mips64/kernel/signal32.c b/arch/mips64/kernel/signal32.c
index 5a611272c..5a1ee45b0 100644
--- a/arch/mips64/kernel/signal32.c
+++ b/arch/mips64/kernel/signal32.c
@@ -684,6 +684,25 @@ printk("%s: delivering signal.\n", __FUNCTION__);
return 0;
}
+extern asmlinkage int sys_sigprocmask(int how, old_sigset_t *set,
+ old_sigset_t *oset);
+
+asmlinkage int sys32_sigprocmask(int how, old_sigset_t32 *set,
+ old_sigset_t32 *oset)
+{
+ old_sigset_t s;
+ int ret;
+ mm_segment_t old_fs = get_fs();
+
+ if (set && get_user (s, set)) return -EFAULT;
+ set_fs (KERNEL_DS);
+ ret = sys_sigprocmask(how, set ? &s : NULL, oset ? &s : NULL);
+ set_fs (old_fs);
+ if (ret) return ret;
+ if (oset && put_user (s, oset)) return -EFAULT;
+ return 0;
+}
+
/* Dummies ... */
asmlinkage void sys32_sigpending(void) { panic(__FUNCTION__ " called."); }