xref: /illumos-gate/usr/src/cmd/mdb/intel/mdb/mdb_kreg.h (revision 9c3024a3)
17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate  * CDDL HEADER START
37c478bd9Sstevel@tonic-gate  *
47c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
5ae115bc7Smrj  * Common Development and Distribution License (the "License").
6ae115bc7Smrj  * You may not use this file except in compliance with the License.
77c478bd9Sstevel@tonic-gate  *
87c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
107c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
117c478bd9Sstevel@tonic-gate  * and limitations under the License.
127c478bd9Sstevel@tonic-gate  *
137c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
147c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
167c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
177c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
187c478bd9Sstevel@tonic-gate  *
197c478bd9Sstevel@tonic-gate  * CDDL HEADER END
207c478bd9Sstevel@tonic-gate  */
217c478bd9Sstevel@tonic-gate /*
22ae115bc7Smrj  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
237c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
2474ecdb51SJohn Levon  *
2574ecdb51SJohn Levon  * Copyright 2018 Joyent, Inc.
267c478bd9Sstevel@tonic-gate  */
277c478bd9Sstevel@tonic-gate 
287c478bd9Sstevel@tonic-gate #ifndef	_MDB_KREG_H
297c478bd9Sstevel@tonic-gate #define	_MDB_KREG_H
307c478bd9Sstevel@tonic-gate 
31ae115bc7Smrj #include <sys/kdi_regs.h>
327c478bd9Sstevel@tonic-gate #ifndef _ASM
337c478bd9Sstevel@tonic-gate #include <sys/types.h>
347c478bd9Sstevel@tonic-gate #endif
357c478bd9Sstevel@tonic-gate 
367c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
377c478bd9Sstevel@tonic-gate extern "C" {
387c478bd9Sstevel@tonic-gate #endif
397c478bd9Sstevel@tonic-gate 
407c478bd9Sstevel@tonic-gate #ifndef _ASM
41ae115bc7Smrj #ifdef __amd64
427c478bd9Sstevel@tonic-gate typedef uint64_t kreg_t;
437c478bd9Sstevel@tonic-gate #else	/* __amd64 */
447c478bd9Sstevel@tonic-gate typedef uint32_t kreg_t;
457c478bd9Sstevel@tonic-gate #endif	/* __amd64 */
46ae115bc7Smrj #endif	/* !_ASM */
47ae115bc7Smrj 
48ae115bc7Smrj #define	KREG_NGREG	KDIREG_NGREG
49ae115bc7Smrj 
50ae115bc7Smrj /*
51ae115bc7Smrj  * The order of these registers corresponds to a slightly altered struct regs,
52ae115bc7Smrj  * in the order kmdb entry pushes onto the stack.
53ae115bc7Smrj  */
547c478bd9Sstevel@tonic-gate 
557c478bd9Sstevel@tonic-gate #ifdef __amd64
567c478bd9Sstevel@tonic-gate 
57ae115bc7Smrj #define	KREG_SAVFP	KDIREG_SAVFP
58ae115bc7Smrj #define	KREG_SAVPC	KDIREG_SAVPC
59ae115bc7Smrj #define	KREG_RDI	KDIREG_RDI
60ae115bc7Smrj #define	KREG_RSI	KDIREG_RSI
61ae115bc7Smrj #define	KREG_RDX	KDIREG_RDX
62ae115bc7Smrj #define	KREG_RCX	KDIREG_RCX
63ae115bc7Smrj #define	KREG_R8		KDIREG_R8
64ae115bc7Smrj #define	KREG_R9		KDIREG_R9
65ae115bc7Smrj #define	KREG_RAX	KDIREG_RAX
66ae115bc7Smrj #define	KREG_RBX	KDIREG_RBX
67ae115bc7Smrj #define	KREG_RBP	KDIREG_RBP
68ae115bc7Smrj #define	KREG_R10	KDIREG_R10
69ae115bc7Smrj #define	KREG_R11	KDIREG_R11
70ae115bc7Smrj #define	KREG_R12	KDIREG_R12
71ae115bc7Smrj #define	KREG_R13	KDIREG_R13
72ae115bc7Smrj #define	KREG_R14	KDIREG_R14
73ae115bc7Smrj #define	KREG_R15	KDIREG_R15
74ae115bc7Smrj #define	KREG_DS		KDIREG_DS
75ae115bc7Smrj #define	KREG_ES		KDIREG_ES
76ae115bc7Smrj #define	KREG_FS		KDIREG_FS
77ae115bc7Smrj #define	KREG_GS		KDIREG_GS
78*9c3024a3SHans Rosenfeld #define	KREG_FSBASE	KDIREG_FSBASE
7974ecdb51SJohn Levon #define	KREG_GSBASE	KDIREG_GSBASE
8074ecdb51SJohn Levon #define	KREG_KGSBASE	KDIREG_KGSBASE
81ae115bc7Smrj #define	KREG_TRAPNO	KDIREG_TRAPNO
82ae115bc7Smrj #define	KREG_ERR	KDIREG_ERR
8374ecdb51SJohn Levon #define	KREG_CR2	KDIREG_CR2
845f633405SAlex Wilson #define	KREG_CR3	KDIREG_CR3
85ae115bc7Smrj #define	KREG_RIP	KDIREG_RIP
86ae115bc7Smrj #define	KREG_CS		KDIREG_CS
87ae115bc7Smrj #define	KREG_RFLAGS	KDIREG_RFLAGS
88ae115bc7Smrj #define	KREG_RSP	KDIREG_RSP
89ae115bc7Smrj #define	KREG_SS		KDIREG_SS
907c478bd9Sstevel@tonic-gate 
917c478bd9Sstevel@tonic-gate #define	KREG_PC		KREG_RIP
927c478bd9Sstevel@tonic-gate #define	KREG_SP		KREG_RSP
937c478bd9Sstevel@tonic-gate #define	KREG_FP		KREG_RBP
947c478bd9Sstevel@tonic-gate 
95*9c3024a3SHans Rosenfeld #define	KREG_EAX	KREG_RAX
96*9c3024a3SHans Rosenfeld #define	KREG_EBX	KREG_RBX
97*9c3024a3SHans Rosenfeld #define	KREG_ECX	KREG_RCX
98*9c3024a3SHans Rosenfeld #define	KREG_EDX	KREG_RDX
99*9c3024a3SHans Rosenfeld #define	KREG_ESI	KREG_RSI
100*9c3024a3SHans Rosenfeld #define	KREG_EDI	KREG_RDI
101*9c3024a3SHans Rosenfeld #define	KREG_EBP	KREG_RBP
102*9c3024a3SHans Rosenfeld #define	KREG_ESP	KREG_RSP
103*9c3024a3SHans Rosenfeld #define	KREG_EFLAGS	KREG_RFLAGS
104*9c3024a3SHans Rosenfeld #define	KREG_EIP	KREG_RIP
105*9c3024a3SHans Rosenfeld 
1067c478bd9Sstevel@tonic-gate #else	/* __amd64 */
1077c478bd9Sstevel@tonic-gate 
108ae115bc7Smrj #define	KREG_SAVFP	KDIREG_SAVFP
109ae115bc7Smrj #define	KREG_SAVPC	KDIREG_SAVPC
110ae115bc7Smrj #define	KREG_SS		KDIREG_SS
111ae115bc7Smrj #define	KREG_GS		KDIREG_GS
112ae115bc7Smrj #define	KREG_FS		KDIREG_FS
113ae115bc7Smrj #define	KREG_ES		KDIREG_ES
114ae115bc7Smrj #define	KREG_DS		KDIREG_DS
115ae115bc7Smrj #define	KREG_EDI	KDIREG_EDI
116ae115bc7Smrj #define	KREG_ESI	KDIREG_ESI
117ae115bc7Smrj #define	KREG_EBP	KDIREG_EBP
118ae115bc7Smrj #define	KREG_ESP	KDIREG_ESP
119ae115bc7Smrj #define	KREG_EBX	KDIREG_EBX
120ae115bc7Smrj #define	KREG_EDX	KDIREG_EDX
121ae115bc7Smrj #define	KREG_ECX	KDIREG_ECX
122ae115bc7Smrj #define	KREG_EAX	KDIREG_EAX
123ae115bc7Smrj #define	KREG_TRAPNO	KDIREG_TRAPNO
124ae115bc7Smrj #define	KREG_ERR	KDIREG_ERR
125ae115bc7Smrj #define	KREG_EIP	KDIREG_EIP
126ae115bc7Smrj #define	KREG_CS		KDIREG_CS
127ae115bc7Smrj #define	KREG_EFLAGS	KDIREG_EFLAGS
128ae115bc7Smrj #define	KREG_UESP	KDIREG_UESP
1297c478bd9Sstevel@tonic-gate 
1307c478bd9Sstevel@tonic-gate #define	KREG_PC		KREG_EIP
1317c478bd9Sstevel@tonic-gate #define	KREG_SP		KREG_ESP
1327c478bd9Sstevel@tonic-gate #define	KREG_FP		KREG_EBP
1337c478bd9Sstevel@tonic-gate 
1347c478bd9Sstevel@tonic-gate #endif	/* __amd64 */
1357c478bd9Sstevel@tonic-gate 
1367c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_ID_MASK	0x00200000
1377c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_ID_SHIFT	21
1387c478bd9Sstevel@tonic-gate 
1397c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_VIP_MASK	0x00100000
1407c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_VIP_SHIFT	20
1417c478bd9Sstevel@tonic-gate 
1427c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_VIF_MASK	0x00080000
1437c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_VIF_SHIFT	19
1447c478bd9Sstevel@tonic-gate 
1457c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_AC_MASK	0x00040000
1467c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_AC_SHIFT	18
1477c478bd9Sstevel@tonic-gate 
1487c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_VM_MASK	0x00020000
1497c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_VM_SHIFT	17
1507c478bd9Sstevel@tonic-gate 
1517c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_RF_MASK	0x00010000
1527c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_RF_SHIFT	16
1537c478bd9Sstevel@tonic-gate 
1547c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_NT_MASK	0x00004000
1557c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_NT_SHIFT	14
1567c478bd9Sstevel@tonic-gate 
1577c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_IOPL_MASK	0x00003000
1587c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_IOPL_SHIFT	12
1597c478bd9Sstevel@tonic-gate 
1607c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_OF_MASK	0x00000800
1617c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_OF_SHIFT	11
1627c478bd9Sstevel@tonic-gate 
1637c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_DF_MASK	0x00000400
1647c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_DF_SHIFT	10
1657c478bd9Sstevel@tonic-gate 
1667c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_IF_MASK	0x00000200
1677c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_IF_SHIFT	9
1687c478bd9Sstevel@tonic-gate 
1697c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_TF_MASK	0x00000100
1707c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_TF_SHIFT	8
1717c478bd9Sstevel@tonic-gate 
1727c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_SF_MASK	0x00000080
1737c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_SF_SHIFT	7
1747c478bd9Sstevel@tonic-gate 
1757c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_ZF_MASK	0x00000040
1767c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_ZF_SHIFT	6
1777c478bd9Sstevel@tonic-gate 
1787c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_AF_MASK	0x00000010
1797c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_AF_SHIFT	4
1807c478bd9Sstevel@tonic-gate 
1817c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_PF_MASK	0x00000004
1827c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_PF_SHIFT	2
1837c478bd9Sstevel@tonic-gate 
1847c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_CF_MASK	0x00000001
1857c478bd9Sstevel@tonic-gate #define	KREG_EFLAGS_CF_SHIFT	0
1867c478bd9Sstevel@tonic-gate 
1877c478bd9Sstevel@tonic-gate /* %dr7 */
1887c478bd9Sstevel@tonic-gate #define	KREG_DRCTL_WP_BASESHIFT	16
1897c478bd9Sstevel@tonic-gate #define	KREG_DRCTL_WP_INCRSHIFT	4
1907c478bd9Sstevel@tonic-gate #define	KREG_DRCTL_WP_LENSHIFT	2
1917c478bd9Sstevel@tonic-gate #define	KREG_DRCTL_WP_LENRWMASK	0xf
1927c478bd9Sstevel@tonic-gate 
1937c478bd9Sstevel@tonic-gate #define	KREG_DRCTL_WP_EXEC	0
1947c478bd9Sstevel@tonic-gate #define	KREG_DRCTL_WP_WONLY	1
1957c478bd9Sstevel@tonic-gate #define	KREG_DRCTL_WP_IORW	2
1967c478bd9Sstevel@tonic-gate #define	KREG_DRCTL_WP_RW	3
1977c478bd9Sstevel@tonic-gate 
1987c478bd9Sstevel@tonic-gate #define	KREG_DRCTL_WP_SHIFT(n) \
1997c478bd9Sstevel@tonic-gate 	(KREG_DRCTL_WP_BASESHIFT + KREG_DRCTL_WP_INCRSHIFT * (n))
2007c478bd9Sstevel@tonic-gate #define	KREG_DRCTL_WP_MASK(n) \
2017c478bd9Sstevel@tonic-gate 	(KREG_DRCTL_WP_LENRWMASK << KREG_DRCTL_WP_SHIFT(n))
2027c478bd9Sstevel@tonic-gate #define	KREG_DRCTL_WP_LENRW(n, len, rw)	\
2037c478bd9Sstevel@tonic-gate 	((((len) << KREG_DRCTL_WP_LENSHIFT) | (rw)) << KREG_DRCTL_WP_SHIFT(n))
2047c478bd9Sstevel@tonic-gate 
2057c478bd9Sstevel@tonic-gate #define	KREG_DRCTL_WPEN_INCRSHIFT 2
2067c478bd9Sstevel@tonic-gate #define	KREG_DRCTL_WPEN_MASK(n) \
2077c478bd9Sstevel@tonic-gate 	(3 << (KREG_DRCTL_WPEN_INCRSHIFT * (n)))
2087c478bd9Sstevel@tonic-gate #define	KREG_DRCTL_WPEN(n)	KREG_DRCTL_WPEN_MASK(n)
2097c478bd9Sstevel@tonic-gate 
2107c478bd9Sstevel@tonic-gate /* %dr6 */
2117c478bd9Sstevel@tonic-gate #define	KREG_DRSTAT_BT_MASK	0x00008000
2127c478bd9Sstevel@tonic-gate #define	KREG_DRSTAT_BS_MASK	0x00004000
2137c478bd9Sstevel@tonic-gate #define	KREG_DRSTAT_BD_MASK	0x00002000
2147c478bd9Sstevel@tonic-gate 
2157c478bd9Sstevel@tonic-gate #define	KREG_DRSTAT_WP_MASK(n)	(1 << (n))
2167c478bd9Sstevel@tonic-gate 
2177c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
2187c478bd9Sstevel@tonic-gate }
2197c478bd9Sstevel@tonic-gate #endif
2207c478bd9Sstevel@tonic-gate 
2217c478bd9Sstevel@tonic-gate #endif	/* _MDB_KREG_H */
222