]> git.proxmox.com Git - mirror_qemu.git/blob - bsd-user/freebsd/target_os_siginfo.h
Merge tag 'firmware/edk2-20231213-pull-request' of https://gitlab.com/kraxel/qemu...
[mirror_qemu.git] / bsd-user / freebsd / target_os_siginfo.h
1 /*
2 * FreeBSD siginfo related definitions
3 *
4 * Copyright (c) 2013 Stacey D. Son
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #ifndef TARGET_OS_SIGINFO_H
21 #define TARGET_OS_SIGINFO_H
22
23 #define TARGET_NSIG 128
24 #define TARGET_NSIG_BPW (sizeof(uint32_t) * 8)
25 #define TARGET_NSIG_WORDS (TARGET_NSIG / TARGET_NSIG_BPW)
26
27 /* this struct defines a stack used during syscall handling */
28 typedef struct target_sigaltstack {
29 abi_long ss_sp;
30 abi_ulong ss_size;
31 abi_long ss_flags;
32 } target_stack_t;
33
34 typedef struct {
35 uint32_t __bits[TARGET_NSIG_WORDS];
36 } target_sigset_t;
37
38 struct target_sigaction {
39 abi_ulong _sa_handler;
40 int32_t sa_flags;
41 target_sigset_t sa_mask;
42 };
43
44 typedef union target_sigval {
45 int32_t sival_int;
46 abi_ulong sival_ptr;
47 int32_t sigval_int;
48 abi_ulong sigval_ptr;
49 } target_sigval_t;
50
51 typedef struct target_siginfo {
52 int32_t si_signo; /* signal number */
53 int32_t si_errno; /* errno association */
54 int32_t si_code; /* signal code */
55 int32_t si_pid; /* sending process */
56 int32_t si_uid; /* sender's ruid */
57 int32_t si_status; /* exit value */
58 abi_ulong si_addr; /* faulting instruction */
59 union target_sigval si_value; /* signal value */
60 union {
61 struct {
62 int32_t _trapno; /* machine specific trap code */
63 } _fault;
64
65 /* POSIX.1b timers */
66 struct {
67 int32_t _timerid;
68 int32_t _overrun;
69 } _timer;
70
71 struct {
72 int32_t _mqd;
73 } _mesgp;
74
75 /* SIGPOLL -- Not really generated in FreeBSD ??? */
76 struct {
77 int _band; /* POLL_IN, POLL_OUT, POLL_MSG */
78 } _poll;
79
80 struct {
81 int _mqd;
82 } _mesgq;
83
84 struct {
85 /*
86 * Syscall number for signals delivered as a result of system calls
87 * denied by Capsicum.
88 */
89 int _syscall;
90 } _capsicum;
91
92 /* Spare for future growth */
93 struct {
94 abi_long __spare1__;
95 int32_t __spare2_[7];
96 } __spare__;
97 } _reason;
98 } target_siginfo_t;
99
100 struct target_sigevent {
101 abi_int sigev_notify;
102 abi_int sigev_signo;
103 target_sigval_t sigev_value;
104 union {
105 abi_int _threadid;
106
107 /*
108 * The kernel (and thus QEMU) never looks at these;
109 * they're only used as part of the ABI between a
110 * userspace program and libc.
111 */
112 struct {
113 abi_ulong _function;
114 abi_ulong _attribute;
115 } _sigev_thread;
116 abi_ushort _kevent_flags;
117 abi_long _pad[8];
118 } _sigev_un;
119 };
120
121 #define target_si_signo si_signo
122 #define target_si_code si_code
123 #define target_si_errno si_errno
124 #define target_si_addr si_addr
125
126 /* SIGILL si_codes */
127 #define TARGET_ILL_ILLOPC (1) /* Illegal opcode. */
128 #define TARGET_ILL_ILLOPN (2) /* Illegal operand. */
129 #define TARGET_ILL_ILLADR (3) /* Illegal addressing mode. */
130 #define TARGET_ILL_ILLTRP (4) /* Illegal trap. */
131 #define TARGET_ILL_PRVOPC (5) /* Privileged opcode. */
132 #define TARGET_ILL_PRVREG (6) /* Privileged register. */
133 #define TARGET_ILL_COPROC (7) /* Coprocessor error. */
134 #define TARGET_ILL_BADSTK (8) /* Internal stack error. */
135
136 /* SIGSEGV si_codes */
137 #define TARGET_SEGV_MAPERR (1) /* address not mapped to object */
138 #define TARGET_SEGV_ACCERR (2) /* invalid permissions for mapped object */
139
140 /* SIGTRAP si_codes */
141 #define TARGET_TRAP_BRKPT (1) /* process beakpoint */
142 #define TARGET_TRAP_TRACE (2) /* process trace trap */
143
144 /* SIGBUS si_codes */
145 #define TARGET_BUS_ADRALN (1)
146 #define TARGET_BUS_ADRERR (2)
147 #define TARGET_BUS_OBJERR (3)
148
149 /* SIGFPE codes */
150 #define TARGET_FPE_INTOVF (1) /* Integer overflow. */
151 #define TARGET_FPE_INTDIV (2) /* Integer divide by zero. */
152 #define TARGET_FPE_FLTDIV (3) /* Floating point divide by zero. */
153 #define TARGET_FPE_FLTOVF (4) /* Floating point overflow. */
154 #define TARGET_FPE_FLTUND (5) /* Floating point underflow. */
155 #define TARGET_FPE_FLTRES (6) /* Floating point inexact result. */
156 #define TARGET_FPE_FLTINV (7) /* Invalid floating point operation. */
157 #define TARGET_FPE_FLTSUB (8) /* Subscript out of range. */
158
159 #endif /* TARGET_OS_SIGINFO_H */