compat-signal.h

来自「linux 内核源代码」· C头文件 代码 · 共 120 行

H
120
字号
#ifndef __ASM_COMPAT_SIGNAL_H#define __ASM_COMPAT_SIGNAL_H#include <linux/bug.h>#include <linux/compat.h>#include <linux/compiler.h>#include <asm/signal.h>#include <asm/siginfo.h>#include <asm/uaccess.h>#define SI_PAD_SIZE32   ((SI_MAX_SIZE/sizeof(int)) - 3)typedef struct compat_siginfo {	int si_signo;	int si_code;	int si_errno;	union {		int _pad[SI_PAD_SIZE32];		/* kill() */		struct {			compat_pid_t _pid;	/* sender's pid */			compat_uid_t _uid;	/* sender's uid */		} _kill;		/* SIGCHLD */		struct {			compat_pid_t _pid;	/* which child */			compat_uid_t _uid;	/* sender's uid */			int _status;		/* exit code */			compat_clock_t _utime;			compat_clock_t _stime;		} _sigchld;		/* IRIX SIGCHLD */		struct {			compat_pid_t _pid;	/* which child */			compat_clock_t _utime;			int _status;		/* exit code */			compat_clock_t _stime;		} _irix_sigchld;		/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */		struct {			s32 _addr; /* faulting insn/memory ref. */		} _sigfault;		/* SIGPOLL, SIGXFSZ (To do ...)  */		struct {			int _band;	/* POLL_IN, POLL_OUT, POLL_MSG */			int _fd;		} _sigpoll;		/* POSIX.1b timers */		struct {			timer_t _tid;		/* timer id */			int _overrun;		/* overrun count */			compat_sigval_t _sigval;/* same as below */			int _sys_private;       /* not to be passed to user */		} _timer;		/* POSIX.1b signals */		struct {			compat_pid_t _pid;	/* sender's pid */			compat_uid_t _uid;	/* sender's uid */			compat_sigval_t _sigval;		} _rt;	} _sifields;} compat_siginfo_t;static inline int __copy_conv_sigset_to_user(compat_sigset_t __user *d,	const sigset_t *s){	int err;	BUG_ON(sizeof(*d) != sizeof(*s));	BUG_ON(_NSIG_WORDS != 2);	err  = __put_user(s->sig[0],       &d->sig[0]);	err |= __put_user(s->sig[0] >> 32, &d->sig[1]);	err |= __put_user(s->sig[1],       &d->sig[2]);	err |= __put_user(s->sig[1] >> 32, &d->sig[3]);	return err;}static inline int __copy_conv_sigset_from_user(sigset_t *d,	const compat_sigset_t __user *s){	int err;	union sigset_u {		sigset_t	s;		compat_sigset_t c;	} *u = (union sigset_u *) d;	BUG_ON(sizeof(*d) != sizeof(*s));	BUG_ON(_NSIG_WORDS != 2);#ifdef CONFIG_CPU_BIG_ENDIAN	err  = __get_user(u->c.sig[1], &s->sig[0]);	err |= __get_user(u->c.sig[0], &s->sig[1]);	err |= __get_user(u->c.sig[3], &s->sig[2]);	err |= __get_user(u->c.sig[2], &s->sig[3]);#endif#ifdef CONFIG_CPU_LITTLE_ENDIAN	err  = __get_user(u->c.sig[0], &s->sig[0]);	err |= __get_user(u->c.sig[1], &s->sig[1]);	err |= __get_user(u->c.sig[2], &s->sig[2]);	err |= __get_user(u->c.sig[3], &s->sig[3]);#endif	return err;}#endif /* __ASM_COMPAT_SIGNAL_H */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?