Commit daebc586 authored by Stephen Rothwell's avatar Stephen Rothwell Committed by Vojtech Pavlik

[PATCH] parisc compatibility layer update

At Linux Conf AU, Willy asked me to send any further parisc compatibility
changes directly to you, so this is what I have outstanding.  Basically,
it is just the uses of compat_sigset_t that seemed to have been missed in
the previous merges.
parent d8f19f2c
...@@ -19,7 +19,7 @@ typedef unsigned int elf_greg_t; ...@@ -19,7 +19,7 @@ typedef unsigned int elf_greg_t;
#include <linux/module.h> #include <linux/module.h>
#include <linux/config.h> #include <linux/config.h>
#include <linux/elfcore.h> #include <linux/elfcore.h>
#include <linux/compat.h> #include <linux/compat.h> /* struct compat_timeval */
#define elf_prstatus elf_prstatus32 #define elf_prstatus elf_prstatus32
struct elf_prstatus32 struct elf_prstatus32
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include <linux/ptrace.h> #include <linux/ptrace.h>
#include <linux/unistd.h> #include <linux/unistd.h>
#include <linux/stddef.h> #include <linux/stddef.h>
#include <linux/compat.h>
#include <asm/ucontext.h> #include <asm/ucontext.h>
#include <asm/rt_sigframe.h> #include <asm/rt_sigframe.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
...@@ -97,13 +98,13 @@ sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize, struct pt_regs *regs) ...@@ -97,13 +98,13 @@ sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize, struct pt_regs *regs)
sigset_t saveset, newset; sigset_t saveset, newset;
#ifdef __LP64__ #ifdef __LP64__
/* XXX FIXME -- assumes 32-bit user app! */ /* XXX FIXME -- assumes 32-bit user app! */
sigset_t32 newset32; compat_sigset_t newset32;
/* XXX: Don't preclude handling different sized sigset_t's. */ /* XXX: Don't preclude handling different sized sigset_t's. */
if (sigsetsize != sizeof(sigset_t32)) if (sigsetsize != sizeof(compat_sigset_t))
return -EINVAL; return -EINVAL;
if (copy_from_user(&newset32, (sigset_t32 *)unewset, sizeof(newset32))) if (copy_from_user(&newset32, (compat_sigset_t *)unewset, sizeof(newset32)))
return -EFAULT; return -EFAULT;
newset.sig[0] = newset32.sig[0] | ((unsigned long)newset32.sig[1] << 32); newset.sig[0] = newset32.sig[0] | ((unsigned long)newset32.sig[1] << 32);
......
...@@ -18,22 +18,22 @@ struct k_sigaction32 { ...@@ -18,22 +18,22 @@ struct k_sigaction32 {
}; };
static inline void static inline void
sigset_32to64(sigset_t *s64, sigset_t32 *s32) sigset_32to64(sigset_t *s64, compat_sigset_t *s32)
{ {
s64->sig[0] = s32->sig[0] | ((unsigned long)s32->sig[1] << 32); s64->sig[0] = s32->sig[0] | ((unsigned long)s32->sig[1] << 32);
} }
static inline void static inline void
sigset_64to32(sigset_t32 *s32, sigset_t *s64) sigset_64to32(compat_sigset_t *s32, sigset_t *s64)
{ {
s32->sig[0] = s64->sig[0] & 0xffffffffUL; s32->sig[0] = s64->sig[0] & 0xffffffffUL;
s32->sig[1] = (s64->sig[0] >> 32) & 0xffffffffUL; s32->sig[1] = (s64->sig[0] >> 32) & 0xffffffffUL;
} }
static int static int
put_sigset32(sigset_t32 *up, sigset_t *set, size_t sz) put_sigset32(compat_sigset_t *up, sigset_t *set, size_t sz)
{ {
sigset_t32 s; compat_sigset_t s;
if (sz != sizeof *set) panic("put_sigset32()"); if (sz != sizeof *set) panic("put_sigset32()");
sigset_64to32(&s, set); sigset_64to32(&s, set);
...@@ -42,9 +42,9 @@ put_sigset32(sigset_t32 *up, sigset_t *set, size_t sz) ...@@ -42,9 +42,9 @@ put_sigset32(sigset_t32 *up, sigset_t *set, size_t sz)
} }
static int static int
get_sigset32(sigset_t32 *up, sigset_t *set, size_t sz) get_sigset32(compat_sigset_t *up, sigset_t *set, size_t sz)
{ {
sigset_t32 s; compat_sigset_t s;
int r; int r;
if (sz != sizeof *set) panic("put_sigset32()"); if (sz != sizeof *set) panic("put_sigset32()");
...@@ -56,7 +56,7 @@ get_sigset32(sigset_t32 *up, sigset_t *set, size_t sz) ...@@ -56,7 +56,7 @@ get_sigset32(sigset_t32 *up, sigset_t *set, size_t sz)
return r; return r;
} }
int sys32_rt_sigprocmask(int how, sigset_t32 *set, sigset_t32 *oset, int sys32_rt_sigprocmask(int how, compat_sigset_t *set, compat_sigset_t *oset,
unsigned int sigsetsize) unsigned int sigsetsize)
{ {
extern long sys_rt_sigprocmask(int how, extern long sys_rt_sigprocmask(int how,
...@@ -78,7 +78,7 @@ int sys32_rt_sigprocmask(int how, sigset_t32 *set, sigset_t32 *oset, ...@@ -78,7 +78,7 @@ int sys32_rt_sigprocmask(int how, sigset_t32 *set, sigset_t32 *oset,
} }
int sys32_rt_sigpending(sigset_t32 *uset, unsigned int sigsetsize) int sys32_rt_sigpending(compat_sigset_t *uset, unsigned int sigsetsize)
{ {
int ret; int ret;
sigset_t set; sigset_t set;
......
...@@ -14,15 +14,10 @@ ...@@ -14,15 +14,10 @@
typedef __u32 __sighandler_t32; typedef __u32 __sighandler_t32;
#include <linux/signal.h>
typedef struct {
unsigned int sig[_NSIG_WORDS * 2];
} sigset_t32;
struct sigaction32 { struct sigaction32 {
__sighandler_t32 sa_handler; __sighandler_t32 sa_handler;
unsigned int sa_flags; unsigned int sa_flags;
sigset_t32 sa_mask; /* mask last for extensibility */ compat_sigset_t sa_mask; /* mask last for extensibility */
}; };
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment