@@ -307,14 +307,28 @@ void load_sigstruct(const char *path, struct sgx_sigstruct *sigstruct)
int sgx_call(void *rdi, void *rsi, long rdx, long rcx, long r8, long r9,
void *tcs, struct sgx_enclave_exception *ei, void *cb);
-int main(int argc, char *argv[], char *envp[])
+/*
+ * Test the vDSO API, __vdso_sgx_enter_enclave(), without an exit handler.
+ */
+static void test_vdso_no_exit_handler(struct sgx_secs *secs)
{
struct sgx_enclave_exception exception;
+ uint64_t result = 0;
+
+ memset(&exception, 0, sizeof(exception));
+
+ /* Verify the enclave copies MAGIC to result. */
+ sgx_call((void *)&MAGIC, &result, 0, 0, 0, 0, (void *)secs->base,
+ &exception, NULL);
+ ASSERT_EQ(result, MAGIC);
+}
+
+int main(int argc, char *argv[], char *envp[])
+{
struct sgx_sigstruct sigstruct;
struct vdso_symtab symtab;
Elf64_Sym *eenter_sym;
struct sgx_secs secs;
- uint64_t result = 0;
off_t bin_size;
void *bin;
void *addr;
@@ -323,8 +337,6 @@ int main(int argc, char *argv[], char *envp[])
load_sigstruct("encl.ss", &sigstruct);
- memset(&exception, 0, sizeof(exception));
-
addr = vdso_get_base_addr();
ASSERT_NE(addr, NULL);
@@ -337,10 +349,7 @@ int main(int argc, char *argv[], char *envp[])
encl_build(&secs, bin, bin_size, &sigstruct);
- sgx_call((void *)&MAGIC, &result, 0, 0, 0, 0, (void *)secs.base,
- &exception, NULL);
-
- ASSERT_EQ(result, MAGIC);
+ test_vdso_no_exit_handler(&secs);
printf("All tests passed!\n");
exit(0);
Move the basic test of running the enclave using the vDSO to a separate helper in preparation for introducing new sub-tests and variations on the existing test. Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com> --- tools/testing/selftests/x86/sgx/main.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-)