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