|
@@ -16,6 +16,7 @@
|
|
|
|
|
|
|
|
#include "Enclave_u.h"
|
|
#include "Enclave_u.h"
|
|
|
#include "sgx_urts.h"
|
|
#include "sgx_urts.h"
|
|
|
|
|
+#include "pal_api.h"
|
|
|
|
|
|
|
|
#ifndef TRUE
|
|
#ifndef TRUE
|
|
|
#define TRUE 1
|
|
#define TRUE 1
|
|
@@ -33,6 +34,12 @@
|
|
|
|
|
|
|
|
static sgx_enclave_id_t g_eid = 0;
|
|
static sgx_enclave_id_t g_eid = 0;
|
|
|
|
|
|
|
|
|
|
+sgx_enclave_id_t
|
|
|
|
|
+pal_get_enclave_id(void)
|
|
|
|
|
+{
|
|
|
|
|
+ return g_eid;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
void
|
|
void
|
|
|
ocall_print(const char* str)
|
|
ocall_print(const char* str)
|
|
|
{
|
|
{
|
|
@@ -734,3 +741,163 @@ fail1:
|
|
|
return 0;
|
|
return 0;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+int
|
|
|
|
|
+wamr_pal_get_version(void)
|
|
|
|
|
+{
|
|
|
|
|
+ return WAMR_PAL_VERSION;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+int
|
|
|
|
|
+wamr_pal_init(const struct wamr_pal_attr *args)
|
|
|
|
|
+{
|
|
|
|
|
+ sgx_enclave_id_t *p_eid = &g_eid;
|
|
|
|
|
+
|
|
|
|
|
+ if (enclave_init(&g_eid) < 0) {
|
|
|
|
|
+ std::cout << "Fail to initialize enclave." << std::endl;
|
|
|
|
|
+ return 1;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+int
|
|
|
|
|
+wamr_pal_create_process(struct wamr_pal_create_process_args *args)
|
|
|
|
|
+{
|
|
|
|
|
+ uint32_t stack_size = 16 * 1024, heap_size = 16 * 1024;
|
|
|
|
|
+ int log_verbose_level = 2;
|
|
|
|
|
+ bool is_repl_mode = false, alloc_with_pool = false;
|
|
|
|
|
+ const char *dir_list[8] = { NULL };
|
|
|
|
|
+ uint32_t dir_list_size = 0;
|
|
|
|
|
+ const char *env_list[8] = { NULL };
|
|
|
|
|
+ uint32_t env_list_size = 0;
|
|
|
|
|
+ uint32_t max_thread_num = 4;
|
|
|
|
|
+ char *wasm_files[16];
|
|
|
|
|
+ void *wasm_module_inst[16];
|
|
|
|
|
+
|
|
|
|
|
+ int argc = 2;
|
|
|
|
|
+ char *argv[argc] = { (char*)"./iwasm", (char *)args->argv[0] };
|
|
|
|
|
+
|
|
|
|
|
+ uint8_t *wasm_files_buf = NULL;
|
|
|
|
|
+ void *wasm_modules = NULL;
|
|
|
|
|
+ int len = 0, i;
|
|
|
|
|
+
|
|
|
|
|
+ char *temp = (char *)args->argv[0];
|
|
|
|
|
+ while(temp) {
|
|
|
|
|
+ len++;
|
|
|
|
|
+ temp=(char *)args->argv[len];
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (len > sizeof(wasm_files)/sizeof(char *)) {
|
|
|
|
|
+ printf("Number of input files is out of range\n");
|
|
|
|
|
+ return -1;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ for (i = 0; i < len; ++i) {
|
|
|
|
|
+ wasm_files[i] = (char *)args->argv[i];
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /* Init runtime */
|
|
|
|
|
+ if (!init_runtime(alloc_with_pool, max_thread_num)) {
|
|
|
|
|
+ printf("Failed to init runtime\n");
|
|
|
|
|
+ return -1;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /* Set log verbose level */
|
|
|
|
|
+ if (!set_log_verbose_level(log_verbose_level)) {
|
|
|
|
|
+ printf("Failed to set log level\n");
|
|
|
|
|
+ destroy_runtime();
|
|
|
|
|
+ return -1;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ for (i = 0; i < len; ++i) {
|
|
|
|
|
+ uint8_t *wasm_file_buf = NULL;
|
|
|
|
|
+ uint32_t wasm_file_size;
|
|
|
|
|
+ void *wasm_module = NULL;
|
|
|
|
|
+ char error_buf[128] = { 0 };
|
|
|
|
|
+
|
|
|
|
|
+ /* Load WASM byte buffer from WASM bin file */
|
|
|
|
|
+ if (!(wasm_file_buf = (uint8_t *)read_file_to_buffer
|
|
|
|
|
+ (wasm_files[i], &wasm_file_size))) {
|
|
|
|
|
+ printf("Failed to read file to buffer\n");
|
|
|
|
|
+ destroy_runtime();
|
|
|
|
|
+ return -1;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /* Load module */
|
|
|
|
|
+ if (!(wasm_module = load_module(wasm_file_buf, wasm_file_size,
|
|
|
|
|
+ error_buf, sizeof(error_buf)))) {
|
|
|
|
|
+ printf("%s\n", error_buf);
|
|
|
|
|
+ free(wasm_file_buf);
|
|
|
|
|
+ destroy_runtime();
|
|
|
|
|
+ return -1;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /* Set wasi arguments */
|
|
|
|
|
+ if (!set_wasi_args(wasm_module, dir_list, dir_list_size,
|
|
|
|
|
+ env_list, env_list_size, argv, argc)) {
|
|
|
|
|
+ printf("%s\n", "set wasi arguments failed.\n");
|
|
|
|
|
+ unload_module(wasm_module);
|
|
|
|
|
+ free(wasm_file_buf);
|
|
|
|
|
+ destroy_runtime();
|
|
|
|
|
+ return -1;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /* Instantiate module */
|
|
|
|
|
+ if (!(wasm_module_inst[i] = instantiate_module(wasm_module,
|
|
|
|
|
+ stack_size, heap_size,
|
|
|
|
|
+ error_buf,
|
|
|
|
|
+ sizeof(error_buf)))) {
|
|
|
|
|
+ printf("%s\n", error_buf);
|
|
|
|
|
+ unload_module(wasm_module);
|
|
|
|
|
+ free(wasm_file_buf);
|
|
|
|
|
+ destroy_runtime();
|
|
|
|
|
+ return -1;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ app_instance_main(wasm_module_inst[i], argc, argv);
|
|
|
|
|
+
|
|
|
|
|
+ /* Deinstantiate module */
|
|
|
|
|
+ deinstantiate_module(wasm_module_inst[i]);
|
|
|
|
|
+ unload_module(wasm_module);
|
|
|
|
|
+ free(wasm_file_buf);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ destroy_runtime();
|
|
|
|
|
+ return 0;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+int
|
|
|
|
|
+wamr_pal_destroy(void)
|
|
|
|
|
+{
|
|
|
|
|
+ //sgx_destroy_enclave(g_eid);
|
|
|
|
|
+ return 0;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+int
|
|
|
|
|
+wamr_pal_exec(struct wamr_pal_exec_args *args)
|
|
|
|
|
+{
|
|
|
|
|
+ //app_instance_main(wasm_module_inst[i], argc, argv);
|
|
|
|
|
+ return 0;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+int
|
|
|
|
|
+wamr_pal_kill(int pid, int sig)
|
|
|
|
|
+{
|
|
|
|
|
+ //deinstantiate_module(wasm_module_inst[i]);
|
|
|
|
|
+ //unload_module(wasm_module);
|
|
|
|
|
+ //free(wasm_file_buf);
|
|
|
|
|
+ return 0;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+int pal_get_version(void) __attribute__((weak, alias ("wamr_pal_get_version")));
|
|
|
|
|
+
|
|
|
|
|
+int pal_init(const struct wamr_pal_attr *attr)\
|
|
|
|
|
+__attribute__ ((weak, alias ("wamr_pal_init")));
|
|
|
|
|
+
|
|
|
|
|
+int pal_create_process(struct wamr_pal_create_process_args *args)\
|
|
|
|
|
+__attribute__ ((weak, alias ("wamr_pal_create_process")));
|
|
|
|
|
+
|
|
|
|
|
+int pal_exec(struct wamr_pal_exec_args *args)\
|
|
|
|
|
+__attribute__ ((weak, alias ("wamr_pal_exec")));
|
|
|
|
|
+
|
|
|
|
|
+int pal_kill(int pid, int sig) __attribute__ ((weak, alias ("wamr_pal_kill")));
|
|
|
|
|
+
|
|
|
|
|
+int pal_destroy(void) __attribute__ ((weak, alias ("wamr_pal_destroy")));
|