1#ifndef _M68K_SIGINFO_H
2#define _M68K_SIGINFO_H
3
4#define HAVE_ARCH_SIGINFO_T
5#define HAVE_ARCH_COPY_SIGINFO
6
7#include <asm-generic/siginfo.h>
8
9typedef struct siginfo {
10	int si_signo;
11	int si_errno;
12	int si_code;
13
14	union {
15		int _pad[SI_PAD_SIZE];
16
17		/* kill() */
18		struct {
19			__kernel_pid_t _pid;	/* sender's pid */
20			__kernel_uid_t _uid;	/* backwards compatibility */
21			__kernel_uid32_t _uid32; /* sender's uid */
22		} _kill;
23
24		/* POSIX.1b timers */
25		struct {
26			timer_t _tid;		/* timer id */
27			int _overrun;		/* overrun count */
28			char _pad[sizeof( __ARCH_SI_UID_T) - sizeof(int)];
29			sigval_t _sigval;	/* same as below */
30			int _sys_private;       /* not to be passed to user */
31		} _timer;
32
33		/* POSIX.1b signals */
34		struct {
35			__kernel_pid_t _pid;	/* sender's pid */
36			__kernel_uid_t _uid;	/* backwards compatibility */
37			sigval_t _sigval;
38			__kernel_uid32_t _uid32; /* sender's uid */
39		} _rt;
40
41		/* SIGCHLD */
42		struct {
43			__kernel_pid_t _pid;	/* which child */
44			__kernel_uid_t _uid;	/* backwards compatibility */
45			int _status;		/* exit code */
46			clock_t _utime;
47			clock_t _stime;
48			__kernel_uid32_t _uid32; /* sender's uid */
49		} _sigchld;
50
51		/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
52		struct {
53			void *_addr; /* faulting insn/memory ref. */
54		} _sigfault;
55
56		/* SIGPOLL */
57		struct {
58			int _band;	/* POLL_IN, POLL_OUT, POLL_MSG */
59			int _fd;
60		} _sigpoll;
61	} _sifields;
62} siginfo_t;
63
64#define UID16_SIGINFO_COMPAT_NEEDED
65
66/*
67 * How these fields are to be accessed.
68 */
69#undef si_uid
70#ifdef __KERNEL__
71#define si_uid		_sifields._kill._uid32
72#define si_uid16	_sifields._kill._uid
73#else
74#define si_uid		_sifields._kill._uid
75#endif
76
77#ifdef __KERNEL__
78
79#include <linux/string.h>
80
81static inline void copy_siginfo(struct siginfo *to, struct siginfo *from)
82{
83	if (from->si_code < 0)
84		memcpy(to, from, sizeof(*to));
85	else
86		/* _sigchld is currently the largest know union member */
87		memcpy(to, from, 3*sizeof(int) + sizeof(from->_sifields._sigchld));
88}
89
90#endif /* __KERNEL__ */
91
92#endif
93