Open Enclave  0.17.0
exception.h
Go to the documentation of this file.
1 // Copyright (c) Open Enclave SDK contributors.
2 // Licensed under the MIT License.
3 
11 #ifndef _OE_BITS_EXCEPTION_H
12 #define _OE_BITS_EXCEPTION_H
13 
14 #include <openenclave/bits/defs.h>
15 #include <openenclave/bits/types.h>
16 
17 OE_EXTERNC_BEGIN
18 
21 #define OE_EXCEPTION_CONTINUE_SEARCH 0x0
22 
25 #define OE_EXCEPTION_CONTINUE_EXECUTION 0xFFFFFFFF
26 
30 #define OE_EXCEPTION_DIVIDE_BY_ZERO 0x0
31 
34 #define OE_EXCEPTION_BREAKPOINT 0x1
35 
38 #define OE_EXCEPTION_BOUND_OUT_OF_RANGE 0x2
39 
42 #define OE_EXCEPTION_ILLEGAL_INSTRUCTION 0x3
43 
46 #define OE_EXCEPTION_ACCESS_VIOLATION 0x4
47 
50 #define OE_EXCEPTION_PAGE_FAULT 0x5
51 
54 #define OE_EXCEPTION_X87_FLOAT_POINT 0x6
55 
58 #define OE_EXCEPTION_MISALIGNMENT 0x7
59 
62 #define OE_EXCEPTION_SIMD_FLOAT_POINT 0x8
63 
66 #define OE_EXCEPTION_UNKNOWN 0xFFFFFFFF
67 
72 #define OE_EXCEPTION_FLAGS_HARDWARE 0x1
73 
77 #define OE_EXCEPTION_FLAGS_SOFTWARE 0x2
78 
91 #define OE_SGX_PAGE_FAULT_P_FLAG 0x1
92 
97 #define OE_SGX_PAGE_FAULT_WR_FLAG 0x2
98 
103 #define OE_SGX_PAGE_FAULT_US_FLAG 0x4
104 
109 #define OE_SGX_PAGE_FAULT_RSVD 0x8
110 
115 #define OE_SGX_PAGE_FAULT_ID_FLAG 0x10
116 
121 #define OE_SGX_PAGE_FAULT_PK_FLAG 0x20
122 
127 #define OE_SGX_PAGE_FAULT_SGX_FLAG 0x8000
128 
132 typedef struct _oe_basic_xstate
133 {
134  uint8_t blob[512];
135 } OE_ALIGNED(16) oe_basic_xstate_t;
142 typedef struct _oe_context
143 {
148  uint64_t flags;
149 
150  uint64_t rax;
152  uint64_t rbx;
154  uint64_t rcx;
156  uint64_t rdx;
158  uint64_t rbp;
160  uint64_t rsp;
162  uint64_t rdi;
164  uint64_t rsi;
166  uint64_t r8;
168  uint64_t r9;
170  uint64_t r10;
172  uint64_t r11;
174  uint64_t r12;
176  uint64_t r13;
178  uint64_t r14;
180  uint64_t r15;
182  uint64_t rip;
184  // Don't need to manipulate the segment registers directly.
185  // Ignore them: CS, DS, ES, SS, GS, and FS.
186 
187  uint32_t mxcsr;
191  // Don't need to manipulate other XSTATE (AVX etc.).
192 } oe_context_t;
199 typedef struct _oe_exception_record
200 {
201  uint32_t code;
203  uint32_t flags;
205  uint64_t address;
207  /* Information for PF/GP exceptions, which are only available
208  * for SGX2 and requires application opt-in (set CapturePFGPExceptions=1).
209  */
210  uint64_t faulting_address;
211  uint32_t error_code;
212 
226  oe_exception_record_t* exception_context);
227 
228 OE_EXTERNC_END
229 
230 #endif /* _OE_BITS_EXCEPTION_H */
uint64_t r11
Integer register r11.
Definition: exception.h:172
This file defines the types used by the OE SDK.
uint64_t rax
Integer register rax.
Definition: exception.h:150
uint64_t flags
Exception flags.
Definition: exception.h:148
uint64_t rbx
Integer register rbx.
Definition: exception.h:152
uint64_t r14
Integer register r14.
Definition: exception.h:178
uint32_t mxcsr
SSE control flags.
Definition: exception.h:187
uint64_t r10
Integer register r10.
Definition: exception.h:170
uint64_t rcx
Integer register rcx.
Definition: exception.h:154
uint64_t rdi
Integer register rdi.
Definition: exception.h:162
struct _oe_context oe_context_t
Register state to be saved before an exception and restored after the exception has been handled in t...
uint64_t rdx
Integer register rdx.
Definition: exception.h:156
struct _oe_exception_record oe_exception_record_t
Exception context structure with the exception code, flags, address and calling context of the except...
uint64_t r9
Integer register r9.
Definition: exception.h:168
uint64_t r15
Integer register r15.
Definition: exception.h:180
uint64_t(* oe_vectored_exception_handler_t)(oe_exception_record_t *exception_context)
oe_vectored_exception_handler_t - Function pointer for a vectored exception handler in an enclave...
Definition: exception.h:225
oe_basic_xstate_t basic_xstate
Basic XSTATE.
Definition: exception.h:189
uint64_t rsp
Integer register rsp.
Definition: exception.h:160
uint8_t blob[512]
Holds XState i.e.
Definition: exception.h:134
Blob that contains X87 and SSE data.
Definition: exception.h:132
uint32_t flags
Exception flags.
Definition: exception.h:203
Register state to be saved before an exception and restored after the exception has been handled in t...
Definition: exception.h:142
uint64_t rbp
Integer register rbp.
Definition: exception.h:158
uint64_t address
Exception address.
Definition: exception.h:205
oe_context_t * context
Exception context.
Definition: exception.h:213
uint32_t code
Exception code.
Definition: exception.h:201
uint64_t r12
Integer register r12.
Definition: exception.h:174
uint64_t r8
Integer register r8.
Definition: exception.h:166
uint64_t rsi
Integer register rsi.
Definition: exception.h:164
uint64_t rip
Integer register rip.
Definition: exception.h:182
uint64_t r13
Integer register r13.
Definition: exception.h:176
Exception context structure with the exception code, flags, address and calling context of the except...
Definition: exception.h:199