Path: blob/master/arch/mips/include/asm/compat-signal.h
17531 views
#ifndef __ASM_COMPAT_SIGNAL_H1#define __ASM_COMPAT_SIGNAL_H23#include <linux/bug.h>4#include <linux/compat.h>5#include <linux/compiler.h>67#include <asm/signal.h>8#include <asm/siginfo.h>910#include <asm/uaccess.h>1112#define SI_PAD_SIZE32 ((SI_MAX_SIZE/sizeof(int)) - 3)1314typedef struct compat_siginfo {15int si_signo;16int si_code;17int si_errno;1819union {20int _pad[SI_PAD_SIZE32];2122/* kill() */23struct {24compat_pid_t _pid; /* sender's pid */25compat_uid_t _uid; /* sender's uid */26} _kill;2728/* SIGCHLD */29struct {30compat_pid_t _pid; /* which child */31compat_uid_t _uid; /* sender's uid */32int _status; /* exit code */33compat_clock_t _utime;34compat_clock_t _stime;35} _sigchld;3637/* IRIX SIGCHLD */38struct {39compat_pid_t _pid; /* which child */40compat_clock_t _utime;41int _status; /* exit code */42compat_clock_t _stime;43} _irix_sigchld;4445/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */46struct {47s32 _addr; /* faulting insn/memory ref. */48} _sigfault;4950/* SIGPOLL, SIGXFSZ (To do ...) */51struct {52int _band; /* POLL_IN, POLL_OUT, POLL_MSG */53int _fd;54} _sigpoll;5556/* POSIX.1b timers */57struct {58timer_t _tid; /* timer id */59int _overrun; /* overrun count */60compat_sigval_t _sigval;/* same as below */61int _sys_private; /* not to be passed to user */62} _timer;6364/* POSIX.1b signals */65struct {66compat_pid_t _pid; /* sender's pid */67compat_uid_t _uid; /* sender's uid */68compat_sigval_t _sigval;69} _rt;7071} _sifields;72} compat_siginfo_t;7374static inline int __copy_conv_sigset_to_user(compat_sigset_t __user *d,75const sigset_t *s)76{77int err;7879BUG_ON(sizeof(*d) != sizeof(*s));80BUG_ON(_NSIG_WORDS != 2);8182err = __put_user(s->sig[0], &d->sig[0]);83err |= __put_user(s->sig[0] >> 32, &d->sig[1]);84err |= __put_user(s->sig[1], &d->sig[2]);85err |= __put_user(s->sig[1] >> 32, &d->sig[3]);8687return err;88}8990static inline int __copy_conv_sigset_from_user(sigset_t *d,91const compat_sigset_t __user *s)92{93int err;94union sigset_u {95sigset_t s;96compat_sigset_t c;97} *u = (union sigset_u *) d;9899BUG_ON(sizeof(*d) != sizeof(*s));100BUG_ON(_NSIG_WORDS != 2);101102#ifdef CONFIG_CPU_BIG_ENDIAN103err = __get_user(u->c.sig[1], &s->sig[0]);104err |= __get_user(u->c.sig[0], &s->sig[1]);105err |= __get_user(u->c.sig[3], &s->sig[2]);106err |= __get_user(u->c.sig[2], &s->sig[3]);107#endif108#ifdef CONFIG_CPU_LITTLE_ENDIAN109err = __get_user(u->c.sig[0], &s->sig[0]);110err |= __get_user(u->c.sig[1], &s->sig[1]);111err |= __get_user(u->c.sig[2], &s->sig[2]);112err |= __get_user(u->c.sig[3], &s->sig[3]);113#endif114115return err;116}117118#endif /* __ASM_COMPAT_SIGNAL_H */119120121