background image

Vol. 3D 41-27

SGX INSTRUCTION REFERENCES

(* make sure the enclave owning the PT_REG or PT_TCS page allow debug *) 
IF ( (EPCM(DS:RCX).PT = PT_REG) or (EPCM(DS:RCX).PT = PT_TCS) )

THEN 

TMP_SECS  GET_SECS_ADDRESS;
IF (TMP_SECS.ATTRIBUTES.DEBUG = 0) 

THEN #GP(0); FI;

IF ( (TMP_MODE64 = 1) )

THEN RBX[63:0]  (DS:RCX)[63:0]; 
ELSE EBX[31:0]  (DS:RCX)[31:0]; 

FI;

ELSE

TMP_64BIT_VAL[63:0]  (DS:RCX)[63:0] & (~07H); // Read contents from VA slot
IF (TMP_MODE64 = 1) 

THEN

IF (TMP_64BIT_VAL ≠ 0H) 

THEN RBX[63:0]  0FFFFFFFFFFFFFFFFH;
ELSE RBX[63:0]  0H;

FI;

ELSE

IF (TMP_64BIT_VAL ≠ 0H) 

THEN EBX[31:0]  0FFFFFFFFH;
ELSE EBX[31:0]  0H;

FI;

FI;

Flags Affected

None

Protected Mode Exceptions

#GP(0)

If the address in RCS violates DS limit or access rights.
If DS segment is unusable.
If RCX points to a memory location not 4Byte-aligned.
If the address in RCX points to a page belonging to a non-debug enclave.
If the address in RCX points to a page which is not PT_TCS, PT_REG or PT_VA.
If the address in RCX points to a location inside TCS that is beyond SGX_TCS_LIMIT.

#PF(error code)

If a page fault occurs in accessing memory operands.
If the address in RCX points to a non-EPC page.
If the address in RCX points to an invalid EPC page.

64-Bit Mode Exceptions

#GP(0)

If RCX is non-canonical form.
If RCX points to a memory location not 8Byte-aligned.
If the address in RCX points to a page belonging to a non-debug enclave.
If the address in RCX points to a page which is not PT_TCS, PT_REG or PT_VA.
If the address in RCX points to a location inside TCS that is beyond SGX_TCS_LIMIT.

#PF(error code)

If a page fault occurs in accessing memory operands.
If the address in RCX points to a non-EPC page.
If the address in RCX points to an invalid EPC page.