qemu/bsd-user/freebsd/target_os_siginfo.h
<<
>>
Prefs
   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#ifndef _TARGET_OS_SIGINFO_H_
  20#define _TARGET_OS_SIGINFO_H_
  21
  22#define TARGET_NSIG         128
  23#define TARGET_NSIG_BPW     (sizeof(uint32_t) * 8)
  24#define TARGET_NSIG_WORDS   (TARGET_NSIG / TARGET_NSIG_BPW)
  25
  26/* this struct defines a stack used during syscall handling */
  27typedef struct target_sigaltstack {
  28    abi_long    ss_sp;
  29    abi_ulong   ss_size;
  30    abi_long    ss_flags;
  31} target_stack_t;
  32
  33typedef struct {
  34    uint32_t __bits[TARGET_NSIG_WORDS];
  35} target_sigset_t;
  36
  37struct target_sigaction {
  38    abi_ulong   _sa_handler;
  39    int32_t     sa_flags;
  40    target_sigset_t sa_mask;
  41};
  42
  43typedef union target_sigval {
  44    int32_t sival_int;
  45    abi_ulong sival_ptr;
  46    int32_t sigval_int;
  47    abi_ulong sigval_ptr;
  48} target_sigval_t;
  49
  50typedef struct target_siginfo {
  51    int32_t si_signo;   /* signal number */
  52    int32_t si_errno;   /* errno association */
  53    int32_t si_code;    /* signal code */
  54    int32_t si_pid;     /* sending process */
  55    int32_t si_uid;     /* sender's ruid */
  56    int32_t si_status;  /* exit value */
  57    abi_ulong si_addr;  /* faulting instruction */
  58    union target_sigval si_value;   /* signal value */
  59    union {
  60        struct {
  61            int32_t _trapno;    /* machine specific trap code */
  62        } _fault;
  63
  64        /* POSIX.1b timers */
  65        struct {
  66            int32_t _timerid;
  67            int32_t _overrun;
  68        } _timer;
  69
  70        struct {
  71            int32_t _mqd;
  72        } _mesgp;
  73
  74        /* SIGPOLL -- Not really genreated in FreeBSD ??? */
  75        struct {
  76            int _band;  /* POLL_IN, POLL_OUT, POLL_MSG */
  77        } _poll;
  78
  79        struct {
  80            int _mqd;
  81        } _mesgq;
  82
  83        struct {
  84            /*
  85             * Syscall number for signals delivered as a result of system calls
  86             * denied by Capsicum.
  87             */
  88            int _syscall;
  89        } _capsicum;
  90
  91        /* Spare for future growth */
  92        struct {
  93            abi_long __spare1__;
  94            int32_t  __spare2_[7];
  95        } __spare__;
  96    } _reason;
  97} target_siginfo_t;
  98
  99struct target_sigevent {
 100    abi_int sigev_notify;
 101    abi_int sigev_signo;
 102    target_sigval_t sigev_value;
 103    union {
 104        abi_int _threadid;
 105
 106        /*
 107         * The kernel (and thus QEMU) never looks at these;
 108         * they're only used as part of the ABI between a
 109         * userspace program and libc.
 110         */
 111        struct {
 112            abi_ulong _function;
 113            abi_ulong _attribute;
 114        } _sigev_thread;
 115        abi_ushort _kevent_flags;
 116        abi_long _pad[8];
 117    } _sigev_un;
 118};
 119
 120#define target_si_signo     si_signo
 121#define target_si_code      si_code
 122#define target_si_errno     si_errno
 123#define target_si_addr      si_addr
 124
 125/* SIGILL si_codes */
 126#define TARGET_ILL_ILLOPC   (1) /* Illegal opcode. */
 127#define TARGET_ILL_ILLOPN   (2) /* Illegal operand. */
 128#define TARGET_ILL_ILLADR   (3) /* Illegal addressing mode. */
 129#define TARGET_ILL_ILLTRP   (4) /* Illegal trap. */
 130#define TARGET_ILL_PRVOPC   (5) /* Privileged opcode. */
 131#define TARGET_ILL_PRVREG   (6) /* Privileged register. */
 132#define TARGET_ILL_COPROC   (7) /* Coprocessor error. */
 133#define TARGET_ILL_BADSTK   (8) /* Internal stack error. */
 134
 135/* SIGSEGV si_codes */
 136#define TARGET_SEGV_MAPERR  (1) /* address not mapped to object */
 137#define TARGET_SEGV_ACCERR  (2) /* invalid permissions for mapped object */
 138
 139/* SIGTRAP si_codes */
 140#define TARGET_TRAP_BRKPT   (1) /* process beakpoint */
 141#define TARGET_TRAP_TRACE   (2) /* process trace trap */
 142
 143/* SIGBUS si_codes */
 144#define TARGET_BUS_ADRALN   (1)
 145#define TARGET_BUS_ADRERR   (2)
 146#define TARGET_BUS_OBJERR   (3)
 147
 148/* SIGFPE codes */
 149#define TARGET_FPE_INTOVF   (1) /* Integer overflow. */
 150#define TARGET_FPE_INTDIV   (2) /* Integer divide by zero. */
 151#define TARGET_FPE_FLTDIV   (3) /* Floating point divide by zero. */
 152#define TARGET_FPE_FLTOVF   (4) /* Floating point overflow. */
 153#define TARGET_FPE_FLTUND   (5) /* Floating point underflow. */
 154#define TARGET_FPE_FLTRES   (6) /* Floating point inexact result. */
 155#define TARGET_FPE_FLTINV   (7) /* Invalid floating point operation. */
 156#define TARGET_FPE_FLTSUB   (8) /* Subscript out of range. */
 157
 158#endif /* !_TARGET_OS_SIGINFO_H_ */
 159