1211608Srpaulo/*
2211608Srpaulo * CDDL HEADER START
3211608Srpaulo *
4211608Srpaulo * The contents of this file are subject to the terms of the
5211608Srpaulo * Common Development and Distribution License, Version 1.0 only
6211608Srpaulo * (the "License").  You may not use this file except in compliance
7211608Srpaulo * with the License.
8211608Srpaulo *
9211608Srpaulo * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10211608Srpaulo * or http://www.opensolaris.org/os/licensing.
11211608Srpaulo * See the License for the specific language governing permissions
12211608Srpaulo * and limitations under the License.
13211608Srpaulo *
14211608Srpaulo * When distributing Covered Code, include this CDDL HEADER in each
15211608Srpaulo * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16211608Srpaulo * If applicable, add the following below this CDDL HEADER, with the
17211608Srpaulo * fields enclosed by brackets "[]" replaced with your own identifying
18211608Srpaulo * information: Portions Copyright [yyyy] [name of copyright owner]
19211608Srpaulo *
20211608Srpaulo * CDDL HEADER END
21211608Srpaulo *
22211608Srpaulo * $FreeBSD$
23211608Srpaulo */
24211608Srpaulo/*
25211608Srpaulo * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
26211608Srpaulo * Use is subject to license terms.
27211608Srpaulo */
28211608Srpaulo
29211608Srpaulo/*	Copyright (c) 1990, 1991 UNIX System Laboratories, Inc. */
30211608Srpaulo
31211608Srpaulo/*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T		*/
32211608Srpaulo/*	All Rights Reserved	*/
33211608Srpaulo
34211608Srpaulo#ifndef	_REGSET_H
35211608Srpaulo#define	_REGSET_H
36211608Srpaulo
37211608Srpaulo/*
38211608Srpaulo * #pragma ident	"@(#)regset.h	1.11	05/06/08 SMI"
39211608Srpaulo */
40211608Srpaulo
41211608Srpaulo#ifdef __cplusplus
42211608Srpauloextern "C" {
43211608Srpaulo#endif
44211608Srpaulo
45211608Srpaulo/*
46211608Srpaulo * The names and offsets defined here should be specified by the
47211608Srpaulo * AMD64 ABI suppl.
48211608Srpaulo *
49211608Srpaulo * We make fsbase and gsbase part of the lwp context (since they're
50211608Srpaulo * the only way to access the full 64-bit address range via the segment
51211608Srpaulo * registers) and thus belong here too.  However we treat them as
52211608Srpaulo * read-only; if %fs or %gs are updated, the results of the descriptor
53211608Srpaulo * table lookup that those updates implicitly cause will be reflected
54211608Srpaulo * in the corresponding fsbase and/or gsbase values the next time the
55211608Srpaulo * context can be inspected.  However it is NOT possible to override
56211608Srpaulo * the fsbase/gsbase settings via this interface.
57211608Srpaulo *
58211608Srpaulo * Direct modification of the base registers (thus overriding the
59211608Srpaulo * descriptor table base address) can be achieved with _lwp_setprivate.
60211608Srpaulo */
61211608Srpaulo
62211608Srpaulo#define	REG_GSBASE	27
63211608Srpaulo#define	REG_FSBASE	26
64211608Srpaulo#define	REG_DS		25
65211608Srpaulo#define	REG_ES		24
66211608Srpaulo
67211608Srpaulo#define	REG_GS		23
68211608Srpaulo#define	REG_FS		22
69211608Srpaulo#define	REG_SS		21
70211608Srpaulo#define	REG_RSP		20
71211608Srpaulo#define	REG_RFL		19
72211608Srpaulo#define	REG_CS		18
73211608Srpaulo#define	REG_RIP		17
74211608Srpaulo#define	REG_ERR		16
75211608Srpaulo#define	REG_TRAPNO	15
76211608Srpaulo#define	REG_RAX		14
77211608Srpaulo#define	REG_RCX		13
78211608Srpaulo#define	REG_RDX		12
79211608Srpaulo#define	REG_RBX		11
80211608Srpaulo#define	REG_RBP		10
81211608Srpaulo#define	REG_RSI		9
82211608Srpaulo#define	REG_RDI		8
83211608Srpaulo#define	REG_R8		7
84211608Srpaulo#define	REG_R9		6
85211608Srpaulo#define	REG_R10		5
86211608Srpaulo#define	REG_R11		4
87211608Srpaulo#define	REG_R12		3
88211608Srpaulo#define	REG_R13		2
89211608Srpaulo#define	REG_R14		1
90211608Srpaulo#define	REG_R15		0
91211608Srpaulo
92211608Srpaulo/*
93211608Srpaulo * The names and offsets defined here are specified by i386 ABI suppl.
94211608Srpaulo */
95211608Srpaulo
96211608Srpaulo#define	SS		18	/* only stored on a privilege transition */
97211608Srpaulo#define	UESP		17	/* only stored on a privilege transition */
98211608Srpaulo#define	EFL		16
99211608Srpaulo#define	CS		15
100211608Srpaulo#define	EIP		14
101211608Srpaulo#define	ERR		13
102211608Srpaulo#define	TRAPNO		12
103211608Srpaulo#define	EAX		11
104211608Srpaulo#define	ECX		10
105211608Srpaulo#define	EDX		9
106211608Srpaulo#define	EBX		8
107211608Srpaulo#define	ESP		7
108211608Srpaulo#define	EBP		6
109211608Srpaulo#define	ESI		5
110211608Srpaulo#define	EDI		4
111211608Srpaulo#define	DS		3
112211608Srpaulo#define	ES		2
113211608Srpaulo#define	FS		1
114211608Srpaulo#define	GS		0
115211608Srpaulo
116211608Srpaulo#define REG_PC  EIP
117211608Srpaulo#define REG_FP  EBP
118211608Srpaulo#define REG_SP  UESP
119211608Srpaulo#define REG_PS  EFL
120211608Srpaulo#define REG_R0  EAX
121211608Srpaulo#define REG_R1  EDX
122211608Srpaulo
123211608Srpaulo#ifdef	__cplusplus
124211608Srpaulo}
125211608Srpaulo#endif
126211608Srpaulo
127211608Srpaulo#endif	/* _REGSET_H */
128