summaryrefslogtreecommitdiff
path: root/include/asm-generic
diff options
context:
space:
mode:
authorStephen Rothwell <sfr@canb.auug.org.au>2002-10-15 03:44:31 -0700
committerDavid S. Miller <davem@nuts.ninka.net>2002-10-15 03:44:31 -0700
commit96c935cba0071f70eaa8ceffce991d46c6f1a0f1 (patch)
treebc3f4df3d78429963b8093afe2a75c6adc13cf60 /include/asm-generic
parentdb091d18a753ff2e322c0284c18122de3adeadb1 (diff)
[SPARC]: Move over to generic siginfo.
Diffstat (limited to 'include/asm-generic')
-rw-r--r--include/asm-generic/siginfo.h28
1 files changed, 23 insertions, 5 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