1/*-
2 * SPDX-License-Identifier: BSD-3-Clause
3 *
4 * Copyright (c) 1999 Marcel Moolenaar
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 *    notice, this list of conditions and the following disclaimer
12 *    in this position and unchanged.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 *    notice, this list of conditions and the following disclaimer in the
15 *    documentation and/or other materials provided with the distribution.
16 * 3. The name of the author may not be used to endorse or promote products
17 *    derived from this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31#ifndef _SYS_UCONTEXT_H_
32#define	_SYS_UCONTEXT_H_
33
34#include <sys/signal.h>
35#include <machine/ucontext.h>
36#include <sys/_ucontext.h>
37
38#define	UCF_SWAPPED	0x00000001	/* Used by swapcontext(3). */
39
40#ifndef _KERNEL
41
42__BEGIN_DECLS
43
44int	getcontext(ucontext_t *) __returns_twice;
45ucontext_t *getcontextx(void);
46int	setcontext(const ucontext_t *);
47void	makecontext(ucontext_t *, void (*)(void), int, ...);
48int	signalcontext(ucontext_t *, int, __sighandler_t *);
49int	swapcontext(ucontext_t *, const ucontext_t *);
50
51#if __BSD_VISIBLE
52int __getcontextx_size(void);
53int __fillcontextx(char *ctx) __returns_twice;
54int __fillcontextx2(char *ctx);
55#endif
56
57__END_DECLS
58
59#else /* _KERNEL */
60
61struct thread;
62
63/*
64 * Flags for get_mcontext().  The low order 4 bits (i.e a mask of 0x0f) are
65 * reserved for use by machine independent code.  All other bits are for use
66 * by machine dependent code.
67 */
68#define	GET_MC_CLEAR_RET	1
69
70/* Machine-dependent functions: */
71int	get_mcontext(struct thread *, mcontext_t *, int);
72int	set_mcontext(struct thread *, mcontext_t *);
73
74#endif /* !_KERNEL */
75
76#endif /* !_SYS_UCONTEXT_H_ */
77