Warning: This file is not a C or C++ file. It does not have highlighting.

1//===-- Definition of siginfo_t type --------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLVM_LIBC_TYPES_SIGINFO_T_H
10#define LLVM_LIBC_TYPES_SIGINFO_T_H
11
12#include "clock_t.h"
13#include "pid_t.h"
14#include "uid_t.h"
15#include "union_sigval.h"
16
17#define SI_MAX_SIZE 128
18
19typedef struct {
20 int si_signo; /* Signal number. */
21 int si_errno; /* If non-zero, an errno value associated with
22 this signal, as defined in <errno.h>. */
23 int si_code; /* Signal code. */
24 union {
25 int _si_pad[SI_MAX_SIZE / sizeof(int)];
26
27 /* kill() */
28 struct {
29 pid_t si_pid; /* sender's pid */
30 uid_t si_uid; /* sender's uid */
31 } _kill;
32
33 /* POSIX.1b timers */
34 struct {
35 int si_tid; /* timer id */
36 int _overrun; /* overrun count */
37 union sigval si_sigval; /* same as below */
38 } _timer;
39
40 /* POSIX.1b signals */
41 struct {
42 pid_t si_pid; /* sender's pid */
43 uid_t si_uid; /* sender's uid */
44 union sigval si_sigval;
45 } _rt;
46
47 /* SIGCHLD */
48 struct {
49 pid_t si_pid; /* which child */
50 uid_t si_uid; /* sender's uid */
51 int si_status; /* exit code */
52 clock_t si_utime;
53 clock_t si_stime;
54 } _sigchld;
55
56 /* SIGILL, SIGFPE, SIGSEGV, SIGBUS, SIGTRAP, SIGEMT */
57 struct {
58 void *si_addr; /* faulting insn/memory ref. */
59 short int si_addr_lsb; /* Valid LSB of the reported address. */
60 union {
61 /* used when si_code=SEGV_BNDERR */
62 struct {
63 void *_lower;
64 void *_upper;
65 } _addr_bnd;
66 /* used when si_code=SEGV_PKUERR */
67 __UINT32_TYPE__ _pkey;
68 } _bounds;
69 } _sigfault;
70
71 /* SIGPOLL */
72 struct {
73 long int si_band; /* POLL_IN, POLL_OUT, POLL_MSG */
74 int si_fd;
75 } _sigpoll;
76
77 /* SIGSYS */
78 struct {
79 void *_call_addr; /* calling user insn */
80 int _syscall; /* triggering system call number */
81 unsigned int _arch; /* AUDIT_ARCH_* of syscall */
82 } _sigsys;
83 } _sifields;
84} siginfo_t;
85
86#undef SI_MAX_SIZE
87
88#define si_pid _sifields._kill.si_pid
89#define si_uid _sifields._kill.si_uid
90#define si_timerid _sifields._timer.si_tid
91#define si_overrun _sifields._timer.si_overrun
92#define si_status _sifields._sigchld.si_status
93#define si_utime _sifields._sigchld.si_utime
94#define si_stime _sifields._sigchld.si_stime
95#define si_value _sifields._rt.si_sigval
96#define si_int _sifields._rt.si_sigval.sival_int
97#define si_ptr _sifields._rt.si_sigval.sival_ptr
98#define si_addr _sifields._sigfault.si_addr
99#define si_addr_lsb _sifields._sigfault.si_addr_lsb
100#define si_lower _sifields._sigfault._bounds._addr_bnd._lower
101#define si_upper _sifields._sigfault._bounds._addr_bnd._upper
102#define si_pkey _sifields._sigfault._bounds._pkey
103#define si_band _sifields._sigpoll.si_band
104#define si_fd _sifields._sigpoll.si_fd
105#define si_call_addr _sifields._sigsys._call_addr
106#define si_syscall _sifields._sigsys._syscall
107#define si_arch _sifields._sigsys._arch
108
109#endif // LLVM_LIBC_TYPES_SIGINFO_T_H
110

Warning: This file is not a C or C++ file. It does not have highlighting.

source code of libc/include/llvm-libc-types/siginfo_t.h