Browse Source

Made changes to files in trts and tlibc folders to make it work for the verifier (with the python library). It crashes when linked against tlibc, but trts doesnt cause it to crash (just symbol lookup error to memset_s).

dettanym 5 years ago
parent
commit
1f2d1e74ab
9 changed files with 88 additions and 545 deletions
  1. 1 1
      buildenv.mk
  2. 18 18
      sdk/Makefile.opt_lib
  3. 13 8
      sdk/tlibc/Makefile
  4. 1 1
      sdk/tlibc/string/memset_s.c
  5. 13 13
      sdk/trts/Makefile
  6. 15 9
      sdk/trts/linux/Makefile
  7. 8 482
      sdk/trts/linux/trts_pic.S
  8. 15 10
      sdk/trts/trts.cpp
  9. 4 3
      sdk/trts/trts_util.cpp

+ 1 - 1
buildenv.mk

@@ -169,7 +169,7 @@ COMMON_LDFLAGS := -Wl,-z,relro,-z,now,-z,noexecstack
 # When `pie' is enabled, the linker (both BFD and Gold) under Ubuntu 14.04
 # will hide all symbols from dynamic symbol table even if they are marked
 # as `global' in the LD version script.
-ENCLAVE_CFLAGS   = -ffreestanding -nostdinc -fvisibility=hidden -fpie
+ENCLAVE_CFLAGS   = -fvisibility=hidden -fpie
 ENCLAVE_CXXFLAGS = $(ENCLAVE_CFLAGS) -nostdinc++
 ENCLAVE_LDFLAGS  = $(COMMON_LDFLAGS) -Wl,-Bstatic -Wl,-Bsymbolic -Wl,--no-undefined \
                    -Wl,-pie,-eenclave_entry -Wl,--export-dynamic  \

+ 18 - 18
sdk/Makefile.opt_lib

@@ -86,27 +86,27 @@ endif
 
 LIBIRC_NAME := libirc.a
 
-$(LIBTLIBC): tlibthread compiler-rt tsafecrt tsetjmp $(LIBM_PATH)/libimf.a $(LIBIRC_PATH)/$(LIBIRC_NAME) $(SVML_PATH)/libsvml.a
+$(LIBTLIBC): #tlibthread compiler-rt tsafecrt tsetjmp $(LIBM_PATH)/libimf.a $(LIBIRC_PATH)/$(LIBIRC_NAME) $(SVML_PATH)/libsvml.a
 	$(MAKE) -C tlibc/ -j4 2> /dev/null
-	$(MKDIR) $(BUILD_DIR)/.libimf   $(BUILD_DIR)/.libirc   $(BUILD_DIR)/.compiler-rt   $(BUILD_DIR)/.tlibc  \
-	        $(BUILD_DIR)/.tlibthread $(BUILD_DIR)/.tsafecrt $(BUILD_DIR)/.tsetjmp
-	$(RM) -f $(BUILD_DIR)/.libimf/*        && cd $(BUILD_DIR)/.libimf     && $(AR) x $(LIBM_PATH)/libimf.a
-	$(RM) -f $(BUILD_DIR)/.libirc/*        && cd $(BUILD_DIR)/.libirc     && $(AR) x $(LIBIRC_PATH)/$(LIBIRC_NAME)
-	$(RM) -f $(BUILD_DIR)/.compiler-rt/*   && cd $(BUILD_DIR)/.compiler-rt && $(AR) x $(LINUX_SDK_DIR)/compiler-rt/libcompiler-rt.a
+	$(MKDIR) $(BUILD_DIR)/.tlibc #$(BUILD_DIR)/.libimf   $(BUILD_DIR)/.libirc   $(BUILD_DIR)/.compiler-rt   $(BUILD_DIR)/.tlibc  \
+#	        $(BUILD_DIR)/.tlibthread $(BUILD_DIR)/.tsafecrt $(BUILD_DIR)/.tsetjmp
+#	$(RM) -f $(BUILD_DIR)/.libimf/*        && cd $(BUILD_DIR)/.libimf     && $(AR) x $(LIBM_PATH)/libimf.a
+#	$(RM) -f $(BUILD_DIR)/.libirc/*        && cd $(BUILD_DIR)/.libirc     && $(AR) x $(LIBIRC_PATH)/$(LIBIRC_NAME)
+#	$(RM) -f $(BUILD_DIR)/.compiler-rt/*   && cd $(BUILD_DIR)/.compiler-rt && $(AR) x $(LINUX_SDK_DIR)/compiler-rt/libcompiler-rt.a
 	$(RM) -f $(BUILD_DIR)/.tlibc/*         && cd $(BUILD_DIR)/.tlibc      && $(AR) x $(LINUX_SDK_DIR)/tlibc/libtlibc.a
-	$(RM) -f $(BUILD_DIR)/.tlibthread/*    && cd $(BUILD_DIR)/.tlibthread && $(AR) x $(LINUX_SDK_DIR)/tlibthread/libtlibthread.a
-	$(RM) -f $(BUILD_DIR)/.tsafecrt/*      && cd $(BUILD_DIR)/.tsafecrt   && $(AR) x $(LINUX_SDK_DIR)/tsafecrt/libsgx_tsafecrt.a
-	$(RM) -f $(BUILD_DIR)/.tsetjmp/*       && cd $(BUILD_DIR)/.tsetjmp    && $(AR) x $(LINUX_SDK_DIR)/tsetjmp/libsgx_tsetjmp.a
-	$(CP) $(SVML_PATH)/libsvml.a $@
-	$(AR) qD $@ $(BUILD_DIR)/.libimf/*.o
-	$(AR) qD $@ $(BUILD_DIR)/.libirc/*.o
-	$(AR) qD $@ $(BUILD_DIR)/.compiler-rt/*.o
+#	$(RM) -f $(BUILD_DIR)/.tlibthread/*    && cd $(BUILD_DIR)/.tlibthread && $(AR) x $(LINUX_SDK_DIR)/tlibthread/libtlibthread.a
+#	$(RM) -f $(BUILD_DIR)/.tsafecrt/*      && cd $(BUILD_DIR)/.tsafecrt   && $(AR) x $(LINUX_SDK_DIR)/tsafecrt/libsgx_tsafecrt.a
+#	$(RM) -f $(BUILD_DIR)/.tsetjmp/*       && cd $(BUILD_DIR)/.tsetjmp    && $(AR) x $(LINUX_SDK_DIR)/tsetjmp/libsgx_tsetjmp.a
+#	$(CP) $(SVML_PATH)/libsvml.a $@
+#	$(AR) qD $@ $(BUILD_DIR)/.libimf/*.o
+#	$(AR) qD $@ $(BUILD_DIR)/.libirc/*.o
+#	$(AR) qD $@ $(BUILD_DIR)/.compiler-rt/*.o
 	$(AR) qD $@ $(BUILD_DIR)/.tlibc/*.o
-	$(AR) qD $@ $(BUILD_DIR)/.tlibthread/*.o
-	$(AR) qD $@ $(BUILD_DIR)/.tsafecrt/*.o
-	$(AR) qD $@ $(BUILD_DIR)/.tsetjmp/*.o
-	@$(RM) -rf $(BUILD_DIR)/.libimf $(BUILD_DIR)/.libirc $(BUILD_DIR)/.compiler-rt $(BUILD_DIR)/.tlibc
-	@$(RM) -rf $(BUILD_DIR)/.tlibthread $(BUILD_DIR)/.tsafecrt $(BUILD_DIR)/.tsetjmp
+#	$(AR) qD $@ $(BUILD_DIR)/.tlibthread/*.o
+#	$(AR) qD $@ $(BUILD_DIR)/.tsafecrt/*.o
+#	$(AR) qD $@ $(BUILD_DIR)/.tsetjmp/*.o
+#	@$(RM) -rf $(BUILD_DIR)/.libimf $(BUILD_DIR)/.libirc $(BUILD_DIR)/.compiler-rt $(BUILD_DIR)/.tlibc
+#	@$(RM) -rf $(BUILD_DIR)/.tlibthread $(BUILD_DIR)/.tsafecrt $(BUILD_DIR)/.tsetjmp
 
 .PHONY: tlibthread
 tlibthread:

+ 13 - 8
sdk/tlibc/Makefile

@@ -52,13 +52,15 @@ LIBC_C_SRCS := $(wildcard gen/*.c gdtoa/*.c locale/*.c stdlib/*.c string/*.c std
 endif
 LIBC_C_SRCS := $(filter-out stdlib/malloc.c,$(LIBC_C_SRCS))
 
+LIBC_C_SRCS := string/consttime_memequal.c string/memset_s.c gen/errno.c
+
 LIBC_CPP_SRCS := $(wildcard gen/*.cpp) tstdc_version.cpp
 LIBC_ASM_SRCS := $(wildcard gen/*.S)
 
 LIBC_OBJS := $(LIBC_C_SRCS:.c=.o)
-LIBC_OBJS += $(LIBC_CPP_SRCS:.cpp=.o)
-LIBC_OBJS += $(LIBC_ASM_SRCS:.S=.o)
-LIBC_OBJS := $(sort $(LIBC_OBJS))
+#LIBC_OBJS += $(LIBC_CPP_SRCS:.cpp=.o)
+#LIBC_OBJS += $(LIBC_ASM_SRCS:.S=.o)
+#LIBC_OBJS := $(sort $(LIBC_OBJS))
 
 LIBC_NAME    := libtlibc.a
 
@@ -71,14 +73,17 @@ $(LIBC_NAME): $(LIBC_OBJS)
 string/consttime_memequal.o: string/consttime_memequal.c
 	$(CC)  $(filter-out -O2,$(CFLAGS)) -O1 $(CPPFLAGS) -c $< -o $@
 	
-%.o: %.c
+string/memset_s.o: string/memset_s.c
+	$(CC)  $(CFLAGS)   $(CPPFLAGS) -c $< -o $@
+gen/errno.o: gen/errno.c
 	$(CC)  $(CFLAGS)   $(CPPFLAGS) -c $< -o $@
 
-%.o: %.cpp
-	$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $< -o $@
 
-%.o: %.S
-	$(CC)  $(ASFLAGS)  $(CPPFLAGS) -c $< -o $@
+#%.o: %.cpp
+#	$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $< -o $@
+
+#%.o: %.S
+#	$(CC)  $(ASFLAGS)  $(CPPFLAGS) -c $< -o $@
 
 .PHONY: clean
 clean:

+ 1 - 1
sdk/tlibc/string/memset_s.c

@@ -34,7 +34,7 @@
 #include <sys/cdefs.h>
 
 #define __STDC_WANT_LIB_EXT1__ 1
-#include <errno.h>
+#include "errno.h"
 #include <stdint.h>
 #include <string.h>
 

+ 13 - 13
sdk/trts/Makefile

@@ -42,20 +42,20 @@ CXXFLAGS += $(ENCLAVE_CXXFLAGS) \
 
 TCXXFLAGS := $(patsubst -fstack-protector%,-fno-stack-protector,$(CXXFLAGS))
 
-OBJS1 := init_enclave.o  \
-        trts.o           \
-        trts_ecall.o     \
-        trts_ocall.o     \
-        trts_util.o      \
-        trts_veh.o       \
-        trts_xsave.o     \
-        init_optimized_lib.o \
-        trts_version.o \
-        trts_trim.o \
-        trts_emodpr.o  \
-        trts_add_trim.o
+OBJS1 := trts.o trts_version.o trts_util.o # \ #init_enclave.o  \
+#        trts.o           \
+        #trts_ecall.o     \
+        #trts_ocall.o     \
+        #trts_util.o      \
+        #trts_veh.o       \
+        #trts_xsave.o     \
+        #init_optimized_lib.o \
+#	trts_version.o \
+        #trts_trim.o \
+        #trts_emodpr.o  \
+        #trts_add_trim.o
 
-OBJS2 := trts_nsp.o
+OBJS2 := #trts_nsp.o
 
 OBJS := $(OBJS1) $(OBJS2)
 

+ 15 - 9
sdk/trts/linux/Makefile

@@ -48,14 +48,14 @@ TCFLAGS   += -nostdinc \
 
 LDCFLAGS  := -shared -nostdlib -nodefaultlibs -nostartfiles
 
-CPP_SRCS  := $(wildcard ../*.cpp)
-C_SRCS    := $(wildcard *.c)
-ASM_SRCS  := $(wildcard *.S) \
-             $(COMMON_DIR)/src/linux/xsave_gnu.S
+CPP_SRCS  := ../trts.cpp ../trts_version.cpp ../trts_util.cpp
+#C_SRCS    := $(wildcard *.c)
+ASM_SRCS  := trts_pic.S#$(wildcard *.S) \
+             #$(COMMON_DIR)/src/linux/xsave_gnu.S
 OBJS      := $(CPP_SRCS:.cpp=.o)
-OBJS      += $(C_SRCS:.c=.o)
+#OBJS      += $(C_SRCS:.c=.o)
 OBJS      += $(ASM_SRCS:.S=.o)
-OBJS      := $(sort $(OBJS))
+#OBJS      := $(sort $(OBJS))
 
 LIBTRTS = libsgx_trts.a
 
@@ -71,12 +71,18 @@ $(LIBTRTS): $(OBJS) setcontext.o
 	echo $(ASM_SRCS)
 	$(CC) $(CFLAGS) $(TCFLAGS) -c $< -o $@
 
-%.o: %.c
-	$(CC) $(CFLAGS) $(TCFLAGS) -c $< -o $@
+#%.o: %.c
+#	$(CC) $(CFLAGS) $(TCFLAGS) -c $< -o $@
 
-%.o: %.cpp
+../trts.o: ../trts.cpp
+	$(CXX) $(CXXFLAGS) $(TCFLAGS) -c $< -o $@
+../trts_version.o: ../trts_version.cpp
+	$(CXX) $(CXXFLAGS) $(TCFLAGS) -c $< -o $@
+../trts_util.o: ../trts_util.cpp
 	$(CXX) $(CXXFLAGS) $(TCFLAGS) -c $< -o $@
 
+
+
 $(BUILD_DIR):
 	@$(MKDIR) $@
 

+ 8 - 482
sdk/trts/linux/trts_pic.S

@@ -42,426 +42,7 @@
 
     /* .text */
     .section .nipx,"ax",@progbits
-
-DECLARE_LOCAL_FUNC get_enclave_base
-    lea_pic __ImageBase, %xax
-    ret
-DECLARE_LOCAL_FUNC get_enclave_state
-    lea_pic g_enclave_state, %xcx
-    xor     %xax, %xax
-    movl    (%xcx), %eax
-    ret
-DECLARE_LOCAL_FUNC set_enclave_state
-    lea_pic g_enclave_state, %xax
-#ifdef LINUX32
-    mov     SE_WORDSIZE(%esp), %edi
-#endif
-    movl    %edi, (%xax)
-    ret
-
-DECLARE_LOCAL_FUNC lock_enclave
-    lea_pic g_enclave_state, %xdx
-    xor     %xax, %xax
-    mov     $ENCLAVE_INIT_NOT_STARTED, %eax
-    xor     %xcx, %xcx
-    mov     $ENCLAVE_INIT_IN_PROGRESS, %ecx     /* if (g_global_data.enclave_state == ENCLAVE_INIT_NOT_STARTED) */
-    lock cmpxchgl %ecx, (%xdx)                  /*   g_global_data.enclave_state == ENCLAVE_INIT_IN_PROGRESS */
-    ret                                         /* xax: the initial value of enclave state */
-
-/* 
- * ---------------------------------------------------------------------
- * Function: thread_data_t* get_thread_data(void);
- *
- *     Get the address of thread_data
- * ---------------------------------------------------------------------
- */
-DECLARE_LOCAL_FUNC get_thread_data
-    READ_TD_DATA self_addr 
-    ret
-
-/* 
- * ---------------------------------------------------------------------
- * Function: sys_word_t get_stack_guard(void);
- *
- *     Get the value of stack_guard
- * ---------------------------------------------------------------------
- */
-DECLARE_LOCAL_FUNC get_stack_guard 
-    READ_TD_DATA stack_guard 
-    ret
-    
-/* 
- * ---------------------------------------------------------------------
- * Function: enclave_entry
- *      The entry point of the enclave.
- *
- * Registers:
- *      XAX - TCS.CSSA
- *      XBX - the address of a TCS
- *      XCX - the address of the instruction following the EENTER
- *      XDI - the reason of entering the enclave
- *      XSI - the pointer to the marshalling structure
- */
-DECLARE_GLOBAL_FUNC enclave_entry
-/* 
- * ----------------------------------------------------------------------
- * Dispatch code according to CSSA and the reason of EENTER
- *      eax >   0 - exception handler
- *      edi >=  0 - ecall
- *      edi == -1 - do_init_enclave
- *      edi == -2 - oret
- * Registers
- *      No need to use any register during the dipatch
- * ----------------------------------------------------------------------
- */
-    .cfi_startproc
-
-    /* Clear unused general registers */
-    xor     %xdx, %xdx
-    add     %xdx, %xdx          /* OF = SF = AF = CF = 0; ZF = PF = 1 */
-#if defined(LINUX64)
-    xor     %r8, %r8
-    xor     %r9, %r9
-    xor     %r10, %r10
-    xor     %r11, %r11
-    xor     %r12, %r12
-    xor     %r13, %r13
-    xor     %r14, %r14
-    xor     %r15, %r15
-#endif
-
-    /* switch to trusted stack */
-    cmp     $0, %xax
-    jne     .Ldo_handler                /* handle exception state */
-    /* xor     %xdx, %xdx                  xdx is cssa, make sure it is 0 */
-    READ_TD_DATA last_sp
-    cmp     $0, %xax
-    jne .Lswitch_stack
-    GET_STACK_BASE  %xbx                /* if last_sp == 0, set sp to stack base */
-    sub     $STATIC_STACK_SIZE, %xax    /* give space for static stack */
-.Lswitch_stack:
-    xchg    %xsp, %xax
-    push    %xcx
-    push    %xbp
-
-    .cfi_def_cfa_offset   2 * SE_WORDSIZE
-    .cfi_offset           xbp, -2 * SE_WORDSIZE
-    mov     %xsp, %xbp
-    .cfi_def_cfa_register xbp
-
-    /* Save the registers */
-    sub     $(6*SE_WORDSIZE), %xsp
-    mov     %xax, -1*SE_WORDSIZE(%xbp)  /* xsp_u */
-    mov     %xdx, -3*SE_WORDSIZE(%xbp)  /* cssa */
-    mov     %xbx, -4*SE_WORDSIZE(%xbp)  /* TCS */
-    mov     %xsi, -5*SE_WORDSIZE(%xbp)  /* XSI */
-    mov     %xdi, -6*SE_WORDSIZE(%xbp)  /* XDI */
-
-#ifdef LINUX64
-    mov     %rdx, %rcx
-    mov     %rbx, %rdx
-#endif
-    call    enter_enclave
-    mov     %xax, %xbx
-
-.Lexit_enclave:
-/* clean extended feature registers */
-    lea_pic SYNTHETIC_STATE, %xdi
-#ifdef LINUX32
-    mov     %xdi, (%xsp)
-#endif
-    call    restore_xregs
-
-/* set xdi and xsi */
-    mov     $OCMD_ERET, %xdi
-    mov     %xbx, %xsi
-
-/* restore stack */
-    mov     -1*SE_WORDSIZE(%xbp), %xdx  /* xdx: xsp_u  */
-    mov     %xbp, %xsp
-    pop     %xbp                        /* xbp_u */
-    pop     %xbx                        /* ret_u */
-    mov     %xdx, %xsp                  /* xsp_u */
-
-.Lclear_and_exit_enclave:
-    /* Clear all GPRs, except xax, xbx, xdi and xsi */
-    xor     %xcx, %xcx
-    xor     %xdx, %xdx
-#if defined(LINUX64)
-    xor     %r8, %r8
-    xor     %r9, %r9
-    xor     %r10, %r10
-    xor     %r11, %r11
-    xor     %r12, %r12
-    xor     %r13, %r13
-    xor     %r14, %r14
-    xor     %r15, %r15
-#endif
-
-    /* Set status flags to pre-defined values */
-    add     %xdx, %xdx          /* OF = SF = AF = CF = 0; ZF = PF = 1 */
-
-    /* EEXIT */
-    mov     $SE_EEXIT, %xax     /* EEXIT leaf */
-    ENCLU
-
-    /* Should not come here */
-    ud2
-
-.Ldo_handler:
-    mov     %xax, %xdx          /* XDX: cssa */
-    GET_STACK_BASE %xbx         /* XAX: static stack, set sp to stack base */
-    jmp     .Lswitch_stack   
- 
-    /* Should not come here */
-    ud2
     
-    .cfi_endproc
-
-/* 
- * -------------------------------------------------------------------------
- *  sgx_status_t do_ocall(unsigned int index, void *ms);
- *
- *  Function: do_ocall
- *        The entry point of the enclave
- *  Parameters:
- *        func_addr - target function address
- *        ms - marshalling structure
- *
- *  Stack: (same as do_oret)
- *        bottom of stack ->
- *                            -----------------
- *                           | ECALL/OCALL     |
- *    previous TD.last_sp -> |   frames        |
- *                            -----------------
- *                           |   ECALL frame   |
- *                           | do_ocall param 2| 3
- *                           | do_ocall param 1| 2
- *                           |do_ocall ret_addr| 1
- *                           |     xbp         | 0 + xbp
- *                           |     ....        |
- *                           |   xsave buffer  |
- *                           |     ....        |
- *                           |  xsave pointer  | 19
- *                           |   ocall_depth   | 18
- *                           |   reserved      | 17
- *                           |   reserved      | 16
- *                           |   reserved      | 15
- *                           |     rbx         | 14
- *                           |     rsi         | 13
- *                           |     rdi         | 12
- *                           |     rbp         | 11
- *                           |     r12         | 10
- *                           |     r13         | 9
- *                           |     r14         | 8
- *                           |     r15         | 7
- *                           | prev TD.last_sp | 6
- *                           |  ocall_index    | 5
- *                           |   OCALL FLAG    | 4
- *                           |    shadow       | 3
- *                           |    shadow       | 2
- *                           |    shadow       | 1
- *             TD.last_sp -> |    shadow       | 0 + xsp
- *                            -----------------
- * -------------------------------------------------------------------------
- */
-DECLARE_LOCAL_FUNC do_ocall
-
-/* 
- * 8 for GPR, 1 for TD.last_sp, 1 for ocall_index
- * 1 for OCALL_FLAG, 4 for shadow space.
- * Stack Pointer is 16-byte aligned under x86_64.
- */
-    push    %xbp
-    mov     %xsp, %xbp
-
-/* save parameters in stack */
-#ifdef LINUX64
-    mov     %xdi, 2*SE_WORDSIZE(%xbp)
-    mov     %xsi, 3*SE_WORDSIZE(%xbp)
-#endif
-
-/* save and clean extended feature registers */
-    READ_TD_DATA xsave_size
-    sub     %xax, %xsp                 /* allocate buffer to save xregs */
-    mov     $0x3f, %xax
-    not     %xax
-    and     %xax, %xsp                 /* xsave requires 64 byte aligned */
-    mov     %xsp, %xcx                 # xsave pointer
-
-    sub     $(20*SE_WORDSIZE), %xsp    /* 20 slots for GPRs and other info */
-    mov     %xcx, SE_WORDSIZE*19(%xsp) /* addr for xsave */
-/* save non-volatile registers, except xsp */
-    mov     %xbx, SE_WORDSIZE*14(%xsp)
-    mov     %xsi, SE_WORDSIZE*13(%xsp)
-    mov     %xdi, SE_WORDSIZE*12(%xsp)
-    mov     %xbp, SE_WORDSIZE*11(%xsp)
-
-#ifdef LINUX64
-    mov     %r12, SE_WORDSIZE*10(%rsp)
-    mov     %r13, SE_WORDSIZE* 9(%rsp)
-    mov     %r14, SE_WORDSIZE* 8(%rsp)
-    mov     %r15, SE_WORDSIZE* 7(%rsp)
-#endif
-
-/* save and clean extended feature registers */
-    mov     SE_WORDSIZE*19(%xsp), %xdi /* xsave pointer */
-    READ_TD_DATA xsave_size
-    mov     %xax, %xcx
-    shr     $2, %xcx                   /* xsave size in dword */
-    xor     %xax, %xax
-    cld
-    rep stos %eax, %es:(%xdi)
-
-    mov     SE_WORDSIZE*19(%xsp), %xdi # xsave pointer
-    mov     %xdi, (%xsp)
-    call    save_xregs
-    lea_pic SYNTHETIC_STATE, %xdi
-    mov     %xdi, (%xsp)
-    call    restore_xregs
-
-    /* set xdi and xsi using the input parameters */
-#ifdef LINUX64
-    mov     SE_WORDSIZE*12(%xsp), %xdi
-    mov     SE_WORDSIZE*13(%xsp), %xsi
-#else
-    mov     SE_WORDSIZE*2(%ebp), %edi
-    mov     SE_WORDSIZE*3(%ebp), %esi
-#endif
-
-    /* save ocall index to the stack */
-    mov     $OCALL_FLAG, %xax
-    mov     %xax, SE_WORDSIZE*4(%xsp)   /* save OCALL_FLAG */
-    mov     %xdi, SE_WORDSIZE*5(%xsp)   /* save ocall_index */
-
-    /*
-     * save the inside stack context
-     *     push TD.last_sp
-     *     set TD.last_sp = xsp
-     */
-    READ_TD_DATA self_addr
-    mov     %xax, %xbx 
-
-    /* call update_ocall_lastsp */
-#ifdef LINUX32
-    mov     %xsp, (%xsp)
-#else
-    mov     %xsp, %xdi
-#endif
-    
-    call    update_ocall_lastsp         /* xax: td.last_sp */
-
-#ifdef LINUX64
-    mov     SE_WORDSIZE*12(%xsp), %xdi   /* restore xdi */
-    mov     SE_WORDSIZE*13(%xsp), %xsi   /* restore xdi */
-#endif
-
-    /* restore outside stack context */
-    mov     first_ssa_gpr(%xbx), %xdx
-    mov     ssa_bp_u(%xdx), %xbp
-    mov     ssa_sp_u(%xdx), %xsp
-    /*
-     * set EEXIT registers
-     * return address can be read from the ECALL frame:
-     *       TD.last_sp ->
-     *                     -------------
-     *                    | ret_addr    |
-     *                    | xbp_u       |
-     *                    | xsp_u       |
-     *                    | ...         |
-     */
-    mov     -1*SE_WORDSIZE(%xax), %xbx  /* return address */
-    mov     $SE_EEXIT, %xax             /* EEXIT leaf */
-
-    /* Clear all GPRs, except xax, xbx, xdi, and xsi*/
-    xor     %xcx, %xcx
-    xor     %xdx, %xdx
-#ifdef LINUX64
-    xor     %r8,  %r8
-    xor     %r9,  %r9
-    xor     %r10, %r10
-    xor     %r11, %r11
-    xor     %r12, %r12
-    xor     %r13, %r13
-    xor     %r14, %r14
-    xor     %r15, %r15
-#endif
-
-    /* Set status flags to pre-defined values */
-    add     %xdx, %xdx          /* OF = SF = AF = CF = 0; ZF = PF = 1 */
-
-    ENCLU
-
-/*
- * ------------------------------------------------------------------
- * this function is the wrapper of do_ocall, which is used to
- * stick ocall bridge and proxy frame together
- * ------------------------------------------------------------------
- */
-DECLARE_LOCAL_FUNC __morestack
-    .cfi_startproc
-    push %xbp
-    .cfi_def_cfa_offset     2*SE_WORDSIZE
-    .cfi_offset             xbp,-2*SE_WORDSIZE
-    mov %xsp, %xbp
-    .cfi_def_cfa_register   xbp
-    sub $(4*SE_WORDSIZE), %xsp
-#ifdef LINUX32
-    /* save the 2 parameters */
-    mov (2*SE_WORDSIZE)(%xbp), %xax
-    mov %xax, (0*SE_WORDSIZE)(%xsp)
-    mov (3*SE_WORDSIZE)(%xbp), %xax
-    mov %xax, (1*SE_WORDSIZE)(%xsp)
-#endif
-    call        do_ocall
-    leave
-    ret
-    .cfi_endproc
-
-DECLARE_GLOBAL_FUNC asm_oret
-    mov     %xsp, %xbx
-#ifdef LINUX64
-    mov     %xdi, SE_WORDSIZE(%xsp)
-    mov     %xsi, 2*SE_WORDSIZE(%xsp)
-#endif
-    mov     SE_WORDSIZE(%xbx), %xsp    /* restore thread_data.last_sp */
-
-/* restore extended feature registers */
-    mov     19*SE_WORDSIZE(%xsp), %xdi
-#ifdef LINUX32
-    mov     %xdi, (%xsp)
-#endif
-    call    restore_xregs
-
-/* memset_s */
-    xor     %xax, %xax
-    mov     11*SE_WORDSIZE(%xsp), %xcx
-    sub     %xdi, %xcx
-    sub     $SE_WORDSIZE, %xcx
-    shr     $2, %xcx
-    cld
-    rep stos %eax,%es:(%xdi)
-
-    mov     2*SE_WORDSIZE(%xbx), %xax  /* ocall return value */
-
-#ifdef LINUX64
-    mov     7*SE_WORDSIZE(%xsp), %r15
-    mov     8*SE_WORDSIZE(%xsp), %r14
-    mov     9*SE_WORDSIZE(%xsp), %r13
-    mov    10*SE_WORDSIZE(%xsp), %r12
-#endif
-
-    mov    11*SE_WORDSIZE(%xsp), %xbp
-    mov    12*SE_WORDSIZE(%xsp), %xdi
-    mov    13*SE_WORDSIZE(%xsp), %xsi
-    mov    14*SE_WORDSIZE(%xsp), %xbx
-
-    mov     %xbp, %xsp
-    pop     %xbp
-
-    ret
-    /* should not come here */
-    ud2
 
 /* 
  * ------------------------------------------------------------------------
@@ -544,68 +125,13 @@ DECLARE_LOCAL_FUNC do_rdrand
     mov     $1, %xax
     ret
 
-/*
- * -------------------------------------------------------------------------
- * extern "C" void abort(void) __attribute__(__noreturn__);
- * -------------------------------------------------------------------------
- */
-DECLARE_LOCAL_FUNC abort
-    lea_pic g_enclave_state, %xax
-    movl    $ENCLAVE_CRASHED, (%xax)
-    ud2
-
 /* 
- * -------------------------------------------------------------------------
- * extern "C" __attribute__((regparm(1))) void continue_execution(sgx_exception_info_t *info);
- * -------------------------------------------------------------------------
- */
-DECLARE_LOCAL_FUNC continue_execution
-#ifdef LINUX32
-    mov     %xax, %xcx
-#else
-    mov     %xdi, %xcx
-#endif
-    mov     SE_WORDSIZE*0(%xcx), %xax
-    push    %xax                       /* push xax */
-    mov     SE_WORDSIZE*1(%xcx), %xax
-    push    %xax                       /* push xcx */
-    mov     SE_WORDSIZE*4(%xcx), %xax  /* xax: xsp */
-/* x86_64 requires a 128-bytes red zone. We need to allocate buffer to avoid touching the red zone. */
-    sub     $(SE_WORDSIZE + RED_ZONE_SIZE), %xax   /* allocate buffer to skip red zone and save xip */
-
-/* restore registers except xax, xcx, xsp */
-    mov     SE_WORDSIZE*2(%xcx), %xdx
-    mov     SE_WORDSIZE*3(%xcx), %xbx
-    mov     SE_WORDSIZE*5(%xcx), %xbp
-    mov     SE_WORDSIZE*6(%xcx), %xsi
-    mov     SE_WORDSIZE*7(%xcx), %xdi
-#ifdef LINUX64
-    mov     SE_WORDSIZE*8(%xcx), %r8
-    mov     SE_WORDSIZE*9(%xcx), %r9
-    mov     SE_WORDSIZE*10(%xcx), %r10
-    mov     SE_WORDSIZE*11(%xcx), %r11
-    mov     SE_WORDSIZE*12(%xcx), %r12
-    mov     SE_WORDSIZE*13(%xcx), %r13
-    mov     SE_WORDSIZE*14(%xcx), %r14
-    mov     SE_WORDSIZE*15(%xcx), %r15
-    push    SE_WORDSIZE*16(%xcx)
-    popf    /* make sure the following instructions do not affect flags */
-#else
-    push    SE_WORDSIZE*8(%xcx)
-    popf
-#endif
-
-#ifdef LINUX64
-    mov     SE_WORDSIZE*17(%xcx), %xcx
-#else
-    mov     SE_WORDSIZE*9(%xcx), %xcx  /* xcx: xip */
-#endif
-
-/* do not setup the new stack until info is not needed any more
- * otherwise, info will be overwritten
+ * ---------------------------------------------------------------------
+ * Function: thread_data_t* get_thread_data(void);
+ *
+ *     Get the address of thread_data
+ * ---------------------------------------------------------------------
  */
-    mov     %xcx, (%xax)               /* save xip to the new stack */
-    pop     %xcx                       /* restore xcx */
-    pop     %xsp                       /* xsp: xax */
-    xchg    %xax, %xsp
-    ret     $(RED_ZONE_SIZE)           /* pop xip and red zone (if any) */
+DECLARE_LOCAL_FUNC get_thread_data
+    READ_TD_DATA self_addr 
+ret

+ 15 - 10
sdk/trts/trts.cpp

@@ -99,9 +99,9 @@ int sgx_is_within_enclave(__attribute__((unused))const void *addr, __attribute__
 //      0 - the whole buffer or part of the buffer is not outside the enclave,
 //          or the buffer is wrap around
 //
-int sgx_is_outside_enclave(const void *addr, size_t size)
+int sgx_is_outside_enclave(__attribute__((unused)) const void *addr, __attribute__((unused))  size_t size)
 {
-    size_t start = reinterpret_cast<size_t>(addr);
+/*    size_t start = reinterpret_cast<size_t>(addr);
     size_t end = 0;
     size_t enclave_start = (size_t)&__ImageBase;
     size_t enclave_end = enclave_start + g_global_data.enclave_size - 1;
@@ -121,6 +121,7 @@ int sgx_is_outside_enclave(const void *addr, size_t size)
         return 1;
     }
     return 0;
+*/ return 1;
 }
 
 // sgx_ocalloc()
@@ -138,8 +139,10 @@ int sgx_is_outside_enclave(const void *addr, size_t size)
 // so the outside stack is automatically unwind.
 // In addition, sgx_ocalloc needs perform outside stack probe to make sure it is not allocating beyond the end of the stack.
 #define OC_ROUND 16
+/*
 void * sgx_ocalloc(size_t size)
 {
+
     // read the outside stack address from current SSA
     thread_data_t *thread_data = get_thread_data();
     ssa_gpr_t *ssa_gpr = reinterpret_cast<ssa_gpr_t *>(thread_data->first_ssa_gpr);
@@ -198,8 +201,9 @@ void * sgx_ocalloc(size_t size)
     ssa_gpr->REG(sp_u) = addr;
 
     return reinterpret_cast<void *>(addr);
-}
 
+}
+*/
 // sgx_ocfree()
 // Parameters:
 //      N/A
@@ -207,7 +211,7 @@ void * sgx_ocalloc(size_t size)
 //      N/A
 // sgx_ocfree restores the original outside stack pointer in the SSA.
 // Do not call this function if you still need the buffer allocated by sgx_ocalloc within the ECALL.
-void sgx_ocfree()
+/*void sgx_ocfree()
 {
     // ECALL stack frame
     //           last_sp -> |             |
@@ -226,7 +230,7 @@ void sgx_ocfree()
     }
     ssa_gpr->REG(sp_u) = usp;
 }
-
+*/
 #ifdef SE_SIM
 static sgx_spinlock_t g_seed_lock = SGX_SPINLOCK_INITIALIZER;
 
@@ -268,10 +272,10 @@ sgx_status_t sgx_read_rand(unsigned char *rand, size_t length_in_bytes)
     {
         return SGX_ERROR_INVALID_PARAMETER;
     }
-    if(!sgx_is_within_enclave(rand, length_in_bytes) && !sgx_is_outside_enclave(rand, length_in_bytes))
-    {
-        return SGX_ERROR_INVALID_PARAMETER;
-    }
+//    if(!sgx_is_within_enclave(rand, length_in_bytes) && !sgx_is_outside_enclave(rand, length_in_bytes))
+//    {
+//        return SGX_ERROR_INVALID_PARAMETER;
+//    }
     // loop to rdrand
     uint32_t rand_num = 0;
     while(length_in_bytes > 0)
@@ -291,7 +295,7 @@ sgx_status_t sgx_read_rand(unsigned char *rand, size_t length_in_bytes)
     memset_s(&rand_num, sizeof(rand_num), 0, sizeof(rand_num));
     return SGX_SUCCESS;
 }
-
+/*
 int sgx_is_enclave_crashed()
 {
     return get_enclave_state() == ENCLAVE_CRASHED;
@@ -308,3 +312,4 @@ int check_static_stack_canary(void *tcs)
     return 0;
 }
 
+*/

+ 4 - 3
sdk/trts/trts_util.cpp

@@ -37,7 +37,7 @@
 
 // No need to check the state of enclave or thread.
 // The functions should be called within an ECALL, so the enclave and thread must be initialized at that time.
-void * get_heap_base(void)
+/*void * get_heap_base(void)
 {
     return GET_PTR(void, &__ImageBase, g_global_data.heap_offset);
 }
@@ -71,7 +71,7 @@ size_t get_heap_min_size(void)
     }
     return heap_size;
 }
-
+*/
 int * get_errno_addr(void)
 {
     thread_data_t *thread_data = get_thread_data();
@@ -92,7 +92,7 @@ int * get_errno_addr(void)
 //Features listed in array[0], counting from right-most bit  to left-most bit,
 //have feature shift values 0 ~ 62, while features listed in array[1], have feature
 //shift values 64 ~ 126.
-
+/*
 int feature_supported(const uint64_t *feature_set, uint32_t feature_shift)
 {
     const uint64_t *f_set = feature_set;
@@ -129,3 +129,4 @@ bool is_valid_sp(uintptr_t sp)
            && is_stack_addr((void*)sp, 0) );   // sp points to the top/bottom of stack are accepted
 }
 
+*/