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