xref: /freebsd/sys/cddl/dev/dtrace/x86/regset.h (revision e8d8bef961a50d4dc22501cde4fb9fb0be1b2532)
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  * $FreeBSD$
23  */
24 /*
25  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
26  * Use is subject to license terms.
27  */
28 
29 /*	Copyright (c) 1990, 1991 UNIX System Laboratories, Inc. */
30 
31 /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T		*/
32 /*	All Rights Reserved	*/
33 
34 #ifndef	_REGSET_H
35 #define	_REGSET_H
36 
37 /*
38  * #pragma ident	"@(#)regset.h	1.11	05/06/08 SMI"
39  */
40 
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44 
45 /*
46  * The names and offsets defined here should be specified by the
47  * AMD64 ABI suppl.
48  *
49  * We make fsbase and gsbase part of the lwp context (since they're
50  * the only way to access the full 64-bit address range via the segment
51  * registers) and thus belong here too.  However we treat them as
52  * read-only; if %fs or %gs are updated, the results of the descriptor
53  * table lookup that those updates implicitly cause will be reflected
54  * in the corresponding fsbase and/or gsbase values the next time the
55  * context can be inspected.  However it is NOT possible to override
56  * the fsbase/gsbase settings via this interface.
57  *
58  * Direct modification of the base registers (thus overriding the
59  * descriptor table base address) can be achieved with _lwp_setprivate.
60  */
61 
62 #define	REG_GSBASE	27
63 #define	REG_FSBASE	26
64 #ifdef illumos
65 #define	REG_DS		25
66 #define	REG_ES		24
67 
68 #define	REG_GS		23
69 #define	REG_FS		22
70 #define	REG_SS		21
71 #define	REG_RSP		20
72 #define	REG_RFL		19
73 #define	REG_CS		18
74 #define	REG_RIP		17
75 #define	REG_ERR		16
76 #define	REG_TRAPNO	15
77 #define	REG_RAX		14
78 #define	REG_RCX		13
79 #define	REG_RDX		12
80 #define	REG_RBX		11
81 #define	REG_RBP		10
82 #define	REG_RSI		9
83 #define	REG_RDI		8
84 #define	REG_R8		7
85 #define	REG_R9		6
86 #define	REG_R10		5
87 #define	REG_R11		4
88 #define	REG_R12		3
89 #define	REG_R13		2
90 #define	REG_R14		1
91 #define	REG_R15		0
92 #else	/* !illumos */
93 #define	REG_SS		25
94 #define	REG_RSP		24
95 #define	REG_RFL		23
96 #define	REG_CS		22
97 #define	REG_RIP		21
98 #define	REG_DS		20
99 #define	REG_ES		19
100 #define	REG_ERR		18
101 #define	REG_GS		17
102 #define	REG_FS		16
103 #define	REG_TRAPNO	15
104 #define	REG_RAX		14
105 #define	REG_RCX		13
106 #define	REG_RDX		12
107 #define	REG_RBX		11
108 #define	REG_RBP		10
109 #define	REG_RSI		9
110 #define	REG_RDI		8
111 #define	REG_R8		7
112 #define	REG_R9		6
113 #define	REG_R10		5
114 #define	REG_R11		4
115 #define	REG_R12		3
116 #define	REG_R13		2
117 #define	REG_R14		1
118 #define	REG_R15		0
119 #endif	/* illumos */
120 
121 /*
122  * The names and offsets defined here are specified by i386 ABI suppl.
123  */
124 
125 #ifdef illumos
126 #define	SS		18	/* only stored on a privilege transition */
127 #define	UESP		17	/* only stored on a privilege transition */
128 #define	EFL		16
129 #define	CS		15
130 #define	EIP		14
131 #define	ERR		13
132 #define	TRAPNO		12
133 #define	EAX		11
134 #define	ECX		10
135 #define	EDX		9
136 #define	EBX		8
137 #define	ESP		7
138 #define	EBP		6
139 #define	ESI		5
140 #define	EDI		4
141 #define	DS		3
142 #define	ES		2
143 #define	FS		1
144 #define	GS		0
145 #else	/* !illumos */
146 #define	GS		18
147 #define	SS		17	/* only stored on a privilege transition */
148 #define	UESP		16	/* only stored on a privilege transition */
149 #define	EFL		15
150 #define	CS		14
151 #define	EIP		13
152 #define	ERR		12
153 #define	TRAPNO		11
154 #define	EAX		10
155 #define	ECX		9
156 #define	EDX		8
157 #define	EBX		7
158 #define	ESP		6
159 #define	EBP		5
160 #define	ESI		4
161 #define	EDI		3
162 #define	DS		2
163 #define	ES		1
164 #define	FS		0
165 #endif	/* illumos */
166 
167 #define REG_PC  EIP
168 #define REG_FP  EBP
169 #define REG_SP  UESP
170 #define REG_PS  EFL
171 #define REG_R0  EAX
172 #define REG_R1  EDX
173 
174 #ifdef	__cplusplus
175 }
176 #endif
177 
178 #endif	/* _REGSET_H */
179