xref: /xnu-11215.41.3/bsd/dev/i386/fasttrap_regset.h (revision 33de042d024d46de5ff4e89f2471de6608e37fa4)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  */
22 /*
23  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 /*	Copyright (c) 1990, 1991 UNIX System Laboratories, Inc. */
28 
29 /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T		*/
30 /*	All Rights Reserved	*/
31 
32 #ifndef	_FASTTRAP_REGSET_H
33 #define	_FASTTRAP_REGSET_H
34 
35 /*
36  * APPLE NOTE: This file was orginally uts/intel/sys/regset.h
37  */
38 
39 #ifdef __cplusplus
40 extern "C" {
41 #endif
42 
43 /*
44  * The names and offsets defined here should be specified by the
45  * AMD64 ABI suppl.
46  *
47  * We make fsbase and gsbase part of the lwp context (since they're
48  * the only way to access the full 64-bit address range via the segment
49  * registers) and thus belong here too.  However we treat them as
50  * read-only; if %fs or %gs are updated, the results of the descriptor
51  * table lookup that those updates implicitly cause will be reflected
52  * in the corresponding fsbase and/or gsbase values the next time the
53  * context can be inspected.  However it is NOT possible to override
54  * the fsbase/gsbase settings via this interface.
55  *
56  * Direct modification of the base registers (thus overriding the
57  * descriptor table base address) can be achieved with _lwp_setprivate.
58  */
59 
60 #define	REG_GSBASE	27
61 #define	REG_FSBASE	26
62 #define	REG_DS		25
63 #define	REG_ES		24
64 
65 #define	REG_GS		23
66 #define	REG_FS		22
67 #define	REG_SS		21
68 #define	REG_RSP		20
69 #define	REG_RFL		19
70 #define	REG_CS		18
71 #define	REG_RIP		17
72 #define	REG_ERR		16
73 #define	REG_TRAPNO	15
74 #define	REG_RAX		14
75 #define	REG_RCX		13
76 #define	REG_RDX		12
77 #define	REG_RBX		11
78 #define	REG_RBP		10
79 #define	REG_RSI		9
80 #define	REG_RDI		8
81 #define	REG_R8		7
82 #define	REG_R9		6
83 #define	REG_R10		5
84 #define	REG_R11		4
85 #define	REG_R12		3
86 #define	REG_R13		2
87 #define	REG_R14		1
88 #define	REG_R15		0
89 
90 /*
91  * The names and offsets defined here are specified by i386 ABI suppl.
92  */
93 
94 #define	SS		18	/* only stored on a privilege transition */
95 #define	UESP		17	/* only stored on a privilege transition */
96 #define	EFL		16
97 #define	CS		15
98 #define	EIP		14
99 #define	ERR		13
100 #define	TRAPNO		12
101 #define	EAX		11
102 #define	ECX		10
103 #define	EDX		9
104 #define	EBX		8
105 #define	ESP		7
106 #define	EBP		6
107 #define	ESI		5
108 #define	EDI		4
109 #define	DS		3
110 #define	ES		2
111 #define	FS		1
112 #define	GS		0
113 
114 #define REG_PC  EIP
115 #define REG_FP  EBP
116 #define REG_SP  UESP
117 #define REG_PS  EFL
118 #define REG_R0  EAX
119 #define REG_R1  EDX
120 
121 #ifdef	__cplusplus
122 }
123 #endif
124 
125 #endif	/* _FASTTRAP_REGSET_H */
126