pcb.h (208833) | pcb.h (210777) |
---|---|
1/*- 2 * Copyright (c) 2003 Peter Wemm. 3 * Copyright (c) 1990 The Regents of the University of California. 4 * All rights reserved. 5 * 6 * This code is derived from software contributed to Berkeley by 7 * William Jolitz. 8 * --- 17 unchanged lines hidden (view full) --- 26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31 * SUCH DAMAGE. 32 * 33 * from: @(#)pcb.h 5.10 (Berkeley) 5/12/91 | 1/*- 2 * Copyright (c) 2003 Peter Wemm. 3 * Copyright (c) 1990 The Regents of the University of California. 4 * All rights reserved. 5 * 6 * This code is derived from software contributed to Berkeley by 7 * William Jolitz. 8 * --- 17 unchanged lines hidden (view full) --- 26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31 * SUCH DAMAGE. 32 * 33 * from: @(#)pcb.h 5.10 (Berkeley) 5/12/91 |
34 * $FreeBSD: head/sys/amd64/include/pcb.h 208833 2010-06-05 15:59:59Z kib $ | 34 * $FreeBSD: head/sys/amd64/include/pcb.h 210777 2010-08-02 17:35:00Z jkim $ |
35 */ 36 37#ifndef _AMD64_PCB_H_ 38#define _AMD64_PCB_H_ 39 40/* 41 * AMD64 process control block 42 */ 43#include <machine/fpu.h> 44#include <machine/segments.h> 45 46struct pcb { | 35 */ 36 37#ifndef _AMD64_PCB_H_ 38#define _AMD64_PCB_H_ 39 40/* 41 * AMD64 process control block 42 */ 43#include <machine/fpu.h> 44#include <machine/segments.h> 45 46struct pcb { |
47 register_t pcb_cr3; | |
48 register_t pcb_r15; 49 register_t pcb_r14; 50 register_t pcb_r13; 51 register_t pcb_r12; 52 register_t pcb_rbp; 53 register_t pcb_rsp; 54 register_t pcb_rbx; 55 register_t pcb_rip; 56 register_t pcb_fsbase; 57 register_t pcb_gsbase; | 47 register_t pcb_r15; 48 register_t pcb_r14; 49 register_t pcb_r13; 50 register_t pcb_r12; 51 register_t pcb_rbp; 52 register_t pcb_rsp; 53 register_t pcb_rbx; 54 register_t pcb_rip; 55 register_t pcb_fsbase; 56 register_t pcb_gsbase; |
57 register_t pcb_kgsbase; |
|
58 u_long pcb_flags; 59#define PCB_DBREGS 0x02 /* process using debug registers */ 60#define PCB_KERNFPU 0x04 /* kernel uses fpu */ 61#define PCB_FPUINITDONE 0x08 /* fpu state is initialized */ 62#define PCB_USERFPUINITDONE 0x10 /* fpu user state is initialized */ 63#define PCB_GS32BIT 0x20 /* linux gs switch */ 64#define PCB_32BIT 0x40 /* process has 32 bit context (segs etc) */ 65#define PCB_FULLCTX 0x80 /* full context restore on sysret */ 66 | 58 u_long pcb_flags; 59#define PCB_DBREGS 0x02 /* process using debug registers */ 60#define PCB_KERNFPU 0x04 /* kernel uses fpu */ 61#define PCB_FPUINITDONE 0x08 /* fpu state is initialized */ 62#define PCB_USERFPUINITDONE 0x10 /* fpu user state is initialized */ 63#define PCB_GS32BIT 0x20 /* linux gs switch */ 64#define PCB_32BIT 0x40 /* process has 32 bit context (segs etc) */ 65#define PCB_FULLCTX 0x80 /* full context restore on sysret */ 66 |
67 u_int64_t pcb_dr0; 68 u_int64_t pcb_dr1; 69 u_int64_t pcb_dr2; 70 u_int64_t pcb_dr3; 71 u_int64_t pcb_dr6; 72 u_int64_t pcb_dr7; | 67 register_t pcb_cr0; 68 register_t pcb_cr2; 69 register_t pcb_cr3; 70 register_t pcb_cr4; 71 register_t pcb_dr0; 72 register_t pcb_dr1; 73 register_t pcb_dr2; 74 register_t pcb_dr3; 75 register_t pcb_dr6; 76 register_t pcb_dr7; |
73 | 77 |
74 struct savefpu pcb_user_save; | |
75 uint16_t pcb_initial_fpucw; 76 77 caddr_t pcb_onfault; /* copyin/out fault recovery */ 78 79 /* 32-bit segment descriptor */ | 78 uint16_t pcb_initial_fpucw; 79 80 caddr_t pcb_onfault; /* copyin/out fault recovery */ 81 82 /* 32-bit segment descriptor */ |
80 struct user_segment_descriptor pcb_gs32sd; | 83 struct user_segment_descriptor pcb_gs32sd; |
81 /* local tss, with i/o bitmap; NULL for common */ 82 struct amd64tss *pcb_tssp; 83 struct savefpu *pcb_save; 84 char pcb_full_iret; | 84 /* local tss, with i/o bitmap; NULL for common */ 85 struct amd64tss *pcb_tssp; 86 struct savefpu *pcb_save; 87 char pcb_full_iret; |
85}; | |
86 | 88 |
87struct xpcb { 88 struct pcb xpcb_pcb; 89 register_t xpcb_cr0; 90 register_t xpcb_cr2; 91 register_t xpcb_cr4; 92 register_t xpcb_kgsbase; 93 struct region_descriptor xpcb_gdt; 94 struct region_descriptor xpcb_idt; 95 struct region_descriptor xpcb_ldt; 96 uint16_t xpcb_tr; | 89 struct region_descriptor pcb_gdt; 90 struct region_descriptor pcb_idt; 91 struct region_descriptor pcb_ldt; 92 uint16_t pcb_tr; 93 94 struct savefpu pcb_user_save; |
97}; 98 99#ifdef _KERNEL 100struct trapframe; 101 102void makectx(struct trapframe *, struct pcb *); | 95}; 96 97#ifdef _KERNEL 98struct trapframe; 99 100void makectx(struct trapframe *, struct pcb *); |
103void savectx(struct pcb *); 104int savectx2(struct xpcb *); | 101int savectx(struct pcb *); |
105#endif 106 107#endif /* _AMD64_PCB_H_ */ | 102#endif 103 104#endif /* _AMD64_PCB_H_ */ |