1*a864dc36Sdarran /* 2*a864dc36Sdarran * CDDL HEADER START 3*a864dc36Sdarran * 4*a864dc36Sdarran * The contents of this file are subject to the terms of the 5*a864dc36Sdarran * Common Development and Distribution License (the "License"). 6*a864dc36Sdarran * You may not use this file except in compliance with the License. 7*a864dc36Sdarran * 8*a864dc36Sdarran * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*a864dc36Sdarran * or http://www.opensolaris.org/os/licensing. 10*a864dc36Sdarran * See the License for the specific language governing permissions 11*a864dc36Sdarran * and limitations under the License. 12*a864dc36Sdarran * 13*a864dc36Sdarran * When distributing Covered Code, include this CDDL HEADER in each 14*a864dc36Sdarran * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*a864dc36Sdarran * If applicable, add the following below this CDDL HEADER, with the 16*a864dc36Sdarran * fields enclosed by brackets "[]" replaced with your own identifying 17*a864dc36Sdarran * information: Portions Copyright [yyyy] [name of copyright owner] 18*a864dc36Sdarran * 19*a864dc36Sdarran * CDDL HEADER END 20*a864dc36Sdarran */ 21*a864dc36Sdarran /* 22*a864dc36Sdarran * Copyright 2006 Sun Microsystems, Inc. All rights reserved. 23*a864dc36Sdarran * Use is subject to license terms. 24*a864dc36Sdarran */ 25*a864dc36Sdarran 26*a864dc36Sdarran #ifndef _FASTTRAP_ISA_H 27*a864dc36Sdarran #define _FASTTRAP_ISA_H 28*a864dc36Sdarran 29*a864dc36Sdarran #pragma ident "%Z%%M% %I% %E% SMI" 30*a864dc36Sdarran 31*a864dc36Sdarran #include <sys/types.h> 32*a864dc36Sdarran 33*a864dc36Sdarran #ifdef __cplusplus 34*a864dc36Sdarran extern "C" { 35*a864dc36Sdarran #endif 36*a864dc36Sdarran 37*a864dc36Sdarran #define FASTTRAP_MAX_INSTR_SIZE 15 38*a864dc36Sdarran 39*a864dc36Sdarran #define FASTTRAP_INSTR 0xcc 40*a864dc36Sdarran 41*a864dc36Sdarran #define FASTTRAP_SUNWDTRACE_SIZE 64 42*a864dc36Sdarran 43*a864dc36Sdarran typedef uint8_t fasttrap_instr_t; 44*a864dc36Sdarran 45*a864dc36Sdarran typedef struct fasttrap_machtp { 46*a864dc36Sdarran uint8_t ftmt_instr[FASTTRAP_MAX_INSTR_SIZE]; /* orig. instr. */ 47*a864dc36Sdarran uint8_t ftmt_size; /* instruction size */ 48*a864dc36Sdarran #ifdef __amd64 49*a864dc36Sdarran uint8_t ftmt_ripmode; /* %rip-relative handling mode */ 50*a864dc36Sdarran uint8_t ftmt_modrm; /* saved modrm byte */ 51*a864dc36Sdarran #endif 52*a864dc36Sdarran uint8_t ftmt_type; /* emulation type */ 53*a864dc36Sdarran uint8_t ftmt_code; /* branch condition */ 54*a864dc36Sdarran uint8_t ftmt_base; /* branch base */ 55*a864dc36Sdarran uint8_t ftmt_index; /* branch index */ 56*a864dc36Sdarran uint8_t ftmt_scale; /* branch scale */ 57*a864dc36Sdarran uint8_t ftmt_segment; /* segment for memory accesses */ 58*a864dc36Sdarran uintptr_t ftmt_dest; /* destination of control flow */ 59*a864dc36Sdarran } fasttrap_machtp_t; 60*a864dc36Sdarran 61*a864dc36Sdarran #define ftt_instr ftt_mtp.ftmt_instr 62*a864dc36Sdarran #ifdef __amd64 63*a864dc36Sdarran #define ftt_ripmode ftt_mtp.ftmt_ripmode 64*a864dc36Sdarran #define ftt_modrm ftt_mtp.ftmt_modrm 65*a864dc36Sdarran #endif 66*a864dc36Sdarran #define ftt_size ftt_mtp.ftmt_size 67*a864dc36Sdarran #define ftt_type ftt_mtp.ftmt_type 68*a864dc36Sdarran #define ftt_code ftt_mtp.ftmt_code 69*a864dc36Sdarran #define ftt_base ftt_mtp.ftmt_base 70*a864dc36Sdarran #define ftt_index ftt_mtp.ftmt_index 71*a864dc36Sdarran #define ftt_scale ftt_mtp.ftmt_scale 72*a864dc36Sdarran #define ftt_segment ftt_mtp.ftmt_segment 73*a864dc36Sdarran #define ftt_dest ftt_mtp.ftmt_dest 74*a864dc36Sdarran 75*a864dc36Sdarran #define FASTTRAP_T_COMMON 0x00 /* common case -- no emulation */ 76*a864dc36Sdarran #define FASTTRAP_T_JCC 0x01 /* near and far conditional jumps */ 77*a864dc36Sdarran #define FASTTRAP_T_LOOP 0x02 /* loop instructions */ 78*a864dc36Sdarran #define FASTTRAP_T_JCXZ 0x03 /* jump if %ecx/%rcx is zero */ 79*a864dc36Sdarran #define FASTTRAP_T_JMP 0x04 /* relative jump */ 80*a864dc36Sdarran #define FASTTRAP_T_CALL 0x05 /* near call (and link) */ 81*a864dc36Sdarran #define FASTTRAP_T_RET 0x06 /* ret */ 82*a864dc36Sdarran #define FASTTRAP_T_RET16 0x07 /* ret <imm16> */ 83*a864dc36Sdarran 84*a864dc36Sdarran /* 85*a864dc36Sdarran * For performance rather than correctness. 86*a864dc36Sdarran */ 87*a864dc36Sdarran #define FASTTRAP_T_PUSHL_EBP 0x10 /* pushl %ebp (for function entry) */ 88*a864dc36Sdarran #define FASTTRAP_T_NOP 0x11 /* nop */ 89*a864dc36Sdarran 90*a864dc36Sdarran #define FASTTRAP_RIP_1 0x1 91*a864dc36Sdarran #define FASTTRAP_RIP_2 0x2 92*a864dc36Sdarran #define FASTTRAP_RIP_X 0x4 93*a864dc36Sdarran 94*a864dc36Sdarran /* 95*a864dc36Sdarran * Segment values. 96*a864dc36Sdarran */ 97*a864dc36Sdarran #define FASTTRAP_SEG_NONE 0 98*a864dc36Sdarran #define FASTTRAP_SEG_CS 1 99*a864dc36Sdarran #define FASTTRAP_SEG_DS 2 100*a864dc36Sdarran #define FASTTRAP_SEG_ES 3 101*a864dc36Sdarran #define FASTTRAP_SEG_FS 4 102*a864dc36Sdarran #define FASTTRAP_SEG_GS 5 103*a864dc36Sdarran #define FASTTRAP_SEG_SS 6 104*a864dc36Sdarran 105*a864dc36Sdarran #define FASTTRAP_AFRAMES 3 106*a864dc36Sdarran #define FASTTRAP_RETURN_AFRAMES 4 107*a864dc36Sdarran #define FASTTRAP_ENTRY_AFRAMES 3 108*a864dc36Sdarran #define FASTTRAP_OFFSET_AFRAMES 3 109*a864dc36Sdarran 110*a864dc36Sdarran #ifdef __cplusplus 111*a864dc36Sdarran } 112*a864dc36Sdarran #endif 113*a864dc36Sdarran 114*a864dc36Sdarran #endif /* _FASTTRAP_ISA_H */ 115