1*38c3a22eSSascha Wildner /*- 2*38c3a22eSSascha Wildner * Copyright (c) 2021 The DragonFly Project. All rights reserved. 3*38c3a22eSSascha Wildner * 4*38c3a22eSSascha Wildner * Redistribution and use in source and binary forms, with or without 5*38c3a22eSSascha Wildner * modification, are permitted provided that the following conditions 6*38c3a22eSSascha Wildner * are met: 7*38c3a22eSSascha Wildner * 8*38c3a22eSSascha Wildner * 1. Redistributions of source code must retain the above copyright 9*38c3a22eSSascha Wildner * notice, this list of conditions and the following disclaimer. 10*38c3a22eSSascha Wildner * 2. Redistributions in binary form must reproduce the above copyright 11*38c3a22eSSascha Wildner * notice, this list of conditions and the following disclaimer in 12*38c3a22eSSascha Wildner * the documentation and/or other materials provided with the 13*38c3a22eSSascha Wildner * distribution. 14*38c3a22eSSascha Wildner * 3. Neither the name of The DragonFly Project nor the names of its 15*38c3a22eSSascha Wildner * contributors may be used to endorse or promote products derived 16*38c3a22eSSascha Wildner * from this software without specific, prior written permission. 17*38c3a22eSSascha Wildner * 18*38c3a22eSSascha Wildner * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19*38c3a22eSSascha Wildner * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20*38c3a22eSSascha Wildner * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 21*38c3a22eSSascha Wildner * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 22*38c3a22eSSascha Wildner * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 23*38c3a22eSSascha Wildner * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, 24*38c3a22eSSascha Wildner * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25*38c3a22eSSascha Wildner * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 26*38c3a22eSSascha Wildner * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 27*38c3a22eSSascha Wildner * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 28*38c3a22eSSascha Wildner * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29*38c3a22eSSascha Wildner * SUCH DAMAGE. 30*38c3a22eSSascha Wildner */ 31*38c3a22eSSascha Wildner 32*38c3a22eSSascha Wildner #ifndef _SYS__UCONTEXT_H_ 33*38c3a22eSSascha Wildner #define _SYS__UCONTEXT_H_ 34*38c3a22eSSascha Wildner 35*38c3a22eSSascha Wildner #include <sys/_sigset.h> 36*38c3a22eSSascha Wildner 37*38c3a22eSSascha Wildner #include <machine/ucontext.h> 38*38c3a22eSSascha Wildner 39*38c3a22eSSascha Wildner #ifndef _SIGSET_T_DECLARED 40*38c3a22eSSascha Wildner typedef struct __sigset sigset_t; 41*38c3a22eSSascha Wildner #define _SIGSET_T_DECLARED 42*38c3a22eSSascha Wildner #endif 43*38c3a22eSSascha Wildner 44*38c3a22eSSascha Wildner #ifndef _SIZE_T_DECLARED 45*38c3a22eSSascha Wildner typedef __size_t size_t; 46*38c3a22eSSascha Wildner #define _SIZE_T_DECLARED 47*38c3a22eSSascha Wildner #endif 48*38c3a22eSSascha Wildner 49*38c3a22eSSascha Wildner #ifndef _STACK_T_DECLARED 50*38c3a22eSSascha Wildner #if __BSD_VISIBLE 51*38c3a22eSSascha Wildner typedef struct sigaltstack { 52*38c3a22eSSascha Wildner #else /* !__BSD_VISIBLE */ 53*38c3a22eSSascha Wildner typedef struct { 54*38c3a22eSSascha Wildner #endif /* __BSD_VISIBLE */ 55*38c3a22eSSascha Wildner void *ss_sp; /* signal stack base */ 56*38c3a22eSSascha Wildner size_t ss_size; /* signal stack length */ 57*38c3a22eSSascha Wildner int ss_flags; /* SS_DISABLE and/or SS_ONSTACK */ 58*38c3a22eSSascha Wildner } stack_t; 59*38c3a22eSSascha Wildner #define _STACK_T_DECLARED 60*38c3a22eSSascha Wildner #endif 61*38c3a22eSSascha Wildner 62*38c3a22eSSascha Wildner typedef struct __ucontext { 63*38c3a22eSSascha Wildner /* 64*38c3a22eSSascha Wildner * Keep the order of the first two fields. Also, 65*38c3a22eSSascha Wildner * keep them the first two fields in the structure. 66*38c3a22eSSascha Wildner * This way we can have a union with struct 67*38c3a22eSSascha Wildner * sigcontext and ucontext_t. This allows us to 68*38c3a22eSSascha Wildner * support them both at the same time. 69*38c3a22eSSascha Wildner * note: the union is not defined, though. 70*38c3a22eSSascha Wildner */ 71*38c3a22eSSascha Wildner sigset_t uc_sigmask; 72*38c3a22eSSascha Wildner mcontext_t uc_mcontext; 73*38c3a22eSSascha Wildner 74*38c3a22eSSascha Wildner struct __ucontext *uc_link; 75*38c3a22eSSascha Wildner stack_t uc_stack; 76*38c3a22eSSascha Wildner void (*uc_cofunc)(struct __ucontext *, void *); 77*38c3a22eSSascha Wildner void *uc_arg; 78*38c3a22eSSascha Wildner int __spare__[4]; 79*38c3a22eSSascha Wildner } ucontext_t; 80*38c3a22eSSascha Wildner 81*38c3a22eSSascha Wildner #endif /* !_SYS__UCONTEXT_H_ */ 82