diff options
Diffstat (limited to 'arch/mips64')
-rw-r--r-- | arch/mips64/kernel/scall_o32.S | 2 | ||||
-rw-r--r-- | arch/mips64/kernel/signal32.c | 19 |
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."); } |