ucontext.h revision 231979
1139749Simp/*-
2119853Scg * Copyright (c) 2003 Peter Wemm
3166426Sjoel * Copyright (c) 1999 Marcel Moolenaar
429415Sjmg * All rights reserved.
529415Sjmg *
629415Sjmg * Redistribution and use in source and binary forms, with or without
729415Sjmg * modification, are permitted provided that the following conditions
850723Scg * are met:
950723Scg * 1. Redistributions of source code must retain the above copyright
1029415Sjmg *    notice, this list of conditions and the following disclaimer
1129415Sjmg *    in this position and unchanged.
1230869Sjmg * 2. Redistributions in binary form must reproduce the above copyright
1330869Sjmg *    notice, this list of conditions and the following disclaimer in the
1430869Sjmg *    documentation and/or other materials provided with the distribution.
1530869Sjmg * 3. The name of the author may not be used to endorse or promote products
1650723Scg *    derived from this software without specific prior written permission.
1750723Scg *
1830869Sjmg * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
1950723Scg * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
2050723Scg * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
2150723Scg * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
2250723Scg * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2350723Scg * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2450723Scg * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2550723Scg * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2650723Scg * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
2750723Scg * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2850723Scg *
2950723Scg * $FreeBSD: stable/9/sys/amd64/include/ucontext.h 231979 2012-02-21 20:56:03Z kib $
3029415Sjmg */
3129415Sjmg
32193640Sariff#ifndef _MACHINE_UCONTEXT_H_
33193640Sariff#define	_MACHINE_UCONTEXT_H_
34193640Sariff
35193640Sariff/*
3653465Scg * mc_trapno bits. Shall be in sync with TF_XXX.
3729415Sjmg */
3853465Scg#define	_MC_HASSEGS	0x1
3953553Stanimura#define	_MC_HASBASES	0x2
4029415Sjmg#define	_MC_HASFPXSTATE	0x4
41110499Snyan#define	_MC_FLAG_MASK	(_MC_HASSEGS | _MC_HASBASES | _MC_HASFPXSTATE)
42110499Snyan
4370134Scgtypedef struct __mcontext {
4470134Scg	/*
4582180Scg	 * The definition of mcontext_t must match the layout of
4682180Scg	 * struct sigcontext after the sc_mask member.  This is so
4767803Scg	 * that we can support sigcontext and ucontext_t at the same
4855706Scg	 * time.
4955254Scg	 */
5067803Scg	__register_t	mc_onstack;	/* XXX - sigcontext compat. */
51193640Sariff	__register_t	mc_rdi;		/* machine state (struct trapframe) */
52193640Sariff	__register_t	mc_rsi;
5364881Scg	__register_t	mc_rdx;
5450723Scg	__register_t	mc_rcx;
5574763Scg	__register_t	mc_r8;
5629415Sjmg	__register_t	mc_r9;
5767803Scg	__register_t	mc_rax;
58193640Sariff	__register_t	mc_rbx;
59193640Sariff	__register_t	mc_rbp;
6064881Scg	__register_t	mc_r10;
6150723Scg	__register_t	mc_r11;
6274763Scg	__register_t	mc_r12;
6329415Sjmg	__register_t	mc_r13;
6464881Scg	__register_t	mc_r14;
65193640Sariff	__register_t	mc_r15;
66193640Sariff	__uint32_t	mc_trapno;
67193640Sariff	__uint16_t	mc_fs;
68193640Sariff	__uint16_t	mc_gs;
6964881Scg	__register_t	mc_addr;
7054462Scg	__uint32_t	mc_flags;
7174763Scg	__uint16_t	mc_es;
7254462Scg	__uint16_t	mc_ds;
7350723Scg	__register_t	mc_err;
7429415Sjmg	__register_t	mc_rip;
7550723Scg	__register_t	mc_cs;
7650723Scg	__register_t	mc_rflags;
7774763Scg	__register_t	mc_rsp;
7874763Scg	__register_t	mc_ss;
7967803Scg
8067803Scg	long	mc_len;			/* sizeof(mcontext_t) */
8150723Scg
8229415Sjmg#define	_MC_FPFMT_NODEV		0x10000	/* device not present or configured */
8350723Scg#define	_MC_FPFMT_XMM		0x10002
8450723Scg	long	mc_fpformat;
8550723Scg#define	_MC_FPOWNED_NONE	0x20000	/* FP state not used */
8654462Scg#define	_MC_FPOWNED_FPU		0x20001	/* FP state came from FPU */
8754462Scg#define	_MC_FPOWNED_PCB		0x20002	/* FP state came from PCB */
8865644Scg	long	mc_ownedfp;
8955706Scg	/*
9029415Sjmg	 * See <machine/fpu.h> for the internals of mc_fpstate[].
9184111Scg	 */
9250723Scg	long	mc_fpstate[64] __aligned(16);
9350723Scg
9470291Scg	__register_t	mc_fsbase;
9550723Scg	__register_t	mc_gsbase;
9674763Scg
9750723Scg	__register_t	mc_xfpustate;
9850723Scg	__register_t	mc_xfpustate_len;
9984111Scg
10074763Scg	long	mc_spare[4];
10174763Scg} mcontext_t;
10250723Scg
10350723Scg#endif /* !_MACHINE_UCONTEXT_H_ */
10450723Scg