Vol. 3D 41-105
SGX INSTRUCTION REFERENCES
THEN RFLAGS.TF = 0; FI;
(* If XSAVE is enabled, save XCR0 and replace it with SECS.ATTRIBUTES.XFRM*)
IF (CR4.OSXSAVE = 1)
CR_SAVE_XCR0 XCR0;
XCR0 TMP_SECS.ATTRIBUTES.XFRM;
FI;
(* Pop the SSA stack*)
(DS:RBX).CSSA (DS:RBX).CSSA -1;
(* Do the FS/GS swap *)
FS.base TMP_FSBASE;
FS.limit DS:RBX.FSLIMIT;
FS.type 0001b;
FS.W DS.W;
FS.S 1;
FS.DPL DS.DPL;
FS.G 1;
FS.B 1;
FS.P 1;
FS.AVL DS.AVL;
FS.L DS.L;
FS.unusable 0;
FS.selector 0BH;
GS.base TMP_GSBASE;
GS.limit DS:RBX.GSLIMIT;
GS.type 0001b;
GS.W DS.W;
GS.S 1;
GS.DPL DS.DPL;
GS.G 1;
GS.B 1;
GS.P 1;
GS.AVL DS.AVL;
GS.L DS.L;
GS.unusable 0;
GS.selector 0BH;
CR_DBGOPTIN TSC.FLAGS.DBGOPTIN;
Suppress all code breakpoints that are outside ELRANGE;
IF (CR_DBGOPTIN = 0)
THEN
Suppress all code breakpoints that overlap with ELRANGE;
CR_SAVE_TF RFLAGS.TF;
RFLAGS.TF 0;
Suppress any MTF VM exits during execution of the enclave;
Clear all pending debug exceptions;
Clear any pending MTF VM exit;
ELSE
Clear all pending debug exceptions;
Clear pending MTF VM exits;