diff options
| author | David S. Miller <davem@nuts.ninka.net> | 2002-10-15 07:43:23 -0700 |
|---|---|---|
| committer | David S. Miller <davem@nuts.ninka.net> | 2002-10-15 07:43:23 -0700 |
| commit | e52a90274e8ce78a43fc18e052b996d0d156baef (patch) | |
| tree | 6d19a625cea86dc2ac191b98fc62bbe73cf93390 /include | |
| parent | 5a7728c6d3eb83df9d120944cca4cf476dd326a1 (diff) | |
| parent | 130f7f9246884c8cbe92e68c54370a515482df10 (diff) | |
Merge nuts.ninka.net:/home/davem/src/BK/sparcwork-2.5
into nuts.ninka.net:/home/davem/src/BK/sparc-2.5
Diffstat (limited to 'include')
| -rw-r--r-- | include/asm-generic/siginfo.h | 28 | ||||
| -rw-r--r-- | include/asm-sparc/siginfo.h | 72 | ||||
| -rw-r--r-- | include/asm-sparc64/siginfo.h | 73 |
3 files changed, 27 insertions, 146 deletions
diff --git a/include/asm-generic/siginfo.h b/include/asm-generic/siginfo.h index 8e6f81b7a524..f246b2a15eb5 100644 --- a/include/asm-generic/siginfo.h +++ b/include/asm-generic/siginfo.h @@ -8,9 +8,21 @@ typedef union sigval { void *sival_ptr; } sigval_t; +/* + * This is the size (including padding) of the part of the + * struct siginfo that is before the union. + */ +#ifndef __ARCH_SI_PREAMBLE_SIZE +#define __ARCH_SI_PREAMBLE_SIZE (3 * sizeof(int)) +#endif + #define SI_MAX_SIZE 128 #ifndef SI_PAD_SIZE -#define SI_PAD_SIZE ((SI_MAX_SIZE/sizeof(int)) - 3) +#define SI_PAD_SIZE ((SI_MAX_SIZE - __ARCH_SI_PREAMBLE_SIZE) / sizeof(int)) +#endif + +#ifndef __ARCH_SI_UID_T +#define __ARCH_SI_UID_T uid_t #endif #ifndef HAVE_ARCH_SIGINFO_T @@ -26,7 +38,7 @@ typedef struct siginfo { /* kill() */ struct { pid_t _pid; /* sender's pid */ - uid_t _uid; /* sender's uid */ + __ARCH_SI_UID_T _uid; /* sender's uid */ } _kill; /* POSIX.1b timers */ @@ -38,14 +50,14 @@ typedef struct siginfo { /* POSIX.1b signals */ struct { pid_t _pid; /* sender's pid */ - uid_t _uid; /* sender's uid */ + __ARCH_SI_UID_T _uid; /* sender's uid */ sigval_t _sigval; } _rt; /* SIGCHLD */ struct { pid_t _pid; /* which child */ - uid_t _uid; /* sender's uid */ + __ARCH_SI_UID_T _uid; /* sender's uid */ int _status; /* exit code */ clock_t _utime; clock_t _stime; @@ -54,6 +66,9 @@ typedef struct siginfo { /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */ struct { void *_addr; /* faulting insn/memory ref. */ +#ifdef __ARCH_SI_TRAPNO + int _trapno; /* TRAP # which caused the signal */ +#endif } _sigfault; /* SIGPOLL */ @@ -80,6 +95,9 @@ typedef struct siginfo { #define si_int _sifields._rt._sigval.sival_int #define si_ptr _sifields._rt._sigval.sival_ptr #define si_addr _sifields._sigfault._addr +#ifdef __ARCH_SI_TRAPNO +#define si_trapno _sifields._sigfault._trapno +#endif #define si_band _sifields._sigpoll._band #define si_fd _sifields._sigpoll._fd @@ -244,7 +262,7 @@ static inline void copy_siginfo(struct siginfo *to, struct siginfo *from) memcpy(to, from, sizeof(*to)); else /* _sigchld is currently the largest know union member */ - memcpy(to, from, 3*sizeof(int) + sizeof(from->_sifields._sigchld)); + memcpy(to, from, __ARCH_SI_PREAMBLE_SIZE + sizeof(from->_sifields._sigchld)); } #endif diff --git a/include/asm-sparc/siginfo.h b/include/asm-sparc/siginfo.h index b5127b06416f..2c3ea8b22448 100644 --- a/include/asm-sparc/siginfo.h +++ b/include/asm-sparc/siginfo.h @@ -5,64 +5,11 @@ #ifndef _SPARC_SIGINFO_H #define _SPARC_SIGINFO_H -#define HAVE_ARCH_SIGINFO_T -#define HAVE_ARCH_COPY_SIGINFO -#define HAVE_ARCH_COPY_SIGINFO_TO_USER +#define __ARCH_SI_UID_T unsigned int +#define __ARCH_SI_TRAPNO #include <asm-generic/siginfo.h> -typedef struct siginfo { - int si_signo; - int si_errno; - int si_code; - - union { - int _pad[SI_PAD_SIZE]; - - /* kill() */ - struct { - pid_t _pid; /* sender's pid */ - unsigned int _uid; /* sender's uid */ - } _kill; - - /* POSIX.1b timers */ - struct { - unsigned int _timer1; - unsigned int _timer2; - } _timer; - - /* POSIX.1b signals */ - struct { - pid_t _pid; /* sender's pid */ - unsigned int _uid; /* sender's uid */ - sigval_t _sigval; - } _rt; - - /* SIGCHLD */ - struct { - pid_t _pid; /* which child */ - unsigned int _uid; /* sender's uid */ - int _status; /* exit code */ - clock_t _utime; - clock_t _stime; - } _sigchld; - - /* SIGILL, SIGFPE, SIGSEGV, SIGBUS, SIGEMT */ - struct { - void *_addr; /* faulting insn/memory ref. */ - int _trapno; /* TRAP # which caused the signal */ - } _sigfault; - - /* SIGPOLL */ - struct { - int _band; /* POLL_IN, POLL_OUT, POLL_MSG */ - int _fd; - } _sigpoll; - } _sifields; -} siginfo_t; - -#define si_trapno _sifields._sigfault._trapno - #define SI_NOINFO 32767 /* no information in siginfo_t */ /* @@ -71,19 +18,4 @@ typedef struct siginfo { #define EMT_TAGOVF (__SI_FAULT|1) /* tag overflow */ #define NSIGEMT 1 -#ifdef __KERNEL__ - -#include <linux/string.h> - -extern inline void copy_siginfo(siginfo_t *to, siginfo_t *from) -{ - if (from->si_code < 0) - *to = *from; - else - /* _sigchld is currently the largest know union member */ - memcpy(to, from, 3*sizeof(int) + sizeof(from->_sifields._sigchld)); -} - -#endif /* __KERNEL__ */ - #endif /* !(_SPARC_SIGINFO_H) */ diff --git a/include/asm-sparc64/siginfo.h b/include/asm-sparc64/siginfo.h index f8d1959ea8dc..f4bb94656634 100644 --- a/include/asm-sparc64/siginfo.h +++ b/include/asm-sparc64/siginfo.h @@ -1,15 +1,13 @@ #ifndef _SPARC64_SIGINFO_H #define _SPARC64_SIGINFO_H -#define SI_PAD_SIZE ((SI_MAX_SIZE/sizeof(int)) - 4) #define SI_PAD_SIZE32 ((SI_MAX_SIZE/sizeof(int)) - 3) #define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 4) #define SIGEV_PAD_SIZE32 ((SIGEV_MAX_SIZE/sizeof(int)) - 3) -#define HAVE_ARCH_SIGINFO_T -#define HAVE_ARCH_COPY_SIGINFO -#define HAVE_ARCH_COPY_SIGINFO_TO_USER +#define __ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int)) +#define __ARCH_SI_TRAPNO #include <asm-generic/siginfo.h> @@ -20,60 +18,6 @@ typedef union sigval32 { u32 sival_ptr; } sigval_t32; -#endif /* __KERNEL__ */ - -typedef struct siginfo { - int si_signo; - int si_errno; - int si_code; - - union { - int _pad[SI_PAD_SIZE]; - - /* kill() */ - struct { - pid_t _pid; /* sender's pid */ - uid_t _uid; /* sender's uid */ - } _kill; - - /* POSIX.1b timers */ - struct { - unsigned int _timer1; - unsigned int _timer2; - } _timer; - - /* POSIX.1b signals */ - struct { - pid_t _pid; /* sender's pid */ - uid_t _uid; /* sender's uid */ - sigval_t _sigval; - } _rt; - - /* SIGCHLD */ - struct { - pid_t _pid; /* which child */ - uid_t _uid; /* sender's uid */ - int _status; /* exit code */ - clock_t _utime; - clock_t _stime; - } _sigchld; - - /* SIGILL, SIGFPE, SIGSEGV, SIGBUS, SIGEMT */ - struct { - void *_addr; /* faulting insn/memory ref. */ - int _trapno; /* TRAP # which caused the signal */ - } _sigfault; - - /* SIGPOLL */ - struct { - long _band; /* POLL_IN, POLL_OUT, POLL_MSG */ - int _fd; - } _sigpoll; - } _sifields; -} siginfo_t; - -#ifdef __KERNEL__ - typedef struct siginfo32 { int si_signo; int si_errno; @@ -126,8 +70,6 @@ typedef struct siginfo32 { #endif /* __KERNEL__ */ -#define si_trapno _sifields._sigfault._trapno - #define SI_NOINFO 32767 /* no information in siginfo_t */ /* @@ -152,17 +94,6 @@ typedef struct sigevent32 { } _sigev_un; } sigevent_t32; -#include <linux/string.h> - -static inline void copy_siginfo(siginfo_t *to, siginfo_t *from) -{ - if (from->si_code < 0) - *to = *from; - else - /* _sigchld is currently the largest know union member */ - memcpy(to, from, 4*sizeof(int) + sizeof(from->_sifields._sigchld)); -} - extern int copy_siginfo_to_user32(siginfo_t32 *to, siginfo_t *from); #endif /* __KERNEL__ */ |
