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 + -
显示快捷键?