]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - sys/cddl/dev/dtrace/x86/regset.h
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / sys / cddl / dev / dtrace / x86 / regset.h
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 #if defined(sun)
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
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
120
121 /*
122  * The names and offsets defined here are specified by i386 ABI suppl.
123  */
124
125 #if defined(sun)
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
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
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 */