151792Smarcel/*- 2122296Speter * Copyright (c) 2003 Peter Wemm 351792Smarcel * Copyright (c) 1999 Marcel Moolenaar 451792Smarcel * All rights reserved. 551792Smarcel * 651792Smarcel * Redistribution and use in source and binary forms, with or without 751792Smarcel * modification, are permitted provided that the following conditions 851792Smarcel * are met: 951792Smarcel * 1. Redistributions of source code must retain the above copyright 1051792Smarcel * notice, this list of conditions and the following disclaimer 1151792Smarcel * in this position and unchanged. 1251792Smarcel * 2. Redistributions in binary form must reproduce the above copyright 1351792Smarcel * notice, this list of conditions and the following disclaimer in the 1451792Smarcel * documentation and/or other materials provided with the distribution. 1551792Smarcel * 3. The name of the author may not be used to endorse or promote products 1651792Smarcel * derived from this software without specific prior written permission. 1751792Smarcel * 1851792Smarcel * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 1951792Smarcel * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 2051792Smarcel * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 2151792Smarcel * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 2251792Smarcel * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2351792Smarcel * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2451792Smarcel * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2551792Smarcel * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2651792Smarcel * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2751792Smarcel * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2851792Smarcel * 2951792Smarcel * $FreeBSD$ 3051792Smarcel */ 3151792Smarcel 3251792Smarcel#ifndef _MACHINE_UCONTEXT_H_ 3351942Smarcel#define _MACHINE_UCONTEXT_H_ 3451792Smarcel 35190616Skib/* 36190616Skib * mc_trapno bits. Shall be in sync with TF_XXX. 37190616Skib */ 38190616Skib#define _MC_HASSEGS 0x1 39190616Skib#define _MC_HASBASES 0x2 40231979Skib#define _MC_HASFPXSTATE 0x4 41231979Skib#define _MC_FLAG_MASK (_MC_HASSEGS | _MC_HASBASES | _MC_HASFPXSTATE) 42190616Skib 4351942Smarceltypedef struct __mcontext { 4451942Smarcel /* 45229023Skib * The definition of mcontext_t must match the layout of 46229023Skib * struct sigcontext after the sc_mask member. This is so 47229023Skib * that we can support sigcontext and ucontext_t at the same 48229023Skib * time. 4951942Smarcel */ 50229023Skib __register_t mc_onstack; /* XXX - sigcontext compat. */ 51229023Skib __register_t mc_rdi; /* machine state (struct trapframe) */ 52120617Speter __register_t mc_rsi; 53120617Speter __register_t mc_rdx; 54120617Speter __register_t mc_rcx; 55120617Speter __register_t mc_r8; 56120617Speter __register_t mc_r9; 57120617Speter __register_t mc_rax; 58120617Speter __register_t mc_rbx; 59120617Speter __register_t mc_rbp; 60120617Speter __register_t mc_r10; 61120617Speter __register_t mc_r11; 62120617Speter __register_t mc_r12; 63120617Speter __register_t mc_r13; 64120617Speter __register_t mc_r14; 65120617Speter __register_t mc_r15; 66190616Skib __uint32_t mc_trapno; 67190616Skib __uint16_t mc_fs; 68190616Skib __uint16_t mc_gs; 69120617Speter __register_t mc_addr; 70190616Skib __uint32_t mc_flags; 71190616Skib __uint16_t mc_es; 72190616Skib __uint16_t mc_ds; 73120617Speter __register_t mc_err; 74120617Speter __register_t mc_rip; 75120617Speter __register_t mc_cs; 76120617Speter __register_t mc_rflags; 77120617Speter __register_t mc_rsp; 78120617Speter __register_t mc_ss; 7951942Smarcel 80114349Speter long mc_len; /* sizeof(mcontext_t) */ 81190616Skib 82104460Sdeischen#define _MC_FPFMT_NODEV 0x10000 /* device not present or configured */ 83104460Sdeischen#define _MC_FPFMT_XMM 0x10002 84114349Speter long mc_fpformat; 85104460Sdeischen#define _MC_FPOWNED_NONE 0x20000 /* FP state not used */ 86104460Sdeischen#define _MC_FPOWNED_FPU 0x20001 /* FP state came from FPU */ 87104460Sdeischen#define _MC_FPOWNED_PCB 0x20002 /* FP state came from PCB */ 88114349Speter long mc_ownedfp; 89107521Sdeischen /* 90122278Speter * See <machine/fpu.h> for the internals of mc_fpstate[]. 91107521Sdeischen */ 92119779Speter long mc_fpstate[64] __aligned(16); 93190616Skib 94190616Skib __register_t mc_fsbase; 95190616Skib __register_t mc_gsbase; 96190616Skib 97231979Skib __register_t mc_xfpustate; 98231979Skib __register_t mc_xfpustate_len; 99231979Skib 100231979Skib long mc_spare[4]; 10151792Smarcel} mcontext_t; 10251792Smarcel 10351942Smarcel#endif /* !_MACHINE_UCONTEXT_H_ */ 104