Linux Audio

Check our new training course

Yocto / OpenEmbedded training

Mar 24-27, 2025, special US time zones
Register
Loading...
  1#ifndef _ASM_IA64_SIGINFO_H
  2#define _ASM_IA64_SIGINFO_H
  3
  4/*
  5 * Based on <asm-i386/siginfo.h>.
  6 *
  7 * Modified 1998-2002
  8 *	David Mosberger-Tang <davidm@hpl.hp.com>, Hewlett-Packard Co
  9 */
 10
 11#define __ARCH_SI_PREAMBLE_SIZE	(4 * sizeof(int))
 12
 13#define HAVE_ARCH_SIGINFO_T
 14#define HAVE_ARCH_COPY_SIGINFO
 15#define HAVE_ARCH_COPY_SIGINFO_TO_USER
 16
 17#include <asm-generic/siginfo.h>
 18
 19typedef struct siginfo {
 20	int si_signo;
 21	int si_errno;
 22	int si_code;
 23	int __pad0;
 24
 25	union {
 26		int _pad[SI_PAD_SIZE];
 27
 28		/* kill() */
 29		struct {
 30			pid_t _pid;		/* sender's pid */
 31			uid_t _uid;		/* sender's uid */
 32		} _kill;
 33
 34		/* POSIX.1b timers */
 35		struct {
 36			timer_t _tid;		/* timer id */
 37			int _overrun;		/* overrun count */
 38			char _pad[sizeof(__ARCH_SI_UID_T) - sizeof(int)];
 39			sigval_t _sigval;	/* must overlay ._rt._sigval! */
 40			int _sys_private;	/* not to be passed to user */
 41		} _timer;
 42
 43		/* POSIX.1b signals */
 44		struct {
 45			pid_t _pid;		/* sender's pid */
 46			uid_t _uid;		/* sender's uid */
 47			sigval_t _sigval;
 48		} _rt;
 49
 50		/* SIGCHLD */
 51		struct {
 52			pid_t _pid;		/* which child */
 53			uid_t _uid;		/* sender's uid */
 54			int _status;		/* exit code */
 55			clock_t _utime;
 56			clock_t _stime;
 57		} _sigchld;
 58
 59		/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
 60		struct {
 61			void __user *_addr;	/* faulting insn/memory ref. */
 62			int _imm;		/* immediate value for "break" */
 63			unsigned int _flags;	/* see below */
 64			unsigned long _isr;	/* isr */
 65			short _addr_lsb;	/* lsb of faulting address */
 66		} _sigfault;
 67
 68		/* SIGPOLL */
 69		struct {
 70			long _band;	/* POLL_IN, POLL_OUT, POLL_MSG (XPG requires a "long") */
 71			int _fd;
 72		} _sigpoll;
 73	} _sifields;
 74} siginfo_t;
 75
 76#define si_imm		_sifields._sigfault._imm	/* as per UNIX SysV ABI spec */
 77#define si_flags	_sifields._sigfault._flags
 78/*
 79 * si_isr is valid for SIGILL, SIGFPE, SIGSEGV, SIGBUS, and SIGTRAP provided that
 80 * si_code is non-zero and __ISR_VALID is set in si_flags.
 81 */
 82#define si_isr		_sifields._sigfault._isr
 83
 84/*
 85 * Flag values for si_flags:
 86 */
 87#define __ISR_VALID_BIT	0
 88#define __ISR_VALID	(1 << __ISR_VALID_BIT)
 89
 90/*
 91 * SIGILL si_codes
 92 */
 93#define ILL_BADIADDR	(__SI_FAULT|9)	/* unimplemented instruction address */
 94#define __ILL_BREAK	(__SI_FAULT|10)	/* illegal break */
 95#define __ILL_BNDMOD	(__SI_FAULT|11)	/* bundle-update (modification) in progress */
 96#undef NSIGILL
 97#define NSIGILL		11
 98
 99/*
100 * SIGFPE si_codes
101 */
102#define __FPE_DECOVF	(__SI_FAULT|9)	/* decimal overflow */
103#define __FPE_DECDIV	(__SI_FAULT|10)	/* decimal division by zero */
104#define __FPE_DECERR	(__SI_FAULT|11)	/* packed decimal error */
105#define __FPE_INVASC	(__SI_FAULT|12)	/* invalid ASCII digit */
106#define __FPE_INVDEC	(__SI_FAULT|13)	/* invalid decimal digit */
107#undef NSIGFPE
108#define NSIGFPE		13
109
110/*
111 * SIGSEGV si_codes
112 */
113#define __SEGV_PSTKOVF	(__SI_FAULT|3)	/* paragraph stack overflow */
114#undef NSIGSEGV
115#define NSIGSEGV	3
116
117#undef NSIGTRAP
118#define NSIGTRAP	4
119
120#ifdef __KERNEL__
121#include <linux/string.h>
122
123static inline void
124copy_siginfo (siginfo_t *to, siginfo_t *from)
125{
126	if (from->si_code < 0)
127		memcpy(to, from, sizeof(siginfo_t));
128	else
129		/* _sigchld is currently the largest know union member */
130		memcpy(to, from, 4*sizeof(int) + sizeof(from->_sifields._sigchld));
131}
132
133#endif /* __KERNEL__ */
134
135#endif /* _ASM_IA64_SIGINFO_H */