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