143e40f25d2c090392fc36cb900b42972e88cc2e2David Howells/*
243e40f25d2c090392fc36cb900b42972e88cc2e2David Howells * Based on <asm-i386/siginfo.h>.
343e40f25d2c090392fc36cb900b42972e88cc2e2David Howells *
443e40f25d2c090392fc36cb900b42972e88cc2e2David Howells * Modified 1998-2002
543e40f25d2c090392fc36cb900b42972e88cc2e2David Howells *	David Mosberger-Tang <davidm@hpl.hp.com>, Hewlett-Packard Co
643e40f25d2c090392fc36cb900b42972e88cc2e2David Howells */
743e40f25d2c090392fc36cb900b42972e88cc2e2David Howells#ifndef _UAPI_ASM_IA64_SIGINFO_H
843e40f25d2c090392fc36cb900b42972e88cc2e2David Howells#define _UAPI_ASM_IA64_SIGINFO_H
943e40f25d2c090392fc36cb900b42972e88cc2e2David Howells
1043e40f25d2c090392fc36cb900b42972e88cc2e2David Howells
1143e40f25d2c090392fc36cb900b42972e88cc2e2David Howells#define __ARCH_SI_PREAMBLE_SIZE	(4 * sizeof(int))
1243e40f25d2c090392fc36cb900b42972e88cc2e2David Howells
1343e40f25d2c090392fc36cb900b42972e88cc2e2David Howells#define HAVE_ARCH_SIGINFO_T
1443e40f25d2c090392fc36cb900b42972e88cc2e2David Howells#define HAVE_ARCH_COPY_SIGINFO
1543e40f25d2c090392fc36cb900b42972e88cc2e2David Howells#define HAVE_ARCH_COPY_SIGINFO_TO_USER
1643e40f25d2c090392fc36cb900b42972e88cc2e2David Howells
1743e40f25d2c090392fc36cb900b42972e88cc2e2David Howells#include <asm-generic/siginfo.h>
1843e40f25d2c090392fc36cb900b42972e88cc2e2David Howells
1943e40f25d2c090392fc36cb900b42972e88cc2e2David Howellstypedef struct siginfo {
2043e40f25d2c090392fc36cb900b42972e88cc2e2David Howells	int si_signo;
2143e40f25d2c090392fc36cb900b42972e88cc2e2David Howells	int si_errno;
2243e40f25d2c090392fc36cb900b42972e88cc2e2David Howells	int si_code;
2343e40f25d2c090392fc36cb900b42972e88cc2e2David Howells	int __pad0;
2443e40f25d2c090392fc36cb900b42972e88cc2e2David Howells
2543e40f25d2c090392fc36cb900b42972e88cc2e2David Howells	union {
2643e40f25d2c090392fc36cb900b42972e88cc2e2David Howells		int _pad[SI_PAD_SIZE];
2743e40f25d2c090392fc36cb900b42972e88cc2e2David Howells
2843e40f25d2c090392fc36cb900b42972e88cc2e2David Howells		/* kill() */
2943e40f25d2c090392fc36cb900b42972e88cc2e2David Howells		struct {
3043e40f25d2c090392fc36cb900b42972e88cc2e2David Howells			pid_t _pid;		/* sender's pid */
3143e40f25d2c090392fc36cb900b42972e88cc2e2David Howells			uid_t _uid;		/* sender's uid */
3243e40f25d2c090392fc36cb900b42972e88cc2e2David Howells		} _kill;
3343e40f25d2c090392fc36cb900b42972e88cc2e2David Howells
3443e40f25d2c090392fc36cb900b42972e88cc2e2David Howells		/* POSIX.1b timers */
3543e40f25d2c090392fc36cb900b42972e88cc2e2David Howells		struct {
3643e40f25d2c090392fc36cb900b42972e88cc2e2David Howells			timer_t _tid;		/* timer id */
3743e40f25d2c090392fc36cb900b42972e88cc2e2David Howells			int _overrun;		/* overrun count */
3843e40f25d2c090392fc36cb900b42972e88cc2e2David Howells			char _pad[sizeof(__ARCH_SI_UID_T) - sizeof(int)];
3943e40f25d2c090392fc36cb900b42972e88cc2e2David Howells			sigval_t _sigval;	/* must overlay ._rt._sigval! */
4043e40f25d2c090392fc36cb900b42972e88cc2e2David Howells			int _sys_private;	/* not to be passed to user */
4143e40f25d2c090392fc36cb900b42972e88cc2e2David Howells		} _timer;
4243e40f25d2c090392fc36cb900b42972e88cc2e2David Howells
4343e40f25d2c090392fc36cb900b42972e88cc2e2David Howells		/* POSIX.1b signals */
4443e40f25d2c090392fc36cb900b42972e88cc2e2David Howells		struct {
4543e40f25d2c090392fc36cb900b42972e88cc2e2David Howells			pid_t _pid;		/* sender's pid */
4643e40f25d2c090392fc36cb900b42972e88cc2e2David Howells			uid_t _uid;		/* sender's uid */
4743e40f25d2c090392fc36cb900b42972e88cc2e2David Howells			sigval_t _sigval;
4843e40f25d2c090392fc36cb900b42972e88cc2e2David Howells		} _rt;
4943e40f25d2c090392fc36cb900b42972e88cc2e2David Howells
5043e40f25d2c090392fc36cb900b42972e88cc2e2David Howells		/* SIGCHLD */
5143e40f25d2c090392fc36cb900b42972e88cc2e2David Howells		struct {
5243e40f25d2c090392fc36cb900b42972e88cc2e2David Howells			pid_t _pid;		/* which child */
5343e40f25d2c090392fc36cb900b42972e88cc2e2David Howells			uid_t _uid;		/* sender's uid */
5443e40f25d2c090392fc36cb900b42972e88cc2e2David Howells			int _status;		/* exit code */
5543e40f25d2c090392fc36cb900b42972e88cc2e2David Howells			clock_t _utime;
5643e40f25d2c090392fc36cb900b42972e88cc2e2David Howells			clock_t _stime;
5743e40f25d2c090392fc36cb900b42972e88cc2e2David Howells		} _sigchld;
5843e40f25d2c090392fc36cb900b42972e88cc2e2David Howells
5943e40f25d2c090392fc36cb900b42972e88cc2e2David Howells		/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
6043e40f25d2c090392fc36cb900b42972e88cc2e2David Howells		struct {
6143e40f25d2c090392fc36cb900b42972e88cc2e2David Howells			void __user *_addr;	/* faulting insn/memory ref. */
6243e40f25d2c090392fc36cb900b42972e88cc2e2David Howells			int _imm;		/* immediate value for "break" */
6343e40f25d2c090392fc36cb900b42972e88cc2e2David Howells			unsigned int _flags;	/* see below */
6443e40f25d2c090392fc36cb900b42972e88cc2e2David Howells			unsigned long _isr;	/* isr */
6543e40f25d2c090392fc36cb900b42972e88cc2e2David Howells			short _addr_lsb;	/* lsb of faulting address */
6643e40f25d2c090392fc36cb900b42972e88cc2e2David Howells		} _sigfault;
6743e40f25d2c090392fc36cb900b42972e88cc2e2David Howells
6843e40f25d2c090392fc36cb900b42972e88cc2e2David Howells		/* SIGPOLL */
6943e40f25d2c090392fc36cb900b42972e88cc2e2David Howells		struct {
7043e40f25d2c090392fc36cb900b42972e88cc2e2David Howells			long _band;	/* POLL_IN, POLL_OUT, POLL_MSG (XPG requires a "long") */
7143e40f25d2c090392fc36cb900b42972e88cc2e2David Howells			int _fd;
7243e40f25d2c090392fc36cb900b42972e88cc2e2David Howells		} _sigpoll;
7343e40f25d2c090392fc36cb900b42972e88cc2e2David Howells	} _sifields;
7443e40f25d2c090392fc36cb900b42972e88cc2e2David Howells} siginfo_t;
7543e40f25d2c090392fc36cb900b42972e88cc2e2David Howells
7643e40f25d2c090392fc36cb900b42972e88cc2e2David Howells#define si_imm		_sifields._sigfault._imm	/* as per UNIX SysV ABI spec */
7743e40f25d2c090392fc36cb900b42972e88cc2e2David Howells#define si_flags	_sifields._sigfault._flags
7843e40f25d2c090392fc36cb900b42972e88cc2e2David Howells/*
7943e40f25d2c090392fc36cb900b42972e88cc2e2David Howells * si_isr is valid for SIGILL, SIGFPE, SIGSEGV, SIGBUS, and SIGTRAP provided that
8043e40f25d2c090392fc36cb900b42972e88cc2e2David Howells * si_code is non-zero and __ISR_VALID is set in si_flags.
8143e40f25d2c090392fc36cb900b42972e88cc2e2David Howells */
8243e40f25d2c090392fc36cb900b42972e88cc2e2David Howells#define si_isr		_sifields._sigfault._isr
8343e40f25d2c090392fc36cb900b42972e88cc2e2David Howells
8443e40f25d2c090392fc36cb900b42972e88cc2e2David Howells/*
8543e40f25d2c090392fc36cb900b42972e88cc2e2David Howells * Flag values for si_flags:
8643e40f25d2c090392fc36cb900b42972e88cc2e2David Howells */
8743e40f25d2c090392fc36cb900b42972e88cc2e2David Howells#define __ISR_VALID_BIT	0
8843e40f25d2c090392fc36cb900b42972e88cc2e2David Howells#define __ISR_VALID	(1 << __ISR_VALID_BIT)
8943e40f25d2c090392fc36cb900b42972e88cc2e2David Howells
9043e40f25d2c090392fc36cb900b42972e88cc2e2David Howells/*
9143e40f25d2c090392fc36cb900b42972e88cc2e2David Howells * SIGILL si_codes
9243e40f25d2c090392fc36cb900b42972e88cc2e2David Howells */
9343e40f25d2c090392fc36cb900b42972e88cc2e2David Howells#define ILL_BADIADDR	(__SI_FAULT|9)	/* unimplemented instruction address */
9443e40f25d2c090392fc36cb900b42972e88cc2e2David Howells#define __ILL_BREAK	(__SI_FAULT|10)	/* illegal break */
9543e40f25d2c090392fc36cb900b42972e88cc2e2David Howells#define __ILL_BNDMOD	(__SI_FAULT|11)	/* bundle-update (modification) in progress */
9643e40f25d2c090392fc36cb900b42972e88cc2e2David Howells#undef NSIGILL
9743e40f25d2c090392fc36cb900b42972e88cc2e2David Howells#define NSIGILL		11
9843e40f25d2c090392fc36cb900b42972e88cc2e2David Howells
9943e40f25d2c090392fc36cb900b42972e88cc2e2David Howells/*
10043e40f25d2c090392fc36cb900b42972e88cc2e2David Howells * SIGFPE si_codes
10143e40f25d2c090392fc36cb900b42972e88cc2e2David Howells */
10243e40f25d2c090392fc36cb900b42972e88cc2e2David Howells#define __FPE_DECOVF	(__SI_FAULT|9)	/* decimal overflow */
10343e40f25d2c090392fc36cb900b42972e88cc2e2David Howells#define __FPE_DECDIV	(__SI_FAULT|10)	/* decimal division by zero */
10443e40f25d2c090392fc36cb900b42972e88cc2e2David Howells#define __FPE_DECERR	(__SI_FAULT|11)	/* packed decimal error */
10543e40f25d2c090392fc36cb900b42972e88cc2e2David Howells#define __FPE_INVASC	(__SI_FAULT|12)	/* invalid ASCII digit */
10643e40f25d2c090392fc36cb900b42972e88cc2e2David Howells#define __FPE_INVDEC	(__SI_FAULT|13)	/* invalid decimal digit */
10743e40f25d2c090392fc36cb900b42972e88cc2e2David Howells#undef NSIGFPE
10843e40f25d2c090392fc36cb900b42972e88cc2e2David Howells#define NSIGFPE		13
10943e40f25d2c090392fc36cb900b42972e88cc2e2David Howells
11043e40f25d2c090392fc36cb900b42972e88cc2e2David Howells/*
11143e40f25d2c090392fc36cb900b42972e88cc2e2David Howells * SIGSEGV si_codes
11243e40f25d2c090392fc36cb900b42972e88cc2e2David Howells */
11343e40f25d2c090392fc36cb900b42972e88cc2e2David Howells#define __SEGV_PSTKOVF	(__SI_FAULT|3)	/* paragraph stack overflow */
11443e40f25d2c090392fc36cb900b42972e88cc2e2David Howells#undef NSIGSEGV
11543e40f25d2c090392fc36cb900b42972e88cc2e2David Howells#define NSIGSEGV	3
11643e40f25d2c090392fc36cb900b42972e88cc2e2David Howells
11743e40f25d2c090392fc36cb900b42972e88cc2e2David Howells#undef NSIGTRAP
11843e40f25d2c090392fc36cb900b42972e88cc2e2David Howells#define NSIGTRAP	4
11943e40f25d2c090392fc36cb900b42972e88cc2e2David Howells
12043e40f25d2c090392fc36cb900b42972e88cc2e2David Howells
12143e40f25d2c090392fc36cb900b42972e88cc2e2David Howells#endif /* _UAPI_ASM_IA64_SIGINFO_H */
122