123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- /*
- * FreeBSD siginfo related definitions
- *
- * Copyright (c) 2013 Stacey D. Son
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
- #ifndef TARGET_OS_SIGINFO_H
- #define TARGET_OS_SIGINFO_H
- #define TARGET_NSIG 128
- #define TARGET_NSIG_BPW (sizeof(uint32_t) * 8)
- #define TARGET_NSIG_WORDS (TARGET_NSIG / TARGET_NSIG_BPW)
- /* this struct defines a stack used during syscall handling */
- typedef struct target_sigaltstack {
- abi_long ss_sp;
- abi_ulong ss_size;
- abi_long ss_flags;
- } target_stack_t;
- typedef struct {
- uint32_t __bits[TARGET_NSIG_WORDS];
- } target_sigset_t;
- struct target_sigaction {
- abi_ulong _sa_handler;
- int32_t sa_flags;
- target_sigset_t sa_mask;
- };
- typedef union target_sigval {
- int32_t sival_int;
- abi_ulong sival_ptr;
- int32_t sigval_int;
- abi_ulong sigval_ptr;
- } target_sigval_t;
- typedef struct target_siginfo {
- int32_t si_signo; /* signal number */
- int32_t si_errno; /* errno association */
- int32_t si_code; /* signal code */
- int32_t si_pid; /* sending process */
- int32_t si_uid; /* sender's ruid */
- int32_t si_status; /* exit value */
- abi_ulong si_addr; /* faulting instruction */
- union target_sigval si_value; /* signal value */
- union {
- struct {
- int32_t _trapno; /* machine specific trap code */
- } _fault;
- /* POSIX.1b timers */
- struct {
- int32_t _timerid;
- int32_t _overrun;
- } _timer;
- struct {
- int32_t _mqd;
- } _mesgp;
- /* SIGPOLL -- Not really generated in FreeBSD ??? */
- struct {
- int _band; /* POLL_IN, POLL_OUT, POLL_MSG */
- } _poll;
- struct {
- int _mqd;
- } _mesgq;
- struct {
- /*
- * Syscall number for signals delivered as a result of system calls
- * denied by Capsicum.
- */
- int _syscall;
- } _capsicum;
- /* Spare for future growth */
- struct {
- abi_long __spare1__;
- int32_t __spare2_[7];
- } __spare__;
- } _reason;
- } target_siginfo_t;
- struct target_sigevent {
- abi_int sigev_notify;
- abi_int sigev_signo;
- target_sigval_t sigev_value;
- union {
- abi_int _threadid;
- /*
- * The kernel (and thus QEMU) never looks at these;
- * they're only used as part of the ABI between a
- * userspace program and libc.
- */
- struct {
- abi_ulong _function;
- abi_ulong _attribute;
- } _sigev_thread;
- abi_ushort _kevent_flags;
- abi_long _pad[8];
- } _sigev_un;
- };
- #define target_si_signo si_signo
- #define target_si_code si_code
- #define target_si_errno si_errno
- #define target_si_addr si_addr
- /* SIGILL si_codes */
- #define TARGET_ILL_ILLOPC (1) /* Illegal opcode. */
- #define TARGET_ILL_ILLOPN (2) /* Illegal operand. */
- #define TARGET_ILL_ILLADR (3) /* Illegal addressing mode. */
- #define TARGET_ILL_ILLTRP (4) /* Illegal trap. */
- #define TARGET_ILL_PRVOPC (5) /* Privileged opcode. */
- #define TARGET_ILL_PRVREG (6) /* Privileged register. */
- #define TARGET_ILL_COPROC (7) /* Coprocessor error. */
- #define TARGET_ILL_BADSTK (8) /* Internal stack error. */
- /* SIGSEGV si_codes */
- #define TARGET_SEGV_MAPERR (1) /* address not mapped to object */
- #define TARGET_SEGV_ACCERR (2) /* invalid permissions for mapped object */
- /* SIGTRAP si_codes */
- #define TARGET_TRAP_BRKPT (1) /* process beakpoint */
- #define TARGET_TRAP_TRACE (2) /* process trace trap */
- /* SIGBUS si_codes */
- #define TARGET_BUS_ADRALN (1)
- #define TARGET_BUS_ADRERR (2)
- #define TARGET_BUS_OBJERR (3)
- /* SIGFPE codes */
- #define TARGET_FPE_INTOVF (1) /* Integer overflow. */
- #define TARGET_FPE_INTDIV (2) /* Integer divide by zero. */
- #define TARGET_FPE_FLTDIV (3) /* Floating point divide by zero. */
- #define TARGET_FPE_FLTOVF (4) /* Floating point overflow. */
- #define TARGET_FPE_FLTUND (5) /* Floating point underflow. */
- #define TARGET_FPE_FLTRES (6) /* Floating point inexact result. */
- #define TARGET_FPE_FLTINV (7) /* Invalid floating point operation. */
- #define TARGET_FPE_FLTSUB (8) /* Subscript out of range. */
- #endif /* TARGET_OS_SIGINFO_H */
|