background image

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;