1af557e64SDmitry Chagin /*- 2af557e64SDmitry Chagin * SPDX-License-Identifier: BSD-3-Clause 3af557e64SDmitry Chagin * 4af557e64SDmitry Chagin * Copyright (c) 2004 Tim J. Robbins 5af557e64SDmitry Chagin * Copyright (c) 2001 Doug Rabson 6af557e64SDmitry Chagin * Copyright (c) 1994-1996 Søren Schmidt 7af557e64SDmitry Chagin * All rights reserved. 8af557e64SDmitry Chagin * Copyright (c) 2022 Dmitry Chagin <dchagin@FreeBSD.org> 9af557e64SDmitry Chagin * 10af557e64SDmitry Chagin * Redistribution and use in source and binary forms, with or without 11af557e64SDmitry Chagin * modification, are permitted provided that the following conditions 12af557e64SDmitry Chagin * are met: 13af557e64SDmitry Chagin * 1. Redistributions of source code must retain the above copyright 14af557e64SDmitry Chagin * notice, this list of conditions and the following disclaimer 15af557e64SDmitry Chagin * in this position and unchanged. 16af557e64SDmitry Chagin * 2. Redistributions in binary form must reproduce the above copyright 17af557e64SDmitry Chagin * notice, this list of conditions and the following disclaimer in the 18af557e64SDmitry Chagin * documentation and/or other materials provided with the distribution. 19af557e64SDmitry Chagin * 3. The name of the author may not be used to endorse or promote products 20af557e64SDmitry Chagin * derived from this software without specific prior written permission 21af557e64SDmitry Chagin * 22af557e64SDmitry Chagin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 23af557e64SDmitry Chagin * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 24af557e64SDmitry Chagin * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 25af557e64SDmitry Chagin * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 26af557e64SDmitry Chagin * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 27af557e64SDmitry Chagin * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28af557e64SDmitry Chagin * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29af557e64SDmitry Chagin * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30af557e64SDmitry Chagin * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 31af557e64SDmitry Chagin * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32af557e64SDmitry Chagin * 33af557e64SDmitry Chagin * $FreeBSD$ 34af557e64SDmitry Chagin */ 35af557e64SDmitry Chagin 36af557e64SDmitry Chagin #ifndef _LINUX_SIGINFO_H_ 37af557e64SDmitry Chagin #define _LINUX_SIGINFO_H_ 38af557e64SDmitry Chagin 39*9386e18bSDmitry Chagin /* 40*9386e18bSDmitry Chagin * si_code values 41*9386e18bSDmitry Chagin */ 42*9386e18bSDmitry Chagin #define LINUX_SI_USER 0 /* sent by kill, sigsend, raise */ 43*9386e18bSDmitry Chagin #define LINUX_SI_KERNEL 0x80 /* sent by the kernel from somewhere */ 44*9386e18bSDmitry Chagin #define LINUX_SI_QUEUE -1 /* sent by sigqueue */ 45*9386e18bSDmitry Chagin #define LINUX_SI_TIMER -2 /* sent by timer expiration */ 46*9386e18bSDmitry Chagin #define LINUX_SI_MESGQ -3 /* sent by real time mesq state change */ 47*9386e18bSDmitry Chagin #define LINUX_SI_ASYNCIO -4 /* sent by AIO completion */ 48*9386e18bSDmitry Chagin #define LINUX_SI_SIGIO -5 /* sent by queued SIGIO */ 49*9386e18bSDmitry Chagin #define LINUX_SI_TKILL -6 /* sent by tkill system call */ 50*9386e18bSDmitry Chagin 51af557e64SDmitry Chagin typedef union l_sigval { 52af557e64SDmitry Chagin l_int sival_int; 53af557e64SDmitry Chagin l_uintptr_t sival_ptr; 54af557e64SDmitry Chagin } l_sigval_t; 55af557e64SDmitry Chagin 56af557e64SDmitry Chagin #define LINUX_SI_MAX_SIZE 128 57af557e64SDmitry Chagin 58af557e64SDmitry Chagin union __sifields { 59af557e64SDmitry Chagin struct { 60af557e64SDmitry Chagin l_pid_t _pid; 61af557e64SDmitry Chagin l_uid_t _uid; 62af557e64SDmitry Chagin } _kill; 63af557e64SDmitry Chagin 64af557e64SDmitry Chagin struct { 65af557e64SDmitry Chagin l_timer_t _tid; 66af557e64SDmitry Chagin l_int _overrun; 67af557e64SDmitry Chagin char _pad[sizeof(l_uid_t) - sizeof(int)]; 68af557e64SDmitry Chagin union l_sigval _sigval; 69af557e64SDmitry Chagin l_uint _sys_private; 70af557e64SDmitry Chagin } _timer; 71af557e64SDmitry Chagin 72af557e64SDmitry Chagin struct { 73af557e64SDmitry Chagin l_pid_t _pid; /* sender's pid */ 74af557e64SDmitry Chagin l_uid_t _uid; /* sender's uid */ 75af557e64SDmitry Chagin union l_sigval _sigval; 76af557e64SDmitry Chagin } _rt; 77af557e64SDmitry Chagin 78af557e64SDmitry Chagin struct { 79af557e64SDmitry Chagin l_pid_t _pid; /* which child */ 80af557e64SDmitry Chagin l_uid_t _uid; /* sender's uid */ 81af557e64SDmitry Chagin l_int _status; /* exit code */ 82af557e64SDmitry Chagin l_clock_t _utime; 83af557e64SDmitry Chagin l_clock_t _stime; 84af557e64SDmitry Chagin } _sigchld; 85af557e64SDmitry Chagin 86af557e64SDmitry Chagin struct { 87af557e64SDmitry Chagin l_uintptr_t _addr; /* Faulting insn/memory ref. */ 88af557e64SDmitry Chagin } _sigfault; 89af557e64SDmitry Chagin 90af557e64SDmitry Chagin struct { 91af557e64SDmitry Chagin l_long _band; /* POLL_IN,POLL_OUT,POLL_MSG */ 92af557e64SDmitry Chagin l_int _fd; 93af557e64SDmitry Chagin } _sigpoll; 94af557e64SDmitry Chagin }; 95af557e64SDmitry Chagin 96af557e64SDmitry Chagin typedef struct l_siginfo { 97af557e64SDmitry Chagin union { 98af557e64SDmitry Chagin struct { 99af557e64SDmitry Chagin l_int lsi_signo; 100af557e64SDmitry Chagin l_int lsi_errno; 101af557e64SDmitry Chagin l_int lsi_code; 102af557e64SDmitry Chagin union __sifields _sifields; 103af557e64SDmitry Chagin }; 104af557e64SDmitry Chagin l_int _pad[LINUX_SI_MAX_SIZE/sizeof(l_int)]; 105af557e64SDmitry Chagin }; 106af557e64SDmitry Chagin } l_siginfo_t; 107af557e64SDmitry Chagin 108af557e64SDmitry Chagin _Static_assert(sizeof(l_siginfo_t) == LINUX_SI_MAX_SIZE, "l_siginfo_t size"); 109af557e64SDmitry Chagin 110af557e64SDmitry Chagin #define lsi_pid _sifields._kill._pid 111af557e64SDmitry Chagin #define lsi_uid _sifields._kill._uid 112af557e64SDmitry Chagin #define lsi_tid _sifields._timer._tid 113af557e64SDmitry Chagin #define lsi_overrun _sifields._timer._overrun 114af557e64SDmitry Chagin #define lsi_sys_private _sifields._timer._sys_private 115af557e64SDmitry Chagin #define lsi_status _sifields._sigchld._status 116af557e64SDmitry Chagin #define lsi_utime _sifields._sigchld._utime 117af557e64SDmitry Chagin #define lsi_stime _sifields._sigchld._stime 118af557e64SDmitry Chagin #define lsi_value _sifields._rt._sigval 119af557e64SDmitry Chagin #define lsi_int _sifields._rt._sigval.sival_int 120af557e64SDmitry Chagin #define lsi_ptr _sifields._rt._sigval.sival_ptr 121af557e64SDmitry Chagin #define lsi_addr _sifields._sigfault._addr 122af557e64SDmitry Chagin #define lsi_band _sifields._sigpoll._band 123af557e64SDmitry Chagin #define lsi_fd _sifields._sigpoll._fd 124af557e64SDmitry Chagin 125af557e64SDmitry Chagin #endif /* _LINUX_SIGINFO_H_ */ 126