summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/mips64/kernel/scall_o32.S2
-rw-r--r--arch/mips64/kernel/signal32.c19
-rw-r--r--include/asm-mips64/signal.h1
3 files changed, 21 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."); }
diff --git a/include/asm-mips64/signal.h b/include/asm-mips64/signal.h
index a5fa8ce6b..e8e45dc25 100644
--- a/include/asm-mips64/signal.h
+++ b/include/asm-mips64/signal.h
@@ -21,6 +21,7 @@ typedef struct {
} sigset_t;
typedef unsigned long old_sigset_t; /* at least 32 bits */
+typedef unsigned int old_sigset_t32;
#define SIGHUP 1 /* Hangup (POSIX). */
#define SIGINT 2 /* Interrupt (ANSI). */