@@ -29,6 +29,11 @@ typedef union sigval {
2929#define __ARCH_SI_ATTRIBUTES
3030#endif
3131
32+ /*
33+ * Be careful when extending this union. On 32bit siginfo_t is 32bit
34+ * aligned. Which means that a 64bit field or any other field that
35+ * would increase the alignment of siginfo_t will break the ABI.
36+ */
3237union __sifields {
3338 /* kill() */
3439 struct {
@@ -63,9 +68,6 @@ union __sifields {
6368 /* SIGILL, SIGFPE, SIGSEGV, SIGBUS, SIGTRAP, SIGEMT */
6469 struct {
6570 void * _addr ; /* faulting insn/memory ref. */
66- #ifdef __ARCH_SI_TRAPNO
67- int _trapno ; /* TRAP # which caused the signal */
68- #endif
6971#ifdef __ia64__
7072 int _imm ; /* immediate value for "break" */
7173 unsigned int _flags ; /* see ia64 si_flags */
@@ -75,6 +77,8 @@ union __sifields {
7577#define __ADDR_BND_PKEY_PAD (__alignof__(void *) < sizeof(short) ? \
7678 sizeof(short) : __alignof__(void *))
7779 union {
80+ /* used on alpha and sparc */
81+ int _trapno ; /* TRAP # which caused the signal */
7882 /*
7983 * used when si_code=BUS_MCEERR_AR or
8084 * used when si_code=BUS_MCEERR_AO
@@ -91,6 +95,12 @@ union __sifields {
9195 char _dummy_pkey [__ADDR_BND_PKEY_PAD ];
9296 __u32 _pkey ;
9397 } _addr_pkey ;
98+ /* used when si_code=TRAP_PERF */
99+ struct {
100+ unsigned long _data ;
101+ __u32 _type ;
102+ __u32 _flags ;
103+ } _perf ;
94104 };
95105 } _sigfault ;
96106
@@ -148,13 +158,14 @@ typedef struct siginfo {
148158#define si_int _sifields._rt._sigval.sival_int
149159#define si_ptr _sifields._rt._sigval.sival_ptr
150160#define si_addr _sifields._sigfault._addr
151- #ifdef __ARCH_SI_TRAPNO
152161#define si_trapno _sifields._sigfault._trapno
153- #endif
154162#define si_addr_lsb _sifields._sigfault._addr_lsb
155163#define si_lower _sifields._sigfault._addr_bnd._lower
156164#define si_upper _sifields._sigfault._addr_bnd._upper
157165#define si_pkey _sifields._sigfault._addr_pkey._pkey
166+ #define si_perf_data _sifields._sigfault._perf._data
167+ #define si_perf_type _sifields._sigfault._perf._type
168+ #define si_perf_flags _sifields._sigfault._perf._flags
158169#define si_band _sifields._sigpoll._band
159170#define si_fd _sifields._sigpoll._fd
160171#define si_call_addr _sifields._sigsys._call_addr
@@ -231,7 +242,8 @@ typedef struct siginfo {
231242#define SEGV_ADIPERR 7 /* Precise MCD exception */
232243#define SEGV_MTEAERR 8 /* Asynchronous ARM MTE error */
233244#define SEGV_MTESERR 9 /* Synchronous ARM MTE exception */
234- #define NSIGSEGV 9
245+ #define SEGV_CPERR 10 /* Control protection fault */
246+ #define NSIGSEGV 10
235247
236248/*
237249 * SIGBUS si_codes
@@ -253,13 +265,19 @@ typedef struct siginfo {
253265#define TRAP_BRANCH 3 /* process taken branch trap */
254266#define TRAP_HWBKPT 4 /* hardware breakpoint/watchpoint */
255267#define TRAP_UNK 5 /* undiagnosed trap */
256- #define NSIGTRAP 5
268+ #define TRAP_PERF 6 /* perf event with sigtrap=1 */
269+ #define NSIGTRAP 6
257270
258271/*
259272 * There is an additional set of SIGTRAP si_codes used by ptrace
260273 * that are of the form: ((PTRACE_EVENT_XXX << 8) | SIGTRAP)
261274 */
262275
276+ /*
277+ * Flags for si_perf_flags if SIGTRAP si_code is TRAP_PERF.
278+ */
279+ #define TRAP_PERF_FLAG_ASYNC (1u << 0)
280+
263281/*
264282 * SIGCHLD si_codes
265283 */
@@ -286,7 +304,8 @@ typedef struct siginfo {
286304 * SIGSYS si_codes
287305 */
288306#define SYS_SECCOMP 1 /* seccomp triggered */
289- #define NSIGSYS 1
307+ #define SYS_USER_DISPATCH 2 /* syscall user dispatch triggered */
308+ #define NSIGSYS 2
290309
291310/*
292311 * SIGEMT si_codes
0 commit comments