From c47baf221fa8139ee45cd31e7dbf1a8310669d8e Mon Sep 17 00:00:00 2001 From: wenyongh Date: Thu, 8 Aug 2019 16:53:56 +0800 Subject: [PATCH 01/20] Enhance wasm loader to fix some security issues (#91) * Implement memory profiler, optimize memory usage, modify code indent * Implement memory.grow and limit heap space base offset to 1G; modify iwasm build type to Release and 64 bit by default * Add a new extension library: connection * Fix bug of reading magic number and version in big endian platform * Re-org platform APIs: move most platform APIs from iwasm to shared-lib * Enhance wasm loader to fix some security issues --- core/iwasm/lib/native/libc/libc_wrapper.c | 23 +++ core/iwasm/products/linux/main.c | 19 ++- core/iwasm/runtime/vmcore-wasm/wasm_interp.c | 35 ++-- core/iwasm/runtime/vmcore-wasm/wasm_loader.c | 159 +++++++++++++----- core/iwasm/runtime/vmcore-wasm/wasm_runtime.c | 5 +- 5 files changed, 178 insertions(+), 63 deletions(-) diff --git a/core/iwasm/lib/native/libc/libc_wrapper.c b/core/iwasm/lib/native/libc/libc_wrapper.c index fabc8b892..74b2c0ccb 100644 --- a/core/iwasm/lib/native/libc/libc_wrapper.c +++ b/core/iwasm/lib/native/libc/libc_wrapper.c @@ -846,6 +846,22 @@ nullFunc_X_wrapper(int32 code) wasm_runtime_set_exception(module_inst, buf); } +/*#define ENABLE_SPEC_TEST 1*/ + +#ifdef ENABLE_SPEC_TEST +static void +print_i32_wrapper(int i32) +{ + printf("%d\n", i32); +} + +static void +print_wrapper(int i32) +{ + printf("%d\n", i32); +} +#endif + /* TODO: add function parameter/result types check */ #define REG_NATIVE_FUNC(module_name, func_name) \ { #module_name, #func_name, func_name##_wrapper } @@ -857,6 +873,10 @@ typedef struct WASMNativeFuncDef { } WASMNativeFuncDef; static WASMNativeFuncDef native_func_defs[] = { +#ifdef ENABLE_SPEC_TEST + REG_NATIVE_FUNC(spectest, print_i32), + REG_NATIVE_FUNC(spectest, print), +#endif REG_NATIVE_FUNC(env, _printf), REG_NATIVE_FUNC(env, _sprintf), REG_NATIVE_FUNC(env, _snprintf), @@ -927,6 +947,9 @@ typedef struct WASMNativeGlobalDef { } WASMNativeGlobalDef; static WASMNativeGlobalDef native_global_defs[] = { +#ifdef ENABLE_SPEC_TEST + { "spectest", "global_i32", .global_data.u32 = 0 }, +#endif { "env", "STACKTOP", .global_data.u32 = 0 }, { "env", "STACK_MAX", .global_data.u32 = 0 }, { "env", "ABORT", .global_data.u32 = 0 }, diff --git a/core/iwasm/products/linux/main.c b/core/iwasm/products/linux/main.c index 9b0dc08cc..e415de7d4 100644 --- a/core/iwasm/products/linux/main.c +++ b/core/iwasm/products/linux/main.c @@ -129,7 +129,11 @@ app_instance_repl(wasm_module_inst_t module_inst) return NULL; } -static char global_heap_buf[512 * 1024] = { 0 }; +#define USE_GLOBAL_HEAP_BUF 0 + +#if USE_GLOBAL_HEAP_BUF != 0 +static char global_heap_buf[10 * 1024 * 1024] = { 0 }; +#endif int main(int argc, char *argv[]) { @@ -175,11 +179,18 @@ int main(int argc, char *argv[]) app_argc = argc; app_argv = argv; +#if USE_GLOBAL_HEAP_BUF != 0 if (bh_memory_init_with_pool(global_heap_buf, sizeof(global_heap_buf)) != 0) { - wasm_printf("Init global heap failed.\n"); + wasm_printf("Init memory with global heap buffer failed.\n"); return -1; } +#else + if (bh_memory_init_with_allocator(malloc, free)) { + wasm_printf("Init memory with memory allocator failed.\n"); + return -1; + } +#endif /* initialize runtime environment */ if (!wasm_runtime_init()) @@ -201,8 +212,8 @@ int main(int argc, char *argv[]) /* instantiate the module */ if (!(wasm_module_inst = wasm_runtime_instantiate(wasm_module, - 16 * 1024, /* stack size */ - 8 * 1024, /* heap size */ + 64 * 1024, /* stack size */ + 64 * 1024, /* heap size */ error_buf, sizeof(error_buf)))) { wasm_printf("%s\n", error_buf); diff --git a/core/iwasm/runtime/vmcore-wasm/wasm_interp.c b/core/iwasm/runtime/vmcore-wasm/wasm_interp.c index 73163f32c..490306db9 100644 --- a/core/iwasm/runtime/vmcore-wasm/wasm_interp.c +++ b/core/iwasm/runtime/vmcore-wasm/wasm_interp.c @@ -588,7 +588,7 @@ ALLOC_FRAME(WASMThread *self, uint32 size, WASMInterpFrame *prev_frame) frame->prev_frame = prev_frame; else { wasm_runtime_set_exception(self->module_inst, - "WASM interp failed, alloc frame failed."); + "WASM interp failed: stack overflow."); } return frame; @@ -641,7 +641,7 @@ wasm_interp_call_func_native(WASMThread *self, else { if (!(argv = wasm_malloc(sizeof(uint32) * argc))) { wasm_runtime_set_exception(self->module_inst, - "WASM call native failed: alloc memory for argv failed."); + "WASM call native failed: allocate memory failed."); return; } } @@ -768,7 +768,7 @@ wasm_interp_call_func_bytecode(WASMThread *self, BLOCK_TYPE_BLOCK, &else_addr, &end_addr, NULL, 0)) { - wasm_runtime_set_exception(module, "find block addr failed"); + wasm_runtime_set_exception(module, "find block address failed"); goto got_exception; } @@ -783,7 +783,7 @@ wasm_interp_call_func_bytecode(WASMThread *self, BLOCK_TYPE_LOOP, &else_addr, &end_addr, NULL, 0)) { - wasm_runtime_set_exception(module, "find block addr failed"); + wasm_runtime_set_exception(module, "find block address failed"); goto got_exception; } @@ -798,7 +798,7 @@ wasm_interp_call_func_bytecode(WASMThread *self, BLOCK_TYPE_IF, &else_addr, &end_addr, NULL, 0)) { - wasm_runtime_set_exception(module, "find block addr failed"); + wasm_runtime_set_exception(module, "find block address failed"); goto got_exception; } @@ -855,8 +855,9 @@ wasm_interp_call_func_bytecode(WASMThread *self, depths = depth_buf; else { if (!(depths = wasm_malloc(sizeof(uint32) * count))) { - wasm_runtime_set_exception(module, "WASM interp failed, " - "alloc block memory for br_table failed."); + wasm_runtime_set_exception(module, + "WASM interp failed: " + "allocate memory failed."); goto got_exception; } } @@ -931,7 +932,7 @@ wasm_interp_call_func_bytecode(WASMThread *self, HANDLE_OP (WASM_OP_DROP): { wasm_runtime_set_exception(module, - "wasm interp failed: unsupported opcode"); + "WASM interp failed: unsupported opcode."); goto got_exception; } @@ -950,7 +951,7 @@ wasm_interp_call_func_bytecode(WASMThread *self, HANDLE_OP (WASM_OP_SELECT): { wasm_runtime_set_exception(module, - "wasm interp failed: unsupported opcode"); + "WASM interp failed: unsupported opcode."); goto got_exception; } @@ -997,7 +998,7 @@ wasm_interp_call_func_bytecode(WASMThread *self, break; default: wasm_runtime_set_exception(module, - "get local type is invalid"); + "invalid local type"); goto got_exception; } (void)local_count; @@ -1026,7 +1027,7 @@ wasm_interp_call_func_bytecode(WASMThread *self, break; default: wasm_runtime_set_exception(module, - "set local type is invalid"); + "invalid local type"); goto got_exception; } (void)local_count; @@ -1054,7 +1055,7 @@ wasm_interp_call_func_bytecode(WASMThread *self, SET_LOCAL_F64(local_idx, GET_F64_FROM_ADDR(frame_sp - 2)); break; default: - wasm_runtime_set_exception(module, "tee local type is invalid"); + wasm_runtime_set_exception(module, "invalid local type"); goto got_exception; } (void)local_count; @@ -1085,7 +1086,7 @@ wasm_interp_call_func_bytecode(WASMThread *self, PUSH_F64(*(float64*)get_global_addr(memory, global)); break; default: - wasm_runtime_set_exception(module, "get global type is invalid"); + wasm_runtime_set_exception(module, "invalid global type"); goto got_exception; } HANDLE_OP_END (); @@ -1117,7 +1118,7 @@ wasm_interp_call_func_bytecode(WASMThread *self, PUT_F64_TO_ADDR((uint32*)global_addr, POP_F64()); break; default: - wasm_runtime_set_exception(module, "set global index is overflow"); + wasm_runtime_set_exception(module, "invalid global type"); goto got_exception; } HANDLE_OP_END (); @@ -1977,7 +1978,8 @@ wasm_interp_call_func_bytecode(WASMThread *self, #if WASM_ENABLE_LABELS_AS_VALUES == 0 default: - wasm_runtime_set_exception(module, "wasm interp failed: unsupported opcode"); + wasm_runtime_set_exception(module, + "WASM interp failed: unsupported opcode."); goto got_exception; } #endif @@ -2005,7 +2007,8 @@ wasm_interp_call_func_bytecode(WASMThread *self, HANDLE_OP (WASM_OP_UNUSED_0x26): HANDLE_OP (WASM_OP_UNUSED_0x27): { - wasm_runtime_set_exception(module, "wasm interp failed: unsupported opcode"); + wasm_runtime_set_exception(module, + "WASM interp failed: unsupported opcode."); goto got_exception; } #endif diff --git a/core/iwasm/runtime/vmcore-wasm/wasm_loader.c b/core/iwasm/runtime/vmcore-wasm/wasm_loader.c index 7b4733eff..dbf8a4dcd 100644 --- a/core/iwasm/runtime/vmcore-wasm/wasm_loader.c +++ b/core/iwasm/runtime/vmcore-wasm/wasm_loader.c @@ -141,7 +141,8 @@ const_str_set_insert(const uint8 *str, int32 len, WASMModule *module, if (!c_str) { set_error_buf(error_buf, error_buf_size, - "WASM module load failed: alloc memory failed."); + "WASM module load failed: " + "allocate memory failed."); return NULL; } @@ -234,7 +235,7 @@ load_type_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module, module->type_count = type_count; if (!(module->types = wasm_malloc(sizeof(WASMType*) * type_count))) { set_error_buf(error_buf, error_buf_size, - "Load type section failed: alloc memory failed."); + "Load type section failed: allocate memory failed."); return false; } @@ -256,13 +257,20 @@ load_type_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module, CHECK_BUF(p, p_end, param_count); p += param_count; read_leb_uint32(p, p_end, result_count); - wasm_assert(result_count <= 1); + if (result_count > 1) { + set_error_buf(error_buf, error_buf_size, + "Load type section failed: invalid result count."); + return false; + } CHECK_BUF(p, p_end, result_count); p = p_org; if (!(type = module->types[i] = wasm_malloc(offsetof(WASMType, types) + - sizeof(uint8) * (param_count + result_count)))) + sizeof(uint8) * (param_count + result_count)))) { + set_error_buf(error_buf, error_buf_size, + "Load type section failed: allocate memory failed."); return false; + } /* Resolve param types and result types */ type->param_count = param_count; @@ -413,7 +421,7 @@ load_import_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module, module->import_count = import_count; if (!(module->imports = wasm_malloc(sizeof(WASMImport) * import_count))) { set_error_buf(error_buf, error_buf_size, - "Load import section failed: alloc memory failed."); + "Load import section failed: allocate memory failed."); return false; } @@ -635,7 +643,7 @@ load_function_section(const uint8 *buf, const uint8 *buf_end, module->function_count = func_count; if (!(module->functions = wasm_malloc(sizeof(WASMFunction*) * func_count))) { set_error_buf(error_buf, error_buf_size, - "Load function section failed: alloc memory failed."); + "Load function section failed: allocate memory failed."); return false; } @@ -652,7 +660,8 @@ load_function_section(const uint8 *buf, const uint8 *buf_end, } read_leb_uint32(p_code, buf_code_end, code_size); - if (code_size == 0) { + if (code_size == 0 + || p_code + code_size > buf_code_end) { set_error_buf(error_buf, error_buf_size, "Load function section failed: " "invalid function code size."); @@ -678,7 +687,8 @@ load_function_section(const uint8 *buf, const uint8 *buf_end, if (!(func = module->functions[i] = wasm_malloc(total_size))) { set_error_buf(error_buf, error_buf_size, - "Load function section failed: alloc memory failed."); + "Load function section failed: " + "allocate memory failed."); return false; } @@ -696,7 +706,20 @@ load_function_section(const uint8 *buf, const uint8 *buf_end, local_type_index = 0; for (j = 0; j < local_set_count; j++) { read_leb_uint32(p_code, buf_code_end, sub_local_count); + if (local_type_index + sub_local_count <= local_type_index + || local_type_index + sub_local_count > local_count) { + set_error_buf(error_buf, error_buf_size, + "Load function section failed: " + "invalid local count."); + return false; + } read_leb_uint8(p_code, buf_code_end, type); + if (type < VALUE_TYPE_F64 || type > VALUE_TYPE_I32) { + set_error_buf(error_buf, error_buf_size, + "Load function section failed: " + "invalid local type."); + return false; + } for (k = 0; k < sub_local_count; k++) { func->local_types[local_type_index++] = type; } @@ -707,8 +730,8 @@ load_function_section(const uint8 *buf, const uint8 *buf_end, if (p != p_end) { set_error_buf(error_buf, error_buf_size, - "Load function section failed: " - "invalid section size."); + "Load function section failed: " + "invalid section size."); return false; } @@ -735,7 +758,8 @@ load_table_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module, module->table_count = table_count; if (!(module->tables = wasm_malloc(sizeof(WASMTable) * table_count))) { set_error_buf(error_buf, error_buf_size, - "Load table section failed: alloc memory failed."); + "Load table section failed: " + "allocate memory failed."); return false; } @@ -777,7 +801,8 @@ load_memory_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module, module->memory_count = memory_count; if (!(module->memories = wasm_malloc(sizeof(WASMMemory) * memory_count))) { set_error_buf(error_buf, error_buf_size, - "Load memory section failed: alloc memory failed."); + "Load memory section failed: " + "allocate memory failed."); return false; } @@ -814,7 +839,8 @@ load_global_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module, module->global_count = global_count; if (!(module->globals = wasm_malloc(sizeof(WASMGlobal) * global_count))) { set_error_buf(error_buf, error_buf_size, - "Load global section failed: alloc memory failed."); + "Load global section failed: " + "allocate memory failed."); return false; } @@ -859,7 +885,8 @@ load_export_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module, module->export_count = export_count; if (!(module->exports = wasm_malloc(sizeof(WASMExport) * export_count))) { set_error_buf(error_buf, error_buf_size, - "Load export section failed: alloc memory failed."); + "Load export section failed: " + "allocate memory failed."); return false; } @@ -952,7 +979,7 @@ load_table_segment_section(const uint8 *buf, const uint8 *buf_end, WASMModule *m (sizeof(WASMTableSeg) * table_segment_count))) { set_error_buf(error_buf, error_buf_size, "Load table segment section failed: " - "alloc memory failed."); + "allocate memory failed."); return false; } @@ -974,7 +1001,7 @@ load_table_segment_section(const uint8 *buf, const uint8 *buf_end, WASMModule *m wasm_malloc(sizeof(uint32) * function_count))) { set_error_buf(error_buf, error_buf_size, "Load table segment section failed: " - "alloc memory failed."); + "allocate memory failed."); return false; } for (j = 0; j < function_count; j++) { @@ -1012,8 +1039,8 @@ load_data_segment_section(const uint8 *buf, const uint8 *buf_end, if (!(module->data_segments = wasm_malloc(sizeof(WASMDataSeg*) * data_seg_count))) { set_error_buf(error_buf, error_buf_size, - "Load data segment section failed, " - "alloc memory failed."); + "Load data segment section failed: " + "allocate memory failed."); return false; } @@ -1031,7 +1058,7 @@ load_data_segment_section(const uint8 *buf, const uint8 *buf_end, wasm_malloc(sizeof(WASMDataSeg)))) { set_error_buf(error_buf, error_buf_size, "Load data segment section failed: " - "alloc memory failed."); + "allocate memory failed."); return false; } @@ -1117,12 +1144,6 @@ load_from_sections(WASMModule *module, WASMSection *sections, section = section->next; } - if (!buf_code) { - set_error_buf(error_buf, error_buf_size, - "WASM module load failed: find code section failed."); - return false; - } - section = sections; while (section) { buf = section->section_body; @@ -1140,8 +1161,13 @@ load_from_sections(WASMModule *module, WASMSection *sections, return false; break; case SECTION_TYPE_FUNC: + if (!buf_code) { + set_error_buf(error_buf, error_buf_size, + "WASM module load failed: find code section failed."); + return false; + } if (!load_function_section(buf, buf_end, buf_code, buf_code_end, - module, error_buf, error_buf_size)) + module, error_buf, error_buf_size)) return false; break; case SECTION_TYPE_TABLE: @@ -1229,7 +1255,8 @@ create_module(char *error_buf, uint32 error_buf_size) if (!module) { set_error_buf(error_buf, error_buf_size, - "WASM module load failed: alloc memory failed."); + "WASM module load failed: " + "allocate memory failed."); return NULL; } @@ -1309,7 +1336,8 @@ create_sections(const uint8 *buf, uint32 size, if (!(section = wasm_malloc(sizeof(WASMSection)))) { set_error_buf(error_buf, error_buf_size, - "WASM module load failed: alloc memory failed."); + "WASM module load failed: " + "allocate memory failed."); return false; } @@ -1401,7 +1429,7 @@ wasm_loader_load(const uint8 *buf, uint32 size, char *error_buf, uint32 error_bu if (!module) { set_error_buf(error_buf, error_buf_size, - "WASM module load failed: alloc memory failed."); + "WASM module load failed: allocate memory failed."); return NULL; } @@ -1855,9 +1883,11 @@ wasm_loader_find_block_addr(WASMModule *module, break; default: - LOG_ERROR("WASM loader find block addr failed: invalid opcode %02x.\n", - opcode); - break; + if (error_buf) + snprintf(error_buf, error_buf_size, + "WASM loader find block addr failed: " + "invalid opcode %02x.", opcode); + return false; } } @@ -1902,7 +1932,7 @@ memory_realloc(void *mem_old, uint32 size_old, uint32 size_new) if (!mem_new) { \ set_error_buf(error_buf, error_buf_size, \ "WASM loader prepare bytecode failed: " \ - "alloc memory failed"); \ + "allocate memory failed."); \ goto fail; \ } \ mem = mem_new; \ @@ -2201,6 +2231,24 @@ pop_type(uint8 type, uint8 **p_frame_ref, uint32 *p_stack_cell_num, } \ } while (0) +static bool +check_memory(WASMModule *module, + char *error_buf, uint32 error_buf_size) +{ + if (module->memory_count == 0 + && module->import_memory_count == 0) { + set_error_buf(error_buf, error_buf_size, + "load or store in module without default memory"); + return false; + } + return true; +} + +#define CHECK_MEMORY() do { \ + if (!check_memory(module, error_buf, error_buf_size)) \ + goto fail; \ + } while (0) + static bool wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, char *error_buf, uint32 error_buf_size) @@ -2235,7 +2283,8 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, frame_ref_size = 32; if (!(frame_ref_bottom = frame_ref = wasm_malloc(frame_ref_size))) { set_error_buf(error_buf, error_buf_size, - "WASM loader prepare bytecode failed: alloc memory failed"); + "WASM loader prepare bytecode failed: " + "allocate memory failed"); goto fail; } memset(frame_ref_bottom, 0, frame_ref_size); @@ -2244,7 +2293,8 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, frame_csp_size = sizeof(BranchBlock) * 8; if (!(frame_csp_bottom = frame_csp = wasm_malloc(frame_csp_size))) { set_error_buf(error_buf, error_buf_size, - "WASM loader prepare bytecode failed: alloc memory failed"); + "WASM loader prepare bytecode failed: " + "allocate memory failed"); goto fail; } @@ -2337,7 +2387,7 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, if (!block) { set_error_buf(error_buf, error_buf_size, "WASM loader prepare bytecode failed: " - "alloc memory failed"); + "allocate memory failed."); goto fail; } @@ -2350,7 +2400,7 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, block)) { set_error_buf(error_buf, error_buf_size, "WASM loader prepare bytecode failed: " - "alloc memory failed"); + "allocate memory failed."); wasm_free(block); goto fail; } @@ -2482,12 +2532,20 @@ handle_op_br: WASMType *func_type; uint32 type_idx; + if (module->table_count == 0 + && module->import_table_count == 0) { + set_error_buf(error_buf, error_buf_size, + "call indirect without default table"); + goto fail; + } + read_leb_uint32(p, p_end, type_idx); read_leb_uint8(p, p_end, u8); /* 0x00 */ POP_I32(); if (type_idx >= module->type_count) { - set_error_buf(error_buf, error_buf_size, "function index is overflow"); + set_error_buf(error_buf, error_buf_size, + "function index is overflow"); goto fail; } @@ -2618,6 +2676,7 @@ handle_op_br: case WASM_OP_I32_LOAD8_U: case WASM_OP_I32_LOAD16_S: case WASM_OP_I32_LOAD16_U: + CHECK_MEMORY(); read_leb_uint32(p, p_end, u32); /* align */ read_leb_uint32(p, p_end, u32); /* offset */ POP_I32(); @@ -2631,6 +2690,7 @@ handle_op_br: case WASM_OP_I64_LOAD16_U: case WASM_OP_I64_LOAD32_S: case WASM_OP_I64_LOAD32_U: + CHECK_MEMORY(); read_leb_uint32(p, p_end, u32); /* align */ read_leb_uint32(p, p_end, u32); /* offset */ POP_I32(); @@ -2638,6 +2698,7 @@ handle_op_br: break; case WASM_OP_F32_LOAD: + CHECK_MEMORY(); read_leb_uint32(p, p_end, u32); /* align */ read_leb_uint32(p, p_end, u32); /* offset */ POP_I32(); @@ -2645,6 +2706,7 @@ handle_op_br: break; case WASM_OP_F64_LOAD: + CHECK_MEMORY(); read_leb_uint32(p, p_end, u32); /* align */ read_leb_uint32(p, p_end, u32); /* offset */ POP_I32(); @@ -2654,6 +2716,7 @@ handle_op_br: case WASM_OP_I32_STORE: case WASM_OP_I32_STORE8: case WASM_OP_I32_STORE16: + CHECK_MEMORY(); read_leb_uint32(p, p_end, u32); /* align */ read_leb_uint32(p, p_end, u32); /* offset */ POP_I32(); @@ -2664,6 +2727,7 @@ handle_op_br: case WASM_OP_I64_STORE8: case WASM_OP_I64_STORE16: case WASM_OP_I64_STORE32: + CHECK_MEMORY(); read_leb_uint32(p, p_end, u32); /* align */ read_leb_uint32(p, p_end, u32); /* offset */ POP_I64(); @@ -2671,6 +2735,7 @@ handle_op_br: break; case WASM_OP_F32_STORE: + CHECK_MEMORY(); read_leb_uint32(p, p_end, u32); /* align */ read_leb_uint32(p, p_end, u32); /* offset */ POP_F32(); @@ -2678,6 +2743,7 @@ handle_op_br: break; case WASM_OP_F64_STORE: + CHECK_MEMORY(); read_leb_uint32(p, p_end, u32); /* align */ read_leb_uint32(p, p_end, u32); /* offset */ POP_F64(); @@ -2685,11 +2751,13 @@ handle_op_br: break; case WASM_OP_MEMORY_SIZE: + CHECK_MEMORY(); read_leb_uint32(p, p_end, u32); /* 0x00 */ PUSH_I32(); break; case WASM_OP_MEMORY_GROW: + CHECK_MEMORY(); read_leb_uint32(p, p_end, u32); /* 0x00 */ POP_I32(); PUSH_I32(); @@ -2971,15 +3039,24 @@ handle_op_br: break; default: - LOG_ERROR("WASM loader find block addr failed: invalid opcode %02x.\n", - opcode); - break; + if (error_buf != NULL) + snprintf(error_buf, error_buf_size, + "WASM module load failed: " + "invalid opcode %02x.", opcode); + goto fail; } if (opcode != WASM_OP_I32_CONST) is_i32_const = false; } + if (csp_num > 0) { + set_error_buf(error_buf, error_buf_size, + "WASM module load failed: " + "function body must end with END opcode."); + goto fail; + } + func->max_stack_cell_num = max_stack_cell_num; func->max_block_num = max_csp_num; return_value = true; diff --git a/core/iwasm/runtime/vmcore-wasm/wasm_runtime.c b/core/iwasm/runtime/vmcore-wasm/wasm_runtime.c index 7b1c65617..a7a9a8745 100644 --- a/core/iwasm/runtime/vmcore-wasm/wasm_runtime.c +++ b/core/iwasm/runtime/vmcore-wasm/wasm_runtime.c @@ -877,8 +877,9 @@ wasm_runtime_instantiate(WASMModule *module, length = data_seg->data_length; memory_size = NumBytesPerPage * module_inst->default_memory->cur_page_count; - if (base_offset >= memory_size - || base_offset + length > memory_size) { + if (length > 0 + && (base_offset >= memory_size + || base_offset + length > memory_size)) { set_error_buf(error_buf, error_buf_size, "Instantiate module failed: data segment out of range."); wasm_runtime_deinstantiate(module_inst); From c842191e6a2febc7e91d662d7ea082211317b1e1 Mon Sep 17 00:00:00 2001 From: Jonathan Beri Date: Wed, 14 Aug 2019 05:34:36 +0300 Subject: [PATCH 02/20] Initial Dockerfile (#97) * Initial Dockerfile Dockerfile supports clang-8 and adds `iwasm` to `bin`. * Updated README with Docker instructions Added to Platform and app building section how to use the docker file to build the core and compile an app with clang. --- Dockerfile | 21 +++++++++++++++++++++ README.md | 32 +++++++++++++++++++++++++++++++- 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..565b740e6 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,21 @@ +# Currently supports clang-8 compiler +# Using the "test.c" app from the README.md: +# clang-8 --target=wasm32 -O3 -Wl,--initial-memory=131072,--allow-undefined,--export=main,--no-threads,--strip-all,--no-entry -nostdlib -o test.wasm test.c +# Pay attention to spacing above! ^ +# iwasm test.wasm + +FROM ubuntu:latest + +RUN apt-get update && \ + apt-get -y upgrade && \ + apt-get install -y build-essential clang-8 cmake g++-multilib git lib32gcc-5-dev llvm-8 lld-8 nano + +WORKDIR /root + +RUN git clone https://github.com/intel/wasm-micro-runtime + +RUN cd wasm-micro-runtime/core/iwasm/products/linux/ && mkdir build && \ + cd build && cmake .. && make + +RUN cd /usr/bin && ln -s wasm-ld-8 wasm-ld +RUN cd /usr/bin && ln -s ~/wasm-micro-runtime/core/iwasm/products/linux/build/iwasm iwasm diff --git a/README.md b/README.md index 8a17d7d29..d184e0890 100644 --- a/README.md +++ b/README.md @@ -151,6 +151,23 @@ AliOS-Things ``` 9. download the binary to developerkit board, check the output from serial port +Docker +------------------------- +[Docker](https://www.docker.com/) will download all the dependencies and build WAMR Core on your behalf. + +Make sure you have Docker installed on your machine: [macOS](https://docs.docker.com/docker-for-mac/install/), [Windows](https://docs.docker.com/docker-for-windows/install/) or [Linux](https://docs.docker.com/install/linux/docker-ce/ubuntu/). + +Build the Docker image: + +``` Bash +docker build --rm -f "Dockerfile" -t wamr:latest . +``` +Run the image in interactive mode: +``` Bash +docker run --rm -it wamr:latest +``` +You'll now enter the container at `/root`. + Build WASM app ========================= You can write a simple ```test.c``` as the first sample. @@ -181,7 +198,7 @@ int main(int argc, char **argv) } ``` -There are two methods to build a WASM binary. One is using Emscripten tool, another is using clang compiler. +There are three methods to build a WASM binary. They are Emscripten, the clang compiler and Docker. ## Use Emscripten tool @@ -242,6 +259,19 @@ clang-8 --target=wasm32 -O3 -Wl,--initial-memory=131072,--allow-undefined,--expo You will get ```test.wasm``` which is the WASM app binary. +## Using Docker + +The last method availble is using [Docker](https://www.docker.com/). We assume you've already configured Docker (see Platform section above) and have a running interactive shell. Currently the Dockerfile only supports compiling apps with clang, with Emscripten planned for the future. + +Use the clang-8 command below to build the WASM C source code into the WASM binary. + +```Bash +clang-8 --target=wasm32 -O3 -Wl,--initial-memory=131072,--allow-undefined,--export=main, +--no-threads,--strip-all,--no-entry -nostdlib -o test.wasm test.c +``` + +You will get ```test.wasm``` which is the WASM app binary. + Run WASM app ======================== From e581f6f4c979a945f496919097257777a4926f3a Mon Sep 17 00:00:00 2001 From: luhanzhl Date: Wed, 14 Aug 2019 10:37:39 +0800 Subject: [PATCH 03/20] add iot app store demo (#96) --- test-tools/IoT-APP-Store-Demo/README.md | 34 + .../IoT-APP-Store-Demo/wasm_django/db.sqlite3 | Bin 0 -> 45056 bytes .../wasm_django/devices/__init__.py | 0 .../wasm_django/devices/admin.py | 3 + .../wasm_django/devices/apps.py | 5 + .../devices/migrations/__init__.py | 0 .../wasm_django/devices/models.py | 3 + .../devices/templates/application.html | 152 +++++ .../devices/templates/appstore.html | 106 +++ .../wasm_django/devices/templates/empty.html | 119 ++++ .../wasm_django/devices/templates/help.html | 110 ++++ .../wasm_django/devices/templates/mysite.html | 99 +++ .../wasm_django/devices/tests.py | 3 + .../wasm_django/devices/views.py | 284 ++++++++ .../IoT-APP-Store-Demo/wasm_django/manage.py | 21 + .../wasm_django/mysite/__init__.py | 0 .../wasm_django/mysite/settings.py | 136 ++++ .../wasm_django/mysite/urls.py | 41 ++ .../wasm_django/mysite/wsgi.py | 16 + .../wasm_django/server/wasm_server.py | 616 ++++++++++++++++++ .../wasm_django/static/css/application.css | 411 ++++++++++++ .../wasm_django/static/css/appstore.css | 227 +++++++ .../wasm_django/static/css/index.css | 208 ++++++ .../wasm_django/static/js/application.js | 228 +++++++ .../wasm_django/static/js/appstore.js | 136 ++++ .../wasm_django/static/js/index.js | 62 ++ .../wasm_django/static/photo/app(1).png | Bin 0 -> 5421 bytes .../wasm_django/static/photo/application.png | Bin 0 -> 7875 bytes .../wasm_django/static/photo/delete.png | Bin 0 -> 4107 bytes .../wasm_django/static/photo/download(1).png | Bin 0 -> 1502 bytes .../wasm_django/static/photo/menu.png | Bin 0 -> 1839 bytes .../static/photo/milky-way-2695569_1280.jpg | Bin 0 -> 535384 bytes .../wasm_django/static/photo/net_device.png | Bin 0 -> 6867 bytes .../static/photo/software-icon-32081.png | Bin 0 -> 39956 bytes .../wasm_django/static/photo/totalblack.png | Bin 0 -> 2301 bytes .../wasm_django/static/upload/connection.wasm | Bin 0 -> 7894 bytes .../static/upload/event_publisher.wasm | Bin 0 -> 6817 bytes .../static/upload/event_subscriber.wasm | Bin 0 -> 5273 bytes .../static/upload/request_handler.wasm | Bin 0 -> 7995 bytes .../static/upload/request_sender.wasm | Bin 0 -> 6019 bytes .../wasm_django/static/upload/sensor.wasm | Bin 0 -> 5356 bytes .../wasm_django/static/upload/simple | Bin 0 -> 1066464 bytes .../static/upload/sys/connection.wasm | Bin 0 -> 7894 bytes .../static/upload/sys/event_publisher.wasm | Bin 0 -> 6817 bytes .../static/upload/sys/event_subscriber.wasm | Bin 0 -> 5273 bytes .../static/upload/sys/request_handler.wasm | Bin 0 -> 7995 bytes .../static/upload/sys/request_sender.wasm | Bin 0 -> 6019 bytes .../wasm_django/static/upload/sys/timer.wasm | Bin 0 -> 4150 bytes .../wasm_django/static/upload/timer.wasm | Bin 0 -> 4150 bytes .../wasm_django/static/upload/ui_app.wasm | Bin 0 -> 1953 bytes .../static/upload/vgl_wasm_runtime | Bin 0 -> 512936 bytes .../static/upload/wasm_runtime_wgl | Bin 0 -> 1066908 bytes 52 files changed, 3020 insertions(+) create mode 100644 test-tools/IoT-APP-Store-Demo/README.md create mode 100755 test-tools/IoT-APP-Store-Demo/wasm_django/db.sqlite3 create mode 100755 test-tools/IoT-APP-Store-Demo/wasm_django/devices/__init__.py create mode 100755 test-tools/IoT-APP-Store-Demo/wasm_django/devices/admin.py create mode 100755 test-tools/IoT-APP-Store-Demo/wasm_django/devices/apps.py create mode 100755 test-tools/IoT-APP-Store-Demo/wasm_django/devices/migrations/__init__.py create mode 100755 test-tools/IoT-APP-Store-Demo/wasm_django/devices/models.py create mode 100644 test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/application.html create mode 100644 test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/appstore.html create mode 100644 test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/empty.html create mode 100755 test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/help.html create mode 100644 test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/mysite.html create mode 100755 test-tools/IoT-APP-Store-Demo/wasm_django/devices/tests.py create mode 100755 test-tools/IoT-APP-Store-Demo/wasm_django/devices/views.py create mode 100755 test-tools/IoT-APP-Store-Demo/wasm_django/manage.py create mode 100755 test-tools/IoT-APP-Store-Demo/wasm_django/mysite/__init__.py create mode 100755 test-tools/IoT-APP-Store-Demo/wasm_django/mysite/settings.py create mode 100755 test-tools/IoT-APP-Store-Demo/wasm_django/mysite/urls.py create mode 100755 test-tools/IoT-APP-Store-Demo/wasm_django/mysite/wsgi.py create mode 100755 test-tools/IoT-APP-Store-Demo/wasm_django/server/wasm_server.py create mode 100644 test-tools/IoT-APP-Store-Demo/wasm_django/static/css/application.css create mode 100644 test-tools/IoT-APP-Store-Demo/wasm_django/static/css/appstore.css create mode 100755 test-tools/IoT-APP-Store-Demo/wasm_django/static/css/index.css create mode 100644 test-tools/IoT-APP-Store-Demo/wasm_django/static/js/application.js create mode 100644 test-tools/IoT-APP-Store-Demo/wasm_django/static/js/appstore.js create mode 100644 test-tools/IoT-APP-Store-Demo/wasm_django/static/js/index.js create mode 100644 test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/app(1).png create mode 100755 test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/application.png create mode 100755 test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/delete.png create mode 100644 test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/download(1).png create mode 100755 test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/menu.png create mode 100755 test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/milky-way-2695569_1280.jpg create mode 100755 test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/net_device.png create mode 100644 test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/software-icon-32081.png create mode 100644 test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/totalblack.png create mode 100644 test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/connection.wasm create mode 100644 test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/event_publisher.wasm create mode 100644 test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/event_subscriber.wasm create mode 100644 test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/request_handler.wasm create mode 100644 test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/request_sender.wasm create mode 100644 test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sensor.wasm create mode 100755 test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/simple create mode 100644 test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/connection.wasm create mode 100644 test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/event_publisher.wasm create mode 100644 test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/event_subscriber.wasm create mode 100644 test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/request_handler.wasm create mode 100644 test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/request_sender.wasm create mode 100644 test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/timer.wasm create mode 100644 test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/timer.wasm create mode 100644 test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/ui_app.wasm create mode 100755 test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/vgl_wasm_runtime create mode 100755 test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/wasm_runtime_wgl diff --git a/test-tools/IoT-APP-Store-Demo/README.md b/test-tools/IoT-APP-Store-Demo/README.md new file mode 100644 index 000000000..fe69e1442 --- /dev/null +++ b/test-tools/IoT-APP-Store-Demo/README.md @@ -0,0 +1,34 @@ +# IoT Application Store +Wasm application management portal for WAMR + +# Requirement +Install django with pip3 +``` +pip3 install django +``` + +# Run +1. Start wasm server + ``` + cd wasm_django/server + python3 wasm_server.py + ``` + +2. Start IoT application management web portal + ``` + cd wasm_django + python3 manage.py runserver 0.0.0.0:80 + ``` + +3. Download WAMR runtime from [help](http://localhost/help/) page + > NOTE: You need to start web server according to *step 2* before accessing this link! + +4. Start a WAMR runtime from localhost + ``` + ./simple + ``` + or from other computers + ``` + ./simple -a [your.server.ip.address] + ``` + diff --git a/test-tools/IoT-APP-Store-Demo/wasm_django/db.sqlite3 b/test-tools/IoT-APP-Store-Demo/wasm_django/db.sqlite3 new file mode 100755 index 0000000000000000000000000000000000000000..211576ca3e5992d4ec1abe50c687985dcaa1f3f0 GIT binary patch literal 45056 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 +{% load static %} + + + + + + + Wasm-Micro-Runtime + + + + + + + + + + +
+
+ +
+
+

WebAssembly Micro Runtime - APP Store Demo

+
+
+ + + +
+
+
+
+

+ +

+
+
IP :
+
Port :
+
Installed apps :
+
+
+
+ + + + + +
+

app is downloading now

+
+
+
+
+ + +
+
+
×
+
HOT Applications
+ +
+
+ +

Product Name:

+

Current Version:

+ +
+
+
+
+ + +
+

List of Installed Apps:

+ +
+ + +
+
+ +
Product Name:
+
Staus:
+
Current Version:
+
+
+
+ +
Copyright© intel.com
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/appstore.html b/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/appstore.html new file mode 100644 index 000000000..36f1fb8da --- /dev/null +++ b/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/appstore.html @@ -0,0 +1,106 @@ + +{% load static %} + + + + + + + + Wasm-Micro-Runtime + + + + + + + + + + +
+
+ +
+
+

WebAssembly Micro Runtime - APP Store Demo

+
+
+ + + + + +
+
+
+
The products
+
Application List
+
+
+ {%csrf_token%} +
+ + Choose File +
+
+ +
+
+
+
+
+
+
+

Product Name:

+

Product Version:

+

Preloaded Apps

+ +
+
+
+
+
+ + +
+ Copyright© intel.com +
+ + + + + + + + + diff --git a/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/empty.html b/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/empty.html new file mode 100644 index 000000000..6aef0f2a7 --- /dev/null +++ b/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/empty.html @@ -0,0 +1,119 @@ + + + +wasm-micro-runtime + + + + + + + + + + +
+

404

+

Server Not Found

+

Github

+
+ + + + + + + + + + diff --git a/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/help.html b/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/help.html new file mode 100755 index 000000000..2e77cfadb --- /dev/null +++ b/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/help.html @@ -0,0 +1,110 @@ + +{% load static %} + + + + + + + Wasm-Micro-Runtime + + + + + + + + + + + + +
+
+
+
+

+ How to use? +

+

+ 1. Download a simple runtime (build for ubuntu 16.04 64 bits, other platforms please build + from the source code) +

+

+ 2. In the terminal: cd ~/Download && ./simple -a 39.106.110.7 +

+
+
+ +
+ Notes: +
We also have a UI-enabled runtime, please download here and enjoy. It may require + a few more setups. +

Before running the UI-enabled runtime, please install some required softwares:

+

sudo apt-get install libsdl2-2.0-0:i386

+

For more details please refer to this guide +

+

cd ~/Download && ./wasm_runtime_wgl -a 39.106.110.7

+
+
+

+ 3. Return to device page, find your device according to the IP address and click it, you + will enter application installation page +

+

+ 4. In the application installation page, click the Install Application button, and chose an + app to install. (The "ui_app" is only for UI_enabled_runtimes, simple runtime can't install + this app) +

+

+ 5. If you want to upload a new application, go to App Store page, choose a file and click + upload +

+

+ Go Back + Download + simple_runtime + Download + UI_enabled_runtime +

+
+
+
+
+

Like this project?

+

Join us and build a powerful and interesting world for embedded + devices!

+ + +

+ View + on GitHub +

+
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/mysite.html b/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/mysite.html new file mode 100644 index 000000000..88f0e9234 --- /dev/null +++ b/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/mysite.html @@ -0,0 +1,99 @@ + +{% load static %} + + + + + + + Wasm-Micro-Runtime + + + + + + + + + + +
+
+ +
+
+

WebAssembly Micro Runtime - APP Store Demo

+
+
+ +
+
+
+
+

+ +

+
+

The devices

+
+
+ +
+ + +
+
+
+
+

+ +

+
+
IP :
+
Port :
+
Installed apps :
+
+
+

+ +

+
+
+
+ + + + +
+ Copyright© intel.com +
+ + + + + + + + \ No newline at end of file diff --git a/test-tools/IoT-APP-Store-Demo/wasm_django/devices/tests.py b/test-tools/IoT-APP-Store-Demo/wasm_django/devices/tests.py new file mode 100755 index 000000000..7ce503c2d --- /dev/null +++ b/test-tools/IoT-APP-Store-Demo/wasm_django/devices/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/test-tools/IoT-APP-Store-Demo/wasm_django/devices/views.py b/test-tools/IoT-APP-Store-Demo/wasm_django/devices/views.py new file mode 100755 index 000000000..4fd4c09c2 --- /dev/null +++ b/test-tools/IoT-APP-Store-Demo/wasm_django/devices/views.py @@ -0,0 +1,284 @@ +''' + /* Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +''' + +# _*_ +from django.shortcuts import render, render_to_response +from django.http import HttpResponse, HttpResponseRedirect, HttpResponseNotFound +import json +import socket +import os + +# Create your views here. + + +avaliable_list = [ + {'ID': 'timer', 'Version': '1.0'}, + {'ID': 'connection', 'Version': '1.0'}, + {'ID': 'event_publisher', 'Version': '3.0'}, + {'ID': 'event_subscriber', 'Version': '1.0'}, + {'ID': 'request_handler', 'Version': '1.0'}, + {'ID': 'sensor', 'Version': '1.0'}, + {'ID': 'ui_app', 'Version': '1.0'} +] + +# Help +def help(req): +# return "Help" page + return render(req, "help.html") + +# View +def index(req): + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + + host = '127.0.0.1' + port = 8889 + msg = "" + err = "" + + try: + s.connect((host, port)) + s.send(bytes("query:all", encoding='utf8')) + s.settimeout(10) + msg = s.recv(1024) + except socket.timeout as e: + err = "empty" + print("no client connected") + except socket.error as e: + err = "refused" + print("server not started") + + s.close() + + device_list = [] + if msg != "": + devices = msg.decode('utf-8').split("*") + for dev in devices: + dev_info = eval(dev) + addr = dev_info['addr'] + port = dev_info['port'] + apps = dev_info['num'] + device_list.append({'IP': addr, 'Port': port, 'apps': apps}) + else: + if err == "refused": + return render(req, "empty.html") + + dlist = device_list + + return render(req, 'mysite.html', {'dlist': json.dumps(dlist)}) + + +def apps(req): + open_status = '' + search_node = [] + if req.method == "POST": + dev_search = req.POST['mykey'] + dev_addr = req.POST['voip'] + dev_port = req.POST['voport'] + open_status = 'open' + for i in avaliable_list: + if i['ID'] == dev_search: + search_node = [{'ID':dev_search, 'Version': '1.0'}] + print("search_node:",search_node) + break + else: + search_node = ["Nothing find"] + print( "final:",search_node) + else: + dev_addr = req.GET['ip'] + dev_port = req.GET['port'] + open_status = 'close' + + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + host = '127.0.0.1' + port = 8889 + msg = "" + err = "" + + try: + s.connect((host, port)) + s.send(bytes("query:"+dev_addr+":"+str(dev_port), encoding='utf8')) + msg = s.recv(1024) + except socket.error as e: + print("unable to connect to server") + msg = b"fail" + s.close() + + app_list = [] + + if msg != "": + if msg.decode() == "fail": + return render(req, "empty.html") + else: + dic = eval(msg.decode(encoding='utf8')) + app_num = dic["num"] + for i in range(app_num): + app_list.append( + {'pname': dic["applet"+str(i+1)], 'status': 'Installed', 'current_version': '1.0'}) + + alist = app_list + device_info = [] + device_info.append( + {'IP': dev_addr, 'Port': str(dev_port), 'apps': app_num}) + + print(device_info) + return render(req, 'application.html', {'alist': json.dumps(alist), 'dlist': json.dumps(device_info), 'llist': json.dumps(avaliable_list), + "open_status":json.dumps(open_status),"search_node": json.dumps(search_node),}) + + +def appDownload(req): + dev_addr = req.GET['ip'] + dev_port = req.GET['port'] + app_name = req.GET['name'] + + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + + host = '127.0.0.1' + port = 8889 + msg = "" + + app_path = os.path.abspath(os.path.join(os.getcwd(), "static", "upload")) + if app_path[-1] != '/': + app_path += '/' + + try: + s.connect((host, port)) + s.send(bytes("install:"+dev_addr+":"+str(dev_port)+":"+app_name + + ":"+app_path + app_name + ".wasm", encoding='utf8')) + msg = s.recv(1024) + except socket.error as e: + print("unable to connect to server") + s.close() + + success = "ok" + fail = "Fail!" + status = [success, fail] + print(msg) + if msg == b"fail": + return HttpResponse(json.dumps({ + "status": fail + })) + elif msg == b"success": + return HttpResponse(json.dumps({ + "status": success + })) + else: + return HttpResponse(json.dumps({ + "status": eval(msg.decode())["error message"].split(':')[1] + })) + + +def appDelete(req): + dev_addr = req.GET['ip'] + dev_port = req.GET['port'] + app_name = req.GET['name'] + + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + + host = '127.0.0.1' + port = 8889 + s.connect((host, port)) + s.send(bytes("uninstall:"+dev_addr+":" + + str(dev_port)+":"+app_name, encoding='utf8')) + msg = s.recv(1024) + s.close() + r = HttpResponse("ok") + return r + +static_list = [{'ID': 'timer', 'Version': '1.0'}, {'ID': 'connection', 'Version': '1.0'}, {'ID': 'event_publisher', 'Version': '3.0'}, { + 'ID': 'event_subscriber', 'Version': '1.0'}, {'ID': 'reuqest_handler', 'Version': '1.0'}, {'ID': 'sensor', 'Version': '1.0'}, {'ID': 'ui_app', 'Version': '1.0'}] + +def store(req): + + store_path = os.path.join('static', 'upload') + status = [] + + print(user_file_list) + return render(req, 'appstore.html', {'staticlist': json.dumps(static_list), 'flist': json.dumps(user_file_list),'ulist':json.dumps(status)}) + +user_file_list = [] +files_list = [] +def uploadapps(req): + status = [] + local_list = ['timer','connection','event_publisher','event_subscriber','reuqest_handler','sensor'] + req.encoding = 'utf-8' + if req.method == 'POST': + myfile = req.FILES.get("myfile", None) + obj = req.FILES.get('myfile') + store_path = os.path.join('static', 'upload') + file_path = os.path.join('static', 'upload', obj.name) + + if not os.path.exists(store_path): + os.makedirs(store_path) + + file_name = obj.name.split(".")[0] + file_prefix = obj.name.split(".")[-1] + + + if file_prefix != "wasm": + status = ["Not a wasm file"] + elif file_name in local_list: + status = ["This App is preloaded"] + elif file_name in files_list: + status = ["This App is already uploaded"] + else: + status = [] + avaliable_list.append({'ID': file_name, 'Version': '1.0'}) + user_file_list.append({'ID': file_name, 'Version': '1.0'}) + files_list.append(file_name) + + print(user_file_list) + f = open(file_path, 'wb') + for chunk in obj.chunks(): + f.write(chunk) + f.close() + return render(req, 'appstore.html', {'staticlist': json.dumps(static_list), 'flist': json.dumps(user_file_list),'ulist':json.dumps(status)}) + +appname_list = [] + +def addapps(request): + types = '' + print("enter addapps") + request.encoding = 'utf-8' + app_dic = {'ID': '', 'Version': ''} + + # if request.method == 'get': + if "NAME" in request.GET: + a_name = request.GET['NAME'] + if a_name != "" and a_name not in appname_list: + appname_list.append(a_name) + message = request.GET['NAME'] + request.GET['Version'] + app_dic['ID'] = request.GET['NAME'] + app_dic['Version'] = request.GET['Version'] + avaliable_list.append(app_dic) + else: + types = "Exist" + print(avaliable_list) + return render(request, 'appstore.html', {'alist': json.dumps(avaliable_list)}) + +def removeapps(req): + app_name = req.GET['name'] + app_version = req.GET['version'] + remove_app = {'ID': app_name, 'Version': app_version} + avaliable_list.remove(remove_app) + user_file_list.remove(remove_app) + files_list.remove(app_name) + return render(req, 'appstore.html', {'alist': json.dumps(avaliable_list),'flist': json.dumps(user_file_list)}) + +# Test +if __name__ == "__main__": + print(device_list[0]['IP']) + print(device['IP']) diff --git a/test-tools/IoT-APP-Store-Demo/wasm_django/manage.py b/test-tools/IoT-APP-Store-Demo/wasm_django/manage.py new file mode 100755 index 000000000..341863cf6 --- /dev/null +++ b/test-tools/IoT-APP-Store-Demo/wasm_django/manage.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main() diff --git a/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/__init__.py b/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/__init__.py new file mode 100755 index 000000000..e69de29bb diff --git a/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/settings.py b/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/settings.py new file mode 100755 index 000000000..7eb3685c4 --- /dev/null +++ b/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/settings.py @@ -0,0 +1,136 @@ +""" +Django settings for mysite project. + +Generated by 'django-admin startproject' using Django 2.2.2. + +For more information on this file, see +https://docs.djangoproject.com/en/2.2/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/2.2/ref/settings/ +""" + +import os +from django.conf.global_settings import STATIC_ROOT + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = '8m05#6yx5wcygj*a+v6+=-y(#o+(z58-3!epq$u@5)64!mmu8q' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = ['*'] + + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + + + 'devices', +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'mysite.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'mysite.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/2.2/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + } +} + + +# Password validation +# https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/2.2/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + +APPEND_SLASH = False + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/2.2/howto/static-files/ + +STATIC_URL = '/static/' +HERE = os.path.dirname(os.path.abspath(__file__)) +HERE = os.path.join(HERE,'../') +STATICFILES_DIRS = (os.path.join(HERE,'static/'),) +#STATICFILES_DIRS = (os.path.join(BASE_DIR,'static'),) +#STATIC_ROOT = (os.path.join(os.path.dirname(_file_),'static') +#templates +TEMPLATE_DIRS=[ + '/home/xujun/mysite/templates', +] + diff --git a/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/urls.py b/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/urls.py new file mode 100755 index 000000000..8a74b5509 --- /dev/null +++ b/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/urls.py @@ -0,0 +1,41 @@ +#config:utf-8 + +"""mysite URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/2.2/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from django.contrib import admin +#from django.conf.urls import include,url +from django.urls import path,include +from devices import views as devices_views +#from login import views as login_views + + +urlpatterns = [ + + path('admin/', admin.site.urls), + path('',devices_views.index), + path('apps/',devices_views.apps), + path('appDownload/', devices_views.appDownload), + path('appDelete/', devices_views.appDelete), + path('appstore/',devices_views.store), +## path('apps/appstore/',devices_views.storeofdevic), +## path('search/',devices_views.search), + path('upload',devices_views.uploadapps), + path('removeapps/',devices_views.removeapps), + path('help/',devices_views.help), + +] + + diff --git a/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/wsgi.py b/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/wsgi.py new file mode 100755 index 000000000..45e28c9a1 --- /dev/null +++ b/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for mysite project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/2.2/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings') + +application = get_wsgi_application() diff --git a/test-tools/IoT-APP-Store-Demo/wasm_django/server/wasm_server.py b/test-tools/IoT-APP-Store-Demo/wasm_django/server/wasm_server.py new file mode 100755 index 000000000..1754b368e --- /dev/null +++ b/test-tools/IoT-APP-Store-Demo/wasm_django/server/wasm_server.py @@ -0,0 +1,616 @@ +''' + /* Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +''' +import select +import socket +import queue +from time import sleep +import struct +import threading +import time +from ctypes import * +import json +import logging +import os + +attr_type_list = [ + "ATTR_NONE", + "ATTR_TYPE_SHORT", + "ATTR_TYPE_INT", + "ATTR_TYPE_INT64", + "ATTR_TYPE_BYTE", + "ATTR_TYPE_UINT16", + "ATTR_TYPE_FLOAT", + "ATTR_TYPE_DOUBLE", + "ATTR_TYPE_BOOLEAN", + "ATTR_TYPE_STRING", + "ATTR_TYPE_BYTEARRAY" +] + + +Phase_Non_Start = 0 +Phase_Leading = 1 +Phase_Type = 2 +Phase_Size = 3 +Phase_Payload = 4 + + + +class imrt_link_message(object): + def __init__(self): + self.leading = bytes([0x12, 0x34]) + self.phase = Phase_Non_Start + self.size_in_phase = 0 + self.message_type = bytes() + self.message_size = bytes() + self.payload = bytes() + self.msg = bytes() + + def set_recv_phase(self, phase): + self.phase = phase + + def on_imrt_link_byte_arrive(self, ch): + self.msg += ch + if self.phase == Phase_Non_Start: + if ch == b'\x12': + self.set_recv_phase(Phase_Leading) + else: + return -1 + elif self.phase == Phase_Leading: + if ch == b'\x34': + self.set_recv_phase(Phase_Type) + else: + self.set_recv_phase(Phase_Non_Start) + return -1 + elif self.phase == Phase_Type: + self.message_type += ch + self.size_in_phase += 1 + + if self.size_in_phase == 2: + (self.message_type, ) = struct.unpack('!H', self.message_type) + self.size_in_phase = 0 + self.set_recv_phase(Phase_Size) + elif self.phase == Phase_Size: + self.message_size += ch + self.size_in_phase += 1 + + if self.size_in_phase == 4: + (self.message_size, ) = struct.unpack('!I', self.message_size) + self.size_in_phase = 0 + self.set_recv_phase(Phase_Payload) + + if self.message_size == b'\x00': + self.set_recv_phase(Phase_Non_Start) + return 0 + + self.set_recv_phase(Phase_Payload) + + elif self.phase == Phase_Payload: + self.payload += ch + self.size_in_phase += 1 + + if self.size_in_phase == self.message_size: + self.set_recv_phase(Phase_Non_Start) + return 0 + + return 2 + + return 1 + + + +def read_file_to_buffer(file_name): + file_object = open(file_name, 'rb') + buffer = None + + if not os.path.exists(file_name): + logging.error("file {} not found.".format(file_name)) + return "file not found" + + try: + buffer = file_object.read() + finally: + file_object.close() + + return buffer + +def decode_attr_container(msg): + + attr_dict = {} + + buf = msg[26 : ] + (total_len, tag_len) = struct.unpack('@IH', buf[0 : 6]) + tag_name = buf[6 : 6 + tag_len].decode() + buf = buf[6 + tag_len : ] + (attr_num, ) = struct.unpack('@H', buf[0 : 2]) + buf = buf[2 : ] + + logging.info("parsed attr:") + logging.info("total_len:{}, tag_len:{}, tag_name:{}, attr_num:{}" + .format(str(total_len), str(tag_len), str(tag_name), str(attr_num))) + + for i in range(attr_num): + (key_len, ) = struct.unpack('@H', buf[0 : 2]) + key_name = buf[2 : 2 + key_len - 1].decode() + buf = buf[2 + key_len : ] + (type_index, ) = struct.unpack('@c', buf[0 : 1]) + + attr_type = attr_type_list[int(type_index[0])] + buf = buf[1 : ] + + if attr_type == "ATTR_TYPE_SHORT": + (attr_value, ) = struct.unpack('@h', buf[0 : 2]) + buf = buf[2 : ] + # continue + elif attr_type == "ATTR_TYPE_INT": + (attr_value, ) = struct.unpack('@I', buf[0 : 4]) + buf = buf[4 : ] + # continue + elif attr_type == "ATTR_TYPE_INT64": + (attr_value, ) = struct.unpack('@q', buf[0 : 8]) + buf = buf[8 : ] + # continue + elif attr_type == "ATTR_TYPE_BYTE": + (attr_value, ) = struct.unpack('@c', buf[0 : 1]) + buf = buf[1 : ] + # continue + elif attr_type == "ATTR_TYPE_UINT16": + (attr_value, ) = struct.unpack('@H', buf[0 : 2]) + buf = buf[2 : ] + # continue + elif attr_type == "ATTR_TYPE_FLOAT": + (attr_value, ) = struct.unpack('@f', buf[0 : 4]) + buf = buf[4 : ] + # continue + elif attr_type == "ATTR_TYPE_DOUBLE": + (attr_value, ) = struct.unpack('@d', buf[0 : 8]) + buf = buf[8 : ] + # continue + elif attr_type == "ATTR_TYPE_BOOLEAN": + (attr_value, ) = struct.unpack('@?', buf[0 : 1]) + buf = buf[1 : ] + # continue + elif attr_type == "ATTR_TYPE_STRING": + (str_len, ) = struct.unpack('@H', buf[0 : 2]) + attr_value = buf[2 : 2 + str_len - 1].decode() + buf = buf[2 + str_len : ] + # continue + elif attr_type == "ATTR_TYPE_BYTEARRAY": + (byte_len, ) = struct.unpack('@I', buf[0 : 4]) + attr_value = buf[4 : 4 + byte_len] + buf = buf[4 + byte_len : ] + # continue + + attr_dict[key_name] = attr_value + + logging.info(str(attr_dict)) + return attr_dict + +class Request(): + mid = 0 + url = "" + action = 0 + fmt = 0 + payload = "" + payload_len = 0 + sender = 0 + + def __init__(self, url, action, fmt, payload, payload_len): + self.url = url + self.action = action + self.fmt = fmt + # if type(payload) == bytes: + # self.payload = bytes(payload, encoding = "utf8") + # else: + self.payload_len = payload_len + if self.payload_len > 0: + self.payload = payload + + + def pack_request(self): + url_len = len(self.url) + 1 + buffer_len = url_len + self.payload_len + + req_buffer = struct.pack('!2BH2IHI',1, self.action, self.fmt, self.mid, self.sender, url_len, self.payload_len) + for i in range(url_len - 1): + req_buffer += struct.pack('!c', bytes(self.url[i], encoding = "utf8")) + req_buffer += bytes([0]) + for i in range(self.payload_len): + req_buffer += struct.pack('!B', self.payload[i]) + + return req_buffer, len(req_buffer) + + + def send(self, conn, is_install): + leading = struct.pack('!2B', 0x12, 0x34) + + if not is_install: + msg_type = struct.pack('!H', 0x0002) + else: + msg_type = struct.pack('!H', 0x0004) + buff, buff_len = self.pack_request() + lenth = struct.pack('!I', buff_len) + + try: + conn.send(leading) + conn.send(msg_type) + conn.send(lenth) + conn.send(buff) + except socket.error as e: + logging.error("device closed") + for dev in tcpserver.devices: + if dev.conn == conn: + tcpserver.devices.remove(dev) + return -1 + + +def query(conn): + req = Request("/applet", 1, 0, "", 0) + if req.send(conn, False) == -1: + return "fail" + time.sleep(0.05) + try: + receive_context = imrt_link_message() + start = time.time() + while True: + if receive_context.on_imrt_link_byte_arrive(conn.recv(1)) == 0: + break + elif time.time() - start >= 5.0: + return "fail" + query_resp = receive_context.msg + print(query_resp) + except OSError as e: + logging.error("OSError exception occur") + return "fail" + + res = decode_attr_container(query_resp) + + logging.info('Query device infomation success') + return res + +def install(conn, app_name, wasm_file): + wasm = read_file_to_buffer(wasm_file) + if wasm == "file not found": + return "failed to install: file not found" + + print("wasm file len:") + print(len(wasm)) + req = Request("/applet?name=" + app_name, 3, 98, wasm, len(wasm)) + if req.send(conn, True) == -1: + return "fail" + time.sleep(0.05) + try: + receive_context = imrt_link_message() + start = time.time() + while True: + if receive_context.on_imrt_link_byte_arrive(conn.recv(1)) == 0: + break + elif time.time() - start >= 5.0: + return "fail" + msg = receive_context.msg + except OSError as e: + logging.error("OSError exception occur") + # TODO: check return message + + if len(msg) == 24 and msg[8 + 1] == 65: + logging.info('Install application success') + return "success" + else: + res = decode_attr_container(msg) + logging.warning('Install application failed: %s' % (str(res))) + print(str(res)) + + return str(res) + + +def uninstall(conn, app_name): + req = Request("/applet?name=" + app_name, 4, 99, "", 0) + if req.send(conn, False) == -1: + return "fail" + time.sleep(0.05) + try: + receive_context = imrt_link_message() + start = time.time() + while True: + if receive_context.on_imrt_link_byte_arrive(conn.recv(1)) == 0: + break + elif time.time() - start >= 5.0: + return "fail" + msg = receive_context.msg + except OSError as e: + logging.error("OSError exception occur") + # TODO: check return message + + if len(msg) == 24 and msg[8 + 1] == 66: + logging.info('Uninstall application success') + return "success" + else: + res = decode_attr_container(msg) + logging.warning('Uninstall application failed: %s' % (str(res))) + print(str(res)) + + return str(res) + +class Device: + def __init__(self, conn, addr, port): + self.conn = conn + self.addr = addr + self.port = port + self.app_num = 0 + self.apps = [] + +cmd = [] + +class TCPServer: + def __init__(self, server, server_address, inputs, outputs, message_queues): + # Create a TCP/IP + self.server = server + self.server.setblocking(False) + + # Bind the socket to the port + self.server_address = server_address + print('starting up on %s port %s' % self.server_address) + self.server.bind(self.server_address) + + # Listen for incoming connections + self.server.listen(10) + + self.cmd_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.cmd_sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) + + self.cmd_sock.bind(('127.0.0.1', 8889)) + self.cmd_sock.listen(5) + + + # Sockets from which we expect to read + self.inputs = inputs + self.inputs.append(self.cmd_sock) + + # Sockets to which we expect to write + # 处理要发送的消息 + self.outputs = outputs + # Outgoing message queues (socket: Queue) + self.message_queues = message_queues + + self.devices = [] + self.conn_dict = {} + + def handler_recever(self, readable): + # Handle inputs + for s in readable: + if s is self.server: + # A "readable" socket is ready to accept a connection + connection, client_address = s.accept() + self.client_address = client_address + print('connection from', client_address) + # this is connection not server + # connection.setblocking(0) + self.inputs.append(connection) + + # Give the connection a queue for data we want to send + # self.message_queues[connection] = queue.Queue() + + res = query(connection) + + if res != "fail": + dev = Device(connection, client_address[0], client_address[1]) + self.devices.append(dev) + self.conn_dict[client_address] = connection + + dev_info = {} + dev_info['addr'] = dev.addr + dev_info['port'] = dev.port + dev_info['apps'] = 0 + + logging.info('A new client connected from ("%s":"%s")' % (dev.conn, dev.port)) + + elif s is self.cmd_sock: + connection, client_address = s.accept() + print("web server socket connected") + logging.info("Django server connected") + self.inputs.append(connection) + self.message_queues[connection] = queue.Queue() + + else: + data = s.recv(1024) + if data != b'': + # A readable client socket has data + logging.info('received "%s" from %s' % (data, s.getpeername())) + + # self.message_queues[s].put(data) + # # Add output channel for response + + # if s not in self.outputs: + # self.outputs.append(s) + + if(data.decode().split(':')[0] == "query"): + if data.decode().split(':')[1] == "all": + resp = [] + print('start query all devices') + for dev in self.devices: + dev_info = query(dev.conn) + if dev_info == "fail": + continue + dev_info["addr"] = dev.addr + dev_info["port"] = dev.port + resp.append(str(dev_info)) + + print(resp) + + if self.message_queues[s] is not None: + # '*' is used in web server to sperate the string + self.message_queues[s].put(bytes("*".join(resp), encoding = 'utf8')) + if s not in self.outputs: + self.outputs.append(s) + else: + client_addr = (data.decode().split(':')[1],int(data.decode().split(':')[2])) + + if client_addr in self.conn_dict.keys(): + print('start query device from (%s:%s)' % (client_addr[0], client_addr[1])) + resp = query(self.conn_dict[client_addr]) + print(resp) + + if self.message_queues[s] is not None: + self.message_queues[s].put(bytes(str(resp), encoding = 'utf8')) + if s not in self.outputs: + self.outputs.append(s) + else: # no connection + if self.message_queues[s] is not None: + self.message_queues[s].put(bytes(str("fail"), encoding = 'utf8')) + if s not in self.outputs: + self.outputs.append(s) + elif(data.decode().split(':')[0] == "install"): + client_addr = (data.decode().split(':')[1],int(data.decode().split(':')[2])) + app_name = data.decode().split(':')[3] + app_file = data.decode().split(':')[4] + + if client_addr in self.conn_dict.keys(): + print('start install application %s to ("%s":"%s")' % (app_name, client_addr[0], client_addr[1])) + res = install(self.conn_dict[client_addr], app_name, app_file) + if self.message_queues[s] is not None: + logging.info("response {} to cmd server".format(res)) + self.message_queues[s].put(bytes(res, encoding = 'utf8')) + if s not in self.outputs: + self.outputs.append(s) + elif(data.decode().split(':')[0] == "uninstall"): + client_addr = (data.decode().split(':')[1],int(data.decode().split(':')[2])) + app_name = data.decode().split(':')[3] + + if client_addr in self.conn_dict.keys(): + print("start uninstall") + res = uninstall(self.conn_dict[client_addr], app_name) + if self.message_queues[s] is not None: + logging.info("response {} to cmd server".format(res)) + self.message_queues[s].put(bytes(res, encoding = 'utf8')) + if s not in self.outputs: + self.outputs.append(s) + + + # if self.message_queues[s] is not None: + # self.message_queues[s].put(data) + # if s not in self.outputs: + # self.outputs.append(s) + else: + logging.warning(data) + + # Interpret empty result as closed connection + try: + for dev in self.devices: + if s == dev.conn: + self.devices.remove(dev) + # Stop listening for input on the connection + if s in self.outputs: + self.outputs.remove(s) + self.inputs.remove(s) + + # Remove message queue + if s in self.message_queues.keys(): + del self.message_queues[s] + s.close() + except OSError as e: + logging.error("OSError raised, unknown connection") + return "got it" + + def handler_send(self, writable): + # Handle outputs + for s in writable: + try: + message_queue = self.message_queues.get(s) + send_data = '' + if message_queue is not None: + send_data = message_queue.get_nowait() + except queue.Empty: + self.outputs.remove(s) + else: + # print "sending %s to %s " % (send_data, s.getpeername) + # print "send something" + if message_queue is not None: + s.send(send_data) + else: + print("client has closed") + # del message_queues[s] + # writable.remove(s) + # print "Client %s disconnected" % (client_address) + return "got it" + + def handler_exception(self, exceptional): + # # Handle "exceptional conditions" + for s in exceptional: + print('exception condition on', s.getpeername()) + # Stop listening for input on the connection + self.inputs.remove(s) + if s in self.outputs: + self.outputs.remove(s) + s.close() + + # Remove message queue + del self.message_queues[s] + return "got it" + + +def event_loop(tcpserver, inputs, outputs): + while inputs: + # Wait for at least one of the sockets to be ready for processing + print('waiting for the next event') + readable, writable, exceptional = select.select(inputs, outputs, inputs) + if readable is not None: + tcp_recever = tcpserver.handler_recever(readable) + if tcp_recever == 'got it': + print("server have received") + if writable is not None: + tcp_send = tcpserver.handler_send(writable) + if tcp_send == 'got it': + print("server have send") + if exceptional is not None: + tcp_exception = tcpserver.handler_exception(exceptional) + if tcp_exception == 'got it': + print("server have exception") + + + sleep(0.1) + +def run_wasm_server(): + server_address = ('localhost', 8888) + server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) + inputs = [server] + outputs = [] + message_queues = {} + tcpserver = TCPServer(server, server_address, inputs, outputs, message_queues) + + task = threading.Thread(target=event_loop,args=(tcpserver,inputs,outputs)) + task.start() + +if __name__ == '__main__': + logging.basicConfig(level=logging.DEBUG, + filename='wasm_server.log', + filemode='a', + format= + '%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s' + ) + server_address = ('0.0.0.0', 8888) + server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) + inputs = [server] + outputs = [] + message_queues = {} + tcpserver = TCPServer(server, server_address, inputs, outputs, message_queues) + logging.info("TCP Server start at {}:{}".format(server_address[0], "8888")) + + task = threading.Thread(target=event_loop,args=(tcpserver,inputs,outputs)) + task.start() + + # event_loop(tcpserver, inputs, outputs) \ No newline at end of file diff --git a/test-tools/IoT-APP-Store-Demo/wasm_django/static/css/application.css b/test-tools/IoT-APP-Store-Demo/wasm_django/static/css/application.css new file mode 100644 index 000000000..5876b9426 --- /dev/null +++ b/test-tools/IoT-APP-Store-Demo/wasm_django/static/css/application.css @@ -0,0 +1,411 @@ +/* Copyright (C) 2019 Intel Corporation. All rights reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +{% load static %} + diff --git a/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/application.js b/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/application.js new file mode 100644 index 000000000..d359962e3 --- /dev/null +++ b/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/application.js @@ -0,0 +1,228 @@ +/* Copyright (C) 2019 Intel Corporation. All rights reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +/* + * Dom Location + * + */ + + function setDivCenter(divname) +// make qn element center aligned + { + var Top =($(window).height()-$(divname).height())/2; + var Left = ($(window).width()-$(divname).width())/2; + var scrollTop = $(document).scrollTop(); + var scrollLeft = $(document).scrollLeft(); + $(divname).css({posisiton:'absolute','top':Top+scrollTop,'left':Left+scrollLeft}); + +}; + +setDivCenter(".middlebox"); +setDivCenter(".deletebox"); + +function setmain(divname){ +// Set the pop-up window of apps for download at the right place + var x = $('#btn').offset().top; + var Top = x + $('#btn').height()+15; + var y = $('#btn').offset().left; + var Left = y + ($('#btn').width()/2)-($(divname).width()/2); + console.log(Top,Left) + $(divname).css({'top':Top,'left':Left}); +} +setmain(".main") + +/* + * download apps + * + */ + +function getthis(val) +//Telling background which app to be loaded from appstore_list and to be installed in the current device. +{ + + /* Get the ip adress and the port of a device, as well as the application ID to be downloaded on this device*/ + var ip,port,name,version; + var ipArr=$("#IPs").text().split(":"); + ip=ipArr[1]; + var portArr=$("#ports").text().split(":"); + port=portArr[1]; + name = $(val).parent().find("#appsinfo1").text().split(":")[1]; + version = $(val).parent().find("#appsinfo2").text().split(":")[1]; + $(".main").fadeOut(); + + for (num in alist){ + if (alist[num]['pname'].trim() == name.trim()) + {alert("This app has been downloaded."); + return;}}; + $("#loading").fadeIn(); + var sNode = document.getElementById("APPS"); + var tempNode= sNode.cloneNode(true); + sNode.parentNode.appendChild(tempNode); + $("#appinfo1").html("Product Name : "+ name); + $("#appinfo2").html("Status : "+"Installing"); + $("#appinfo3").html("Current_Version : "+ version); + + $.get("/appDownload/",{'ip':ip.trim(),'port':port.trim(),'name':name.trim(),},function (ret) { + var status = $.trim(ret.split(":")[1].split("}")[0]); + $(".loadapp").html(name+" is downloading now"); + var msg = JSON.parse(status) + console.log(msg) + if (JSON.parse(status)=="ok"){ + $(".middlebox").fadeIn(); + $(".sourceapp").fadeOut(); + $("#loading").fadeOut(); + $(".findapp").html("Download "+name +" successfully"); + $(".surebtn").click(function (){ + $(".middlebox").fadeOut(); + window.location.reload(); + })} + else if (JSON.parse(status)=="Fail!"){ + alert("Download failed!"); + $("#loading").fadeOut(); + sNode.remove(); + } + else { + alert("Install app failed:" + msg) + $("#loading").fadeOut(); + sNode.remove(); + } + }) +}; + +window.onload = function clone() +//Add & Delete apps to the device. +{ + /*Install Apps*/ + var sourceNode = document.getElementById("APPS"); + if (alist.length != 0) + { + $("#appinfo1").html("Product Name : "+ alist[0]['pname']); + $("#appinfo2").html("Status : "+ alist[0]['status']); + $("#appinfo3").html("Current_Version : "+ alist[0]['current_version']); + $("#delete").attr('class','delet0'); + $("#APPS").attr('class','app0'); + + for (var i=1; i=3){ + alert("Install app failed: exceed max app installations.") + } + $(".main").fadeOut(); + getthis(".mybtn2"); + var newurl = "?"+"ip="+ip+"&port="+port; + window.location.href= newurl; + }); + + } +} +givevalue(); + +function popbox(){ +/*Open and close the "install apps" window*/ + $(".btn").click(function(){ + $(".main").fadeIn(); + }); + $(".close").click(function(){ + $(".main").fadeOut(); + }); +}; +popbox(); diff --git a/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/appstore.js b/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/appstore.js new file mode 100644 index 000000000..911de1f08 --- /dev/null +++ b/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/appstore.js @@ -0,0 +1,136 @@ +/* Copyright (C) 2019 Intel Corporation. All rights reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +function setDivCenter(divname) +//Center a dom +{ + var Top =($(window).height()-$(divname).height())/2; + var Left = ($(window).width()-$(divname).width())/2; + var scrollTop = $(document).scrollTop(); + var scrollLeft = $(document).scrollLeft(); + $(divname).css({posisiton:'absolute','top':Top+scrollTop,'left':Left+scrollLeft}); + +}; +setDivCenter(".deletebox"); + +function setDivheight(divname) +//set the height of "appbook" to contain all its child elements. +{ + var leng = elist.length + flist.length; + var heig = 51 * leng; + $(divname).css({height:'heig'}); +}; +setDivheight(".appbook"); + +function setfooterposition(divname) +//Locate footer on the right place +{ + var Top = flist.length* $("#devices").height()+300; + var scrollTop = $(document).scrollTop(); + if (flist.length >=4){ + $(divname).css({posisiton:'absolute','top':Top+scrollTop}); + } +} +setfooterposition(".footer"); + +function deleteClick (obj) +//Remove an app from apppstore if clicks the "OK" button +{ + var indexapp = $(obj).attr('class').match(/\d+\b/); + var removeitem = $(".applic"+indexapp); + var name=removeitem.find('#appinfo1').text().split(":")[1].trim(); + var version=removeitem.find('#appinfo2').text().split(":")[1].trim(); + + if (flist.length >= 1){ + $(".deletebox").fadeIn(); + $(".findapp").html("Are you sure to delete "+name); + $(".suresbtn").click(function (){ + removeitem.remove(); + $.get("/removeapps/",{'name':name,'version':version},function (ret) { + console.log(ret);}); + $(".deletebox").fadeOut(); + window.location.href="/appstore/"; + }) + $(".delsbtn").click(function (){ + $(".deletebox").fadeOut(); })} +}; + +function upload_file() +//Make sure the uploading file is eligible +{ + var type = ulist[0]; + console.log(type); + if (type == "Not a wasm file"){ + alert(type); + window.location.href="/appstore/"; + } + if (type == "This App is preloaded"){ + alert(type); + window.location.href="/appstore/"; + } + if (type == "This App is already uploaded"){ + alert(type); + window.location.href="/appstore/"; + } +}; +upload_file(); + + +function clone() +//Render a interface that shows all the apps for installing in appstore, +//including preloaded ones and locally uploaded ones. +{ + + var sourceNode = document.getElementById("applications"); + $("#appinfo1").html("product name : "+ elist[0]['ID']); + $("#appinfo2").html("product Version : "+ elist[0]['Version']); + $("#delbutton").attr('class','del0'); + $("#applications").attr('class','applic0'); + + + for (var i=1; i=4){ + $(divname).css({posisiton:'absolute','top':Top+scrollTop}); + } +} +setfooterposition(".footer"); + +window.onload = function clone() +//Show the list of connected devices +{ + var sourceNode = document.getElementById("devices"); + $("#IPs").html("IP : "+ dlist[0]['IP']); + $("#ports").html("Port : "+ dlist[0]['Port']); + $("#installs").html("Installed Apps : "+ dlist[0]['apps']); + $("#devices").attr('class','devic0'); + $("#dbutton").attr('class','bt0'); + $("#choose").attr('class','chos0'); + + for (var i=1; i Date: Wed, 21 Aug 2019 16:39:50 +0800 Subject: [PATCH 05/20] Enable native/app address validation and conversion for wasm app (#102) Enable setting external memory space for wasm app, the feature is disabled by default; Remove wasm_application_exectue_* APIs from wasm_export.h which makes confused. --- core/iwasm/lib/native-interface/wasm_export.h | 102 ++++++++++++++++ core/iwasm/lib/native/base/base_lib_export.c | 110 ++++++++++++++++++ core/iwasm/products/alios-things/src/main.c | 14 +++ core/iwasm/products/linux/main.c | 29 +++++ core/iwasm/products/vxworks/main.c | 29 +++++ core/iwasm/products/zephyr/simple/src/main.c | 14 +++ core/iwasm/runtime/include/wasm_export.h | 37 ++---- core/iwasm/runtime/vmcore-wasm/wasm_interp.c | 24 +++- core/iwasm/runtime/vmcore-wasm/wasm_runtime.c | 91 +++++++++++++-- core/iwasm/runtime/vmcore-wasm/wasm_runtime.h | 7 ++ core/shared-lib/include/config.h | 10 ++ 11 files changed, 428 insertions(+), 39 deletions(-) create mode 100644 core/iwasm/lib/native-interface/wasm_export.h diff --git a/core/iwasm/lib/native-interface/wasm_export.h b/core/iwasm/lib/native-interface/wasm_export.h new file mode 100644 index 000000000..ed9d570f8 --- /dev/null +++ b/core/iwasm/lib/native-interface/wasm_export.h @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _WASM_EXPORT_H +#define _WASM_EXPORT_H + +#include +#include + +/** + * API exported to WASM application + */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Get current WASM module instance of the current native thread + * + * @return current WASM module instance of the current native thread, 0 + * if not found + * Note: the return type is uint64_t but not pointer type, because that + * the we only supports WASM-32, in which the pointer type is + * compiled to WASM i32 type, but the pointer type in native can be + * 32-bit and 64-bit. And if the native pointer is 64-bit, data loss + * occurs after converting it to WASM i32 type. + */ +uint64_t +wasm_runtime_get_current_module_inst(); + +/** + * Validate the app address, check whether it belongs to WASM module + * instance's address space, or in its heap space or memory space. + * + * @param module_inst the WASM module instance + * @param app_offset the app address to validate, which is a relative address + * @param size the size bytes of the app address + * + * @return true if success, false otherwise. + */ +bool +wasm_runtime_validate_app_addr(uint64_t module_inst, + int32_t app_offset, uint32_t size); + +/** + * Validate the native address, check whether it belongs to WASM module + * instance's address space, or in its heap space or memory space. + * + * @param module_inst the WASM module instance + * @param native_ptr the native address to validate, which is an absolute + * address + * @param size the size bytes of the app address + * + * @return true if success, false otherwise. + */ +bool +wasm_runtime_validate_native_addr(uint64_t module_inst, + uint64_t native_ptr, uint32_t size); + +/** + * Convert app address(relative address) to native address(absolute address) + * + * @param module_inst the WASM module instance + * @param app_offset the app adress + * + * @return the native address converted + */ +uint64_t +wasm_runtime_addr_app_to_native(uint64_t module_inst, + int32_t app_offset); + +/** + * Convert native address(absolute address) to app address(relative address) + * + * @param module_inst the WASM module instance + * @param native_ptr the native address + * + * @return the app address converted + */ +int32_t +wasm_runtime_addr_native_to_app(uint64_t module_inst, + uint64_t native_ptr); + +#ifdef __cplusplus +} +#endif + +#endif /* end of _WASM_EXPORT_H */ diff --git a/core/iwasm/lib/native/base/base_lib_export.c b/core/iwasm/lib/native/base/base_lib_export.c index 4392a7ba4..353871b6d 100644 --- a/core/iwasm/lib/native/base/base_lib_export.c +++ b/core/iwasm/lib/native/base/base_lib_export.c @@ -18,11 +18,116 @@ #include #include #include "lib_export.h" +#include "bh_platform.h" +#include "wasm_export.h" #ifdef WASM_ENABLE_BASE_LIB #include "base_lib_export.h" #endif +static uint64 +wasm_runtime_get_current_module_inst_wrapper() +{ + return (uint64)(uintptr_t) + wasm_runtime_get_current_module_inst(); +} + +static bool +wasm_runtime_validate_app_addr_wrapper(uint32 inst_part0, uint32 inst_part1, + int32 app_offset, uint32 size) +{ + bool ret; + wasm_module_inst_t module_inst = + wasm_runtime_get_current_module_inst(); + union { uint64 u64; uint32 parts[2]; } inst; + + inst.parts[0] = inst_part0; + inst.parts[1] = inst_part1; + + if (inst.u64 != (uint64)(uintptr_t)module_inst) { + printf("Invalid module instance\n"); + return false; + } + + ret = wasm_runtime_validate_app_addr(module_inst, app_offset, size); + if (!ret) + wasm_runtime_clear_exception(module_inst); + return ret; +} + +static bool +wasm_runtime_validate_native_addr_wrapper(uint32 inst_part0, uint32 inst_part1, + uint32 native_ptr_part0, + uint32 native_ptr_part1, + uint32 size) +{ + bool ret; + wasm_module_inst_t module_inst = + wasm_runtime_get_current_module_inst(); + union { uint64 u64; uint32 parts[2]; } inst; + union { uint64 u64; uint32 parts[2]; } native_ptr; + + inst.parts[0] = inst_part0; + inst.parts[1] = inst_part1; + + if (inst.u64 != (uint64)(uintptr_t)module_inst) { + printf("Invalid module instance\n"); + return false; + } + + native_ptr.parts[0] = native_ptr_part0; + native_ptr.parts[1] = native_ptr_part1; + ret = wasm_runtime_validate_native_addr(module_inst, + (void*)(uintptr_t)native_ptr.u64, + size); + if (!ret) + wasm_runtime_clear_exception(module_inst); + return ret; +} + +static uint64 +wasm_runtime_addr_app_to_native_wrapper(uint32 inst_part0, uint32 inst_part1, + int32 app_offset) +{ + wasm_module_inst_t module_inst = + wasm_runtime_get_current_module_inst(); + union { uint64 u64; uint32 parts[2]; } inst; + + inst.parts[0] = inst_part0; + inst.parts[1] = inst_part1; + + if (inst.u64 != (uint64)(uintptr_t)module_inst) { + printf("Invalid module instance\n"); + return 0; + } + return (uint64)(uintptr_t) + wasm_runtime_addr_app_to_native(module_inst, app_offset); +} + +static int32 +wasm_runtime_addr_native_to_app_wrapper(uint32 inst_part0, uint32 inst_part1, + uint32 native_ptr_part0, + uint32 native_ptr_part1) +{ + wasm_module_inst_t module_inst = + wasm_runtime_get_current_module_inst(); + union { uint64 u64; uint32 parts[2]; } inst; + union { uint64 u64; uint32 parts[2]; } native_ptr; + + inst.parts[0] = inst_part0; + inst.parts[1] = inst_part1; + + if (inst.u64 != (uint64)(uintptr_t)module_inst) { + printf("Invalid module instance\n"); + return 0; + } + + native_ptr.parts[0] = native_ptr_part0; + native_ptr.parts[1] = native_ptr_part1; + return wasm_runtime_addr_native_to_app(module_inst, + (void*)(uintptr_t)native_ptr.u64); +} + static NativeSymbol extended_native_symbol_defs[] = { /* TODO: use macro EXPORT_WASM_API() or EXPORT_WASM_API2() to add functions to register. */ @@ -38,6 +143,11 @@ static NativeSymbol extended_native_symbol_defs[] = { EXPORT_WASM_API(wasm_timer_restart), EXPORT_WASM_API(wasm_get_sys_tick_ms), #endif + EXPORT_WASM_API2(wasm_runtime_get_current_module_inst), + EXPORT_WASM_API2(wasm_runtime_validate_app_addr), + EXPORT_WASM_API2(wasm_runtime_validate_native_addr), + EXPORT_WASM_API2(wasm_runtime_addr_app_to_native), + EXPORT_WASM_API2(wasm_runtime_addr_native_to_app), }; int get_base_lib_export_apis(NativeSymbol **p_base_lib_apis) diff --git a/core/iwasm/products/alios-things/src/main.c b/core/iwasm/products/alios-things/src/main.c index 395c9b852..336247856 100644 --- a/core/iwasm/products/alios-things/src/main.c +++ b/core/iwasm/products/alios-things/src/main.c @@ -29,6 +29,20 @@ static int app_argc; static char **app_argv; +/** + * Find the unique main function from a WASM module instance + * and execute that function. + * + * @param module_inst the WASM module instance + * @param argc the number of arguments + * @param argv the arguments array + * + * @return true if the main function is called, false otherwise. + */ +bool +wasm_application_execute_main(wasm_module_inst_t module_inst, + int argc, char *argv[]); + static void* app_instance_main(wasm_module_inst_t module_inst) { diff --git a/core/iwasm/products/linux/main.c b/core/iwasm/products/linux/main.c index e415de7d4..86c6e5e75 100644 --- a/core/iwasm/products/linux/main.c +++ b/core/iwasm/products/linux/main.c @@ -46,6 +46,35 @@ static int print_help() return 1; } +/** + * Find the unique main function from a WASM module instance + * and execute that function. + * + * @param module_inst the WASM module instance + * @param argc the number of arguments + * @param argv the arguments array + * + * @return true if the main function is called, false otherwise. + */ +bool +wasm_application_execute_main(wasm_module_inst_t module_inst, + int argc, char *argv[]); + +/** + * Find the specified function in argv[0] from WASM module of current instance + * and execute that function. + * + * @param module_inst the WASM module instance + * @param name the name of the function to execute + * @param argc the number of arguments + * @param argv the arguments array + * + * @return true if the specified function is called, false otherwise. + */ +bool +wasm_application_execute_func(wasm_module_inst_t module_inst, + const char *name, int argc, char *argv[]); + static void* app_instance_main(wasm_module_inst_t module_inst) { diff --git a/core/iwasm/products/vxworks/main.c b/core/iwasm/products/vxworks/main.c index dc2630428..a1a503f31 100644 --- a/core/iwasm/products/vxworks/main.c +++ b/core/iwasm/products/vxworks/main.c @@ -46,6 +46,35 @@ static int print_help() return 1; } +/** + * Find the unique main function from a WASM module instance + * and execute that function. + * + * @param module_inst the WASM module instance + * @param argc the number of arguments + * @param argv the arguments array + * + * @return true if the main function is called, false otherwise. + */ +bool +wasm_application_execute_main(wasm_module_inst_t module_inst, + int argc, char *argv[]); + +/** + * Find the specified function in argv[0] from WASM module of current instance + * and execute that function. + * + * @param module_inst the WASM module instance + * @param name the name of the function to execute + * @param argc the number of arguments + * @param argv the arguments array + * + * @return true if the specified function is called, false otherwise. + */ +bool +wasm_application_execute_func(wasm_module_inst_t module_inst, + const char *name, int argc, char *argv[]); + static void* app_instance_main(wasm_module_inst_t module_inst) { diff --git a/core/iwasm/products/zephyr/simple/src/main.c b/core/iwasm/products/zephyr/simple/src/main.c index a6a9260a7..fee58f9de 100644 --- a/core/iwasm/products/zephyr/simple/src/main.c +++ b/core/iwasm/products/zephyr/simple/src/main.c @@ -29,6 +29,20 @@ static int app_argc; static char **app_argv; +/** + * Find the unique main function from a WASM module instance + * and execute that function. + * + * @param module_inst the WASM module instance + * @param argc the number of arguments + * @param argv the arguments array + * + * @return true if the main function is called, false otherwise. + */ +bool +wasm_application_execute_main(wasm_module_inst_t module_inst, + int argc, char *argv[]); + static void* app_instance_main(wasm_module_inst_t module_inst) { diff --git a/core/iwasm/runtime/include/wasm_export.h b/core/iwasm/runtime/include/wasm_export.h index 0492fcb44..61de09678 100644 --- a/core/iwasm/runtime/include/wasm_export.h +++ b/core/iwasm/runtime/include/wasm_export.h @@ -152,6 +152,13 @@ wasm_runtime_instantiate(const wasm_module_t module, void wasm_runtime_deinstantiate(wasm_module_inst_t module_inst); +#if WASM_ENABLE_EXT_MEMORY_SPACE != 0 +bool +wasm_runtime_set_ext_memory(wasm_module_inst_t module_inst, + uint8_t *ext_mem_data, uint32_t ext_mem_size, + char *error_buf, uint32_t error_buf_size); +#endif + /** * Load WASM module instance from AOT file. * @@ -384,36 +391,6 @@ int32_t wasm_runtime_addr_native_to_app(wasm_module_inst_t module_inst, void *native_ptr); -/** - * Find the unique main function from a WASM module instance - * and execute that function. - * - * @param module_inst the WASM module instance - * @param argc the number of arguments - * @param argv the arguments array - * - * @return true if the main function is called, false otherwise. - */ -bool -wasm_application_execute_main(wasm_module_inst_t module_inst, - int argc, char *argv[]); - -/** - * Find the specified function in argv[0] from WASM module of current instance - * and execute that function. - * - * @param module_inst the WASM module instance - * @param name the name of the function to execute - * @param argc the number of arguments - * @param argv the arguments array - * - * @return true if the specified function is called, false otherwise. - */ -bool -wasm_application_execute_func(wasm_module_inst_t module_inst, - const char *name, int argc, char *argv[]); - - #ifdef __cplusplus } #endif diff --git a/core/iwasm/runtime/vmcore-wasm/wasm_interp.c b/core/iwasm/runtime/vmcore-wasm/wasm_interp.c index 490306db9..f0b0beba4 100644 --- a/core/iwasm/runtime/vmcore-wasm/wasm_interp.c +++ b/core/iwasm/runtime/vmcore-wasm/wasm_interp.c @@ -74,6 +74,24 @@ GET_F64_FROM_ADDR (uint32 *addr) } #endif /* WASM_CPU_SUPPORTS_UNALIGNED_64BIT_ACCESS != 0 */ +#if WASM_ENABLE_EXT_MEMORY_SPACE != 0 +#define CHECK_EXT_MEMORY_SPACE() \ + else if (module->ext_mem_data \ + && module->ext_mem_base_offset <= offset1 \ + && offset1 < module->ext_mem_base_offset \ + + module->ext_mem_size) { \ + maddr = module->ext_mem_data \ + + (offset1 - module->ext_mem_base_offset); \ + if (maddr < module->ext_mem_data) \ + goto out_of_bounds; \ + maddr1 = maddr + LOAD_SIZE[opcode - WASM_OP_I32_LOAD]; \ + if (maddr1 > module->ext_mem_data_end) \ + goto out_of_bounds; \ + } +#else +#define CHECK_EXT_MEMORY_SPACE() +#endif + #define CHECK_MEMORY_OVERFLOW() do { \ uint32 offset1 = offset + addr; \ uint8 *maddr1; \ @@ -89,7 +107,8 @@ GET_F64_FROM_ADDR (uint32 *addr) if (maddr1 > memory->end_addr) \ goto out_of_bounds; \ } \ - else { \ + else if (offset1 < memory->heap_base_offset \ + + (memory->heap_data_end - memory->heap_data)) { \ maddr = memory->heap_data + offset1 - memory->heap_base_offset; \ if (maddr < memory->heap_data) \ goto out_of_bounds; \ @@ -97,6 +116,9 @@ GET_F64_FROM_ADDR (uint32 *addr) if (maddr1 > memory->heap_data_end) \ goto out_of_bounds; \ } \ + CHECK_EXT_MEMORY_SPACE() \ + else \ + goto out_of_bounds; \ } while (0) static inline uint32 diff --git a/core/iwasm/runtime/vmcore-wasm/wasm_runtime.c b/core/iwasm/runtime/vmcore-wasm/wasm_runtime.c index a7a9a8745..35efd7a99 100644 --- a/core/iwasm/runtime/vmcore-wasm/wasm_runtime.c +++ b/core/iwasm/runtime/vmcore-wasm/wasm_runtime.c @@ -992,6 +992,37 @@ wasm_runtime_deinstantiate(WASMModuleInstance *module_inst) wasm_free(module_inst); } +#if WASM_ENABLE_EXT_MEMORY_SPACE != 0 +bool +wasm_runtime_set_ext_memory(WASMModuleInstance *module_inst, + uint8 *ext_mem_data, uint32 ext_mem_size, + char *error_buf, uint32 error_buf_size) +{ + if (module_inst->ext_mem_data) { + set_error_buf(error_buf, error_buf_size, + "Set external memory failed: " + "an external memory has been set."); + return false; + } + + if (!ext_mem_data + || ext_mem_size > 1 * BH_GB + || ext_mem_data + ext_mem_size < ext_mem_data) { + set_error_buf(error_buf, error_buf_size, + "Set external memory failed: " + "invalid input."); + return false; + } + + module_inst->ext_mem_data = ext_mem_data; + module_inst->ext_mem_data_end = ext_mem_data + ext_mem_size; + module_inst->ext_mem_size = ext_mem_size; + module_inst->ext_mem_base_offset = DEFAULT_EXT_MEM_BASE_OFFSET; + + return true; +} +#endif + bool wasm_runtime_enlarge_memory(WASMModuleInstance *module, int inc_page_count) { @@ -1166,24 +1197,40 @@ wasm_runtime_validate_app_addr(WASMModuleInstance *module_inst, uint8 *addr; /* integer overflow check */ - if(app_offset < 0 || - app_offset + size < app_offset) { + if(app_offset + size < app_offset) { goto fail; } memory = module_inst->default_memory; - if (app_offset < memory->heap_base_offset) { + if (0 <= app_offset + && app_offset < memory->heap_base_offset) { addr = memory->memory_data + app_offset; if (!(memory->base_addr <= addr && addr + size <= memory->end_addr)) goto fail; return true; } - else { + else if (memory->heap_base_offset < app_offset + && app_offset < memory->heap_base_offset + + (memory->heap_data_end - memory->heap_data)) { addr = memory->heap_data + (app_offset - memory->heap_base_offset); if (!(memory->heap_data <= addr && addr + size <= memory->heap_data_end)) goto fail; return true; } +#if WASM_ENABLE_EXT_MEMORY_SPACE != 0 + else if (module_inst->ext_mem_data + && module_inst->ext_mem_base_offset <= app_offset + && app_offset < module_inst->ext_mem_base_offset + + module_inst->ext_mem_size) { + addr = module_inst->ext_mem_data + + (app_offset - module_inst->ext_mem_base_offset); + if (!(module_inst->ext_mem_data <= addr + && addr + size <= module_inst->ext_mem_data_end)) + goto fail; + + return true; + } +#endif fail: wasm_runtime_set_exception(module_inst, "out of bounds memory access"); @@ -1202,7 +1249,13 @@ wasm_runtime_validate_native_addr(WASMModuleInstance *module_inst, } if ((memory->base_addr <= addr && addr + size <= memory->end_addr) - || (memory->heap_data <= addr && addr + size <= memory->heap_data_end)) + || (memory->heap_data <= addr && addr + size <= memory->heap_data_end) +#if WASM_ENABLE_EXT_MEMORY_SPACE != 0 + || (module_inst->ext_mem_data + && module_inst->ext_mem_data <= addr + && addr + size <= module_inst->ext_mem_data_end) +#endif + ) return true; fail: @@ -1215,10 +1268,22 @@ wasm_runtime_addr_app_to_native(WASMModuleInstance *module_inst, int32 app_offset) { WASMMemoryInstance *memory = module_inst->default_memory; - if (app_offset < memory->heap_base_offset) + if (0 <= app_offset && app_offset < memory->heap_base_offset) return memory->memory_data + app_offset; - else + else if (memory->heap_base_offset < app_offset + && app_offset < memory->heap_base_offset + + (memory->heap_data_end - memory->heap_data)) return memory->heap_data + (app_offset - memory->heap_base_offset); +#if WASM_ENABLE_EXT_MEMORY_SPACE != 0 + else if (module_inst->ext_mem_data + && module_inst->ext_mem_base_offset <= app_offset + && app_offset < module_inst->ext_mem_base_offset + + module_inst->ext_mem_size) + return module_inst->ext_mem_data + + (app_offset - module_inst->ext_mem_base_offset); +#endif + else + return NULL; } int32 @@ -1229,9 +1294,19 @@ wasm_runtime_addr_native_to_app(WASMModuleInstance *module_inst, if (memory->base_addr <= (uint8*)native_ptr && (uint8*)native_ptr < memory->end_addr) return (uint8*)native_ptr - memory->memory_data; - else + else if (memory->heap_data <= (uint8*)native_ptr + && (uint8*)native_ptr < memory->heap_data_end) return memory->heap_base_offset + ((uint8*)native_ptr - memory->heap_data); +#if WASM_ENABLE_EXT_MEMORY_SPACE != 0 + else if (module_inst->ext_mem_data + && module_inst->ext_mem_data <= (uint8*)native_ptr + && (uint8*)native_ptr < module_inst->ext_mem_data_end) + return module_inst->ext_mem_base_offset + + ((uint8*)native_ptr - module_inst->ext_mem_data); +#endif + else + return 0; } uint32 diff --git a/core/iwasm/runtime/vmcore-wasm/wasm_runtime.h b/core/iwasm/runtime/vmcore-wasm/wasm_runtime.h index 56e806b94..30ef58c33 100644 --- a/core/iwasm/runtime/vmcore-wasm/wasm_runtime.h +++ b/core/iwasm/runtime/vmcore-wasm/wasm_runtime.h @@ -148,6 +148,13 @@ typedef struct WASMModuleInstance { uint32 temp_ret; uint32 llvm_stack; +#if WASM_ENABLE_EXT_MEMORY_SPACE != 0 + int32 ext_mem_base_offset; + uint8 *ext_mem_data; + uint8 *ext_mem_data_end; + uint32 ext_mem_size; +#endif + /* Default WASM stack size of threads of this Module instance. */ uint32 wasm_stack_size; diff --git a/core/shared-lib/include/config.h b/core/shared-lib/include/config.h index 0cf7bd4fb..b36753c10 100644 --- a/core/shared-lib/include/config.h +++ b/core/shared-lib/include/config.h @@ -115,3 +115,13 @@ #define APP_THREAD_STACK_SIZE_MAX (256 * 1024) #endif #endif + +/* External memory space provided by user, + but not wasm memory space and app heap space */ +#ifndef WASM_ENABLE_EXT_MEMORY_SPACE +#define WASM_ENABLE_EXT_MEMORY_SPACE 0 +#endif + +/* Default base offset of external memory space */ +#define DEFAULT_EXT_MEM_BASE_OFFSET (-2 * BH_GB) + From 7863f3758267f7e6632468ffd6bb08ba47448c94 Mon Sep 17 00:00:00 2001 From: wenyongh Date: Tue, 27 Aug 2019 14:09:23 +0800 Subject: [PATCH 06/20] Refine binary size and fix several minor issues (#104) * Implement memory profiler, optimize memory usage, modify code indent * Implement memory.grow and limit heap space base offset to 1G; modify iwasm build type to Release and 64 bit by default * Add a new extension library: connection * Fix bug of reading magic number and version in big endian platform * Re-org platform APIs: move most platform APIs from iwasm to shared-lib * Enhance wasm loader to fix some security issues * Fix issue about illegal load of EXC_RETURN into PC on stm32 board * Updates that let a restricted version of the interpreter run in SGX * Enable native/app address validation and conversion for wasm app * Remove wasm_application_exectue_* APIs from wasm_export.h which makes confused * Refine binary size and fix several minor issues Optimize interpreter LOAD/STORE opcodes to decrease the binary size Fix issues when using iwasm library: _bh_log undefined, bh_memory.h not found Remove unused _stdin/_stdout/_stderr global variables resolve in libc wrapper Add macros of global heap size, stack size, heap size for Zephyr main.c Clear compile warning of wasm_application.c --- core/iwasm/lib/native/libc/libc_wrapper.c | 17 -- core/iwasm/products/linux/CMakeLists.txt | 7 +- core/iwasm/products/zephyr/simple/src/main.c | 31 +-- core/iwasm/runtime/include/bh_memory.h | 110 ++++++++++ .../runtime/vmcore-wasm/wasm_application.c | 7 +- core/iwasm/runtime/vmcore-wasm/wasm_interp.c | 192 ++++++++++++------ core/iwasm/runtime/vmcore-wasm/wasm_runtime.c | 17 +- 7 files changed, 274 insertions(+), 107 deletions(-) create mode 100644 core/iwasm/runtime/include/bh_memory.h diff --git a/core/iwasm/lib/native/libc/libc_wrapper.c b/core/iwasm/lib/native/libc/libc_wrapper.c index 74b2c0ccb..d443888cf 100644 --- a/core/iwasm/lib/native/libc/libc_wrapper.c +++ b/core/iwasm/lib/native/libc/libc_wrapper.c @@ -984,23 +984,6 @@ wasm_native_global_lookup(const char *module_name, const char *global_name, global_def++; } - /* Lookup non-constant globals which cannot be defined by table */ - if (!strcmp(module_name, "env")) { - if (!strcmp(global_name, "_stdin")) { - global->global_data_linked.addr = (uintptr_t)stdin; - global->is_addr = true; - return true; - } else if (!strcmp(global_name, "_stdout")) { - global->global_data_linked.addr = (uintptr_t)stdout; - global->is_addr = true; - return true; - } else if (!strcmp(global_name, "_stderr")) { - global->global_data_linked.addr = (uintptr_t)stderr; - global->is_addr = true; - return true; - } - } - return false; } diff --git a/core/iwasm/products/linux/CMakeLists.txt b/core/iwasm/products/linux/CMakeLists.txt index a2510790e..6e8936707 100644 --- a/core/iwasm/products/linux/CMakeLists.txt +++ b/core/iwasm/products/linux/CMakeLists.txt @@ -68,6 +68,7 @@ include (../../lib/native/base/wasm_lib_base.cmake) include (../../lib/native/libc/wasm_libc.cmake) include (${SHARED_LIB_DIR}/platform/${PLATFORM}/shared_platform.cmake) include (${SHARED_LIB_DIR}/mem-alloc/mem_alloc.cmake) +include (${SHARED_LIB_DIR}/utils/shared_utils.cmake) add_library (vmlib ${WASM_PLATFORM_LIB_SOURCE} @@ -76,7 +77,8 @@ add_library (vmlib ${WASM_LIB_BASE_DIR}/base_lib_export.c ${WASM_LIBC_SOURCE} ${PLATFORM_SHARED_SOURCE} - ${MEM_ALLOC_SHARED_SOURCE}) + ${MEM_ALLOC_SHARED_SOURCE} + ${UTILS_SHARED_SOURCE}) add_executable (iwasm main.c ext_lib_export.c) @@ -91,7 +93,8 @@ add_library (libiwasm SHARED ${WASM_LIB_BASE_DIR}/base_lib_export.c ${WASM_LIBC_SOURCE} ${PLATFORM_SHARED_SOURCE} - ${MEM_ALLOC_SHARED_SOURCE}) + ${MEM_ALLOC_SHARED_SOURCE} + ${UTILS_SHARED_SOURCE}) install (TARGETS libiwasm DESTINATION lib) diff --git a/core/iwasm/products/zephyr/simple/src/main.c b/core/iwasm/products/zephyr/simple/src/main.c index fee58f9de..da85a3bba 100644 --- a/core/iwasm/products/zephyr/simple/src/main.c +++ b/core/iwasm/products/zephyr/simple/src/main.c @@ -26,6 +26,11 @@ #include "bh_memory.h" #include "test_wasm.h" +#define CONFIG_GLOBAL_HEAP_BUF_SIZE 131072 +#define CONFIG_APP_STACK_SIZE 8192 +#define CONFIG_APP_HEAP_SIZE 8192 +#define CONFIG_MAIN_THREAD_STACK_SIZE 4096 + static int app_argc; static char **app_argv; @@ -54,7 +59,7 @@ app_instance_main(wasm_module_inst_t module_inst) return NULL; } -static char global_heap_buf[512 * 1024] = { 0 }; +static char global_heap_buf[CONFIG_GLOBAL_HEAP_BUF_SIZE] = { 0 }; void iwasm_main(void *arg1, void *arg2, void *arg3) { @@ -72,7 +77,7 @@ void iwasm_main(void *arg1, void *arg2, void *arg3) (void) arg3; if (bh_memory_init_with_pool(global_heap_buf, sizeof(global_heap_buf)) - != 0) { + != 0) { wasm_printf("Init global heap failed.\n"); return; } @@ -91,14 +96,17 @@ void iwasm_main(void *arg1, void *arg2, void *arg3) /* load WASM module */ if (!(wasm_module = wasm_runtime_load(wasm_file_buf, wasm_file_size, - error_buf, sizeof(error_buf)))) { + error_buf, sizeof(error_buf)))) { wasm_printf("%s\n", error_buf); goto fail2; } /* instantiate the module */ - if (!(wasm_module_inst = wasm_runtime_instantiate(wasm_module, 8 * 1024, - 8 * 1024, error_buf, sizeof(error_buf)))) { + if (!(wasm_module_inst = wasm_runtime_instantiate(wasm_module, + CONFIG_APP_STACK_SIZE, + CONFIG_APP_HEAP_SIZE, + error_buf, + sizeof(error_buf)))) { wasm_printf("%s\n", error_buf); goto fail3; } @@ -119,24 +127,23 @@ void iwasm_main(void *arg1, void *arg2, void *arg3) fail1: bh_memory_destroy(); } -#define DEFAULT_THREAD_STACKSIZE (6 * 1024) -#define DEFAULT_THREAD_PRIORITY 5 +#define MAIN_THREAD_STACK_SIZE (CONFIG_MAIN_THREAD_STACK_SIZE) +#define MAIN_THREAD_PRIORITY 5 -K_THREAD_STACK_DEFINE(iwasm_main_thread_stack, DEFAULT_THREAD_STACKSIZE); +K_THREAD_STACK_DEFINE(iwasm_main_thread_stack, MAIN_THREAD_STACK_SIZE); static struct k_thread iwasm_main_thread; bool iwasm_init(void) { k_tid_t tid = k_thread_create(&iwasm_main_thread, iwasm_main_thread_stack, - DEFAULT_THREAD_STACKSIZE, iwasm_main, NULL, NULL, NULL, - DEFAULT_THREAD_PRIORITY, 0, K_NO_WAIT); + MAIN_THREAD_STACK_SIZE, + iwasm_main, NULL, NULL, NULL, + MAIN_THREAD_PRIORITY, 0, K_NO_WAIT); return tid ? true : false; } -#ifndef CONFIG_AEE_ENABLE void main(void) { iwasm_init(); } -#endif diff --git a/core/iwasm/runtime/include/bh_memory.h b/core/iwasm/runtime/include/bh_memory.h new file mode 100644 index 000000000..352137a34 --- /dev/null +++ b/core/iwasm/runtime/include/bh_memory.h @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _BH_MEMORY_H +#define _BH_MEMORY_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define BH_KB (1024) +#define BH_MB ((BH_KB)*1024) +#define BH_GB ((BH_MB)*1024) + +/** + * Initialize memory allocator with a pool, the bh_malloc/bh_free function + * will malloc/free memory from the pool + * + * @param mem the pool buffer + * @param bytes the size bytes of the buffer + * + * @return 0 if success, -1 otherwise + */ +int bh_memory_init_with_pool(void *mem, unsigned int bytes); + +/** + * Initialize memory allocator with memory allocator, the bh_malloc/bh_free + * function will malloc/free memory with the allocator passed + * + * @param malloc_func the malloc function + * @param free_func the free function + * + * @return 0 if success, -1 otherwise + */ +int bh_memory_init_with_allocator(void *malloc_func, void *free_func); + +/** + * Destroy memory + */ +void bh_memory_destroy(); + +/** + * Get the pool size of memory, if memory is initialized with allocator, + * return 1GB by default. + */ +int bh_memory_pool_size(); + +#if BEIHAI_ENABLE_MEMORY_PROFILING == 0 + +/** + * This function allocates a memory chunk from system + * + * @param size bytes need allocate + * + * @return the pointer to memory allocated + */ +void* bh_malloc(unsigned int size); + +/** + * This function frees memory chunk + * + * @param ptr the pointer to memory need free + */ +void bh_free(void *ptr); + +#else + +void* bh_malloc_profile(const char *file, int line, const char *func, unsigned int size); +void bh_free_profile(const char *file, int line, const char *func, void *ptr); + +#define bh_malloc(size) bh_malloc_profile(__FILE__, __LINE__, __func__, size) +#define bh_free(ptr) bh_free_profile(__FILE__, __LINE__, __func__, ptr) + +/** + * Print current memory profiling data + * + * @param file file name of the caller + * @param line line of the file of the caller + * @param func function name of the caller + */ +void memory_profile_print(const char *file, int line, const char *func, int alloc); + +/** + * Summarize memory usage and print it out + * Can use awk to analyze the output like below: + * awk -F: '{print $2,$4,$6,$8,$9}' OFS="\t" ./out.txt | sort -n -r -k 1 + */ +void memory_usage_summarize(); + +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* #ifndef _BH_MEMORY_H */ + diff --git a/core/iwasm/runtime/vmcore-wasm/wasm_application.c b/core/iwasm/runtime/vmcore-wasm/wasm_application.c index 5073ef2e3..cdcb56809 100644 --- a/core/iwasm/runtime/vmcore-wasm/wasm_application.c +++ b/core/iwasm/runtime/vmcore-wasm/wasm_application.c @@ -293,10 +293,15 @@ wasm_application_execute_func(WASMModuleInstance *module_inst, break; case VALUE_TYPE_I64: { + char buf[16]; union { uint64 val; uint32 parts[2]; } u; u.parts[0] = argv1[0]; u.parts[1] = argv1[1]; - wasm_printf("0x%llx:i64", u.val); + if (sizeof(long) == 4) + snprintf(buf, sizeof(buf), "%s", "0x%llx:i64"); + else + snprintf(buf, sizeof(buf), "%s", "0x%lx:i64"); + wasm_printf(buf, u.val); break; } case VALUE_TYPE_F32: diff --git a/core/iwasm/runtime/vmcore-wasm/wasm_interp.c b/core/iwasm/runtime/vmcore-wasm/wasm_interp.c index f0b0beba4..04cf74400 100644 --- a/core/iwasm/runtime/vmcore-wasm/wasm_interp.c +++ b/core/iwasm/runtime/vmcore-wasm/wasm_interp.c @@ -753,7 +753,7 @@ wasm_interp_call_func_bytecode(WASMThread *self, uint32 i, depth, cond, count, fidx, tidx, frame_size = 0, all_cell_num = 0; int32 didx, val; uint8 *else_addr, *end_addr; - uint8 *maddr; + uint8 *maddr = NULL; #if WASM_ENABLE_LABELS_AS_VALUES != 0 #define HANDLE_OPCODE(op) &&HANDLE_##op @@ -1148,70 +1148,98 @@ wasm_interp_call_func_bytecode(WASMThread *self, /* memory load instructions */ HANDLE_OP (WASM_OP_I32_LOAD): - DEF_OP_LOAD(PUSH_I32(*(int32*)maddr)); - HANDLE_OP_END (); - HANDLE_OP (WASM_OP_I64_LOAD): - DEF_OP_LOAD(PUSH_I64(GET_I64_FROM_ADDR((uint32*)maddr))); - HANDLE_OP_END (); - HANDLE_OP (WASM_OP_F32_LOAD): - DEF_OP_LOAD(PUSH_F32(*(float32*)maddr)); - HANDLE_OP_END (); - HANDLE_OP (WASM_OP_F64_LOAD): - DEF_OP_LOAD(PUSH_F64(GET_F64_FROM_ADDR((uint32*)maddr))); - HANDLE_OP_END (); - HANDLE_OP (WASM_OP_I32_LOAD8_S): - DEF_OP_LOAD(PUSH_I32(sign_ext_8_32(*(int8*)maddr))); - HANDLE_OP_END (); - HANDLE_OP (WASM_OP_I32_LOAD8_U): - DEF_OP_LOAD(PUSH_I32((uint32)(*(uint8*)maddr))); - HANDLE_OP_END (); - HANDLE_OP (WASM_OP_I32_LOAD16_S): - DEF_OP_LOAD(PUSH_I32(sign_ext_16_32(*(int16*)maddr))); - HANDLE_OP_END (); - HANDLE_OP (WASM_OP_I32_LOAD16_U): - DEF_OP_LOAD(PUSH_I32((uint32)(*(uint16*)maddr))); - HANDLE_OP_END (); - HANDLE_OP (WASM_OP_I64_LOAD8_S): - DEF_OP_LOAD(PUSH_I64(sign_ext_8_64(*(int8*)maddr))); - HANDLE_OP_END (); - HANDLE_OP (WASM_OP_I64_LOAD8_U): - DEF_OP_LOAD(PUSH_I64((uint64)(*(uint8*)maddr))); - HANDLE_OP_END (); - HANDLE_OP (WASM_OP_I64_LOAD16_S): - DEF_OP_LOAD(PUSH_I64(sign_ext_16_64(*(int16*)maddr))); - HANDLE_OP_END (); - HANDLE_OP (WASM_OP_I64_LOAD16_U): - DEF_OP_LOAD(PUSH_I64((uint64)(*(uint16*)maddr))); - HANDLE_OP_END (); - HANDLE_OP (WASM_OP_I64_LOAD32_S): - DEF_OP_LOAD(PUSH_I64(sign_ext_32_64(*(int32*)maddr))); - HANDLE_OP_END (); - HANDLE_OP (WASM_OP_I64_LOAD32_U): - DEF_OP_LOAD(PUSH_I64((uint64)(*(uint32*)maddr))); - HANDLE_OP_END (); + { + uint32 offset, flags, addr; + GET_OPCODE(); + read_leb_uint32(frame_ip, frame_ip_end, flags); + read_leb_uint32(frame_ip, frame_ip_end, offset); + addr = POP_I32(); + CHECK_MEMORY_OVERFLOW(); +#if WASM_ENABLE_LABELS_AS_VALUES != 0 + static const void *handle_load_table[] = { + &&HANDLE_LOAD_WASM_OP_I32_LOAD, + &&HANDLE_LOAD_WASM_OP_I64_LOAD, + &&HANDLE_LOAD_WASM_OP_F32_LOAD, + &&HANDLE_LOAD_WASM_OP_F64_LOAD, + &&HANDLE_LOAD_WASM_OP_I32_LOAD8_S, + &&HANDLE_LOAD_WASM_OP_I32_LOAD8_U, + &&HANDLE_LOAD_WASM_OP_I32_LOAD16_S, + &&HANDLE_LOAD_WASM_OP_I32_LOAD16_U, + &&HANDLE_LOAD_WASM_OP_I64_LOAD8_S, + &&HANDLE_LOAD_WASM_OP_I64_LOAD8_U, + &&HANDLE_LOAD_WASM_OP_I64_LOAD16_S, + &&HANDLE_LOAD_WASM_OP_I64_LOAD16_U, + &&HANDLE_LOAD_WASM_OP_I64_LOAD32_S, + &&HANDLE_LOAD_WASM_OP_I64_LOAD32_U + }; + #define HANDLE_OP_LOAD(opcode) HANDLE_LOAD_##opcode + goto *handle_load_table[opcode - WASM_OP_I32_LOAD]; +#else + #define HANDLE_OP_LOAD(opcode) case opcode + switch (opcode) +#endif + { + HANDLE_OP_LOAD(WASM_OP_I32_LOAD): + PUSH_I32(*(int32*)maddr); + HANDLE_OP_END(); + HANDLE_OP_LOAD(WASM_OP_I64_LOAD): + PUSH_I64(GET_I64_FROM_ADDR((uint32*)maddr)); + HANDLE_OP_END(); + HANDLE_OP_LOAD(WASM_OP_F32_LOAD): + PUSH_F32(*(float32*)maddr); + HANDLE_OP_END(); + HANDLE_OP_LOAD(WASM_OP_F64_LOAD): + PUSH_F64(GET_F64_FROM_ADDR((uint32*)maddr)); + HANDLE_OP_END(); + HANDLE_OP_LOAD(WASM_OP_I32_LOAD8_S): + PUSH_I32(sign_ext_8_32(*(int8*)maddr)); + HANDLE_OP_END(); + HANDLE_OP_LOAD(WASM_OP_I32_LOAD8_U): + PUSH_I32((uint32)(*(uint8*)maddr)); + HANDLE_OP_END(); + HANDLE_OP_LOAD(WASM_OP_I32_LOAD16_S): + PUSH_I32(sign_ext_16_32(*(int16*)maddr)); + HANDLE_OP_END(); + HANDLE_OP_LOAD(WASM_OP_I32_LOAD16_U): + PUSH_I32((uint32)(*(uint16*)maddr)); + HANDLE_OP_END(); + HANDLE_OP_LOAD(WASM_OP_I64_LOAD8_S): + PUSH_I64(sign_ext_8_64(*(int8*)maddr)); + HANDLE_OP_END(); + HANDLE_OP_LOAD(WASM_OP_I64_LOAD8_U): + PUSH_I64((uint64)(*(uint8*)maddr)); + HANDLE_OP_END(); + HANDLE_OP_LOAD(WASM_OP_I64_LOAD16_S): + PUSH_I64(sign_ext_16_64(*(int16*)maddr)); + HANDLE_OP_END(); + HANDLE_OP_LOAD(WASM_OP_I64_LOAD16_U): + PUSH_I64((uint64)(*(uint16*)maddr)); + HANDLE_OP_END(); + HANDLE_OP_LOAD(WASM_OP_I64_LOAD32_S): + PUSH_I64(sign_ext_32_64(*(int32*)maddr)); + HANDLE_OP_END(); + HANDLE_OP_LOAD(WASM_OP_I64_LOAD32_U): + PUSH_I64((uint64)(*(uint32*)maddr)); + HANDLE_OP_END(); + } + (void)flags; + HANDLE_OP_END (); + } /* memory store instructions */ - HANDLE_OP (WASM_OP_I32_STORE): - DEF_OP_STORE(uint32, I32, *(int32*)maddr = sval); - HANDLE_OP_END (); - - HANDLE_OP (WASM_OP_I64_STORE): - DEF_OP_STORE(uint64, I64, PUT_I64_TO_ADDR((uint32*)maddr, sval)); - HANDLE_OP_END (); - HANDLE_OP (WASM_OP_F32_STORE): { uint32 offset, flags, addr; @@ -1241,25 +1269,63 @@ wasm_interp_call_func_bytecode(WASMThread *self, HANDLE_OP_END (); } + HANDLE_OP (WASM_OP_I32_STORE): HANDLE_OP (WASM_OP_I32_STORE8): - DEF_OP_STORE(uint32, I32, *(uint8*)maddr = (uint8)sval); - HANDLE_OP_END (); - HANDLE_OP (WASM_OP_I32_STORE16): - DEF_OP_STORE(uint32, I32, *(uint16*)maddr = (uint16)sval); - HANDLE_OP_END (); + { + uint32 offset, flags, addr; + uint32 sval; + GET_OPCODE(); + read_leb_uint32(frame_ip, frame_ip_end, flags); + read_leb_uint32(frame_ip, frame_ip_end, offset); + sval = POP_I32(); + addr = POP_I32(); + CHECK_MEMORY_OVERFLOW(); + switch (opcode) { + case WASM_OP_I32_STORE: + *(int32*)maddr = sval; + break; + case WASM_OP_I32_STORE8: + *(uint8*)maddr = (uint8)sval; + break; + case WASM_OP_I32_STORE16: + *(uint16*)maddr = (uint16)sval; + break; + } + (void)flags; + HANDLE_OP_END (); + } + HANDLE_OP (WASM_OP_I64_STORE): HANDLE_OP (WASM_OP_I64_STORE8): - DEF_OP_STORE(uint64, I64, *(uint8*)maddr = (uint8)sval); - HANDLE_OP_END (); - HANDLE_OP (WASM_OP_I64_STORE16): - DEF_OP_STORE(uint64, I64, *(uint16*)maddr = (uint16)sval); - HANDLE_OP_END (); - HANDLE_OP (WASM_OP_I64_STORE32): - DEF_OP_STORE(uint64, I64, *(uint32*)maddr = (uint32)sval); - HANDLE_OP_END (); + { + uint32 offset, flags, addr; + uint64 sval; + GET_OPCODE(); + read_leb_uint32(frame_ip, frame_ip_end, flags); + read_leb_uint32(frame_ip, frame_ip_end, offset); + sval = POP_I64(); + addr = POP_I32(); + CHECK_MEMORY_OVERFLOW(); + switch (opcode) { + case WASM_OP_I64_STORE: + PUT_I64_TO_ADDR((uint32*)maddr, sval); + break; + case WASM_OP_I64_STORE8: + *(uint8*)maddr = (uint8)sval; + break; + case WASM_OP_I64_STORE16: + *(uint16*)maddr = (uint16)sval; + break; + case WASM_OP_I64_STORE32: + *(uint32*)maddr = (uint32)sval; + break; + } + (void)flags; + HANDLE_OP_END (); + } /* memory size and memory grow instructions */ HANDLE_OP (WASM_OP_MEMORY_SIZE): diff --git a/core/iwasm/runtime/vmcore-wasm/wasm_runtime.c b/core/iwasm/runtime/vmcore-wasm/wasm_runtime.c index 35efd7a99..ec37222bd 100644 --- a/core/iwasm/runtime/vmcore-wasm/wasm_runtime.c +++ b/core/iwasm/runtime/vmcore-wasm/wasm_runtime.c @@ -947,18 +947,11 @@ wasm_runtime_instantiate(WASMModule *module, wasm_runtime_set_tlr(&module_inst->main_tlr); module_inst->main_tlr.handle = ws_self_thread(); - /* Execute __post_instantiate function */ - if (!execute_post_inst_function(module_inst)) { - const char *exception = wasm_runtime_get_exception(module_inst); - wasm_printf("%s\n", exception); - wasm_runtime_deinstantiate(module_inst); - return NULL; - } - - /* Execute start function */ - if (!execute_start_function(module_inst)) { - const char *exception = wasm_runtime_get_exception(module_inst); - wasm_printf("%s\n", exception); + /* Execute __post_instantiate and start function */ + if (!execute_post_inst_function(module_inst) + || !execute_start_function(module_inst)) { + set_error_buf(error_buf, error_buf_size, + module_inst->cur_exception); wasm_runtime_deinstantiate(module_inst); return NULL; } From e8011b141f07486b3d910b2a84e98dc35b0538ee Mon Sep 17 00:00:00 2001 From: wenyongh Date: Wed, 28 Aug 2019 15:06:04 +0800 Subject: [PATCH 07/20] Add more security checks for libc wrapper API's (#105) --- core/iwasm/lib/native/libc/libc_wrapper.c | 101 +++++++++++++----- core/iwasm/runtime/include/wasm_export.h | 32 ++++++ core/iwasm/runtime/vmcore-wasm/wasm_runtime.c | 78 ++++++++++++++ 3 files changed, 187 insertions(+), 24 deletions(-) diff --git a/core/iwasm/lib/native/libc/libc_wrapper.c b/core/iwasm/lib/native/libc/libc_wrapper.c index d443888cf..6d3ac0c9f 100644 --- a/core/iwasm/lib/native/libc/libc_wrapper.c +++ b/core/iwasm/lib/native/libc/libc_wrapper.c @@ -52,6 +52,29 @@ wasm_runtime_set_llvm_stack(wasm_module_inst_t module, uint32 llvm_stack); #define module_free(offset) \ wasm_runtime_module_free(module_inst, offset) +static bool +validate_str_addr(wasm_module_inst_t module_inst, int32 str_offset) +{ + int32 app_end_offset; + char *str, *str_end; + + if (!wasm_runtime_get_app_addr_range(module_inst, str_offset, + NULL, &app_end_offset)) + goto fail; + + str = addr_app_to_native(str_offset); + str_end = str + (app_end_offset - str_offset); + while (str < str_end && *str != '\0') + str++; + if (str == str_end) + goto fail; + return true; + +fail: + wasm_runtime_set_exception(module_inst, "out of bounds memory access"); + return false; +} + typedef int (*out_func_t)(int c, void *ctx); enum pad_type { @@ -64,9 +87,14 @@ enum pad_type { typedef char *_va_list; #define _INTSIZEOF(n) \ ((sizeof(n) + 3) & ~3) -#define _va_arg(ap,t) \ +#define _va_arg(ap, t) \ (*(t*)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t))) +#define CHECK_VA_ARG(ap, t) do { \ + if ((uint8*)ap + _INTSIZEOF(t) > native_end_addr) \ + goto fail; \ +} while (0) + /** * @brief Output an unsigned int in hex format * @@ -172,14 +200,19 @@ print_err(out_func_t out, void *ctx) out('R', ctx); } -static void -_vprintf(out_func_t out, void *ctx, const char *fmt, _va_list ap, - wasm_module_inst_t module_inst) +static bool +_vprintf_wa(out_func_t out, void *ctx, const char *fmt, _va_list ap, + wasm_module_inst_t module_inst) { int might_format = 0; /* 1 if encountered a '%' */ enum pad_type padding = PAD_NONE; int min_width = -1; int long_ctr = 0; + uint8 *native_end_addr; + + if (!wasm_runtime_get_native_addr_range(module_inst, (uint8*)ap, + NULL, &native_end_addr)) + goto fail; /* fmt has already been adjusted if needed */ @@ -232,10 +265,13 @@ _vprintf(out_func_t out, void *ctx, const char *fmt, _va_list ap, int32 d; if (long_ctr < 2) { + CHECK_VA_ARG(ap, int32); d = _va_arg(ap, int32); } else { - int64 lld = _va_arg(ap, int64); + int64 lld; + CHECK_VA_ARG(ap, int64); + lld = _va_arg(ap, int64); if (lld > INT32_MAX || lld < INT32_MIN) { print_err(out, ctx); break; @@ -255,10 +291,13 @@ _vprintf(out_func_t out, void *ctx, const char *fmt, _va_list ap, uint32 u; if (long_ctr < 2) { + CHECK_VA_ARG(ap, uint32); u = _va_arg(ap, uint32); } else { - uint64 llu = _va_arg(ap, uint64); + uint64 llu; + CHECK_VA_ARG(ap, uint64); + llu = _va_arg(ap, uint64); if (llu > INT32_MAX) { print_err(out, ctx); break; @@ -281,8 +320,10 @@ _vprintf(out_func_t out, void *ctx, const char *fmt, _va_list ap, bool is_ptr = (*fmt == 'p') ? true : false; if (long_ctr < 2) { + CHECK_VA_ARG(ap, uint32); x = _va_arg(ap, uint32); } else { + CHECK_VA_ARG(ap, uint64); x = _va_arg(ap, uint64); } _printf_hex_uint(out, ctx, x, !is_ptr, padding, min_width); @@ -292,11 +333,13 @@ _vprintf(out_func_t out, void *ctx, const char *fmt, _va_list ap, case 's': { char *s; char *start; - int32 s_offset = _va_arg(ap, uint32); + int32 s_offset; - if (!validate_app_addr(s_offset, 1)) { - wasm_runtime_set_exception(module_inst, "out of bounds memory access"); - return; + CHECK_VA_ARG(ap, uint32); + s_offset = _va_arg(ap, uint32); + + if (!validate_str_addr(module_inst, s_offset)) { + return false; } s = start = addr_app_to_native(s_offset); @@ -314,7 +357,9 @@ _vprintf(out_func_t out, void *ctx, const char *fmt, _va_list ap, } case 'c': { - int c = _va_arg(ap, int); + int c; + CHECK_VA_ARG(ap, int); + c = _va_arg(ap, int); out(c, ctx); break; } @@ -336,6 +381,11 @@ _vprintf(out_func_t out, void *ctx, const char *fmt, _va_list ap, still_might_format: ++fmt; } + return true; + +fail: + wasm_runtime_set_exception(module_inst, "out of bounds memory access"); + return false; } struct str_context { @@ -391,7 +441,7 @@ parse_printf_args(wasm_module_inst_t module_inst, int32 fmt_offset, _va_list v; } u; - if (!validate_app_addr(fmt_offset, 1) + if (!validate_str_addr(module_inst, fmt_offset) || !validate_app_addr(va_list_offset, sizeof(int32))) return false; @@ -414,7 +464,8 @@ _printf_wrapper(int32 fmt_offset, int32 va_list_offset) if (!parse_printf_args(module_inst, fmt_offset, va_list_offset, &fmt, &va_args)) return 0; - _vprintf((out_func_t) printf_out, &ctx, fmt, va_args, module_inst); + if (!_vprintf_wa((out_func_t)printf_out, &ctx, fmt, va_args, module_inst)) + return 0; return ctx.count; } @@ -427,7 +478,7 @@ _sprintf_wrapper(int32 str_offset, int32 fmt_offset, int32 va_list_offset) const char *fmt; _va_list va_args; - if (!validate_app_addr(str_offset, 1)) + if (!validate_str_addr(module_inst, str_offset)) return 0; str = addr_app_to_native(str_offset); @@ -439,7 +490,8 @@ _sprintf_wrapper(int32 str_offset, int32 fmt_offset, int32 va_list_offset) ctx.max = INT_MAX; ctx.count = 0; - _vprintf((out_func_t) sprintf_out, &ctx, fmt, va_args, module_inst); + if (!_vprintf_wa((out_func_t)sprintf_out, &ctx, fmt, va_args, module_inst)) + return 0; if (ctx.count < ctx.max) { str[ctx.count] = '\0'; @@ -470,7 +522,8 @@ _snprintf_wrapper(int32 str_offset, int32 size, int32 fmt_offset, ctx.max = size; ctx.count = 0; - _vprintf((out_func_t) sprintf_out, &ctx, fmt, va_args, module_inst); + if (!_vprintf_wa((out_func_t)sprintf_out, &ctx, fmt, va_args, module_inst)) + return 0; if (ctx.count < ctx.max) { str[ctx.count] = '\0'; @@ -485,7 +538,7 @@ _puts_wrapper(int32 str_offset) wasm_module_inst_t module_inst = get_module_inst(); const char *str; - if (!validate_app_addr(str_offset, 1)) + if (!validate_str_addr(module_inst, str_offset)) return 0; str = addr_app_to_native(str_offset); @@ -507,7 +560,7 @@ _strdup_wrapper(int32 str_offset) uint32 len; int32 str_ret_offset = 0; - if (!validate_app_addr(str_offset, 1)) + if (!validate_str_addr(module_inst, str_offset)) return 0; str = addr_app_to_native(str_offset); @@ -596,7 +649,7 @@ _strchr_wrapper(int32 s_offset, int32 c) const char *s; char *ret; - if (!validate_app_addr(s_offset, 1)) + if (!validate_str_addr(module_inst, s_offset)) return s_offset; s = addr_app_to_native(s_offset); @@ -610,8 +663,8 @@ _strcmp_wrapper(int32 s1_offset, int32 s2_offset) wasm_module_inst_t module_inst = get_module_inst(); void *s1, *s2; - if (!validate_app_addr(s1_offset, 1) - || !validate_app_addr(s2_offset, 1)) + if (!validate_str_addr(module_inst, s1_offset) + || !validate_str_addr(module_inst, s2_offset)) return 0; s1 = addr_app_to_native(s1_offset); @@ -640,8 +693,8 @@ _strcpy_wrapper(int32 dst_offset, int32 src_offset) wasm_module_inst_t module_inst = get_module_inst(); char *dst, *src; - if (!validate_app_addr(dst_offset, 1) - || !validate_app_addr(src_offset, 1)) + if (!validate_str_addr(module_inst, dst_offset) + || !validate_str_addr(module_inst, src_offset)) return 0; dst = addr_app_to_native(dst_offset); @@ -672,7 +725,7 @@ _strlen_wrapper(int32 s_offset) wasm_module_inst_t module_inst = get_module_inst(); char *s; - if (!validate_app_addr(s_offset, 1)) + if (!validate_str_addr(module_inst, s_offset)) return 0; s = addr_app_to_native(s_offset); diff --git a/core/iwasm/runtime/include/wasm_export.h b/core/iwasm/runtime/include/wasm_export.h index 61de09678..e6c9df5d7 100644 --- a/core/iwasm/runtime/include/wasm_export.h +++ b/core/iwasm/runtime/include/wasm_export.h @@ -391,6 +391,38 @@ int32_t wasm_runtime_addr_native_to_app(wasm_module_inst_t module_inst, void *native_ptr); +/** + * Get the app address range (relative address) that a app address belongs to + * + * @param module_inst the WASM module instance + * @param app_offset the app address to retrieve + * @param p_app_start_offset buffer to output the app start offset if not NULL + * @param p_app_end_offset buffer to output the app end offset if not NULL + * + * @return true if success, false otherwise. + */ +bool +wasm_runtime_get_app_addr_range(wasm_module_inst_t module_inst, + int32_t app_offset, + int32_t *p_app_start_offset, + int32_t *p_app_end_offset); + +/** + * Get the native address range (absolute address) that a native address belongs to + * + * @param module_inst the WASM module instance + * @param native_ptr the native address to retrieve + * @param p_native_start_addr buffer to output the native start address if not NULL + * @param p_native_end_addr buffer to output the native end address if not NULL + * + * @return true if success, false otherwise. + */ +bool +wasm_runtime_get_native_addr_range(wasm_module_inst_t module_inst, + uint8_t *native_ptr, + uint8_t **p_native_start_addr, + uint8_t **p_native_end_addr); + #ifdef __cplusplus } #endif diff --git a/core/iwasm/runtime/vmcore-wasm/wasm_runtime.c b/core/iwasm/runtime/vmcore-wasm/wasm_runtime.c index ec37222bd..eec38bcc9 100644 --- a/core/iwasm/runtime/vmcore-wasm/wasm_runtime.c +++ b/core/iwasm/runtime/vmcore-wasm/wasm_runtime.c @@ -1302,6 +1302,84 @@ wasm_runtime_addr_native_to_app(WASMModuleInstance *module_inst, return 0; } +bool +wasm_runtime_get_app_addr_range(WASMModuleInstance *module_inst, + int32 app_offset, + int32 *p_app_start_offset, + int32 *p_app_end_offset) +{ + int32 app_start_offset, app_end_offset; + WASMMemoryInstance *memory = module_inst->default_memory; + + if (0 <= app_offset && app_offset < memory->heap_base_offset) { + app_start_offset = 0; + app_end_offset = NumBytesPerPage * memory->cur_page_count; + } + else if (memory->heap_base_offset < app_offset + && app_offset < memory->heap_base_offset + + (memory->heap_data_end - memory->heap_data)) { + app_start_offset = memory->heap_base_offset; + app_end_offset = memory->heap_base_offset + + (memory->heap_data_end - memory->heap_data); + } +#if WASM_ENABLE_EXT_MEMORY_SPACE != 0 + else if (module_inst->ext_mem_data + && module_inst->ext_mem_base_offset <= app_offset + && app_offset < module_inst->ext_mem_base_offset + + module_inst->ext_mem_size) { + app_start_offset = module_inst->ext_mem_base_offset; + app_end_offset = app_start_offset + module_inst->ext_mem_size; + } +#endif + else + return false; + + if (p_app_start_offset) + *p_app_start_offset = app_start_offset; + if (p_app_end_offset) + *p_app_end_offset = app_end_offset; + return true; +} + +bool +wasm_runtime_get_native_addr_range(WASMModuleInstance *module_inst, + uint8 *native_ptr, + uint8 **p_native_start_addr, + uint8 **p_native_end_addr) +{ + uint8 *native_start_addr, *native_end_addr; + WASMMemoryInstance *memory = module_inst->default_memory; + + if (memory->base_addr <= (uint8*)native_ptr + && (uint8*)native_ptr < memory->end_addr) { + native_start_addr = memory->memory_data; + native_end_addr = memory->memory_data + + NumBytesPerPage * memory->cur_page_count; + } + else if (memory->heap_data <= (uint8*)native_ptr + && (uint8*)native_ptr < memory->heap_data_end) { + native_start_addr = memory->heap_data; + native_end_addr = memory->heap_data_end; + } +#if WASM_ENABLE_EXT_MEMORY_SPACE != 0 + else if (module_inst->ext_mem_data + && module_inst->ext_mem_data <= (uint8*)native_ptr + && (uint8*)native_ptr < module_inst->ext_mem_data_end) { + native_start_addr = module_inst->ext_mem_data; + native_end_addr = module_inst->ext_mem_data_end; + } +#endif + else + return false; + + if (p_native_start_addr) + *p_native_start_addr = native_start_addr; + if (p_native_end_addr) + *p_native_end_addr = native_end_addr; + return true; +} + + uint32 wasm_runtime_get_temp_ret(WASMModuleInstance *module_inst) { From 907df087bf9596ac9f4c83df4532464df73d23af Mon Sep 17 00:00:00 2001 From: wenyongh Date: Wed, 28 Aug 2019 15:08:52 +0800 Subject: [PATCH 08/20] Add Linux SGX support (#106) --- core/iwasm/lib/native/libc/libc_wrapper_sgx.c | 1026 +++++++++++++++++ core/iwasm/lib/native/libc/wasm_libc.cmake | 2 +- .../iwasm/lib/native/libc/wasm_libc_sgx.cmake | 23 + core/iwasm/products/linux-sgx/CMakeLists.txt | 89 ++ .../iwasm/products/linux-sgx/ext_lib_export.c | 21 + .../platform/include/wasm_platform_log.h | 4 +- .../runtime/platform/linux-sgx/platform.cmake | 25 + .../runtime/platform/linux-sgx/wasm_native.c | 332 ++++++ core/shared-lib/include/bh_common.h | 3 + core/shared-lib/include/config.h | 4 + core/shared-lib/mem-alloc/bh_memory.c | 15 +- core/shared-lib/mem-alloc/ems/ems_alloc.c | 14 +- .../mem-alloc/ems/ems_gc_internal.h | 2 +- core/shared-lib/mem-alloc/ems/ems_kfc.c | 12 +- core/shared-lib/platform/alios/bh_platform.h | 2 + .../shared-lib/platform/linux-sgx/bh_assert.c | 69 ++ .../platform/linux-sgx/bh_definition.c | 81 ++ .../platform/linux-sgx/bh_platform.c | 67 ++ .../platform/linux-sgx/bh_platform.h | 115 ++ .../platform/linux-sgx/bh_platform_log.c | 41 + .../shared-lib/platform/linux-sgx/bh_thread.c | 190 +++ core/shared-lib/platform/linux-sgx/bh_time.c | 80 ++ .../platform/linux-sgx/shared_platform.cmake | 24 + core/shared-lib/platform/linux/bh_platform.h | 2 + .../shared-lib/platform/vxworks/bh_platform.h | 2 + core/shared-lib/platform/zephyr/bh_platform.h | 2 + 26 files changed, 2223 insertions(+), 24 deletions(-) create mode 100644 core/iwasm/lib/native/libc/libc_wrapper_sgx.c create mode 100644 core/iwasm/lib/native/libc/wasm_libc_sgx.cmake create mode 100644 core/iwasm/products/linux-sgx/CMakeLists.txt create mode 100644 core/iwasm/products/linux-sgx/ext_lib_export.c create mode 100644 core/iwasm/runtime/platform/linux-sgx/platform.cmake create mode 100644 core/iwasm/runtime/platform/linux-sgx/wasm_native.c create mode 100644 core/shared-lib/platform/linux-sgx/bh_assert.c create mode 100644 core/shared-lib/platform/linux-sgx/bh_definition.c create mode 100644 core/shared-lib/platform/linux-sgx/bh_platform.c create mode 100644 core/shared-lib/platform/linux-sgx/bh_platform.h create mode 100644 core/shared-lib/platform/linux-sgx/bh_platform_log.c create mode 100644 core/shared-lib/platform/linux-sgx/bh_thread.c create mode 100644 core/shared-lib/platform/linux-sgx/bh_time.c create mode 100644 core/shared-lib/platform/linux-sgx/shared_platform.cmake diff --git a/core/iwasm/lib/native/libc/libc_wrapper_sgx.c b/core/iwasm/lib/native/libc/libc_wrapper_sgx.c new file mode 100644 index 000000000..0b2a21bbf --- /dev/null +++ b/core/iwasm/lib/native/libc/libc_wrapper_sgx.c @@ -0,0 +1,1026 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "wasm_native.h" +#include "wasm_export.h" +#include "wasm_log.h" +#include "wasm_platform_log.h" + +void +wasm_runtime_set_exception(wasm_module_inst_t module, const char *exception); + +uint32 +wasm_runtime_get_temp_ret(wasm_module_inst_t module); + +void +wasm_runtime_set_temp_ret(wasm_module_inst_t module, uint32 temp_ret); + +uint32 +wasm_runtime_get_llvm_stack(wasm_module_inst_t module); + +void +wasm_runtime_set_llvm_stack(wasm_module_inst_t module, uint32 llvm_stack); + +#define get_module_inst() \ + wasm_runtime_get_current_module_inst() + +#define validate_app_addr(offset, size) \ + wasm_runtime_validate_app_addr(module_inst, offset, size) + +#define addr_app_to_native(offset) \ + wasm_runtime_addr_app_to_native(module_inst, offset) + +#define addr_native_to_app(ptr) \ + wasm_runtime_addr_native_to_app(module_inst, ptr) + +#define module_malloc(size) \ + wasm_runtime_module_malloc(module_inst, size) + +#define module_free(offset) \ + wasm_runtime_module_free(module_inst, offset) + +typedef int (*out_func_t)(int c, void *ctx); + +enum pad_type { + PAD_NONE, + PAD_ZERO_BEFORE, + PAD_SPACE_BEFORE, + PAD_SPACE_AFTER, +}; + +typedef char *_va_list; +#define _INTSIZEOF(n) \ + ((sizeof(n) + 3) & ~3) +#define _va_arg(ap,t) \ + (*(t*)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t))) + +#if OPS_INPUT_OUTPUT +/** + * @brief Output an unsigned int in hex format + * + * Output an unsigned int on output installed by platform at init time. Should + * be able to handle an unsigned int of any size, 32 or 64 bit. + * @param num Number to output + * + * @return N/A + */ +static void +_printf_hex_uint(out_func_t out, void *ctx, + const uint64 num, bool is_u64, + enum pad_type padding, + int min_width) +{ + int size = sizeof(num) * (is_u64 ? 2 : 1); + int found_largest_digit = 0; + int remaining = 8; /* 8 digits max */ + int digits = 0; + + for (; size; size--) { + char nibble = (num >> ((size - 1) << 2) & 0xf); + + if (nibble || found_largest_digit || size == 1) { + found_largest_digit = 1; + nibble += nibble > 9 ? 87 : 48; + out((int) nibble, ctx); + digits++; + continue; + } + + if (remaining-- <= min_width) { + if (padding == PAD_ZERO_BEFORE) { + out('0', ctx); + } else if (padding == PAD_SPACE_BEFORE) { + out(' ', ctx); + } + } + } + + if (padding == PAD_SPACE_AFTER) { + remaining = min_width * 2 - digits; + while (remaining-- > 0) { + out(' ', ctx); + } + } +} + +/** + * @brief Output an unsigned int in decimal format + * + * Output an unsigned int on output installed by platform at init time. Only + * works with 32-bit values. + * @param num Number to output + * + * @return N/A + */ +static void +_printf_dec_uint(out_func_t out, void *ctx, + const uint32 num, + enum pad_type padding, + int min_width) +{ + uint32 pos = 999999999; + uint32 remainder = num; + int found_largest_digit = 0; + int remaining = 10; /* 10 digits max */ + int digits = 1; + + /* make sure we don't skip if value is zero */ + if (min_width <= 0) { + min_width = 1; + } + + while (pos >= 9) { + if (found_largest_digit || remainder > pos) { + found_largest_digit = 1; + out((int) ((remainder / (pos + 1)) + 48), ctx); + digits++; + } else if (remaining <= min_width && padding < PAD_SPACE_AFTER) { + out((int) (padding == PAD_ZERO_BEFORE ? '0' : ' '), ctx); + digits++; + } + remaining--; + remainder %= (pos + 1); + pos /= 10; + } + out((int) (remainder + 48), ctx); + + if (padding == PAD_SPACE_AFTER) { + remaining = min_width - digits; + while (remaining-- > 0) { + out(' ', ctx); + } + } +} + +static void +print_err(out_func_t out, void *ctx) +{ + out('E', ctx); + out('R', ctx); + out('R', ctx); +} + +static void +_vprintf(out_func_t out, void *ctx, const char *fmt, _va_list ap, + wasm_module_inst_t module_inst) +{ + int might_format = 0; /* 1 if encountered a '%' */ + enum pad_type padding = PAD_NONE; + int min_width = -1; + int long_ctr = 0; + + /* fmt has already been adjusted if needed */ + + while (*fmt) { + if (!might_format) { + if (*fmt != '%') { + out((int) *fmt, ctx); + } + else { + might_format = 1; + min_width = -1; + padding = PAD_NONE; + long_ctr = 0; + } + } + else { + switch (*fmt) { + case '-': + padding = PAD_SPACE_AFTER; + goto still_might_format; + + case '0': + if (min_width < 0 && padding == PAD_NONE) { + padding = PAD_ZERO_BEFORE; + goto still_might_format; + } + /* Fall through */ + case '1' ... '9': + if (min_width < 0) { + min_width = *fmt - '0'; + } else { + min_width = 10 * min_width + *fmt - '0'; + } + + if (padding == PAD_NONE) { + padding = PAD_SPACE_BEFORE; + } + goto still_might_format; + + case 'l': + long_ctr++; + /* Fall through */ + case 'z': + case 'h': + /* FIXME: do nothing for these modifiers */ + goto still_might_format; + + case 'd': + case 'i': { + int32 d; + + if (long_ctr < 2) { + d = _va_arg(ap, int32); + } + else { + int64 lld = _va_arg(ap, int64); + if (lld > INT32_MAX || lld < INT32_MIN) { + print_err(out, ctx); + break; + } + d = (int32)lld; + } + + if (d < 0) { + out((int)'-', ctx); + d = -d; + min_width--; + } + _printf_dec_uint(out, ctx, d, padding, min_width); + break; + } + case 'u': { + uint32 u; + + if (long_ctr < 2) { + u = _va_arg(ap, uint32); + } + else { + uint64 llu = _va_arg(ap, uint64); + if (llu > INT32_MAX) { + print_err(out, ctx); + break; + } + u = (uint32)llu; + } + _printf_dec_uint(out, ctx, u, padding, min_width); + break; + } + case 'p': + out('0', ctx); + out('x', ctx); + /* left-pad pointers with zeros */ + padding = PAD_ZERO_BEFORE; + min_width = 8; + /* Fall through */ + case 'x': + case 'X': { + uint64 x; + bool is_ptr = (*fmt == 'p') ? true : false; + + if (long_ctr < 2) { + x = _va_arg(ap, uint32); + } else { + x = _va_arg(ap, uint64); + } + _printf_hex_uint(out, ctx, x, !is_ptr, padding, min_width); + break; + } + + case 's': { + char *s; + char *start; + int32 s_offset = _va_arg(ap, uint32); + + if (!validate_app_addr(s_offset, 1)) { + wasm_runtime_set_exception(module_inst, "out of bounds memory access"); + return; + } + + s = start = addr_app_to_native(s_offset); + + while (*s) + out((int) (*s++), ctx); + + if (padding == PAD_SPACE_AFTER) { + int remaining = min_width - (s - start); + while (remaining-- > 0) { + out(' ', ctx); + } + } + break; + } + + case 'c': { + int c = _va_arg(ap, int); + out(c, ctx); + break; + } + + case '%': { + out((int) '%', ctx); + break; + } + + default: + out((int) '%', ctx); + out((int) *fmt, ctx); + break; + } + + might_format = 0; + } + +still_might_format: + ++fmt; + } +} + +struct str_context { + char *str; + int max; + int count; +}; + +static int +sprintf_out(int c, struct str_context *ctx) +{ + if (!ctx->str || ctx->count >= ctx->max) { + ctx->count++; + return c; + } + + if (ctx->count == ctx->max - 1) { + ctx->str[ctx->count++] = '\0'; + } else { + ctx->str[ctx->count++] = c; + } + + return c; +} + +static int +printf_out(int c, struct str_context *ctx) +{ + bh_printf("%c", c); + ctx->count++; + return c; +} + +static inline _va_list +get_va_list(uint32 *args) +{ + union { + uint32 u; + _va_list v; + } u; + u.u = args[0]; + return u.v; +} + +static bool +parse_printf_args(wasm_module_inst_t module_inst, int32 fmt_offset, + int32 va_list_offset, const char **p_fmt, + _va_list *p_va_args) +{ + const char *fmt; + union { + uintptr_t u; + _va_list v; + } u; + + if (!validate_app_addr(fmt_offset, 1) + || !validate_app_addr(va_list_offset, sizeof(int32))) + return false; + + fmt = (const char*) addr_app_to_native(fmt_offset); + u.u = (uintptr_t) addr_app_to_native(va_list_offset); + + *p_fmt = fmt; + *p_va_args = u.v; + return true; +} + +static int +_printf_wrapper(int32 fmt_offset, int32 va_list_offset) +{ + wasm_module_inst_t module_inst = get_module_inst(); + struct str_context ctx = { NULL, 0, 0 }; + const char *fmt; + _va_list va_args; + + if (!parse_printf_args(module_inst, fmt_offset, va_list_offset, &fmt, &va_args)) + return 0; + + _vprintf((out_func_t) printf_out, &ctx, fmt, va_args, module_inst); + return ctx.count; +} + +static int +_sprintf_wrapper(int32 str_offset, int32 fmt_offset, int32 va_list_offset) +{ + wasm_module_inst_t module_inst = get_module_inst(); + struct str_context ctx; + char *str; + const char *fmt; + _va_list va_args; + + if (!validate_app_addr(str_offset, 1)) + return 0; + + str = addr_app_to_native(str_offset); + + if (!parse_printf_args(module_inst, fmt_offset, va_list_offset, &fmt, &va_args)) + return 0; + + ctx.str = str; + ctx.max = INT_MAX; + ctx.count = 0; + + _vprintf((out_func_t) sprintf_out, &ctx, fmt, va_args, module_inst); + + if (ctx.count < ctx.max) { + str[ctx.count] = '\0'; + } + + return ctx.count; +} + +static int +_snprintf_wrapper(int32 str_offset, int32 size, int32 fmt_offset, + int32 va_list_offset) +{ + wasm_module_inst_t module_inst = get_module_inst(); + struct str_context ctx; + char *str; + const char *fmt; + _va_list va_args; + + if (!validate_app_addr(str_offset, size)) + return 0; + + str = addr_app_to_native(str_offset); + + if (!parse_printf_args(module_inst, fmt_offset, va_list_offset, &fmt, &va_args)) + return 0; + + ctx.str = str; + ctx.max = size; + ctx.count = 0; + + _vprintf((out_func_t) sprintf_out, &ctx, fmt, va_args, module_inst); + + if (ctx.count < ctx.max) { + str[ctx.count] = '\0'; + } + + return ctx.count; +} + +static int +_puts_wrapper(int32 str_offset) +{ + wasm_module_inst_t module_inst = get_module_inst(); + const char *str; + + if (!validate_app_addr(str_offset, 1)) + return 0; + + str = addr_app_to_native(str_offset); + return bh_printf("%s\n", str); +} + +static int +_putchar_wrapper(int c) +{ + bh_printf("%c", c); + return 1; +} +#endif /* OPS_INPUT_OUTPUT */ + +static int32 +_memcmp_wrapper(int32 s1_offset, int32 s2_offset, int32 size) +{ + wasm_module_inst_t module_inst = get_module_inst(); + void *s1, *s2; + + if (!validate_app_addr(s1_offset, size) + || !validate_app_addr(s2_offset, size)) + return 0; + + s1 = addr_app_to_native(s1_offset); + s2 = addr_app_to_native(s2_offset); + return memcmp(s1, s2, size); +} + +static int32 +_memcpy_wrapper(int32 dst_offset, int32 src_offset, int32 size) +{ + wasm_module_inst_t module_inst = get_module_inst(); + void *dst, *src; + + if (size == 0) + return dst_offset; + + if (!validate_app_addr(dst_offset, size) + || !validate_app_addr(src_offset, size)) + return dst_offset; + + dst = addr_app_to_native(dst_offset); + src = addr_app_to_native(src_offset); + memcpy(dst, src, size); + return dst_offset; +} + +static int32 +_memmove_wrapper(int32 dst_offset, int32 src_offset, int32 size) +{ + wasm_module_inst_t module_inst = get_module_inst(); + void *dst, *src; + + if (!validate_app_addr(dst_offset, size) + || !validate_app_addr(src_offset, size)) + return dst_offset; + + dst = addr_app_to_native(dst_offset); + src = addr_app_to_native(src_offset); + memmove(dst, src, size); + return dst_offset; +} + +static int32 +_memset_wrapper(int32 s_offset, int32 c, int32 size) +{ + wasm_module_inst_t module_inst = get_module_inst(); + void *s; + + if (!validate_app_addr(s_offset, size)) + return s_offset; + + s = addr_app_to_native(s_offset); + memset(s, c, size); + return s_offset; +} + +#if OPS_UNSAFE_BUFFERS + +static int32 +_strdup_wrapper(int32 str_offset) +{ + wasm_module_inst_t module_inst = get_module_inst(); + char *str, *str_ret; + uint32 len; + int32 str_ret_offset = 0; + + if (!validate_app_addr(str_offset, 1)) + return 0; + + str = addr_app_to_native(str_offset); + + if (str) { + len = strlen(str) + 1; + + str_ret_offset = module_malloc(len); + if (str_ret_offset) { + str_ret = addr_app_to_native(str_ret_offset); + memcpy(str_ret, str, len); + } + } + + return str_ret_offset; +} + +static int32 +_strchr_wrapper(int32 s_offset, int32 c) +{ + wasm_module_inst_t module_inst = get_module_inst(); + const char *s; + char *ret; + + if (!validate_app_addr(s_offset, 1)) + return s_offset; + + s = addr_app_to_native(s_offset); + ret = strchr(s, c); + return ret ? addr_native_to_app(ret) : 0; +} + +static int32 +_strcmp_wrapper(int32 s1_offset, int32 s2_offset) +{ + wasm_module_inst_t module_inst = get_module_inst(); + void *s1, *s2; + + if (!validate_app_addr(s1_offset, 1) + || !validate_app_addr(s2_offset, 1)) + return 0; + + s1 = addr_app_to_native(s1_offset); + s2 = addr_app_to_native(s2_offset); + return strcmp(s1, s2); +} + +static int32 +_strncmp_wrapper(int32 s1_offset, int32 s2_offset, uint32 size) +{ + wasm_module_inst_t module_inst = get_module_inst(); + void *s1, *s2; + + if (!validate_app_addr(s1_offset, size) + || !validate_app_addr(s2_offset, size)) + return 0; + + s1 = addr_app_to_native(s1_offset); + s2 = addr_app_to_native(s2_offset); + return strncmp(s1, s2, size); +} + +static int32 +_strcpy_wrapper(int32 dst_offset, int32 src_offset) +{ + wasm_module_inst_t module_inst = get_module_inst(); + char *dst, *src; + + if (!validate_app_addr(dst_offset, 1) + || !validate_app_addr(src_offset, 1)) + return 0; + + dst = addr_app_to_native(dst_offset); + src = addr_app_to_native(src_offset); + strcpy(dst, src); + return dst_offset; +} + +static int32 +_strncpy_wrapper(int32 dst_offset, int32 src_offset, uint32 size) +{ + wasm_module_inst_t module_inst = get_module_inst(); + char *dst, *src; + + if (!validate_app_addr(dst_offset, size) + || !validate_app_addr(src_offset, size)) + return 0; + + dst = addr_app_to_native(dst_offset); + src = addr_app_to_native(src_offset); + strncpy(dst, src, size); + return dst_offset; +} + +static uint32 +_strlen_wrapper(int32 s_offset) +{ + wasm_module_inst_t module_inst = get_module_inst(); + char *s; + + if (!validate_app_addr(s_offset, 1)) + return 0; + + s = addr_app_to_native(s_offset); + return strlen(s); +} + +#endif /* OPS_UNSAFE_BUFFERS */ + +static int32 +_malloc_wrapper(uint32 size) +{ + wasm_module_inst_t module_inst = get_module_inst(); + return module_malloc(size); +} + +static int32 +_calloc_wrapper(uint32 nmemb, uint32 size) +{ + uint64 total_size = (uint64) nmemb * (uint64) size; + wasm_module_inst_t module_inst = get_module_inst(); + uint32 ret_offset = 0; + uint8 *ret_ptr; + + if (total_size > UINT32_MAX) + total_size = UINT32_MAX; + + ret_offset = module_malloc((uint32 )total_size); + if (ret_offset) { + ret_ptr = addr_app_to_native(ret_offset); + memset(ret_ptr, 0, (uint32) total_size); + } + + return ret_offset; +} + +static void +_free_wrapper(int32 ptr_offset) +{ + wasm_module_inst_t module_inst = get_module_inst(); + + if (!validate_app_addr(ptr_offset, 4)) + return; + return module_free(ptr_offset); +} + +static void +setTempRet0_wrapper(uint32 temp_ret) +{ + wasm_module_inst_t module_inst = get_module_inst(); + wasm_runtime_set_temp_ret(module_inst, temp_ret); +} + +static uint32 +getTempRet0_wrapper() +{ + wasm_module_inst_t module_inst = get_module_inst(); + return wasm_runtime_get_temp_ret(module_inst); +} + +static uint32 +_llvm_bswap_i16_wrapper(uint32 data) +{ + return (data & 0xFFFF0000) + | ((data & 0xFF) << 8) + | ((data & 0xFF00) >> 8); +} + +static uint32 +_llvm_bswap_i32_wrapper(uint32 data) +{ + return ((data & 0xFF) << 24) + | ((data & 0xFF00) << 8) + | ((data & 0xFF0000) >> 8) + | ((data & 0xFF000000) >> 24); +} + +static uint32 +_bitshift64Lshr_wrapper(uint32 uint64_part0, uint32 uint64_part1, + uint32 bits) +{ + wasm_module_inst_t module_inst = get_module_inst(); + union { + uint64 value; + uint32 parts[2]; + } u; + + u.parts[0] = uint64_part0; + u.parts[1] = uint64_part1; + + u.value >>= bits; + /* return low 32bit and save high 32bit to temp ret */ + wasm_runtime_set_temp_ret(module_inst, (uint32) (u.value >> 32)); + return (uint32) u.value; +} + +static uint32 +_bitshift64Shl_wrapper(uint32 int64_part0, uint32 int64_part1, + uint32 bits) +{ + wasm_module_inst_t module_inst = get_module_inst(); + union { + int64 value; + uint32 parts[2]; + } u; + + u.parts[0] = int64_part0; + u.parts[1] = int64_part1; + + u.value <<= bits; + /* return low 32bit and save high 32bit to temp ret */ + wasm_runtime_set_temp_ret(module_inst, (uint32) (u.value >> 32)); + return (uint32) u.value; +} + +static void +_llvm_stackrestore_wrapper(uint32 llvm_stack) +{ + wasm_module_inst_t module_inst = get_module_inst(); + printf("_llvm_stackrestore called!\n"); + wasm_runtime_set_llvm_stack(module_inst, llvm_stack); +} + +static uint32 +_llvm_stacksave_wrapper() +{ + wasm_module_inst_t module_inst = get_module_inst(); + printf("_llvm_stacksave called!\n"); + return wasm_runtime_get_llvm_stack(module_inst); +} + +static int32 +_emscripten_memcpy_big_wrapper(int32 dst_offset, int32 src_offset, + uint32 size) +{ + wasm_module_inst_t module_inst = get_module_inst(); + void *dst, *src; + + if (!validate_app_addr(dst_offset, size) + || !validate_app_addr(src_offset, size)) + return dst_offset; + + dst = addr_app_to_native(dst_offset); + src = addr_app_to_native(src_offset); + + memcpy(dst, src, size); + return dst_offset; +} + +static void +abort_wrapper(int32 code) +{ + wasm_module_inst_t module_inst = get_module_inst(); + char buf[32]; + snprintf(buf, sizeof(buf), "env.abort(%i)", code); + wasm_runtime_set_exception(module_inst, buf); +} + +static void +abortStackOverflow_wrapper(int32 code) +{ + wasm_module_inst_t module_inst = get_module_inst(); + char buf[32]; + snprintf(buf, sizeof(buf), "env.abortStackOverflow(%i)", code); + wasm_runtime_set_exception(module_inst, buf); +} + +static void +nullFunc_X_wrapper(int32 code) +{ + wasm_module_inst_t module_inst = get_module_inst(); + char buf[32]; + snprintf(buf, sizeof(buf), "env.nullFunc_X(%i)", code); + wasm_runtime_set_exception(module_inst, buf); +} + +/*#define ENABLE_SPEC_TEST 1*/ + +#ifdef ENABLE_SPEC_TEST +static void +print_i32_wrapper(int i32) +{ + printf("%d\n", i32); +} + +static void +print_wrapper(int i32) +{ + printf("%d\n", i32); +} +#endif + +/* TODO: add function parameter/result types check */ +#define REG_NATIVE_FUNC(module_name, func_name) \ + { #module_name, #func_name, func_name##_wrapper } + +typedef struct WASMNativeFuncDef { + const char *module_name; + const char *func_name; + void *func_ptr; +} WASMNativeFuncDef; + +static WASMNativeFuncDef native_func_defs[] = { + +#ifdef ENABLE_SPEC_TEST + REG_NATIVE_FUNC(spectest, print_i32), + REG_NATIVE_FUNC(spectest, print), +#endif + +#if OPS_INPUT_OUTPUT + REG_NATIVE_FUNC(env, _printf), + REG_NATIVE_FUNC(env, _sprintf), + REG_NATIVE_FUNC(env, _snprintf), + REG_NATIVE_FUNC(env, _puts), + REG_NATIVE_FUNC(env, _putchar), +#endif + REG_NATIVE_FUNC(env, _memcmp), + REG_NATIVE_FUNC(env, _memcpy), + REG_NATIVE_FUNC(env, _memmove), + REG_NATIVE_FUNC(env, _memset), +#if OPS_UNSAFE_BUFFERS + REG_NATIVE_FUNC(env, _strchr), + REG_NATIVE_FUNC(env, _strcmp), + REG_NATIVE_FUNC(env, _strcpy), + REG_NATIVE_FUNC(env, _strlen), + REG_NATIVE_FUNC(env, _strncmp), + REG_NATIVE_FUNC(env, _strncpy), + REG_NATIVE_FUNC(env, _strdup), +#endif + REG_NATIVE_FUNC(env, _malloc), + REG_NATIVE_FUNC(env, _calloc), + REG_NATIVE_FUNC(env, _free), + REG_NATIVE_FUNC(env, setTempRet0), + REG_NATIVE_FUNC(env, getTempRet0), + REG_NATIVE_FUNC(env, _llvm_bswap_i16), + REG_NATIVE_FUNC(env, _llvm_bswap_i32), + REG_NATIVE_FUNC(env, _bitshift64Lshr), + REG_NATIVE_FUNC(env, _bitshift64Shl), + REG_NATIVE_FUNC(env, _llvm_stackrestore), + REG_NATIVE_FUNC(env, _llvm_stacksave), + REG_NATIVE_FUNC(env, _emscripten_memcpy_big), + REG_NATIVE_FUNC(env, abort), + REG_NATIVE_FUNC(env, abortStackOverflow), + REG_NATIVE_FUNC(env, nullFunc_X) +}; + +void* +wasm_native_func_lookup(const char *module_name, const char *func_name) +{ + uint32 size = sizeof(native_func_defs) / sizeof(WASMNativeFuncDef); + WASMNativeFuncDef *func_def = native_func_defs; + WASMNativeFuncDef *func_def_end = func_def + size; + void *ret; + + if (!module_name || !func_name) + return NULL; + + while (func_def < func_def_end) { + if (!strcmp(func_def->module_name, module_name) + && (!strcmp(func_def->func_name, func_name) + || (func_def->func_name[0] == '_' + && !strcmp(func_def->func_name + 1, func_name)))) + return (void*) (uintptr_t) func_def->func_ptr; + func_def++; + } + + if ((ret = wasm_platform_native_func_lookup(module_name, func_name))) + return ret; + + return NULL; +} + +/************************************* + * Global Variables * + *************************************/ + +typedef struct WASMNativeGlobalDef { + const char *module_name; + const char *global_name; + WASMValue global_data; +} WASMNativeGlobalDef; + +static WASMNativeGlobalDef native_global_defs[] = { +#ifdef ENABLE_SPEC_TEST + { "spectest", "global_i32", .global_data.u32 = 0 }, +#endif + { "env", "STACKTOP", .global_data.u32 = 0 }, + { "env", "STACK_MAX", .global_data.u32 = 0 }, + { "env", "ABORT", .global_data.u32 = 0 }, + { "env", "memoryBase", .global_data.u32 = 0 }, + { "env", "__memory_base", .global_data.u32 = 0 }, + { "env", "tableBase", .global_data.u32 = 0 }, + { "env", "__table_base", .global_data.u32 = 0 }, + { "env", "DYNAMICTOP_PTR", .global_data.addr = 0 }, + { "env", "tempDoublePtr", .global_data.addr = 0 }, + { "global", "NaN", .global_data.u64 = 0x7FF8000000000000LL }, + { "global", "Infinity", .global_data.u64 = 0x7FF0000000000000LL } +}; + +bool +wasm_native_global_lookup(const char *module_name, const char *global_name, + WASMGlobalImport *global) +{ + uint32 size = sizeof(native_global_defs) / sizeof(WASMNativeGlobalDef); + WASMNativeGlobalDef *global_def = native_global_defs; + WASMNativeGlobalDef *global_def_end = global_def + size; + + if (!module_name || !global_name || !global) + return false; + + /* Lookup constant globals which can be defined by table */ + while (global_def < global_def_end) { + if (!strcmp(global_def->module_name, module_name) + && !strcmp(global_def->global_name, global_name)) { + global->global_data_linked = global_def->global_data; + return true; + } + global_def++; + } + + /* Lookup non-constant globals which cannot be defined by table */ + if (!strcmp(module_name, "env")) { +#if 0 /* unsupported in sgx */ + if (!strcmp(global_name, "_stdin")) { + global->global_data_linked.addr = (uintptr_t)stdin; + global->is_addr = true; + return true; + } else if (!strcmp(global_name, "_stdout")) { + global->global_data_linked.addr = (uintptr_t)stdout; + global->is_addr = true; + return true; + } else if (!strcmp(global_name, "_stderr")) { + global->global_data_linked.addr = (uintptr_t)stderr; + global->is_addr = true; + return true; + } +#endif /* OPS_INPUT_OUTPUT */ + } + + return false; +} + +bool +wasm_native_init() +{ + /* TODO: qsort the function defs and global defs. */ + return true; +} diff --git a/core/iwasm/lib/native/libc/wasm_libc.cmake b/core/iwasm/lib/native/libc/wasm_libc.cmake index 52e55123f..f70b3b81a 100644 --- a/core/iwasm/lib/native/libc/wasm_libc.cmake +++ b/core/iwasm/lib/native/libc/wasm_libc.cmake @@ -17,7 +17,7 @@ set (WASM_LIBC_DIR ${CMAKE_CURRENT_LIST_DIR}) include_directories(${WASM_LIBC_DIR}) -file (GLOB_RECURSE source_all ${WASM_LIBC_DIR}/*.c) +file (GLOB_RECURSE source_all ${WASM_LIBC_DIR}/libc_wrapper.c) set (WASM_LIBC_SOURCE ${source_all}) diff --git a/core/iwasm/lib/native/libc/wasm_libc_sgx.cmake b/core/iwasm/lib/native/libc/wasm_libc_sgx.cmake new file mode 100644 index 000000000..c2f877097 --- /dev/null +++ b/core/iwasm/lib/native/libc/wasm_libc_sgx.cmake @@ -0,0 +1,23 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set (WASM_LIBC_DIR ${CMAKE_CURRENT_LIST_DIR}) + +include_directories(${WASM_LIBC_DIR}) + + +file (GLOB_RECURSE source_all ${WASM_LIBC_DIR}/libc_wrapper_sgx.c) + +set (WASM_LIBC_SOURCE ${source_all}) + diff --git a/core/iwasm/products/linux-sgx/CMakeLists.txt b/core/iwasm/products/linux-sgx/CMakeLists.txt new file mode 100644 index 000000000..4a53f9575 --- /dev/null +++ b/core/iwasm/products/linux-sgx/CMakeLists.txt @@ -0,0 +1,89 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +cmake_minimum_required (VERSION 2.8) + +project (iwasm) + +set (PLATFORM "linux-sgx") + +# Reset default linker flags +set (CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") +set (CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "") + +add_definitions(-DUSE_SGX=1) +add_definitions(-DOPS_INPUT_OUTPUT=1) +add_definitions(-DOPS_UNSAFE_BUFFERS=0) +add_definitions(-DWASM_ENABLE_LOG=0) + +# Enable repl mode if want to test spec cases +# add_definitions(-DWASM_ENABLE_REPL) + +if (NOT ("$ENV{VALGRIND}" STREQUAL "YES")) + add_definitions(-DNVALGRIND) +endif () + +# Currently build as 64-bit by default. +set (BUILD_AS_64BIT_SUPPORT "YES") + +if (CMAKE_SIZEOF_VOID_P EQUAL 8) +if (${BUILD_AS_64BIT_SUPPORT} STREQUAL "YES") + # Add -fPIC flag if build as 64-bit + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") + set (CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS} -fPIC") +else () + add_definitions (-m32) + set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m32") + set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -m32") +endif () +endif () + +if (NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release) +endif (NOT CMAKE_BUILD_TYPE) +message ("CMAKE_BUILD_TYPE = " ${CMAKE_BUILD_TYPE}) + +set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") +set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections -Wall -Wno-unused-parameter -Wno-pedantic") + +set (SHARED_LIB_DIR ../../../shared-lib) + +include_directories (. + ../../runtime/include + ../../runtime/platform/include + ${SHARED_LIB_DIR}/include + $ENV{SGX_SDK}/include) + +enable_language (ASM) + +include (../../runtime/platform/${PLATFORM}/platform.cmake) +include (../../runtime/utils/utils.cmake) +include (../../runtime/vmcore-wasm/vmcore.cmake) +include (../../lib/native/base/wasm_lib_base.cmake) +include (../../lib/native/libc/wasm_libc_sgx.cmake) +include (${SHARED_LIB_DIR}/platform/${PLATFORM}/shared_platform.cmake) +include (${SHARED_LIB_DIR}/mem-alloc/mem_alloc.cmake) + +#add_executable (iwasm main.c ext_lib_export.c) + + +add_library (vmlib + ext_lib_export.c + ${WASM_PLATFORM_LIB_SOURCE} + ${WASM_UTILS_LIB_SOURCE} + ${VMCORE_LIB_SOURCE} + ${WASM_LIB_BASE_DIR}/base_lib_export.c + ${WASM_LIBC_SOURCE} + ${PLATFORM_SHARED_SOURCE} + ${MEM_ALLOC_SHARED_SOURCE}) diff --git a/core/iwasm/products/linux-sgx/ext_lib_export.c b/core/iwasm/products/linux-sgx/ext_lib_export.c new file mode 100644 index 000000000..8d78f3ae1 --- /dev/null +++ b/core/iwasm/products/linux-sgx/ext_lib_export.c @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "lib_export.h" + +static NativeSymbol extended_native_symbol_defs[] = { }; + +#include "ext_lib_export.h" diff --git a/core/iwasm/runtime/platform/include/wasm_platform_log.h b/core/iwasm/runtime/platform/include/wasm_platform_log.h index 3fe55bf59..e74de3ff2 100644 --- a/core/iwasm/runtime/platform/include/wasm_platform_log.h +++ b/core/iwasm/runtime/platform/include/wasm_platform_log.h @@ -17,7 +17,9 @@ #ifndef _WASM_PLATFORM_LOG #define _WASM_PLATFORM_LOG -#define wasm_printf printf +#include "bh_platform.h" + +#define wasm_printf bh_printf #define wasm_vprintf vprintf diff --git a/core/iwasm/runtime/platform/linux-sgx/platform.cmake b/core/iwasm/runtime/platform/linux-sgx/platform.cmake new file mode 100644 index 000000000..c01fd0e57 --- /dev/null +++ b/core/iwasm/runtime/platform/linux-sgx/platform.cmake @@ -0,0 +1,25 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +add_definitions (-D__POSIX__ -D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=199309L) + +set (PLATFORM_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}) + +include_directories(${PLATFORM_LIB_DIR}) +include_directories(${PLATFORM_LIB_DIR}/../include) + +file (GLOB_RECURSE source_all ${PLATFORM_LIB_DIR}/*.c) + +set (WASM_PLATFORM_LIB_SOURCE ${source_all}) + diff --git a/core/iwasm/runtime/platform/linux-sgx/wasm_native.c b/core/iwasm/runtime/platform/linux-sgx/wasm_native.c new file mode 100644 index 000000000..59b081b7b --- /dev/null +++ b/core/iwasm/runtime/platform/linux-sgx/wasm_native.c @@ -0,0 +1,332 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE /* for O_DIRECT */ +#endif + +#include "wasm_native.h" +#include "wasm_runtime.h" +#include "wasm_log.h" +#include "wasm_memory.h" +#include "wasm_platform_log.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#define get_module_inst() \ + wasm_runtime_get_current_module_inst() + +#define validate_app_addr(offset, size) \ + wasm_runtime_validate_app_addr(module_inst, offset, size) + +#define addr_app_to_native(offset) \ + wasm_runtime_addr_app_to_native(module_inst, offset) + +#define addr_native_to_app(ptr) \ + wasm_runtime_addr_native_to_app(module_inst, ptr) + +#define module_malloc(size) \ + wasm_runtime_module_malloc(module_inst, size) + +#define module_free(offset) \ + wasm_runtime_module_free(module_inst, offset) + + +static int32 +__syscall0_wrapper(int32 arg0) +{ + switch (arg0) { + case 199: /* getuid */ + /* TODO */ + default: + bh_printf("##_syscall0 called, syscall id: %d\n", arg0); + } + return 0; +} + +static int32 +__syscall1_wrapper(int32 arg0, int32 arg1) +{ + switch (arg0) { + case 6: /* close */ + /* TODO */ + default: + bh_printf("##_syscall1 called, syscall id: %d\n", arg0); + } + return 0; +} + +static int32 +__syscall2_wrapper(int32 arg0, int32 arg1, int32 arg2) +{ + switch (arg0) { + case 183: /* getcwd */ + /* TODO */ + default: + bh_printf("##_syscall2 called, syscall id: %d\n", arg0); + } + return 0; +} + +static int32 +__syscall3_wrapper(int32 arg0, int32 arg1, int32 arg2, int32 arg3) +{ + WASMModuleInstance *module_inst = get_module_inst(); + + switch (arg0) { + case 146: /* writev */ + { + /* Implement syscall 54 and syscall 146 to support printf() + for non SIDE_MODULE=1 mode */ + struct iovec_app { + int32 iov_base_offset; + uint32 iov_len; + } *vec; + int32 vec_offset = arg2, str_offset; + uint32 iov_count = arg3, i; + int32 count = 0; + char *iov_base, *str; + + if (!validate_app_addr(vec_offset, sizeof(struct iovec_app))) + return 0; + + vec = (struct iovec_app *)addr_app_to_native(vec_offset); + for (i = 0; i < iov_count; i++, vec++) { + if (vec->iov_len > 0) { + if (!validate_app_addr(vec->iov_base_offset, 1)) + return 0; + iov_base = (char*)addr_app_to_native(vec->iov_base_offset); + + if (!(str_offset = module_malloc(vec->iov_len + 1))) + return 0; + + str = addr_app_to_native(str_offset); + + memcpy(str, iov_base, vec->iov_len); + str[vec->iov_len] = '\0'; + count += wasm_printf("%s", str); + + module_free(str_offset); + } + } + return count; + } + case 145: /* readv */ + case 3: /* read*/ + case 5: /* open */ + case 221: /* fcntl */ + /* TODO */ + default: + bh_printf("##_syscall3 called, syscall id: %d\n", arg0); + } + return 0; +} + +static int32 +__syscall4_wrapper(int32 arg0, int32 arg1, int32 arg2, + int32 arg3, int32 arg4) +{ + bh_printf("##_syscall4 called, syscall id: %d\n", arg0); + return 0; +} + +static int32 +__syscall5_wrapper(int32 arg0, int32 arg1, int32 arg2, + int32 arg3, int32 arg4, int32 arg5) +{ + switch (arg0) { + case 140: /* llseek */ + /* TODO */ + default: + bh_printf("##_syscall5 called, args[0]: %d\n", arg0); + } + return 0; +} + +#define GET_EMCC_SYSCALL_ARGS() \ + WASMModuleInstance *module_inst = get_module_inst(); \ + int32 *args; \ + if (!validate_app_addr(args_off, 1)) \ + return 0; \ + args = addr_app_to_native(args_off) \ + +#define EMCC_SYSCALL_WRAPPER0(id) \ + static int32 ___syscall##id##_wrapper(int32 _id) { \ + return __syscall0_wrapper(id); \ + } + +#define EMCC_SYSCALL_WRAPPER1(id) \ + static int32 ___syscall##id##_wrapper(int32 _id, int32 args_off) {\ + GET_EMCC_SYSCALL_ARGS(); \ + return __syscall1_wrapper(id, args[0]); \ + } + +#define EMCC_SYSCALL_WRAPPER2(id) \ + static int32 ___syscall##id##_wrapper(int32 _id, int32 args_off) {\ + GET_EMCC_SYSCALL_ARGS(); \ + return __syscall2_wrapper(id, args[0], args[1]); \ + } + +#define EMCC_SYSCALL_WRAPPER3(id) \ + static int32 ___syscall##id##_wrapper(int32 _id, int32 args_off) {\ + GET_EMCC_SYSCALL_ARGS(); \ + return __syscall3_wrapper(id, args[0], args[1], args[2]); \ + } + +#define EMCC_SYSCALL_WRAPPER4(id) \ + static int32 ___syscall##id##_wrapper(int32 _id, int32 args_off) {\ + GET_EMCC_SYSCALL_ARGS(); \ + return __syscall4_wrapper(id, args[0], args[1], args[2], args[3]);\ + } + +#define EMCC_SYSCALL_WRAPPER5(id) \ + static int32 ___syscall##id##_wrapper(int32 _id, int32 args_off) {\ + GET_EMCC_SYSCALL_ARGS(); \ + return __syscall5_wrapper(id, args[0], args[1], args[2], \ + args[3], args[4]); \ + } + +EMCC_SYSCALL_WRAPPER0(199) + +EMCC_SYSCALL_WRAPPER1(6) + +EMCC_SYSCALL_WRAPPER2(183) + +EMCC_SYSCALL_WRAPPER3(3) +EMCC_SYSCALL_WRAPPER3(5) +EMCC_SYSCALL_WRAPPER3(54) +EMCC_SYSCALL_WRAPPER3(145) +EMCC_SYSCALL_WRAPPER3(146) +EMCC_SYSCALL_WRAPPER3(221) + +EMCC_SYSCALL_WRAPPER5(140) + +static int32 +getTotalMemory_wrapper() +{ + WASMModuleInstance *module_inst = wasm_runtime_get_current_module_inst(); + WASMMemoryInstance *memory = module_inst->default_memory; + return NumBytesPerPage * memory->cur_page_count; +} + +static int32 +enlargeMemory_wrapper() +{ + bool ret; + WASMModuleInstance *module_inst = wasm_runtime_get_current_module_inst(); + WASMMemoryInstance *memory = module_inst->default_memory; + uint32 DYNAMICTOP_PTR_offset = module_inst->DYNAMICTOP_PTR_offset; + uint32 addr_data_offset = *(uint32*)(memory->global_data + DYNAMICTOP_PTR_offset); + uint32 *DYNAMICTOP_PTR = (uint32*)(memory->memory_data + addr_data_offset); + uint32 memory_size_expected = *DYNAMICTOP_PTR; + uint32 total_page_count = (memory_size_expected + NumBytesPerPage - 1) / NumBytesPerPage; + + if (total_page_count < memory->cur_page_count) { + return 1; + } + else { + ret = wasm_runtime_enlarge_memory(module_inst, total_page_count - + memory->cur_page_count); + return ret ? 1 : 0; + } +} + +static void +_abort_wrapper(int32 code) +{ + WASMModuleInstance *module_inst = wasm_runtime_get_current_module_inst(); + char buf[32]; + + snprintf(buf, sizeof(buf), "env.abort(%i)", code); + wasm_runtime_set_exception(module_inst, buf); +} + +static void +abortOnCannotGrowMemory_wrapper() +{ + WASMModuleInstance *module_inst = wasm_runtime_get_current_module_inst(); + wasm_runtime_set_exception(module_inst, "abort on cannot grow memory"); +} + +static void +___setErrNo_wrapper(int32 error_no) +{ + errno = error_no; +} + +/* TODO: add function parameter/result types check */ +#define REG_NATIVE_FUNC(module_name, func_name) \ + {#module_name, #func_name, func_name##_wrapper} + +typedef struct WASMNativeFuncDef { + const char *module_name; + const char *func_name; + void *func_ptr; +} WASMNativeFuncDef; + +static WASMNativeFuncDef native_func_defs[] = { + REG_NATIVE_FUNC(env, __syscall0), + REG_NATIVE_FUNC(env, __syscall1), + REG_NATIVE_FUNC(env, __syscall2), + REG_NATIVE_FUNC(env, __syscall3), + REG_NATIVE_FUNC(env, __syscall4), + REG_NATIVE_FUNC(env, __syscall5), + REG_NATIVE_FUNC(env, ___syscall3), + REG_NATIVE_FUNC(env, ___syscall5), + REG_NATIVE_FUNC(env, ___syscall6), + REG_NATIVE_FUNC(env, ___syscall54), + REG_NATIVE_FUNC(env, ___syscall140), + REG_NATIVE_FUNC(env, ___syscall145), + REG_NATIVE_FUNC(env, ___syscall146), + REG_NATIVE_FUNC(env, ___syscall183), + REG_NATIVE_FUNC(env, ___syscall199), + REG_NATIVE_FUNC(env, ___syscall221), + REG_NATIVE_FUNC(env, _abort), + REG_NATIVE_FUNC(env, abortOnCannotGrowMemory), + REG_NATIVE_FUNC(env, enlargeMemory), + REG_NATIVE_FUNC(env, getTotalMemory), + REG_NATIVE_FUNC(env, ___setErrNo), +}; + +void* +wasm_platform_native_func_lookup(const char *module_name, + const char *func_name) +{ + uint32 size = sizeof(native_func_defs) / sizeof(WASMNativeFuncDef); + WASMNativeFuncDef *func_def = native_func_defs; + WASMNativeFuncDef *func_def_end = func_def + size; + + if (!module_name || !func_name) + return NULL; + + while (func_def < func_def_end) { + if (!strcmp(func_def->module_name, module_name) + && !strcmp(func_def->func_name, func_name)) + return (void*)(uintptr_t)func_def->func_ptr; + func_def++; + } + + return NULL; +} diff --git a/core/shared-lib/include/bh_common.h b/core/shared-lib/include/bh_common.h index 9a3366ce1..a8176dc7f 100755 --- a/core/shared-lib/include/bh_common.h +++ b/core/shared-lib/include/bh_common.h @@ -23,6 +23,9 @@ #include "bh_log.h" #include "bh_list.h" +typedef void (*bh_print_function_t)(const char* message); +void bh_set_print_function(bh_print_function_t pf); + #define bh_memcpy_s(dest, dlen, src, slen) do { \ int _ret = slen == 0 ? 0 : b_memcpy_s (dest, dlen, src, slen); \ (void)_ret; \ diff --git a/core/shared-lib/include/config.h b/core/shared-lib/include/config.h index b36753c10..63ad5efb3 100644 --- a/core/shared-lib/include/config.h +++ b/core/shared-lib/include/config.h @@ -26,7 +26,9 @@ #define DEFAULT_MEM_ALLOCATOR MEM_ALLOCATOR_EMS /* Beihai log system */ +#ifndef BEIHAI_ENABLE_LOG #define BEIHAI_ENABLE_LOG 1 +#endif /* Beihai debugger support */ #define BEIHAI_ENABLE_TOOL_AGENT 1 @@ -43,7 +45,9 @@ #endif /* WASM VM log system */ +#ifndef WASM_ENABLE_LOG #define WASM_ENABLE_LOG 1 +#endif /* WASM Interpreter labels-as-values feature */ #define WASM_ENABLE_LABELS_AS_VALUES 1 diff --git a/core/shared-lib/mem-alloc/bh_memory.c b/core/shared-lib/mem-alloc/bh_memory.c index bca697051..f0a6641e5 100644 --- a/core/shared-lib/mem-alloc/bh_memory.c +++ b/core/shared-lib/mem-alloc/bh_memory.c @@ -15,9 +15,9 @@ */ #include "bh_config.h" +#include "bh_platform.h" #include "bh_memory.h" #include "mem_alloc.h" -#include #include #if BEIHAI_ENABLE_MEMORY_PROFILING != 0 @@ -76,7 +76,7 @@ int bh_memory_init_with_pool(void *mem, unsigned int bytes) global_pool_size = bytes; return 0; } - printf("Init memory with pool (%p, %u) failed.\n", mem, bytes); + bh_printf("Init memory with pool (%p, %u) failed.\n", mem, bytes); return -1; } @@ -91,7 +91,7 @@ int bh_memory_init_with_allocator(void *_malloc_func, void *_free_func) #endif return 0; } - printf("Init memory with allocator (%p, %p) failed.\n", _malloc_func, + bh_printf("Init memory with allocator (%p, %p) failed.\n", _malloc_func, _free_func); return -1; } @@ -117,7 +117,7 @@ int bh_memory_pool_size() void* bh_malloc_internal(unsigned int size) { if (memory_mode == MEMORY_MODE_UNKNOWN) { - printf("bh_malloc failed: memory hasn't been initialize.\n"); + bh_printf("bh_malloc failed: memory hasn't been initialize.\n"); return NULL; } else if (memory_mode == MEMORY_MODE_POOL) { return mem_allocator_malloc(pool_allocator, size); @@ -129,7 +129,7 @@ void* bh_malloc_internal(unsigned int size) void bh_free_internal(void *ptr) { if (memory_mode == MEMORY_MODE_UNKNOWN) { - printf("bh_free failed: memory hasn't been initialize.\n"); + bh_printf("bh_free failed: memory hasn't been initialize.\n"); } else if (memory_mode == MEMORY_MODE_POOL) { mem_allocator_free(pool_allocator, ptr); } else { @@ -250,7 +250,7 @@ void memory_usage_summarize() profile = memory_profiles_list; while (profile) { - printf("malloc:%d:malloc_num:%d:free:%d:free_num:%d:%s\n", + bh_printf("malloc:%d:malloc_num:%d:free:%d:free_num:%d:%s\n", profile->total_malloc, profile->malloc_num, profile->total_free, @@ -267,7 +267,7 @@ void memory_profile_print(const char *file, const char *func, int alloc) { - printf("location:%s@%d:used:%d:contribution:%d\n", + bh_printf("location:%s@%d:used:%d:contribution:%d\n", func, line, memory_in_use, alloc); } @@ -328,4 +328,3 @@ void bh_free_profile(const char *file, int line, const char *func, void *ptr) } #endif /* end of BEIHAI_ENABLE_MEMORY_PROFILING */ #endif /* end of MALLOC_MEMORY_FROM_SYSTEM*/ - diff --git a/core/shared-lib/mem-alloc/ems/ems_alloc.c b/core/shared-lib/mem-alloc/ems/ems_alloc.c index d8682b6c7..2c27b71cf 100644 --- a/core/shared-lib/mem-alloc/ems/ems_alloc.c +++ b/core/shared-lib/mem-alloc/ems/ems_alloc.c @@ -118,7 +118,7 @@ static void unlink_hmu(gc_heap_t *heap, hmu_t *hmu) } if (!node) { - printf("[GC_ERROR]couldn't find the node in the normal list"); + bh_printf("[GC_ERROR]couldn't find the node in the normal list"); } } else { remove_tree_node((hmu_tree_node_t *) hmu); @@ -392,7 +392,7 @@ gc_object_t _gc_alloc_vo_i_heap(void *vheap, ret = hmu_to_obj(hmu); #if BH_ENABLE_MEMORY_PROFILING != 0 - printf("HEAP.ALLOC: heap: %p, size: %u", heap, size); + bh_printf("HEAP.ALLOC: heap: %p, size: %u", heap, size); #endif FINISH: @@ -434,7 +434,7 @@ gc_object_t _gc_alloc_jo_i_heap(void *vheap, ret = hmu_to_obj(hmu); #if BH_ENABLE_MEMORY_PROFILING != 0 - printf("HEAP.ALLOC: heap: %p, size: %u", heap, size); + bh_printf("HEAP.ALLOC: heap: %p, size: %u", heap, size); #endif FINISH: @@ -495,7 +495,7 @@ int gc_free_i_heap(void *vheap, gc_object_t obj ALLOC_EXTRA_PARAMETERS) heap->total_free_size += size; #endif #if BH_ENABLE_MEMORY_PROFILING != 0 - printf("HEAP.FREE, heap: %p, size: %u\n",heap, size); + bh_printf("HEAP.FREE, heap: %p, size: %u\n",heap, size); #endif if (!hmu_get_pinuse(hmu)) { @@ -538,12 +538,12 @@ int gc_free_i_heap(void *vheap, gc_object_t obj ALLOC_EXTRA_PARAMETERS) void gc_dump_heap_stats(gc_heap_t *heap) { - printf("heap: %p, heap start: %p\n", heap, heap->base_addr); - printf( + bh_printf("heap: %p, heap start: %p\n", heap, heap->base_addr); + bh_printf( "total malloc: totalfree: %u, current: %u, highmark: %u, gc cnt: %u\n", heap->total_free_size, heap->current_size, heap->highmark_size, heap->total_gc_count); - printf("g_total_malloc=%lu, g_total_free=%lu, occupied=%lu\n", + bh_printf("g_total_malloc=%lu, g_total_free=%lu, occupied=%lu\n", g_total_malloc, g_total_free, g_total_malloc - g_total_free); } diff --git a/core/shared-lib/mem-alloc/ems/ems_gc_internal.h b/core/shared-lib/mem-alloc/ems/ems_gc_internal.h index b717971ae..51308d2a9 100644 --- a/core/shared-lib/mem-alloc/ems/ems_gc_internal.h +++ b/core/shared-lib/mem-alloc/ems/ems_gc_internal.h @@ -21,6 +21,7 @@ extern "C" { #endif +#include "bh_platform.h" #include "bh_thread.h" #include "bh_memory.h" #include "bh_assert.h" @@ -279,4 +280,3 @@ extern int (*gct_vm_gc_finished)(void); #endif #endif - diff --git a/core/shared-lib/mem-alloc/ems/ems_kfc.c b/core/shared-lib/mem-alloc/ems/ems_kfc.c index 791a298a5..0090c317b 100644 --- a/core/shared-lib/mem-alloc/ems/ems_kfc.c +++ b/core/shared-lib/mem-alloc/ems/ems_kfc.c @@ -30,7 +30,7 @@ int gci_check_platform() { #define CHECK(x, y) do { \ if((x) != (y)) { \ - printf("Platform checking failed on LINE %d at FILE %s.", \ + bh_printf("Platform checking failed on LINE %d at FILE %s.", \ __LINE__, __FILE__); \ return GC_ERROR; \ } \ @@ -62,12 +62,12 @@ gc_handle_t gc_init_with_pool(char *buf, gc_size_t buf_size) /* check system compatibility*/ if (gci_check_platform() == GC_ERROR) { - printf("Check platform compatibility failed"); + bh_printf("Check platform compatibility failed"); return NULL; } if (buf_size < 1024) { - printf("[GC_ERROR]heap_init_size(%d) < 1024", buf_size); + bh_printf("[GC_ERROR]heap_init_size(%d) < 1024", buf_size); return NULL; } @@ -79,12 +79,12 @@ gc_handle_t gc_init_with_pool(char *buf, gc_size_t buf_size) ret = gct_vm_mutex_init(&heap->lock); if (ret != BHT_OK) { - printf("[GC_ERROR]failed to init lock "); + bh_printf("[GC_ERROR]failed to init lock "); return NULL; } #ifdef BH_FOOTPRINT - printf("\nINIT HEAP 0x%08x %d\n", base_addr, heap_max_size); + bh_printf("\nINIT HEAP 0x%08x %d\n", base_addr, heap_max_size); #endif /* init all data structures*/ @@ -131,7 +131,7 @@ gc_handle_t gc_init_with_pool(char *buf, gc_size_t buf_size) && HMU_FC_NORMAL_MAX_SIZE < q->size); /*@NOTIFY*/ #if BH_ENABLE_MEMORY_PROFILING != 0 - printf("heap is successfully initialized with max_size=%u.", + bh_printf("heap is successfully initialized with max_size=%u.", heap_max_size); #endif return heap; diff --git a/core/shared-lib/platform/alios/bh_platform.h b/core/shared-lib/platform/alios/bh_platform.h index e23958c95..468d0b4e9 100644 --- a/core/shared-lib/platform/alios/bh_platform.h +++ b/core/shared-lib/platform/alios/bh_platform.h @@ -52,6 +52,8 @@ typedef int64_t int64; #define wa_free bh_free #define wa_strdup bh_strdup +#define bh_printf printf + typedef aos_task_t korp_thread; typedef korp_thread *korp_tid; typedef aos_task_t *aos_tid_t; diff --git a/core/shared-lib/platform/linux-sgx/bh_assert.c b/core/shared-lib/platform/linux-sgx/bh_assert.c new file mode 100644 index 000000000..b52a9aa5b --- /dev/null +++ b/core/shared-lib/platform/linux-sgx/bh_assert.c @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_platform.h" +#include "bh_assert.h" +#include +#include +#include + +#ifdef BH_TEST +#include +#endif + +#ifdef BH_TEST +/* for exception throwing */ +jmp_buf bh_test_jb; +#endif + +void bh_assert_internal(int v, const char *file_name, int line_number, + const char *expr_string) +{ + if (v) + return; + + if (!file_name) + file_name = "NULL FILENAME"; + if (!expr_string) + expr_string = "NULL EXPR_STRING"; + + printf("\nASSERTION FAILED: %s, at FILE=%s, LINE=%d\n", expr_string, + file_name, line_number); + +#ifdef BH_TEST + longjmp(bh_test_jb, 1); +#endif + + abort(); +} + +void bh_debug_internal(const char *file_name, int line_number, const char *fmt, + ...) +{ +#ifndef JEFF_TEST_VERIFIER + va_list args; + + va_start(args, fmt); + bh_assert(file_name); + + printf("\nDebug info FILE=%s, LINE=%d: ", file_name, line_number); + vprintf(fmt, args); + + va_end(args); + printf("\n"); +#endif +} + diff --git a/core/shared-lib/platform/linux-sgx/bh_definition.c b/core/shared-lib/platform/linux-sgx/bh_definition.c new file mode 100644 index 000000000..5105d0ff8 --- /dev/null +++ b/core/shared-lib/platform/linux-sgx/bh_definition.c @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_definition.h" +#include "bh_platform.h" + +int bh_return(int ret) +{ + return ret; +} + +#define RSIZE_MAX 0x7FFFFFFF +int b_memcpy_s(void * s1, unsigned int s1max, const void * s2, unsigned int n) +{ + char *dest = (char*) s1; + char *src = (char*) s2; + if (n == 0) { + return 0; + } + + if (s1 == NULL || s1max > RSIZE_MAX) { + return -1; + } + if (s2 == NULL || n > s1max) { + memset(dest, 0, s1max); + return -1; + } + memcpy(dest, src, n); + return 0; +} + +int b_strcat_s(char * s1, size_t s1max, const char * s2) +{ + if (NULL + == s1|| NULL == s2 || s1max < (strlen(s1) + strlen(s2) + 1) || s1max > RSIZE_MAX) { + return -1; + } + + strcat(s1, s2); + + return 0; +} + +int b_strcpy_s(char * s1, size_t s1max, const char * s2) +{ + if (NULL + == s1|| NULL == s2 || s1max < (strlen(s2) + 1) || s1max > RSIZE_MAX) { + return -1; + } + + strncpy(s1, s2, s1max); + + return 0; +} + +int fopen_s(FILE ** pFile, const char *filename, const char *mode) +{ + if (NULL == pFile || NULL == filename || NULL == mode) { + return -1; + } + + *pFile = fopen(filename, mode); + + if (NULL == *pFile) + return -1; + + return 0; +} diff --git a/core/shared-lib/platform/linux-sgx/bh_platform.c b/core/shared-lib/platform/linux-sgx/bh_platform.c new file mode 100644 index 000000000..2166d53ab --- /dev/null +++ b/core/shared-lib/platform/linux-sgx/bh_platform.c @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_common.h" +#include "bh_platform.h" + +#include +#include +#include + +#define FIXED_BUFFER_SIZE (1<<14) +static bh_print_function_t print_function = NULL; + +char *bh_strdup(const char *s) +{ + char *s1 = NULL; + if (s && (s1 = bh_malloc(strlen(s) + 1))) + memcpy(s1, s, strlen(s) + 1); + return s1; +} + +int bh_platform_init() +{ + return 0; +} + +int putchar(int c) +{ + return 0; +} + +int puts(const char *s) +{ + return 0; +} + +void bh_set_print_function(bh_print_function_t pf) +{ + print_function = pf; +} + +int bh_printf(const char *message, ...) +{ + if (print_function != NULL) { + char msg[FIXED_BUFFER_SIZE] = { '\0' }; + va_list ap; + va_start(ap, message); + vsnprintf(msg, FIXED_BUFFER_SIZE, message, ap); + va_end(ap); + print_function(msg); + } + + return 0; +} diff --git a/core/shared-lib/platform/linux-sgx/bh_platform.h b/core/shared-lib/platform/linux-sgx/bh_platform.h new file mode 100644 index 000000000..59cbb6d59 --- /dev/null +++ b/core/shared-lib/platform/linux-sgx/bh_platform.h @@ -0,0 +1,115 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _BH_PLATFORM_H +#define _BH_PLATFORM_H + +#include "bh_config.h" +#include "bh_types.h" +#include "bh_memory.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern int bh_printf(const char *message, ...); + +typedef uint64_t uint64; +typedef int64_t int64; + +#define DIE do{bh_debug("Die here\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); DEBUGME(void); while(1);}while(0) + +#define BH_PLATFORM "Linux-SGX" + +/* NEED qsort */ + +#define _STACK_SIZE_ADJUSTMENT (32 * 1024) + +/* Stack size of applet threads's native part. */ +#define BH_APPLET_PRESERVED_STACK_SIZE (8 * 1024 + _STACK_SIZE_ADJUSTMENT) + +/* Default thread priority */ +#define BH_THREAD_DEFAULT_PRIORITY 0 + +#define BH_ROUTINE_MODIFIER + +#define BHT_TIMEDOUT ETIMEDOUT + +#define INVALID_THREAD_ID 0xFFffFFff + +typedef int korp_tid; +typedef int korp_mutex; +typedef int korp_sem; +typedef int korp_cond; +typedef int korp_thread; +typedef void* (*thread_start_routine_t)(void*); + +#define wa_malloc bh_malloc +#define wa_free bh_free +#define wa_strdup bh_strdup + +int snprintf(char *buffer, size_t count, const char *format, ...); +double fmod(double x, double y); +float fmodf(float x, float y); +double sqrt(double x); + +#define BH_WAIT_FOREVER 0xFFFFFFFF + +#ifndef NULL +# define NULL ((void*) 0) +#endif + +/** + * Return the offset of the given field in the given type. + * + * @param Type the type containing the filed + * @param field the field in the type + * + * @return the offset of field in Type + */ +#ifndef offsetof +#define offsetof(Type, field) ((size_t)(&((Type *)0)->field)) +#endif + +#define bh_assert assert + +int b_memcpy_s(void * s1, unsigned int s1max, const void * s2, + unsigned int n); +int b_strcat_s(char * s1, size_t s1max, const char * s2); +int b_strcpy_s(char * s1, size_t s1max, const char * s2); + +char *bh_strdup(const char *s); + +int bh_platform_init(); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/core/shared-lib/platform/linux-sgx/bh_platform_log.c b/core/shared-lib/platform/linux-sgx/bh_platform_log.c new file mode 100644 index 000000000..4ff03192a --- /dev/null +++ b/core/shared-lib/platform/linux-sgx/bh_platform_log.c @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_platform.h" +#include + +void bh_log_emit(const char *fmt, va_list ap) +{ + vprintf(fmt, ap); + fflush(stdout); +} + +int bh_fprintf(FILE *stream, const char *fmt, ...) +{ + va_list ap; + int ret; + + va_start(ap, fmt); + ret = vfprintf(stream ? stream : stdout, fmt, ap); + va_end(ap); + + return ret; +} + +int bh_fflush(void *stream) +{ + return fflush(stream ? stream : stdout); +} diff --git a/core/shared-lib/platform/linux-sgx/bh_thread.c b/core/shared-lib/platform/linux-sgx/bh_thread.c new file mode 100644 index 000000000..8730e13cd --- /dev/null +++ b/core/shared-lib/platform/linux-sgx/bh_thread.c @@ -0,0 +1,190 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_thread.h" +#include "bh_assert.h" +#include "bh_memory.h" +#include +#include +#include + +int _vm_thread_sys_init() +{ + return 0; +} + +void vm_thread_sys_destroy(void) +{ +} + +int _vm_thread_create_with_prio(korp_tid *tid, thread_start_routine_t start, + void *arg, unsigned int stack_size, int prio) +{ + return BHT_ERROR; + // return BHT_OK; +} + +int _vm_thread_create(korp_tid *tid, thread_start_routine_t start, void *arg, + unsigned int stack_size) +{ + return _vm_thread_create_with_prio(tid, start, arg, stack_size, + BH_THREAD_DEFAULT_PRIORITY); +} + +korp_tid _vm_self_thread() +{ + return 0; +} + +void vm_thread_exit(void * code) +{ +} + +// storage for one thread +static void *_tls_store = NULL; + +void *_vm_tls_get(unsigned idx) +{ + return _tls_store; +} + +int _vm_tls_put(unsigned idx, void * tls) +{ + _tls_store = tls; + return BHT_OK; + //return BHT_ERROR; +} + +int _vm_mutex_init(korp_mutex *mutex) +{ + return BHT_OK; + //return BHT_ERROR; +} + +int _vm_recursive_mutex_init(korp_mutex *mutex) +{ + return BHT_OK; + //return BHT_ERROR; +} + +int _vm_mutex_destroy(korp_mutex *mutex) +{ + return BHT_OK; + //return BHT_ERROR; +} + +/* Returned error (EINVAL, EAGAIN and EDEADLK) from + locking the mutex indicates some logic error present in + the program somewhere. + Don't try to recover error for an existing unknown error.*/ +void vm_mutex_lock(korp_mutex *mutex) +{ +} + +int vm_mutex_trylock(korp_mutex *mutex) +{ + return BHT_OK; + //return BHT_ERROR; +} + +/* Returned error (EINVAL, EAGAIN and EPERM) from + unlocking the mutex indicates some logic error present + in the program somewhere. + Don't try to recover error for an existing unknown error.*/ +void vm_mutex_unlock(korp_mutex *mutex) +{ +} + +int _vm_sem_init(korp_sem* sem, unsigned int c) +{ + return BHT_OK; + //return BHT_ERROR; +} + +int _vm_sem_destroy(korp_sem *sem) +{ + return BHT_OK; + //return BHT_ERROR; +} + +int _vm_sem_wait(korp_sem *sem) +{ + return BHT_OK; + //return BHT_ERROR; +} + +int _vm_sem_reltimedwait(korp_sem *sem, int mills) +{ + return BHT_OK; + //return BHT_ERROR; +} + +int _vm_sem_post(korp_sem *sem) +{ + return BHT_OK; + //return BHT_ERROR; +} + +int _vm_cond_init(korp_cond *cond) +{ + return BHT_OK; + //return BHT_ERROR; +} + +int _vm_cond_destroy(korp_cond *cond) +{ + return BHT_OK; + //return BHT_ERROR; +} + +int _vm_cond_wait(korp_cond *cond, korp_mutex *mutex) +{ + return BHT_OK; + //return BHT_ERROR; +} + +int _vm_cond_reltimedwait(korp_cond *cond, korp_mutex *mutex, int mills) +{ + return BHT_OK; + //return BHT_ERROR; +} + +int _vm_cond_signal(korp_cond *cond) +{ + return BHT_OK; + //return BHT_ERROR; +} + +int _vm_cond_broadcast(korp_cond *cond) +{ + return BHT_OK; + //return BHT_ERROR; +} + +int _vm_thread_cancel(korp_tid thread) +{ + return 0; +} + +int _vm_thread_join(korp_tid thread, void **value_ptr, int mills) +{ + return 0; +} + +int _vm_thread_detach(korp_tid thread) +{ + return 0; +} diff --git a/core/shared-lib/platform/linux-sgx/bh_time.c b/core/shared-lib/platform/linux-sgx/bh_time.c new file mode 100644 index 000000000..0627b08d0 --- /dev/null +++ b/core/shared-lib/platform/linux-sgx/bh_time.c @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_time.h" + +#include +#include +#include +#include + +/* + * This function returns milliseconds per tick. + * @return milliseconds per tick. + */ +uint64 _bh_time_get_tick_millisecond() +{ + return sysconf(_SC_CLK_TCK); +} + +/* + * This function returns milliseconds after boot. + * @return milliseconds after boot. + */ +uint64 _bh_time_get_boot_millisecond() +{ + struct timespec ts; + if (clock_gettime(CLOCK_MONOTONIC, &ts) != 0) { + return 0; + } + + return ((uint64) ts.tv_sec) * 1000 + ts.tv_nsec / (1000 * 1000); +} + +uint32 bh_get_tick_sec() +{ + return _bh_time_get_boot_millisecond() / 1000; +} + +/* + * This function returns GMT time milliseconds since from 1970.1.1, AKA UNIX time. + * @return milliseconds since from 1970.1.1. + */ +uint64 _bh_time_get_millisecond_from_1970() +{ + struct timeb tp; + ftime(&tp); + + return ((uint64) tp.time) * 1000 + tp.millitm + - (tp.dstflag == 0 ? 0 : 60 * 60 * 1000) + tp.timezone * 60 * 1000; +} + +size_t _bh_time_strftime(char *s, size_t max, const char *format, int64 time) +{ + time_t time_sec = time / 1000; + struct timeb tp; + struct tm *ltp; + + ftime(&tp); + time_sec -= tp.timezone * 60; + + ltp = localtime(&time_sec); + if (ltp == NULL) { + return 0; + } + return strftime(s, max, format, ltp); +} + diff --git a/core/shared-lib/platform/linux-sgx/shared_platform.cmake b/core/shared-lib/platform/linux-sgx/shared_platform.cmake new file mode 100644 index 000000000..5b403a09c --- /dev/null +++ b/core/shared-lib/platform/linux-sgx/shared_platform.cmake @@ -0,0 +1,24 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set (PLATFORM_SHARED_DIR ${CMAKE_CURRENT_LIST_DIR}) + +include_directories(${PLATFORM_SHARED_DIR}) +include_directories(${PLATFORM_SHARED_DIR}/../include) + + +file (GLOB_RECURSE source_all ${PLATFORM_SHARED_DIR}/*.c) + +set (PLATFORM_SHARED_SOURCE ${source_all}) + diff --git a/core/shared-lib/platform/linux/bh_platform.h b/core/shared-lib/platform/linux/bh_platform.h index 47172c1f6..2ee9e24f3 100644 --- a/core/shared-lib/platform/linux/bh_platform.h +++ b/core/shared-lib/platform/linux/bh_platform.h @@ -77,6 +77,8 @@ typedef void* (*thread_start_routine_t)(void*); #define wa_free bh_free #define wa_strdup bh_strdup +#define bh_printf printf + int snprintf(char *buffer, size_t count, const char *format, ...); double fmod(double x, double y); float fmodf(float x, float y); diff --git a/core/shared-lib/platform/vxworks/bh_platform.h b/core/shared-lib/platform/vxworks/bh_platform.h index 142583e5b..c023549da 100644 --- a/core/shared-lib/platform/vxworks/bh_platform.h +++ b/core/shared-lib/platform/vxworks/bh_platform.h @@ -75,6 +75,8 @@ typedef void* (*thread_start_routine_t)(void*); #define wa_free bh_free #define wa_strdup bh_strdup +#define bh_printf printf + int snprintf(char *buffer, size_t count, const char *format, ...); double fmod(double x, double y); float fmodf(float x, float y); diff --git a/core/shared-lib/platform/zephyr/bh_platform.h b/core/shared-lib/platform/zephyr/bh_platform.h index 2602bee31..45f8e14ee 100644 --- a/core/shared-lib/platform/zephyr/bh_platform.h +++ b/core/shared-lib/platform/zephyr/bh_platform.h @@ -78,6 +78,8 @@ typedef void* (*thread_start_routine_t)(void*); #define wa_malloc bh_malloc #define wa_free bh_free +#define bh_printf printf + /* Unit test framework is based on C++, where the declaration of snprintf is different. */ #ifndef __cplusplus From 1806432841030fd31dacd118ad5ab1e0e69aa2f4 Mon Sep 17 00:00:00 2001 From: wenyongh Date: Wed, 28 Aug 2019 15:19:52 +0800 Subject: [PATCH 09/20] Use one libc wrapper copy for sgx and other platforms (#107) And remove bh_printf macro for other platform header files --- core/iwasm/lib/native/libc/libc_wrapper.c | 19 +- core/iwasm/lib/native/libc/libc_wrapper_sgx.c | 1026 ----------------- core/iwasm/lib/native/libc/wasm_libc.cmake | 2 +- .../iwasm/lib/native/libc/wasm_libc_sgx.cmake | 23 - core/iwasm/products/linux-sgx/CMakeLists.txt | 13 +- core/shared-lib/include/config.h | 6 +- core/shared-lib/mem-alloc/ems/ems_kfc.c | 2 +- core/shared-lib/platform/alios/bh_platform.h | 2 - .../platform/linux-sgx/bh_platform.c | 2 +- .../platform/linux-sgx/bh_platform.h | 2 +- core/shared-lib/platform/linux/bh_platform.h | 2 - .../shared-lib/platform/vxworks/bh_platform.h | 2 - core/shared-lib/platform/zephyr/bh_platform.h | 2 - 13 files changed, 26 insertions(+), 1077 deletions(-) delete mode 100644 core/iwasm/lib/native/libc/libc_wrapper_sgx.c delete mode 100644 core/iwasm/lib/native/libc/wasm_libc_sgx.cmake diff --git a/core/iwasm/lib/native/libc/libc_wrapper.c b/core/iwasm/lib/native/libc/libc_wrapper.c index 6d3ac0c9f..cf31a2b97 100644 --- a/core/iwasm/lib/native/libc/libc_wrapper.c +++ b/core/iwasm/lib/native/libc/libc_wrapper.c @@ -414,7 +414,7 @@ sprintf_out(int c, struct str_context *ctx) static int printf_out(int c, struct str_context *ctx) { - printf("%c", c); + bh_printf("%c", c); ctx->count++; return c; } @@ -542,13 +542,13 @@ _puts_wrapper(int32 str_offset) return 0; str = addr_app_to_native(str_offset); - return printf("%s\n", str); + return bh_printf("%s\n", str); } static int _putchar_wrapper(int c) { - printf("%c", c); + bh_printf("%c", c); return 1; } @@ -699,7 +699,10 @@ _strcpy_wrapper(int32 dst_offset, int32 src_offset) dst = addr_app_to_native(dst_offset); src = addr_app_to_native(src_offset); - strcpy(dst, src); + while (*src != '\0') + *dst++ = *src++; + *dst = '\0'; + return dst_offset; } @@ -842,7 +845,7 @@ static void _llvm_stackrestore_wrapper(uint32 llvm_stack) { wasm_module_inst_t module_inst = get_module_inst(); - printf("_llvm_stackrestore called!\n"); + bh_printf("_llvm_stackrestore called!\n"); wasm_runtime_set_llvm_stack(module_inst, llvm_stack); } @@ -850,7 +853,7 @@ static uint32 _llvm_stacksave_wrapper() { wasm_module_inst_t module_inst = get_module_inst(); - printf("_llvm_stacksave called!\n"); + bh_printf("_llvm_stacksave called!\n"); return wasm_runtime_get_llvm_stack(module_inst); } @@ -905,13 +908,13 @@ nullFunc_X_wrapper(int32 code) static void print_i32_wrapper(int i32) { - printf("%d\n", i32); + bh_printf("%d\n", i32); } static void print_wrapper(int i32) { - printf("%d\n", i32); + bh_printf("%d\n", i32); } #endif diff --git a/core/iwasm/lib/native/libc/libc_wrapper_sgx.c b/core/iwasm/lib/native/libc/libc_wrapper_sgx.c deleted file mode 100644 index 0b2a21bbf..000000000 --- a/core/iwasm/lib/native/libc/libc_wrapper_sgx.c +++ /dev/null @@ -1,1026 +0,0 @@ -/* - * Copyright (C) 2019 Intel Corporation. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "wasm_native.h" -#include "wasm_export.h" -#include "wasm_log.h" -#include "wasm_platform_log.h" - -void -wasm_runtime_set_exception(wasm_module_inst_t module, const char *exception); - -uint32 -wasm_runtime_get_temp_ret(wasm_module_inst_t module); - -void -wasm_runtime_set_temp_ret(wasm_module_inst_t module, uint32 temp_ret); - -uint32 -wasm_runtime_get_llvm_stack(wasm_module_inst_t module); - -void -wasm_runtime_set_llvm_stack(wasm_module_inst_t module, uint32 llvm_stack); - -#define get_module_inst() \ - wasm_runtime_get_current_module_inst() - -#define validate_app_addr(offset, size) \ - wasm_runtime_validate_app_addr(module_inst, offset, size) - -#define addr_app_to_native(offset) \ - wasm_runtime_addr_app_to_native(module_inst, offset) - -#define addr_native_to_app(ptr) \ - wasm_runtime_addr_native_to_app(module_inst, ptr) - -#define module_malloc(size) \ - wasm_runtime_module_malloc(module_inst, size) - -#define module_free(offset) \ - wasm_runtime_module_free(module_inst, offset) - -typedef int (*out_func_t)(int c, void *ctx); - -enum pad_type { - PAD_NONE, - PAD_ZERO_BEFORE, - PAD_SPACE_BEFORE, - PAD_SPACE_AFTER, -}; - -typedef char *_va_list; -#define _INTSIZEOF(n) \ - ((sizeof(n) + 3) & ~3) -#define _va_arg(ap,t) \ - (*(t*)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t))) - -#if OPS_INPUT_OUTPUT -/** - * @brief Output an unsigned int in hex format - * - * Output an unsigned int on output installed by platform at init time. Should - * be able to handle an unsigned int of any size, 32 or 64 bit. - * @param num Number to output - * - * @return N/A - */ -static void -_printf_hex_uint(out_func_t out, void *ctx, - const uint64 num, bool is_u64, - enum pad_type padding, - int min_width) -{ - int size = sizeof(num) * (is_u64 ? 2 : 1); - int found_largest_digit = 0; - int remaining = 8; /* 8 digits max */ - int digits = 0; - - for (; size; size--) { - char nibble = (num >> ((size - 1) << 2) & 0xf); - - if (nibble || found_largest_digit || size == 1) { - found_largest_digit = 1; - nibble += nibble > 9 ? 87 : 48; - out((int) nibble, ctx); - digits++; - continue; - } - - if (remaining-- <= min_width) { - if (padding == PAD_ZERO_BEFORE) { - out('0', ctx); - } else if (padding == PAD_SPACE_BEFORE) { - out(' ', ctx); - } - } - } - - if (padding == PAD_SPACE_AFTER) { - remaining = min_width * 2 - digits; - while (remaining-- > 0) { - out(' ', ctx); - } - } -} - -/** - * @brief Output an unsigned int in decimal format - * - * Output an unsigned int on output installed by platform at init time. Only - * works with 32-bit values. - * @param num Number to output - * - * @return N/A - */ -static void -_printf_dec_uint(out_func_t out, void *ctx, - const uint32 num, - enum pad_type padding, - int min_width) -{ - uint32 pos = 999999999; - uint32 remainder = num; - int found_largest_digit = 0; - int remaining = 10; /* 10 digits max */ - int digits = 1; - - /* make sure we don't skip if value is zero */ - if (min_width <= 0) { - min_width = 1; - } - - while (pos >= 9) { - if (found_largest_digit || remainder > pos) { - found_largest_digit = 1; - out((int) ((remainder / (pos + 1)) + 48), ctx); - digits++; - } else if (remaining <= min_width && padding < PAD_SPACE_AFTER) { - out((int) (padding == PAD_ZERO_BEFORE ? '0' : ' '), ctx); - digits++; - } - remaining--; - remainder %= (pos + 1); - pos /= 10; - } - out((int) (remainder + 48), ctx); - - if (padding == PAD_SPACE_AFTER) { - remaining = min_width - digits; - while (remaining-- > 0) { - out(' ', ctx); - } - } -} - -static void -print_err(out_func_t out, void *ctx) -{ - out('E', ctx); - out('R', ctx); - out('R', ctx); -} - -static void -_vprintf(out_func_t out, void *ctx, const char *fmt, _va_list ap, - wasm_module_inst_t module_inst) -{ - int might_format = 0; /* 1 if encountered a '%' */ - enum pad_type padding = PAD_NONE; - int min_width = -1; - int long_ctr = 0; - - /* fmt has already been adjusted if needed */ - - while (*fmt) { - if (!might_format) { - if (*fmt != '%') { - out((int) *fmt, ctx); - } - else { - might_format = 1; - min_width = -1; - padding = PAD_NONE; - long_ctr = 0; - } - } - else { - switch (*fmt) { - case '-': - padding = PAD_SPACE_AFTER; - goto still_might_format; - - case '0': - if (min_width < 0 && padding == PAD_NONE) { - padding = PAD_ZERO_BEFORE; - goto still_might_format; - } - /* Fall through */ - case '1' ... '9': - if (min_width < 0) { - min_width = *fmt - '0'; - } else { - min_width = 10 * min_width + *fmt - '0'; - } - - if (padding == PAD_NONE) { - padding = PAD_SPACE_BEFORE; - } - goto still_might_format; - - case 'l': - long_ctr++; - /* Fall through */ - case 'z': - case 'h': - /* FIXME: do nothing for these modifiers */ - goto still_might_format; - - case 'd': - case 'i': { - int32 d; - - if (long_ctr < 2) { - d = _va_arg(ap, int32); - } - else { - int64 lld = _va_arg(ap, int64); - if (lld > INT32_MAX || lld < INT32_MIN) { - print_err(out, ctx); - break; - } - d = (int32)lld; - } - - if (d < 0) { - out((int)'-', ctx); - d = -d; - min_width--; - } - _printf_dec_uint(out, ctx, d, padding, min_width); - break; - } - case 'u': { - uint32 u; - - if (long_ctr < 2) { - u = _va_arg(ap, uint32); - } - else { - uint64 llu = _va_arg(ap, uint64); - if (llu > INT32_MAX) { - print_err(out, ctx); - break; - } - u = (uint32)llu; - } - _printf_dec_uint(out, ctx, u, padding, min_width); - break; - } - case 'p': - out('0', ctx); - out('x', ctx); - /* left-pad pointers with zeros */ - padding = PAD_ZERO_BEFORE; - min_width = 8; - /* Fall through */ - case 'x': - case 'X': { - uint64 x; - bool is_ptr = (*fmt == 'p') ? true : false; - - if (long_ctr < 2) { - x = _va_arg(ap, uint32); - } else { - x = _va_arg(ap, uint64); - } - _printf_hex_uint(out, ctx, x, !is_ptr, padding, min_width); - break; - } - - case 's': { - char *s; - char *start; - int32 s_offset = _va_arg(ap, uint32); - - if (!validate_app_addr(s_offset, 1)) { - wasm_runtime_set_exception(module_inst, "out of bounds memory access"); - return; - } - - s = start = addr_app_to_native(s_offset); - - while (*s) - out((int) (*s++), ctx); - - if (padding == PAD_SPACE_AFTER) { - int remaining = min_width - (s - start); - while (remaining-- > 0) { - out(' ', ctx); - } - } - break; - } - - case 'c': { - int c = _va_arg(ap, int); - out(c, ctx); - break; - } - - case '%': { - out((int) '%', ctx); - break; - } - - default: - out((int) '%', ctx); - out((int) *fmt, ctx); - break; - } - - might_format = 0; - } - -still_might_format: - ++fmt; - } -} - -struct str_context { - char *str; - int max; - int count; -}; - -static int -sprintf_out(int c, struct str_context *ctx) -{ - if (!ctx->str || ctx->count >= ctx->max) { - ctx->count++; - return c; - } - - if (ctx->count == ctx->max - 1) { - ctx->str[ctx->count++] = '\0'; - } else { - ctx->str[ctx->count++] = c; - } - - return c; -} - -static int -printf_out(int c, struct str_context *ctx) -{ - bh_printf("%c", c); - ctx->count++; - return c; -} - -static inline _va_list -get_va_list(uint32 *args) -{ - union { - uint32 u; - _va_list v; - } u; - u.u = args[0]; - return u.v; -} - -static bool -parse_printf_args(wasm_module_inst_t module_inst, int32 fmt_offset, - int32 va_list_offset, const char **p_fmt, - _va_list *p_va_args) -{ - const char *fmt; - union { - uintptr_t u; - _va_list v; - } u; - - if (!validate_app_addr(fmt_offset, 1) - || !validate_app_addr(va_list_offset, sizeof(int32))) - return false; - - fmt = (const char*) addr_app_to_native(fmt_offset); - u.u = (uintptr_t) addr_app_to_native(va_list_offset); - - *p_fmt = fmt; - *p_va_args = u.v; - return true; -} - -static int -_printf_wrapper(int32 fmt_offset, int32 va_list_offset) -{ - wasm_module_inst_t module_inst = get_module_inst(); - struct str_context ctx = { NULL, 0, 0 }; - const char *fmt; - _va_list va_args; - - if (!parse_printf_args(module_inst, fmt_offset, va_list_offset, &fmt, &va_args)) - return 0; - - _vprintf((out_func_t) printf_out, &ctx, fmt, va_args, module_inst); - return ctx.count; -} - -static int -_sprintf_wrapper(int32 str_offset, int32 fmt_offset, int32 va_list_offset) -{ - wasm_module_inst_t module_inst = get_module_inst(); - struct str_context ctx; - char *str; - const char *fmt; - _va_list va_args; - - if (!validate_app_addr(str_offset, 1)) - return 0; - - str = addr_app_to_native(str_offset); - - if (!parse_printf_args(module_inst, fmt_offset, va_list_offset, &fmt, &va_args)) - return 0; - - ctx.str = str; - ctx.max = INT_MAX; - ctx.count = 0; - - _vprintf((out_func_t) sprintf_out, &ctx, fmt, va_args, module_inst); - - if (ctx.count < ctx.max) { - str[ctx.count] = '\0'; - } - - return ctx.count; -} - -static int -_snprintf_wrapper(int32 str_offset, int32 size, int32 fmt_offset, - int32 va_list_offset) -{ - wasm_module_inst_t module_inst = get_module_inst(); - struct str_context ctx; - char *str; - const char *fmt; - _va_list va_args; - - if (!validate_app_addr(str_offset, size)) - return 0; - - str = addr_app_to_native(str_offset); - - if (!parse_printf_args(module_inst, fmt_offset, va_list_offset, &fmt, &va_args)) - return 0; - - ctx.str = str; - ctx.max = size; - ctx.count = 0; - - _vprintf((out_func_t) sprintf_out, &ctx, fmt, va_args, module_inst); - - if (ctx.count < ctx.max) { - str[ctx.count] = '\0'; - } - - return ctx.count; -} - -static int -_puts_wrapper(int32 str_offset) -{ - wasm_module_inst_t module_inst = get_module_inst(); - const char *str; - - if (!validate_app_addr(str_offset, 1)) - return 0; - - str = addr_app_to_native(str_offset); - return bh_printf("%s\n", str); -} - -static int -_putchar_wrapper(int c) -{ - bh_printf("%c", c); - return 1; -} -#endif /* OPS_INPUT_OUTPUT */ - -static int32 -_memcmp_wrapper(int32 s1_offset, int32 s2_offset, int32 size) -{ - wasm_module_inst_t module_inst = get_module_inst(); - void *s1, *s2; - - if (!validate_app_addr(s1_offset, size) - || !validate_app_addr(s2_offset, size)) - return 0; - - s1 = addr_app_to_native(s1_offset); - s2 = addr_app_to_native(s2_offset); - return memcmp(s1, s2, size); -} - -static int32 -_memcpy_wrapper(int32 dst_offset, int32 src_offset, int32 size) -{ - wasm_module_inst_t module_inst = get_module_inst(); - void *dst, *src; - - if (size == 0) - return dst_offset; - - if (!validate_app_addr(dst_offset, size) - || !validate_app_addr(src_offset, size)) - return dst_offset; - - dst = addr_app_to_native(dst_offset); - src = addr_app_to_native(src_offset); - memcpy(dst, src, size); - return dst_offset; -} - -static int32 -_memmove_wrapper(int32 dst_offset, int32 src_offset, int32 size) -{ - wasm_module_inst_t module_inst = get_module_inst(); - void *dst, *src; - - if (!validate_app_addr(dst_offset, size) - || !validate_app_addr(src_offset, size)) - return dst_offset; - - dst = addr_app_to_native(dst_offset); - src = addr_app_to_native(src_offset); - memmove(dst, src, size); - return dst_offset; -} - -static int32 -_memset_wrapper(int32 s_offset, int32 c, int32 size) -{ - wasm_module_inst_t module_inst = get_module_inst(); - void *s; - - if (!validate_app_addr(s_offset, size)) - return s_offset; - - s = addr_app_to_native(s_offset); - memset(s, c, size); - return s_offset; -} - -#if OPS_UNSAFE_BUFFERS - -static int32 -_strdup_wrapper(int32 str_offset) -{ - wasm_module_inst_t module_inst = get_module_inst(); - char *str, *str_ret; - uint32 len; - int32 str_ret_offset = 0; - - if (!validate_app_addr(str_offset, 1)) - return 0; - - str = addr_app_to_native(str_offset); - - if (str) { - len = strlen(str) + 1; - - str_ret_offset = module_malloc(len); - if (str_ret_offset) { - str_ret = addr_app_to_native(str_ret_offset); - memcpy(str_ret, str, len); - } - } - - return str_ret_offset; -} - -static int32 -_strchr_wrapper(int32 s_offset, int32 c) -{ - wasm_module_inst_t module_inst = get_module_inst(); - const char *s; - char *ret; - - if (!validate_app_addr(s_offset, 1)) - return s_offset; - - s = addr_app_to_native(s_offset); - ret = strchr(s, c); - return ret ? addr_native_to_app(ret) : 0; -} - -static int32 -_strcmp_wrapper(int32 s1_offset, int32 s2_offset) -{ - wasm_module_inst_t module_inst = get_module_inst(); - void *s1, *s2; - - if (!validate_app_addr(s1_offset, 1) - || !validate_app_addr(s2_offset, 1)) - return 0; - - s1 = addr_app_to_native(s1_offset); - s2 = addr_app_to_native(s2_offset); - return strcmp(s1, s2); -} - -static int32 -_strncmp_wrapper(int32 s1_offset, int32 s2_offset, uint32 size) -{ - wasm_module_inst_t module_inst = get_module_inst(); - void *s1, *s2; - - if (!validate_app_addr(s1_offset, size) - || !validate_app_addr(s2_offset, size)) - return 0; - - s1 = addr_app_to_native(s1_offset); - s2 = addr_app_to_native(s2_offset); - return strncmp(s1, s2, size); -} - -static int32 -_strcpy_wrapper(int32 dst_offset, int32 src_offset) -{ - wasm_module_inst_t module_inst = get_module_inst(); - char *dst, *src; - - if (!validate_app_addr(dst_offset, 1) - || !validate_app_addr(src_offset, 1)) - return 0; - - dst = addr_app_to_native(dst_offset); - src = addr_app_to_native(src_offset); - strcpy(dst, src); - return dst_offset; -} - -static int32 -_strncpy_wrapper(int32 dst_offset, int32 src_offset, uint32 size) -{ - wasm_module_inst_t module_inst = get_module_inst(); - char *dst, *src; - - if (!validate_app_addr(dst_offset, size) - || !validate_app_addr(src_offset, size)) - return 0; - - dst = addr_app_to_native(dst_offset); - src = addr_app_to_native(src_offset); - strncpy(dst, src, size); - return dst_offset; -} - -static uint32 -_strlen_wrapper(int32 s_offset) -{ - wasm_module_inst_t module_inst = get_module_inst(); - char *s; - - if (!validate_app_addr(s_offset, 1)) - return 0; - - s = addr_app_to_native(s_offset); - return strlen(s); -} - -#endif /* OPS_UNSAFE_BUFFERS */ - -static int32 -_malloc_wrapper(uint32 size) -{ - wasm_module_inst_t module_inst = get_module_inst(); - return module_malloc(size); -} - -static int32 -_calloc_wrapper(uint32 nmemb, uint32 size) -{ - uint64 total_size = (uint64) nmemb * (uint64) size; - wasm_module_inst_t module_inst = get_module_inst(); - uint32 ret_offset = 0; - uint8 *ret_ptr; - - if (total_size > UINT32_MAX) - total_size = UINT32_MAX; - - ret_offset = module_malloc((uint32 )total_size); - if (ret_offset) { - ret_ptr = addr_app_to_native(ret_offset); - memset(ret_ptr, 0, (uint32) total_size); - } - - return ret_offset; -} - -static void -_free_wrapper(int32 ptr_offset) -{ - wasm_module_inst_t module_inst = get_module_inst(); - - if (!validate_app_addr(ptr_offset, 4)) - return; - return module_free(ptr_offset); -} - -static void -setTempRet0_wrapper(uint32 temp_ret) -{ - wasm_module_inst_t module_inst = get_module_inst(); - wasm_runtime_set_temp_ret(module_inst, temp_ret); -} - -static uint32 -getTempRet0_wrapper() -{ - wasm_module_inst_t module_inst = get_module_inst(); - return wasm_runtime_get_temp_ret(module_inst); -} - -static uint32 -_llvm_bswap_i16_wrapper(uint32 data) -{ - return (data & 0xFFFF0000) - | ((data & 0xFF) << 8) - | ((data & 0xFF00) >> 8); -} - -static uint32 -_llvm_bswap_i32_wrapper(uint32 data) -{ - return ((data & 0xFF) << 24) - | ((data & 0xFF00) << 8) - | ((data & 0xFF0000) >> 8) - | ((data & 0xFF000000) >> 24); -} - -static uint32 -_bitshift64Lshr_wrapper(uint32 uint64_part0, uint32 uint64_part1, - uint32 bits) -{ - wasm_module_inst_t module_inst = get_module_inst(); - union { - uint64 value; - uint32 parts[2]; - } u; - - u.parts[0] = uint64_part0; - u.parts[1] = uint64_part1; - - u.value >>= bits; - /* return low 32bit and save high 32bit to temp ret */ - wasm_runtime_set_temp_ret(module_inst, (uint32) (u.value >> 32)); - return (uint32) u.value; -} - -static uint32 -_bitshift64Shl_wrapper(uint32 int64_part0, uint32 int64_part1, - uint32 bits) -{ - wasm_module_inst_t module_inst = get_module_inst(); - union { - int64 value; - uint32 parts[2]; - } u; - - u.parts[0] = int64_part0; - u.parts[1] = int64_part1; - - u.value <<= bits; - /* return low 32bit and save high 32bit to temp ret */ - wasm_runtime_set_temp_ret(module_inst, (uint32) (u.value >> 32)); - return (uint32) u.value; -} - -static void -_llvm_stackrestore_wrapper(uint32 llvm_stack) -{ - wasm_module_inst_t module_inst = get_module_inst(); - printf("_llvm_stackrestore called!\n"); - wasm_runtime_set_llvm_stack(module_inst, llvm_stack); -} - -static uint32 -_llvm_stacksave_wrapper() -{ - wasm_module_inst_t module_inst = get_module_inst(); - printf("_llvm_stacksave called!\n"); - return wasm_runtime_get_llvm_stack(module_inst); -} - -static int32 -_emscripten_memcpy_big_wrapper(int32 dst_offset, int32 src_offset, - uint32 size) -{ - wasm_module_inst_t module_inst = get_module_inst(); - void *dst, *src; - - if (!validate_app_addr(dst_offset, size) - || !validate_app_addr(src_offset, size)) - return dst_offset; - - dst = addr_app_to_native(dst_offset); - src = addr_app_to_native(src_offset); - - memcpy(dst, src, size); - return dst_offset; -} - -static void -abort_wrapper(int32 code) -{ - wasm_module_inst_t module_inst = get_module_inst(); - char buf[32]; - snprintf(buf, sizeof(buf), "env.abort(%i)", code); - wasm_runtime_set_exception(module_inst, buf); -} - -static void -abortStackOverflow_wrapper(int32 code) -{ - wasm_module_inst_t module_inst = get_module_inst(); - char buf[32]; - snprintf(buf, sizeof(buf), "env.abortStackOverflow(%i)", code); - wasm_runtime_set_exception(module_inst, buf); -} - -static void -nullFunc_X_wrapper(int32 code) -{ - wasm_module_inst_t module_inst = get_module_inst(); - char buf[32]; - snprintf(buf, sizeof(buf), "env.nullFunc_X(%i)", code); - wasm_runtime_set_exception(module_inst, buf); -} - -/*#define ENABLE_SPEC_TEST 1*/ - -#ifdef ENABLE_SPEC_TEST -static void -print_i32_wrapper(int i32) -{ - printf("%d\n", i32); -} - -static void -print_wrapper(int i32) -{ - printf("%d\n", i32); -} -#endif - -/* TODO: add function parameter/result types check */ -#define REG_NATIVE_FUNC(module_name, func_name) \ - { #module_name, #func_name, func_name##_wrapper } - -typedef struct WASMNativeFuncDef { - const char *module_name; - const char *func_name; - void *func_ptr; -} WASMNativeFuncDef; - -static WASMNativeFuncDef native_func_defs[] = { - -#ifdef ENABLE_SPEC_TEST - REG_NATIVE_FUNC(spectest, print_i32), - REG_NATIVE_FUNC(spectest, print), -#endif - -#if OPS_INPUT_OUTPUT - REG_NATIVE_FUNC(env, _printf), - REG_NATIVE_FUNC(env, _sprintf), - REG_NATIVE_FUNC(env, _snprintf), - REG_NATIVE_FUNC(env, _puts), - REG_NATIVE_FUNC(env, _putchar), -#endif - REG_NATIVE_FUNC(env, _memcmp), - REG_NATIVE_FUNC(env, _memcpy), - REG_NATIVE_FUNC(env, _memmove), - REG_NATIVE_FUNC(env, _memset), -#if OPS_UNSAFE_BUFFERS - REG_NATIVE_FUNC(env, _strchr), - REG_NATIVE_FUNC(env, _strcmp), - REG_NATIVE_FUNC(env, _strcpy), - REG_NATIVE_FUNC(env, _strlen), - REG_NATIVE_FUNC(env, _strncmp), - REG_NATIVE_FUNC(env, _strncpy), - REG_NATIVE_FUNC(env, _strdup), -#endif - REG_NATIVE_FUNC(env, _malloc), - REG_NATIVE_FUNC(env, _calloc), - REG_NATIVE_FUNC(env, _free), - REG_NATIVE_FUNC(env, setTempRet0), - REG_NATIVE_FUNC(env, getTempRet0), - REG_NATIVE_FUNC(env, _llvm_bswap_i16), - REG_NATIVE_FUNC(env, _llvm_bswap_i32), - REG_NATIVE_FUNC(env, _bitshift64Lshr), - REG_NATIVE_FUNC(env, _bitshift64Shl), - REG_NATIVE_FUNC(env, _llvm_stackrestore), - REG_NATIVE_FUNC(env, _llvm_stacksave), - REG_NATIVE_FUNC(env, _emscripten_memcpy_big), - REG_NATIVE_FUNC(env, abort), - REG_NATIVE_FUNC(env, abortStackOverflow), - REG_NATIVE_FUNC(env, nullFunc_X) -}; - -void* -wasm_native_func_lookup(const char *module_name, const char *func_name) -{ - uint32 size = sizeof(native_func_defs) / sizeof(WASMNativeFuncDef); - WASMNativeFuncDef *func_def = native_func_defs; - WASMNativeFuncDef *func_def_end = func_def + size; - void *ret; - - if (!module_name || !func_name) - return NULL; - - while (func_def < func_def_end) { - if (!strcmp(func_def->module_name, module_name) - && (!strcmp(func_def->func_name, func_name) - || (func_def->func_name[0] == '_' - && !strcmp(func_def->func_name + 1, func_name)))) - return (void*) (uintptr_t) func_def->func_ptr; - func_def++; - } - - if ((ret = wasm_platform_native_func_lookup(module_name, func_name))) - return ret; - - return NULL; -} - -/************************************* - * Global Variables * - *************************************/ - -typedef struct WASMNativeGlobalDef { - const char *module_name; - const char *global_name; - WASMValue global_data; -} WASMNativeGlobalDef; - -static WASMNativeGlobalDef native_global_defs[] = { -#ifdef ENABLE_SPEC_TEST - { "spectest", "global_i32", .global_data.u32 = 0 }, -#endif - { "env", "STACKTOP", .global_data.u32 = 0 }, - { "env", "STACK_MAX", .global_data.u32 = 0 }, - { "env", "ABORT", .global_data.u32 = 0 }, - { "env", "memoryBase", .global_data.u32 = 0 }, - { "env", "__memory_base", .global_data.u32 = 0 }, - { "env", "tableBase", .global_data.u32 = 0 }, - { "env", "__table_base", .global_data.u32 = 0 }, - { "env", "DYNAMICTOP_PTR", .global_data.addr = 0 }, - { "env", "tempDoublePtr", .global_data.addr = 0 }, - { "global", "NaN", .global_data.u64 = 0x7FF8000000000000LL }, - { "global", "Infinity", .global_data.u64 = 0x7FF0000000000000LL } -}; - -bool -wasm_native_global_lookup(const char *module_name, const char *global_name, - WASMGlobalImport *global) -{ - uint32 size = sizeof(native_global_defs) / sizeof(WASMNativeGlobalDef); - WASMNativeGlobalDef *global_def = native_global_defs; - WASMNativeGlobalDef *global_def_end = global_def + size; - - if (!module_name || !global_name || !global) - return false; - - /* Lookup constant globals which can be defined by table */ - while (global_def < global_def_end) { - if (!strcmp(global_def->module_name, module_name) - && !strcmp(global_def->global_name, global_name)) { - global->global_data_linked = global_def->global_data; - return true; - } - global_def++; - } - - /* Lookup non-constant globals which cannot be defined by table */ - if (!strcmp(module_name, "env")) { -#if 0 /* unsupported in sgx */ - if (!strcmp(global_name, "_stdin")) { - global->global_data_linked.addr = (uintptr_t)stdin; - global->is_addr = true; - return true; - } else if (!strcmp(global_name, "_stdout")) { - global->global_data_linked.addr = (uintptr_t)stdout; - global->is_addr = true; - return true; - } else if (!strcmp(global_name, "_stderr")) { - global->global_data_linked.addr = (uintptr_t)stderr; - global->is_addr = true; - return true; - } -#endif /* OPS_INPUT_OUTPUT */ - } - - return false; -} - -bool -wasm_native_init() -{ - /* TODO: qsort the function defs and global defs. */ - return true; -} diff --git a/core/iwasm/lib/native/libc/wasm_libc.cmake b/core/iwasm/lib/native/libc/wasm_libc.cmake index f70b3b81a..52e55123f 100644 --- a/core/iwasm/lib/native/libc/wasm_libc.cmake +++ b/core/iwasm/lib/native/libc/wasm_libc.cmake @@ -17,7 +17,7 @@ set (WASM_LIBC_DIR ${CMAKE_CURRENT_LIST_DIR}) include_directories(${WASM_LIBC_DIR}) -file (GLOB_RECURSE source_all ${WASM_LIBC_DIR}/libc_wrapper.c) +file (GLOB_RECURSE source_all ${WASM_LIBC_DIR}/*.c) set (WASM_LIBC_SOURCE ${source_all}) diff --git a/core/iwasm/lib/native/libc/wasm_libc_sgx.cmake b/core/iwasm/lib/native/libc/wasm_libc_sgx.cmake deleted file mode 100644 index c2f877097..000000000 --- a/core/iwasm/lib/native/libc/wasm_libc_sgx.cmake +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright (C) 2019 Intel Corporation. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -set (WASM_LIBC_DIR ${CMAKE_CURRENT_LIST_DIR}) - -include_directories(${WASM_LIBC_DIR}) - - -file (GLOB_RECURSE source_all ${WASM_LIBC_DIR}/libc_wrapper_sgx.c) - -set (WASM_LIBC_SOURCE ${source_all}) - diff --git a/core/iwasm/products/linux-sgx/CMakeLists.txt b/core/iwasm/products/linux-sgx/CMakeLists.txt index 4a53f9575..4d590a8ef 100644 --- a/core/iwasm/products/linux-sgx/CMakeLists.txt +++ b/core/iwasm/products/linux-sgx/CMakeLists.txt @@ -26,6 +26,7 @@ add_definitions(-DUSE_SGX=1) add_definitions(-DOPS_INPUT_OUTPUT=1) add_definitions(-DOPS_UNSAFE_BUFFERS=0) add_definitions(-DWASM_ENABLE_LOG=0) +add_definitions(-Dbh_printf=bh_printf_sgx) # Enable repl mode if want to test spec cases # add_definitions(-DWASM_ENABLE_REPL) @@ -71,19 +72,19 @@ include (../../runtime/platform/${PLATFORM}/platform.cmake) include (../../runtime/utils/utils.cmake) include (../../runtime/vmcore-wasm/vmcore.cmake) include (../../lib/native/base/wasm_lib_base.cmake) -include (../../lib/native/libc/wasm_libc_sgx.cmake) +include (../../lib/native/libc/wasm_libc.cmake) include (${SHARED_LIB_DIR}/platform/${PLATFORM}/shared_platform.cmake) include (${SHARED_LIB_DIR}/mem-alloc/mem_alloc.cmake) - -#add_executable (iwasm main.c ext_lib_export.c) - +include (${SHARED_LIB_DIR}/utils/shared_utils.cmake) add_library (vmlib - ext_lib_export.c ${WASM_PLATFORM_LIB_SOURCE} ${WASM_UTILS_LIB_SOURCE} ${VMCORE_LIB_SOURCE} ${WASM_LIB_BASE_DIR}/base_lib_export.c ${WASM_LIBC_SOURCE} ${PLATFORM_SHARED_SOURCE} - ${MEM_ALLOC_SHARED_SOURCE}) + ${MEM_ALLOC_SHARED_SOURCE} + ${UTILS_SHARED_SOURCE}) + +add_library (extlib ext_lib_export.c) diff --git a/core/shared-lib/include/config.h b/core/shared-lib/include/config.h index 63ad5efb3..a7c2a8b2d 100644 --- a/core/shared-lib/include/config.h +++ b/core/shared-lib/include/config.h @@ -26,9 +26,7 @@ #define DEFAULT_MEM_ALLOCATOR MEM_ALLOCATOR_EMS /* Beihai log system */ -#ifndef BEIHAI_ENABLE_LOG #define BEIHAI_ENABLE_LOG 1 -#endif /* Beihai debugger support */ #define BEIHAI_ENABLE_TOOL_AGENT 1 @@ -129,3 +127,7 @@ /* Default base offset of external memory space */ #define DEFAULT_EXT_MEM_BASE_OFFSET (-2 * BH_GB) +#ifndef bh_printf +#define bh_printf printf +#endif + diff --git a/core/shared-lib/mem-alloc/ems/ems_kfc.c b/core/shared-lib/mem-alloc/ems/ems_kfc.c index 0090c317b..4409d65db 100644 --- a/core/shared-lib/mem-alloc/ems/ems_kfc.c +++ b/core/shared-lib/mem-alloc/ems/ems_kfc.c @@ -30,7 +30,7 @@ int gci_check_platform() { #define CHECK(x, y) do { \ if((x) != (y)) { \ - bh_printf("Platform checking failed on LINE %d at FILE %s.", \ + bh_printf("Platform checking failed on LINE %d at FILE %s.",\ __LINE__, __FILE__); \ return GC_ERROR; \ } \ diff --git a/core/shared-lib/platform/alios/bh_platform.h b/core/shared-lib/platform/alios/bh_platform.h index 468d0b4e9..e23958c95 100644 --- a/core/shared-lib/platform/alios/bh_platform.h +++ b/core/shared-lib/platform/alios/bh_platform.h @@ -52,8 +52,6 @@ typedef int64_t int64; #define wa_free bh_free #define wa_strdup bh_strdup -#define bh_printf printf - typedef aos_task_t korp_thread; typedef korp_thread *korp_tid; typedef aos_task_t *aos_tid_t; diff --git a/core/shared-lib/platform/linux-sgx/bh_platform.c b/core/shared-lib/platform/linux-sgx/bh_platform.c index 2166d53ab..d6f4c29ce 100644 --- a/core/shared-lib/platform/linux-sgx/bh_platform.c +++ b/core/shared-lib/platform/linux-sgx/bh_platform.c @@ -52,7 +52,7 @@ void bh_set_print_function(bh_print_function_t pf) print_function = pf; } -int bh_printf(const char *message, ...) +int bh_printf_sgx(const char *message, ...) { if (print_function != NULL) { char msg[FIXED_BUFFER_SIZE] = { '\0' }; diff --git a/core/shared-lib/platform/linux-sgx/bh_platform.h b/core/shared-lib/platform/linux-sgx/bh_platform.h index 59cbb6d59..7a835ef84 100644 --- a/core/shared-lib/platform/linux-sgx/bh_platform.h +++ b/core/shared-lib/platform/linux-sgx/bh_platform.h @@ -38,7 +38,7 @@ extern "C" { #endif -extern int bh_printf(const char *message, ...); +extern int bh_printf_sgx(const char *message, ...); typedef uint64_t uint64; typedef int64_t int64; diff --git a/core/shared-lib/platform/linux/bh_platform.h b/core/shared-lib/platform/linux/bh_platform.h index 2ee9e24f3..47172c1f6 100644 --- a/core/shared-lib/platform/linux/bh_platform.h +++ b/core/shared-lib/platform/linux/bh_platform.h @@ -77,8 +77,6 @@ typedef void* (*thread_start_routine_t)(void*); #define wa_free bh_free #define wa_strdup bh_strdup -#define bh_printf printf - int snprintf(char *buffer, size_t count, const char *format, ...); double fmod(double x, double y); float fmodf(float x, float y); diff --git a/core/shared-lib/platform/vxworks/bh_platform.h b/core/shared-lib/platform/vxworks/bh_platform.h index c023549da..142583e5b 100644 --- a/core/shared-lib/platform/vxworks/bh_platform.h +++ b/core/shared-lib/platform/vxworks/bh_platform.h @@ -75,8 +75,6 @@ typedef void* (*thread_start_routine_t)(void*); #define wa_free bh_free #define wa_strdup bh_strdup -#define bh_printf printf - int snprintf(char *buffer, size_t count, const char *format, ...); double fmod(double x, double y); float fmodf(float x, float y); diff --git a/core/shared-lib/platform/zephyr/bh_platform.h b/core/shared-lib/platform/zephyr/bh_platform.h index 45f8e14ee..2602bee31 100644 --- a/core/shared-lib/platform/zephyr/bh_platform.h +++ b/core/shared-lib/platform/zephyr/bh_platform.h @@ -78,8 +78,6 @@ typedef void* (*thread_start_routine_t)(void*); #define wa_malloc bh_malloc #define wa_free bh_free -#define bh_printf printf - /* Unit test framework is based on C++, where the declaration of snprintf is different. */ #ifndef __cplusplus From ebfe822720ee88d4478d36b38cc9f034b0f5216b Mon Sep 17 00:00:00 2001 From: wenyongh Date: Thu, 29 Aug 2019 14:31:15 +0800 Subject: [PATCH 10/20] Enhance security of libc strcpy/sprintf wrapper function (#108) --- core/iwasm/lib/native/libc/libc_wrapper.c | 26 ++++++++++++++--------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/core/iwasm/lib/native/libc/libc_wrapper.c b/core/iwasm/lib/native/libc/libc_wrapper.c index cf31a2b97..8972356ec 100644 --- a/core/iwasm/lib/native/libc/libc_wrapper.c +++ b/core/iwasm/lib/native/libc/libc_wrapper.c @@ -473,13 +473,17 @@ static int _sprintf_wrapper(int32 str_offset, int32 fmt_offset, int32 va_list_offset) { wasm_module_inst_t module_inst = get_module_inst(); + int32 app_end_offset; struct str_context ctx; char *str; const char *fmt; _va_list va_args; - if (!validate_str_addr(module_inst, str_offset)) - return 0; + if (!wasm_runtime_get_app_addr_range(module_inst, str_offset, + NULL, &app_end_offset)) { + wasm_runtime_set_exception(module_inst, "out of bounds memory access"); + return false; + } str = addr_app_to_native(str_offset); @@ -487,7 +491,7 @@ _sprintf_wrapper(int32 str_offset, int32 fmt_offset, int32 va_list_offset) return 0; ctx.str = str; - ctx.max = INT_MAX; + ctx.max = app_end_offset - str_offset; ctx.count = 0; if (!_vprintf_wa((out_func_t)sprintf_out, &ctx, fmt, va_args, module_inst)) @@ -692,17 +696,19 @@ _strcpy_wrapper(int32 dst_offset, int32 src_offset) { wasm_module_inst_t module_inst = get_module_inst(); char *dst, *src; + uint32 len; - if (!validate_str_addr(module_inst, dst_offset) - || !validate_str_addr(module_inst, src_offset)) + if (!validate_str_addr(module_inst, src_offset)) + return 0; + + src = addr_app_to_native(src_offset); + len = strlen(src); + + if (!validate_app_addr(dst_offset, len + 1)) return 0; dst = addr_app_to_native(dst_offset); - src = addr_app_to_native(src_offset); - while (*src != '\0') - *dst++ = *src++; - *dst = '\0'; - + strncpy(dst, src, len + 1); return dst_offset; } From af98e9afc3ab9dd24f2e06cce5e5ea226ed481c5 Mon Sep 17 00:00:00 2001 From: Jonathan Dong Date: Fri, 6 Sep 2019 16:51:36 +0800 Subject: [PATCH 11/20] Add build configuration for Mac (#110) * Add build configuration for Mac This patch implements Mac build basically based on Linux platform implementations and configurations. The document to build it on Mac has been updated as well. * Update wasm_application.h * Update lib_export.h Add comments for the functions. --- .gitignore | 2 + README.md | 19 + core/iwasm/products/darwin/CMakeLists.txt | 107 +++++ core/iwasm/products/darwin/ext_lib_export.c | 21 + core/iwasm/products/darwin/main.c | 251 +++++++++++ core/iwasm/runtime/include/lib_export.h | 8 +- core/iwasm/runtime/include/wasm_application.h | 65 +++ .../runtime/platform/darwin/platform.cmake | 25 ++ .../runtime/platform/darwin/wasm_native.c | 25 ++ .../runtime/vmcore-wasm/wasm_application.c | 1 + core/shared-lib/platform/darwin/bh_assert.c | 69 +++ .../platform/darwin/bh_definition.c | 81 ++++ core/shared-lib/platform/darwin/bh_platform.c | 82 ++++ core/shared-lib/platform/darwin/bh_platform.h | 122 ++++++ .../platform/darwin/bh_platform_log.c | 41 ++ core/shared-lib/platform/darwin/bh_thread.c | 405 ++++++++++++++++++ core/shared-lib/platform/darwin/bh_time.c | 80 ++++ .../platform/darwin/shared_platform.cmake | 24 ++ 18 files changed, 1427 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 core/iwasm/products/darwin/CMakeLists.txt create mode 100644 core/iwasm/products/darwin/ext_lib_export.c create mode 100644 core/iwasm/products/darwin/main.c create mode 100644 core/iwasm/runtime/include/wasm_application.h create mode 100644 core/iwasm/runtime/platform/darwin/platform.cmake create mode 100644 core/iwasm/runtime/platform/darwin/wasm_native.c create mode 100644 core/shared-lib/platform/darwin/bh_assert.c create mode 100644 core/shared-lib/platform/darwin/bh_definition.c create mode 100755 core/shared-lib/platform/darwin/bh_platform.c create mode 100644 core/shared-lib/platform/darwin/bh_platform.h create mode 100644 core/shared-lib/platform/darwin/bh_platform_log.c create mode 100755 core/shared-lib/platform/darwin/bh_thread.c create mode 100755 core/shared-lib/platform/darwin/bh_time.c create mode 100644 core/shared-lib/platform/darwin/shared_platform.cmake diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..0e82e0b5b --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.vscode +**/*build/ diff --git a/README.md b/README.md index d184e0890..f7c9bbdbc 100644 --- a/README.md +++ b/README.md @@ -67,6 +67,25 @@ cd build cmake .. make ``` + +Mac +------------------------- +Make sure to install Xcode from App Store firstly, and install cmake. + +If you use Homebrew, install cmake from the command line: +``` Bash +brew install cmake +``` + +Then build the source codes: +``` +cd core/iwasm/products/darwin/ +mkdir build +cd build +cmake .. +make +``` + VxWorks ------------------------- VxWorks 7 SR0620 release is validated. diff --git a/core/iwasm/products/darwin/CMakeLists.txt b/core/iwasm/products/darwin/CMakeLists.txt new file mode 100644 index 000000000..a88b155ac --- /dev/null +++ b/core/iwasm/products/darwin/CMakeLists.txt @@ -0,0 +1,107 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +cmake_minimum_required (VERSION 2.8) + +project (iwasm) + +set (PLATFORM "darwin") + +# Reset default linker flags +set (CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") +set (CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "") + +# Enable repl mode if want to test spec cases +# add_definitions(-DWASM_ENABLE_REPL) + +if (NOT ("$ENV{VALGRIND}" STREQUAL "YES")) + add_definitions(-DNVALGRIND) +endif () + +# Currently build as 64-bit by default. +set (BUILD_AS_64BIT_SUPPORT "YES") + +if (CMAKE_SIZEOF_VOID_P EQUAL 8) +if (${BUILD_AS_64BIT_SUPPORT} STREQUAL "YES") + # Add -fPIC flag if build as 64-bit + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") + set (CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS} -fPIC") +else () + add_definitions (-m32) + set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m32") + set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -m32") +endif () +endif () + +if (NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release) +endif (NOT CMAKE_BUILD_TYPE) +message ("CMAKE_BUILD_TYPE = " ${CMAKE_BUILD_TYPE}) + +set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl") +set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections -Wall -Wno-unused-parameter -Wno-pedantic") + +set (CMAKE_MACOSX_RPATH True) + +set (SHARED_LIB_DIR ../../../shared-lib) + +include_directories (. + ../../runtime/include + ../../runtime/platform/include + ${SHARED_LIB_DIR}/include) + +enable_language (ASM) + +include (../../runtime/platform/${PLATFORM}/platform.cmake) +include (../../runtime/utils/utils.cmake) +include (../../runtime/vmcore-wasm/vmcore.cmake) +include (../../lib/native/base/wasm_lib_base.cmake) +include (../../lib/native/libc/wasm_libc.cmake) +include (${SHARED_LIB_DIR}/platform/${PLATFORM}/shared_platform.cmake) +include (${SHARED_LIB_DIR}/mem-alloc/mem_alloc.cmake) +include (${SHARED_LIB_DIR}/utils/shared_utils.cmake) + +add_library (vmlib + ${WASM_PLATFORM_LIB_SOURCE} + ${WASM_UTILS_LIB_SOURCE} + ${VMCORE_LIB_SOURCE} + ${WASM_LIB_BASE_DIR}/base_lib_export.c + ${WASM_LIBC_SOURCE} + ${PLATFORM_SHARED_SOURCE} + ${MEM_ALLOC_SHARED_SOURCE} + ${UTILS_SHARED_SOURCE}) + +add_executable (iwasm main.c ext_lib_export.c) + +install (TARGETS iwasm DESTINATION bin) + +target_link_libraries (iwasm vmlib -lm -ldl -lpthread) + +add_library (libiwasm SHARED + ${WASM_PLATFORM_LIB_SOURCE} + ${WASM_UTILS_LIB_SOURCE} + ${VMCORE_LIB_SOURCE} + ${WASM_LIB_BASE_DIR}/base_lib_export.c + ${WASM_LIBC_SOURCE} + ${PLATFORM_SHARED_SOURCE} + ${MEM_ALLOC_SHARED_SOURCE} + ${UTILS_SHARED_SOURCE} + ext_lib_export.c) + +install (TARGETS libiwasm DESTINATION lib) + +set_target_properties (libiwasm PROPERTIES OUTPUT_NAME iwasm) + +target_link_libraries (libiwasm -lm -ldl -lpthread) + diff --git a/core/iwasm/products/darwin/ext_lib_export.c b/core/iwasm/products/darwin/ext_lib_export.c new file mode 100644 index 000000000..8d78f3ae1 --- /dev/null +++ b/core/iwasm/products/darwin/ext_lib_export.c @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "lib_export.h" + +static NativeSymbol extended_native_symbol_defs[] = { }; + +#include "ext_lib_export.h" diff --git a/core/iwasm/products/darwin/main.c b/core/iwasm/products/darwin/main.c new file mode 100644 index 000000000..65f464c0b --- /dev/null +++ b/core/iwasm/products/darwin/main.c @@ -0,0 +1,251 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#include +#include +#include +#include "bh_platform.h" +#include "wasm_application.h" +#include "wasm_assert.h" +#include "wasm_log.h" +#include "wasm_platform_log.h" +#include "wasm_thread.h" +#include "wasm_export.h" +#include "wasm_memory.h" +#include "bh_memory.h" + +static int app_argc; +static char **app_argv; + +static int print_help() +{ + wasm_printf("Usage: iwasm [-options] wasm_file [args...]\n"); + wasm_printf("options:\n"); + wasm_printf(" -f|--function name Specify function name to run in module\n" + " rather than main\n"); +#if WASM_ENABLE_LOG != 0 + wasm_printf(" -v=X Set log verbose level (0 to 2, default is 1),\n" + " larger level with more log\n"); +#endif + wasm_printf(" --repl Start a very simple REPL (read-eval-print-loop) mode\n" + " that runs commands in the form of `FUNC ARG...`\n"); + return 1; +} + +static void* +app_instance_main(wasm_module_inst_t module_inst) +{ + const char *exception; + + wasm_application_execute_main(module_inst, app_argc, app_argv); + if ((exception = wasm_runtime_get_exception(module_inst))) + wasm_printf("%s\n", exception); + return NULL; +} + +static void* +app_instance_func(wasm_module_inst_t module_inst, const char *func_name) +{ + const char *exception; + + wasm_application_execute_func(module_inst, func_name, app_argc - 1, + app_argv + 1); + if ((exception = wasm_runtime_get_exception(module_inst))) + wasm_printf("%s\n", exception); + return NULL; +} + +/** + * Split a space separated strings into an array of strings + * Returns NULL on failure + * Memory must be freed by caller + * Based on: http://stackoverflow.com/a/11198630/471795 + */ +static char ** +split_string(char *str, int *count) +{ + char **res = NULL; + char *p; + int idx = 0; + + /* split string and append tokens to 'res' */ + do { + p = strtok(str, " "); + str = NULL; + res = (char**) realloc(res, sizeof(char*) * (idx + 1)); + if (res == NULL) { + return NULL; + } + res[idx++] = p; + } while (p); + + if (count) { + *count = idx - 1; + } + return res; +} + +static void* +app_instance_repl(wasm_module_inst_t module_inst) +{ + char *cmd = NULL; + size_t len = 0; + ssize_t n; + + while ((wasm_printf("webassembly> "), n = getline(&cmd, &len, stdin)) != -1) { + wasm_assert(n > 0); + if (cmd[n - 1] == '\n') { + if (n == 1) + continue; + else + cmd[n - 1] = '\0'; + } + app_argv = split_string(cmd, &app_argc); + if (app_argv == NULL) { + LOG_ERROR("Wasm prepare param failed: split string failed.\n"); + break; + } + if (app_argc != 0) { + wasm_application_execute_func(module_inst, app_argv[0], + app_argc - 1, app_argv + 1); + } + free(app_argv); + } + free(cmd); + return NULL; +} + +#define USE_GLOBAL_HEAP_BUF 0 + +#if USE_GLOBAL_HEAP_BUF != 0 +static char global_heap_buf[10 * 1024 * 1024] = { 0 }; +#endif + +int main(int argc, char *argv[]) +{ + char *wasm_file = NULL; + const char *func_name = NULL; + uint8 *wasm_file_buf = NULL; + int wasm_file_size; + wasm_module_t wasm_module = NULL; + wasm_module_inst_t wasm_module_inst = NULL; + char error_buf[128]; +#if WASM_ENABLE_LOG != 0 + int log_verbose_level = 1; +#endif + bool is_repl_mode = false; + + /* Process options. */ + for (argc--, argv++; argc > 0 && argv[0][0] == '-'; argc--, argv++) { + if (!strcmp(argv[0], "-f") || !strcmp(argv[0], "--function")) { + argc--, argv++; + if (argc < 2) { + print_help(); + return 0; + } + func_name = argv[0]; + } +#if WASM_ENABLE_LOG != 0 + else if (!strncmp(argv[0], "-v=", 3)) { + log_verbose_level = atoi(argv[0] + 3); + if (log_verbose_level < 0 || log_verbose_level > 2) + return print_help(); + } +#endif + else if (!strcmp(argv[0], "--repl")) + is_repl_mode = true; + else + return print_help(); + } + + if (argc == 0) + return print_help(); + + wasm_file = argv[0]; + app_argc = argc; + app_argv = argv; + +#if USE_GLOBAL_HEAP_BUF != 0 + if (bh_memory_init_with_pool(global_heap_buf, sizeof(global_heap_buf)) + != 0) { + wasm_printf("Init memory with global heap buffer failed.\n"); + return -1; + } +#else + if (bh_memory_init_with_allocator(malloc, free)) { + wasm_printf("Init memory with memory allocator failed.\n"); + return -1; + } +#endif + + /* initialize runtime environment */ + if (!wasm_runtime_init()) + goto fail1; + + wasm_log_set_verbose_level(log_verbose_level); + + /* load WASM byte buffer from WASM bin file */ + if (!(wasm_file_buf = (uint8*) bh_read_file_to_buffer(wasm_file, + &wasm_file_size))) + goto fail2; + + /* load WASM module */ + if (!(wasm_module = wasm_runtime_load(wasm_file_buf, wasm_file_size, + error_buf, sizeof(error_buf)))) { + wasm_printf("%s\n", error_buf); + goto fail3; + } + + /* instantiate the module */ + if (!(wasm_module_inst = wasm_runtime_instantiate(wasm_module, + 64 * 1024, /* stack size */ + 64 * 1024, /* heap size */ + error_buf, + sizeof(error_buf)))) { + wasm_printf("%s\n", error_buf); + goto fail4; + } + + if (is_repl_mode) + app_instance_repl(wasm_module_inst); + else if (func_name) + app_instance_func(wasm_module_inst, func_name); + else + app_instance_main(wasm_module_inst); + + /* destroy the module instance */ + wasm_runtime_deinstantiate(wasm_module_inst); + +fail4: + /* unload the module */ + wasm_runtime_unload(wasm_module); + +fail3: + /* free the file buffer */ + wasm_free(wasm_file_buf); + +fail2: + /* destroy runtime environment */ + wasm_runtime_destroy(); + +fail1: + bh_memory_destroy(); + return 0; +} + diff --git a/core/iwasm/runtime/include/lib_export.h b/core/iwasm/runtime/include/lib_export.h index d6b335f2e..e5eb6b7ee 100644 --- a/core/iwasm/runtime/include/lib_export.h +++ b/core/iwasm/runtime/include/lib_export.h @@ -40,7 +40,13 @@ int get_base_lib_export_apis(NativeSymbol **p_base_lib_apis); /** - * Get the exported APIs of extend lib + * Get the exported APIs of extended lib, this API isn't provided by WASM VM, + * it must be provided by developer to register the extended native APIs, + * for example, developer can register his native APIs to extended_native_symbol_defs, + * array, and include file ext_lib_export.h which implements this API. + * And if developer hasn't any native API to register, he can define an empty + * extended_native_symbol_defs array, and then include file ext_lib_export.h to + * implements this API. * * @param p_base_lib_apis return the exported API array of extend lib * diff --git a/core/iwasm/runtime/include/wasm_application.h b/core/iwasm/runtime/include/wasm_application.h new file mode 100644 index 000000000..31813b2ee --- /dev/null +++ b/core/iwasm/runtime/include/wasm_application.h @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2019 Taobao (China) Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _WASM_APPLICATION_H +#define _WASM_APPLICATION_H + +//#include "wasm_runtime.h" + + +#ifdef __cplusplus +extern "C" { +#endif + +struct WASMModuleInstance; + +/** + * Find the unique main function from a WASM module instance + * and execute that function. + * + * @param module_inst the WASM module instance + * @param argc the number of arguments + * @param argv the arguments array + * + * @return true if the main function is called, false otherwise and exception will be thrown, + * the caller can call wasm_runtime_get_exception to get exception info. + */ +bool +wasm_application_execute_main(struct WASMModuleInstance *module_inst, + int argc, char *argv[]); + +/** + * Find the specified function in argv[0] from a WASM module instance + * and execute that function. + * + * @param module_inst the WASM module instance + * @param name the name of the function to execute + * @param argc the number of arguments + * @param argv the arguments array + * + * @return true if the specified function is called, false otherwise and exception will be thrown, + * the caller can call wasm_runtime_get_exception to get exception info. + */ +bool +wasm_application_execute_func(struct WASMModuleInstance *module_inst, + char *name, int argc, char *argv[]); + +#ifdef __cplusplus +} +#endif + +#endif /* end of _WASM_APPLICATION_H */ + diff --git a/core/iwasm/runtime/platform/darwin/platform.cmake b/core/iwasm/runtime/platform/darwin/platform.cmake new file mode 100644 index 000000000..ea7f7497e --- /dev/null +++ b/core/iwasm/runtime/platform/darwin/platform.cmake @@ -0,0 +1,25 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +add_definitions (-D__POSIX__ -D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=200809L) + +set (PLATFORM_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}) + +include_directories(${PLATFORM_LIB_DIR}) +include_directories(${PLATFORM_LIB_DIR}/../include) + +file (GLOB_RECURSE source_all ${PLATFORM_LIB_DIR}/*.c) + +set (WASM_PLATFORM_LIB_SOURCE ${source_all}) + diff --git a/core/iwasm/runtime/platform/darwin/wasm_native.c b/core/iwasm/runtime/platform/darwin/wasm_native.c new file mode 100644 index 000000000..8feb8412b --- /dev/null +++ b/core/iwasm/runtime/platform/darwin/wasm_native.c @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "wasm_native.h" + +void* +wasm_platform_native_func_lookup(const char *module_name, + const char *func_name) +{ + return NULL; +} + diff --git a/core/iwasm/runtime/vmcore-wasm/wasm_application.c b/core/iwasm/runtime/vmcore-wasm/wasm_application.c index cdcb56809..d3aef0c6d 100644 --- a/core/iwasm/runtime/vmcore-wasm/wasm_application.c +++ b/core/iwasm/runtime/vmcore-wasm/wasm_application.c @@ -18,6 +18,7 @@ #include #include #include "wasm.h" +#include "wasm_application.h" #include "wasm_interp.h" #include "wasm_runtime.h" #include "wasm_thread.h" diff --git a/core/shared-lib/platform/darwin/bh_assert.c b/core/shared-lib/platform/darwin/bh_assert.c new file mode 100644 index 000000000..b52a9aa5b --- /dev/null +++ b/core/shared-lib/platform/darwin/bh_assert.c @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_platform.h" +#include "bh_assert.h" +#include +#include +#include + +#ifdef BH_TEST +#include +#endif + +#ifdef BH_TEST +/* for exception throwing */ +jmp_buf bh_test_jb; +#endif + +void bh_assert_internal(int v, const char *file_name, int line_number, + const char *expr_string) +{ + if (v) + return; + + if (!file_name) + file_name = "NULL FILENAME"; + if (!expr_string) + expr_string = "NULL EXPR_STRING"; + + printf("\nASSERTION FAILED: %s, at FILE=%s, LINE=%d\n", expr_string, + file_name, line_number); + +#ifdef BH_TEST + longjmp(bh_test_jb, 1); +#endif + + abort(); +} + +void bh_debug_internal(const char *file_name, int line_number, const char *fmt, + ...) +{ +#ifndef JEFF_TEST_VERIFIER + va_list args; + + va_start(args, fmt); + bh_assert(file_name); + + printf("\nDebug info FILE=%s, LINE=%d: ", file_name, line_number); + vprintf(fmt, args); + + va_end(args); + printf("\n"); +#endif +} + diff --git a/core/shared-lib/platform/darwin/bh_definition.c b/core/shared-lib/platform/darwin/bh_definition.c new file mode 100644 index 000000000..47ee11ed2 --- /dev/null +++ b/core/shared-lib/platform/darwin/bh_definition.c @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_definition.h" +#include "bh_platform.h" + +int bh_return(int ret) +{ + return ret; +} + +#define RSIZE_MAX 0x7FFFFFFF +int b_memcpy_s(void * s1, unsigned int s1max, const void * s2, unsigned int n) +{ + char *dest = (char*) s1; + char *src = (char*) s2; + if (n == 0) { + return 0; + } + + if (s1 == NULL || s1max > RSIZE_MAX) { + return -1; + } + if (s2 == NULL || n > s1max) { + memset(dest, 0, s1max); + return -1; + } + memcpy(dest, src, n); + return 0; +} + +int b_strcat_s(char * s1, size_t s1max, const char * s2) +{ + if (NULL + == s1|| NULL == s2 || s1max < (strlen(s1) + strlen(s2) + 1) || s1max > RSIZE_MAX) { + return -1; + } + + strcat(s1, s2); + + return 0; +} + +int b_strcpy_s(char * s1, size_t s1max, const char * s2) +{ + if (NULL + == s1|| NULL == s2 || s1max < (strlen(s2) + 1) || s1max > RSIZE_MAX) { + return -1; + } + + strcpy(s1, s2); + + return 0; +} + +int fopen_s(FILE ** pFile, const char *filename, const char *mode) +{ + if (NULL == pFile || NULL == filename || NULL == mode) { + return -1; + } + + *pFile = fopen(filename, mode); + + if (NULL == *pFile) + return -1; + + return 0; +} diff --git a/core/shared-lib/platform/darwin/bh_platform.c b/core/shared-lib/platform/darwin/bh_platform.c new file mode 100755 index 000000000..3ff600cfc --- /dev/null +++ b/core/shared-lib/platform/darwin/bh_platform.c @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_platform.h" + +#include +#include +#include + +char *bh_strdup(const char *s) +{ + char *s1 = NULL; + if (s && (s1 = bh_malloc(strlen(s) + 1))) + memcpy(s1, s, strlen(s) + 1); + return s1; +} + +int bh_platform_init() +{ + return 0; +} + +char* +bh_read_file_to_buffer(const char *filename, int *ret_size) +{ + char *buffer; + int file; + int file_size, read_size; + struct stat stat_buf; + + if (!filename || !ret_size) { + printf("Read file to buffer failed: invalid filename or ret size.\n"); + return NULL; + } + + if ((file = open(filename, O_RDONLY, 0)) == -1) { + printf("Read file to buffer failed: open file %s failed.\n", + filename); + return NULL; + } + + if (fstat(file, &stat_buf) != 0) { + printf("Read file to buffer failed: fstat file %s failed.\n", + filename); + close(file); + return NULL; + } + + file_size = stat_buf.st_size; + + if (!(buffer = bh_malloc(file_size))) { + printf("Read file to buffer failed: alloc memory failed.\n"); + close(file); + return NULL; + } + + read_size = read(file, buffer, file_size); + close(file); + + if (read_size < file_size) { + printf("Read file to buffer failed: read file content failed.\n"); + bh_free(buffer); + return NULL; + } + + *ret_size = file_size; + return buffer; +} + diff --git a/core/shared-lib/platform/darwin/bh_platform.h b/core/shared-lib/platform/darwin/bh_platform.h new file mode 100644 index 000000000..2715670b6 --- /dev/null +++ b/core/shared-lib/platform/darwin/bh_platform.h @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _BH_PLATFORM_H +#define _BH_PLATFORM_H + +#include "bh_config.h" +#include "bh_types.h" +#include "bh_memory.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef uint64_t uint64; +typedef int64_t int64; + +extern void DEBUGME(void); + +#define DIE do{bh_debug("Die here\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); DEBUGME(void); while(1);}while(0) + +#define BH_PLATFORM "Darwin" + +/* NEED qsort */ + +#define _STACK_SIZE_ADJUSTMENT (32 * 1024) + +/* Stack size of applet threads's native part. */ +#define BH_APPLET_PRESERVED_STACK_SIZE (8 * 1024 + _STACK_SIZE_ADJUSTMENT) + +/* Default thread priority */ +#define BH_THREAD_DEFAULT_PRIORITY 0 + +#define BH_ROUTINE_MODIFIER + +#define BHT_TIMEDOUT ETIMEDOUT + +#define INVALID_THREAD_ID 0xFFffFFff + +typedef pthread_t korp_tid; +typedef pthread_mutex_t korp_mutex; +typedef sem_t korp_sem; +typedef pthread_cond_t korp_cond; +typedef pthread_t korp_thread; +typedef void* (*thread_start_routine_t)(void*); + +#define wa_malloc bh_malloc +#define wa_free bh_free +#define wa_strdup bh_strdup + +//int snprintf(char *buffer, size_t count, const char *format, ...); +double fmod(double x, double y); +float fmodf(float x, float y); +double sqrt(double x); + +#define BH_WAIT_FOREVER 0xFFFFFFFF + +#ifndef NULL +# define NULL ((void*) 0) +#endif + +/** + * Return the offset of the given field in the given type. + * + * @param Type the type containing the filed + * @param field the field in the type + * + * @return the offset of field in Type + */ +#ifndef offsetof +#define offsetof(Type, field) ((size_t)(&((Type *)0)->field)) +#endif + +#define bh_assert assert + +int b_memcpy_s(void * s1, unsigned int s1max, const void * s2, + unsigned int n); +int b_strcat_s(char * s1, size_t s1max, const char * s2); +int b_strcpy_s(char * s1, size_t s1max, const char * s2); + +int fopen_s(FILE ** pFile, const char *filename, const char *mode); + +char *bh_read_file_to_buffer(const char *filename, int *ret_size); + +char *bh_strdup(const char *s); + +int bh_platform_init(); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/core/shared-lib/platform/darwin/bh_platform_log.c b/core/shared-lib/platform/darwin/bh_platform_log.c new file mode 100644 index 000000000..4ff03192a --- /dev/null +++ b/core/shared-lib/platform/darwin/bh_platform_log.c @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_platform.h" +#include + +void bh_log_emit(const char *fmt, va_list ap) +{ + vprintf(fmt, ap); + fflush(stdout); +} + +int bh_fprintf(FILE *stream, const char *fmt, ...) +{ + va_list ap; + int ret; + + va_start(ap, fmt); + ret = vfprintf(stream ? stream : stdout, fmt, ap); + va_end(ap); + + return ret; +} + +int bh_fflush(void *stream) +{ + return fflush(stream ? stream : stdout); +} diff --git a/core/shared-lib/platform/darwin/bh_thread.c b/core/shared-lib/platform/darwin/bh_thread.c new file mode 100755 index 000000000..97879aa77 --- /dev/null +++ b/core/shared-lib/platform/darwin/bh_thread.c @@ -0,0 +1,405 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_thread.h" +#include "bh_assert.h" +#include "bh_log.h" +#include "bh_memory.h" +#include +#include +#include + +static bool is_thread_sys_inited = false; + +static korp_mutex thread_list_lock; +static pthread_key_t thread_local_storage_key[BH_MAX_TLS_NUM]; + +int _vm_thread_sys_init() +{ + unsigned i, j; + int ret; + + if (is_thread_sys_inited) + return 0; + + for (i = 0; i < BH_MAX_TLS_NUM; i++) { + ret = pthread_key_create(&thread_local_storage_key[i], NULL); + if (ret) + goto fail; + } + + ret = vm_mutex_init(&thread_list_lock); + if (ret) + goto fail; + + is_thread_sys_inited = true; + return 0; + + fail: for (j = 0; j < i; j++) + pthread_key_delete(thread_local_storage_key[j]); + return -1; +} + +void vm_thread_sys_destroy(void) +{ + if (is_thread_sys_inited) { + unsigned i; + for (i = 0; i < BH_MAX_TLS_NUM; i++) + pthread_key_delete(thread_local_storage_key[i]); + vm_mutex_destroy(&thread_list_lock); + is_thread_sys_inited = false; + } +} + +typedef struct { + thread_start_routine_t start; + void* stack; + int stack_size; + void* arg; +} thread_wrapper_arg; + +static void *vm_thread_wrapper(void *arg) +{ + thread_wrapper_arg * targ = arg; + LOG_VERBOSE("THREAD CREATE 0x%08x\n", &targ); + targ->stack = (void *)((uintptr_t)(&arg) & ~0xfff); + _vm_tls_put(1, targ); + targ->start(targ->arg); + bh_free(targ); + _vm_tls_put(1, NULL); + return NULL; +} + +int _vm_thread_create_with_prio(korp_tid *tid, thread_start_routine_t start, + void *arg, unsigned int stack_size, int prio) +{ + pthread_attr_t tattr; + thread_wrapper_arg *targ; + + bh_assert(stack_size > 0); + bh_assert(tid); + bh_assert(start); + + *tid = INVALID_THREAD_ID; + + pthread_attr_init(&tattr); + pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_JOINABLE); + if (pthread_attr_setstacksize(&tattr, stack_size) != 0) { + bh_debug("Invalid thread stack size %u. Min stack size on Linux = %u", + stack_size, PTHREAD_STACK_MIN); + pthread_attr_destroy(&tattr); + return BHT_ERROR; + } + + targ = (thread_wrapper_arg*) bh_malloc(sizeof(*targ)); + if (!targ) { + pthread_attr_destroy(&tattr); + return BHT_ERROR; + } + + targ->start = start; + targ->arg = arg; + targ->stack_size = stack_size; + + if (pthread_create(tid, &tattr, vm_thread_wrapper, targ) != 0) { + pthread_attr_destroy(&tattr); + bh_free(targ); + return BHT_ERROR; + } + + pthread_attr_destroy(&tattr); + return BHT_OK; +} + +int _vm_thread_create(korp_tid *tid, thread_start_routine_t start, void *arg, + unsigned int stack_size) +{ + return _vm_thread_create_with_prio(tid, start, arg, stack_size, + BH_THREAD_DEFAULT_PRIORITY); +} + +korp_tid _vm_self_thread() +{ + return (korp_tid) pthread_self(); +} + +void vm_thread_exit(void * code) +{ + bh_free(_vm_tls_get(1)); + _vm_tls_put(1, NULL); + pthread_exit(code); +} + +void *_vm_tls_get(unsigned idx) +{ + bh_assert(idx < BH_MAX_TLS_NUM); + return pthread_getspecific(thread_local_storage_key[idx]); +} + +int _vm_tls_put(unsigned idx, void * tls) +{ + bh_assert(idx < BH_MAX_TLS_NUM); + pthread_setspecific(thread_local_storage_key[idx], tls); + return BHT_OK; +} + +int _vm_mutex_init(korp_mutex *mutex) +{ + return pthread_mutex_init(mutex, NULL) == 0 ? BHT_OK : BHT_ERROR; +} + +int _vm_recursive_mutex_init(korp_mutex *mutex) +{ + int ret; + + pthread_mutexattr_t mattr; + + bh_assert(mutex); + ret = pthread_mutexattr_init(&mattr); + if (ret) + return BHT_ERROR; + + pthread_mutexattr_settype(&mattr, PTHREAD_MUTEX_RECURSIVE); + ret = pthread_mutex_init(mutex, &mattr); + pthread_mutexattr_destroy(&mattr); + + return ret == 0 ? BHT_OK : BHT_ERROR; +} + +int _vm_mutex_destroy(korp_mutex *mutex) +{ + int ret; + + bh_assert(mutex); + ret = pthread_mutex_destroy(mutex); + + return ret == 0 ? BHT_OK : BHT_ERROR; +} + +/* Returned error (EINVAL, EAGAIN and EDEADLK) from + locking the mutex indicates some logic error present in + the program somewhere. + Don't try to recover error for an existing unknown error.*/ +void vm_mutex_lock(korp_mutex *mutex) +{ + int ret; + + bh_assert(mutex); + ret = pthread_mutex_lock(mutex); + if (0 != ret) { + printf("vm mutex lock failed (ret=%d)!\n", ret); + exit(-1); + } +} + +int vm_mutex_trylock(korp_mutex *mutex) +{ + int ret; + + bh_assert(mutex); + ret = pthread_mutex_trylock(mutex); + + return ret == 0 ? BHT_OK : BHT_ERROR; +} + +/* Returned error (EINVAL, EAGAIN and EPERM) from + unlocking the mutex indicates some logic error present + in the program somewhere. + Don't try to recover error for an existing unknown error.*/ +void vm_mutex_unlock(korp_mutex *mutex) +{ + int ret; + + bh_assert(mutex); + ret = pthread_mutex_unlock(mutex); + if (0 != ret) { + printf("vm mutex unlock failed (ret=%d)!\n", ret); + exit(-1); + } +} + +int _vm_sem_init(korp_sem* sem, unsigned int c) +{ + int ret; + + bh_assert(sem); + ret = sem_init(sem, 0, c); + + return ret == 0 ? BHT_OK : BHT_ERROR; +} + +int _vm_sem_destroy(korp_sem *sem) +{ + int ret; + + bh_assert(sem); + ret = sem_destroy(sem); + + return ret == 0 ? BHT_OK : BHT_ERROR; +} + +int _vm_sem_wait(korp_sem *sem) +{ + int ret; + + bh_assert(sem); + + ret = sem_wait(sem); + + return ret == 0 ? BHT_OK : BHT_ERROR; +} + +/*int _vm_sem_reltimedwait(korp_sem *sem, int mills) +{ + int ret = BHT_OK; + + struct timespec timeout; + const int mills_per_sec = 1000; + const int mills_to_nsec = 1E6; + + bh_assert(sem); + + if (mills == BHT_WAIT_FOREVER) { + ret = sem_wait(sem); + } else { + + timeout.tv_sec = mills / mills_per_sec; + timeout.tv_nsec = (mills % mills_per_sec) * mills_to_nsec; + timeout.tv_sec += time(NULL); + + ret = sem_timedwait(sem, &timeout); + } + + if (ret != BHT_OK) { + if (errno == BHT_TIMEDOUT) { + ret = BHT_TIMEDOUT; + errno = 0; + } else { + bh_debug("Faliure happens when timed wait is called"); + bh_assert(0); + } + } + + return ret; +} +*/ + +int _vm_sem_post(korp_sem *sem) +{ + bh_assert(sem); + + return sem_post(sem) == 0 ? BHT_OK : BHT_ERROR; +} + +int _vm_cond_init(korp_cond *cond) +{ + bh_assert(cond); + + if (pthread_cond_init(cond, NULL) != BHT_OK) + return BHT_ERROR; + + return BHT_OK; +} + +int _vm_cond_destroy(korp_cond *cond) +{ + bh_assert(cond); + + if (pthread_cond_destroy(cond) != BHT_OK) + return BHT_ERROR; + + return BHT_OK; +} + +int _vm_cond_wait(korp_cond *cond, korp_mutex *mutex) +{ + bh_assert(cond); + bh_assert(mutex); + + if (pthread_cond_wait(cond, mutex) != BHT_OK) + return BHT_ERROR; + + return BHT_OK; +} + +static void msec_nsec_to_abstime(struct timespec *ts, int64 msec, int32 nsec) +{ + struct timeval tv; + + gettimeofday(&tv, NULL); + + ts->tv_sec = tv.tv_sec + msec / 1000; + ts->tv_nsec = tv.tv_usec * 1000 + (msec % 1000) * 1000000 + nsec; + + if (ts->tv_nsec >= 1000000000L) { + ts->tv_sec++; + ts->tv_nsec -= 1000000000L; + } +} + +int _vm_cond_reltimedwait(korp_cond *cond, korp_mutex *mutex, int mills) +{ + int ret; + struct timespec abstime; + + if (mills == BHT_WAIT_FOREVER) + ret = pthread_cond_wait(cond, mutex); + else { + msec_nsec_to_abstime(&abstime, mills, 0); + ret = pthread_cond_timedwait(cond, mutex, &abstime); + } + + if (ret != BHT_OK && ret != BHT_TIMEDOUT) + return BHT_ERROR; + + return BHT_OK; +} + +int _vm_cond_signal(korp_cond *cond) +{ + bh_assert(cond); + + if (pthread_cond_signal(cond) != BHT_OK) + return BHT_ERROR; + + return BHT_OK; +} + +int _vm_cond_broadcast(korp_cond *cond) +{ + bh_assert(cond); + + if (pthread_cond_broadcast(cond) != BHT_OK) + return BHT_ERROR; + + return BHT_OK; +} + +int _vm_thread_cancel(korp_tid thread) +{ + return pthread_cancel(thread); +} + +int _vm_thread_join(korp_tid thread, void **value_ptr, int mills) +{ + return pthread_join(thread, value_ptr); +} + +int _vm_thread_detach(korp_tid thread) +{ + return pthread_detach(thread); +} + diff --git a/core/shared-lib/platform/darwin/bh_time.c b/core/shared-lib/platform/darwin/bh_time.c new file mode 100755 index 000000000..0627b08d0 --- /dev/null +++ b/core/shared-lib/platform/darwin/bh_time.c @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_time.h" + +#include +#include +#include +#include + +/* + * This function returns milliseconds per tick. + * @return milliseconds per tick. + */ +uint64 _bh_time_get_tick_millisecond() +{ + return sysconf(_SC_CLK_TCK); +} + +/* + * This function returns milliseconds after boot. + * @return milliseconds after boot. + */ +uint64 _bh_time_get_boot_millisecond() +{ + struct timespec ts; + if (clock_gettime(CLOCK_MONOTONIC, &ts) != 0) { + return 0; + } + + return ((uint64) ts.tv_sec) * 1000 + ts.tv_nsec / (1000 * 1000); +} + +uint32 bh_get_tick_sec() +{ + return _bh_time_get_boot_millisecond() / 1000; +} + +/* + * This function returns GMT time milliseconds since from 1970.1.1, AKA UNIX time. + * @return milliseconds since from 1970.1.1. + */ +uint64 _bh_time_get_millisecond_from_1970() +{ + struct timeb tp; + ftime(&tp); + + return ((uint64) tp.time) * 1000 + tp.millitm + - (tp.dstflag == 0 ? 0 : 60 * 60 * 1000) + tp.timezone * 60 * 1000; +} + +size_t _bh_time_strftime(char *s, size_t max, const char *format, int64 time) +{ + time_t time_sec = time / 1000; + struct timeb tp; + struct tm *ltp; + + ftime(&tp); + time_sec -= tp.timezone * 60; + + ltp = localtime(&time_sec); + if (ltp == NULL) { + return 0; + } + return strftime(s, max, format, ltp); +} + diff --git a/core/shared-lib/platform/darwin/shared_platform.cmake b/core/shared-lib/platform/darwin/shared_platform.cmake new file mode 100644 index 000000000..5b403a09c --- /dev/null +++ b/core/shared-lib/platform/darwin/shared_platform.cmake @@ -0,0 +1,24 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set (PLATFORM_SHARED_DIR ${CMAKE_CURRENT_LIST_DIR}) + +include_directories(${PLATFORM_SHARED_DIR}) +include_directories(${PLATFORM_SHARED_DIR}/../include) + + +file (GLOB_RECURSE source_all ${PLATFORM_SHARED_DIR}/*.c) + +set (PLATFORM_SHARED_SOURCE ${source_all}) + From 6d2bd54d202cb6f87d8a8eda1df4cbe77f730c88 Mon Sep 17 00:00:00 2001 From: Wang Xin Date: Sat, 7 Sep 2019 09:30:06 +0800 Subject: [PATCH 12/20] Update README.md --- README.md | 669 ++---------------------------------------------------- 1 file changed, 14 insertions(+), 655 deletions(-) diff --git a/README.md b/README.md index f7c9bbdbc..196fc51e7 100644 --- a/README.md +++ b/README.md @@ -5,15 +5,6 @@ WebAssembly Micro Runtime (WAMR) is a standalone WebAssembly (WASM) runtime desi - The supporting API's for the WASM applications - A mechanism for dynamic management of the WASM application -Why should you use a WASM runtime out of your browser? There are a few points where this might be meaningful: -1. WASM is already an LLVM official backend target. That means WASM can run any programming languages which can be compiled to LLVM IR. It is a huge advantage compared to language bound runtimes like JS or Lua. -2. WASM is an open standard and it is fast becoming supported by the whole web ecosystem. -3. WASM is designed to be very friendly for compiling to native binaries and gaining the native speed. -4. It can potentially change the development practices. Imagine we can do both the WASM application development and validation in a browser, then just download the WASM binary code onto the target device. -5. WASM can work without garbage collection. It is designed to support execution determinics for the time sensitive requirement. -6. Maintain the safety goals WASM has of providing a sandboxed execution environment for untrusted code. In addition, because WASM is a compilation target, this implies the benefit of being able to target both an execution and security profile that is consistent across popular high-level programming languages. - - Current Features of WAMR ========================= @@ -43,666 +34,34 @@ The application manager component handles the packets that the platform receives -Build WAMR Core -========================= +Build WAMR Core and run basic WASM applications +================================================ + Please follow the instructions below to build the WAMR core on different platforms. +-Linux +-Zephyr +-Mac +-VxWorks +-AliOS-Things +-Docker -Linux -------------------------- -First of all please install library dependencies of lib gcc. -Use installation commands below for Ubuntu Linux: -``` Bash -sudo apt install lib32gcc-5-dev g++-multilib -``` -Or in Fedora: -``` Bash -sudo dnf install glibc-devel.i686 -``` - -After installing dependencies, build the source code: -``` Bash -cd core/iwasm/products/linux/ -mkdir build -cd build -cmake .. -make -``` - -Mac -------------------------- -Make sure to install Xcode from App Store firstly, and install cmake. - -If you use Homebrew, install cmake from the command line: -``` Bash -brew install cmake -``` - -Then build the source codes: -``` -cd core/iwasm/products/darwin/ -mkdir build -cd build -cmake .. -make -``` - -VxWorks -------------------------- -VxWorks 7 SR0620 release is validated. - -First you need to build a VSB. Make sure *UTILS_UNIX* layer is added in the VSB. -After the VSB is built, export the VxWorks toolchain path by: -``` -export /host/vx-compiler/bin:$PATH -``` -Now switch to iwasm source tree to build the source code: -``` -cd core/iwasm/products/vxworks/ -mkdir build -cd build -cmake .. -make -``` -Create a VIP based on the VSB. Make sure the following components are added: -* INCLUDE_POSIX_PTHREADS -* INCLUDE_POSIX_PTHREAD_SCHEDULER -* INCLUDE_SHARED_DATA -* INCLUDE_SHL - -Copy the generated iwasm executable, the test WASM binary as well as the needed -shared libraries (libc.so.1, libllvm.so.1 or libgnu.so.1 depending on the VSB, -libunix.so.1) to a supported file system (eg: romfs). - -Zephyr -------------------------- -You need to download the Zephyr source code first and embed WAMR into it. -``` Bash -git clone https://github.com/zephyrproject-rtos/zephyr.git -cd zephyr/samples/ -cp -a /products/zephyr/simple . -cd simple -ln -s iwasm -ln -s shared-lib -mkdir build && cd build -source ../../../zephyr-env.sh -cmake -GNinja -DBOARD=qemu_x86 .. -ninja -``` -AliOS-Things -------------------------- -1. a developerkit board id needed for testing -2. download the AliOS-Things code - ``` Bash - git clone https://github.com/alibaba/AliOS-Things.git - ``` -3. copy /products/alios-things directory to AliOS-Things/middleware, and rename it as iwasm - ``` Bash - cp -a /products/alios-things middleware/iwasm - ``` -4. create a link to in middleware/iwasm/ and rename it to iwasm - ``` Bash - ln -s middleware/iwasm/iwasm - ``` -5. create a link to in middleware/iwasm/ and rename it to shared-lib - ``` Bash - ln -s middle/iwasm/shared-lib - ``` -6. modify file app/example/helloworld/helloworld.c, patch as: - ``` C - #include - #include - extern bool iwasm_init(); - int application_start(int argc, char *argv[]) - { - int count = 0; - iwasm_init(); - ... - } - ``` -7. modify file app/example/helloworld/aos.mk - ``` C - $(NAME)_COMPONENTS := osal_aos iwasm - ``` -8. build source code - ``` Bash - aos make helloworld@developerkit -c config - aos make - ``` -9. download the binary to developerkit board, check the output from serial port - -Docker -------------------------- -[Docker](https://www.docker.com/) will download all the dependencies and build WAMR Core on your behalf. - -Make sure you have Docker installed on your machine: [macOS](https://docs.docker.com/docker-for-mac/install/), [Windows](https://docs.docker.com/docker-for-windows/install/) or [Linux](https://docs.docker.com/install/linux/docker-ce/ubuntu/). - -Build the Docker image: - -``` Bash -docker build --rm -f "Dockerfile" -t wamr:latest . -``` -Run the image in interactive mode: -``` Bash -docker run --rm -it wamr:latest -``` -You'll now enter the container at `/root`. - -Build WASM app -========================= -You can write a simple ```test.c``` as the first sample. - -```C -#include -#include - -int main(int argc, char **argv) -{ - char *buf; - - printf("Hello world!\n"); - - buf = malloc(1024); - if (!buf) { - printf("malloc buf failed\n"); - return -1; - } - - printf("buf ptr: %p\n", buf); - - sprintf(buf, "%s", "1234\n"); - printf("buf: %s", buf); - - free(buf); - return 0; -} -``` - -There are three methods to build a WASM binary. They are Emscripten, the clang compiler and Docker. - -## Use Emscripten tool - -A method to build a WASM binary is to use Emscripten tool ```emcc```. -Assuming you are using Linux, you may install emcc from Emscripten EMSDK following the steps below: - -``` -git clone https://github.com/emscripten-core/emsdk.git -emsdk install latest -emsdk activate latest -``` -source ```./emsdk_env.sh```. -The Emscripten website provides other installation methods beyond Linux. - -Use the emcc command below to build the WASM C source code into the WASM binary. -``` Bash -emcc -g -O3 *.c -s WASM=1 -s SIDE_MODULE=1 -s ASSERTIONS=1 -s STACK_OVERFLOW_CHECK=2 \ - -s TOTAL_MEMORY=65536 -s TOTAL_STACK=4096 -o test.wasm -``` -You will get ```test.wasm``` which is the WASM app binary. - -## Use clang compiler - -Another method to build a WASM binary is to use clang compiler```clang-8```. - -Add source to your system source list from llvm website, for ubuntu16.04, add following lines to /etc/apt/sources.list: - -```Bash -deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial main -deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial main # 7 -deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main -deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main # 8 -deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-8 main -deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial-8 main -``` - -Download and install clang-8 tool-chain using following commands: - -```Bash -wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - -sudo apt-get update -sudo apt-get install llvm-8 lld-8 clang-8 -``` - -Create a soft link under /usr/bin: - -```Bash -cd /usr/bin -sudo ln -s wasm-ld-8 wasm-ld -``` - -Use the clang-8 command below to build the WASM C source code into the WASM binary. - -```Bash -clang-8 --target=wasm32 -O3 -Wl,--initial-memory=131072,--allow-undefined,--export=main, ---no-threads,--strip-all,--no-entry -nostdlib -o test.wasm test.c -``` - -You will get ```test.wasm``` which is the WASM app binary. - -## Using Docker - -The last method availble is using [Docker](https://www.docker.com/). We assume you've already configured Docker (see Platform section above) and have a running interactive shell. Currently the Dockerfile only supports compiling apps with clang, with Emscripten planned for the future. - -Use the clang-8 command below to build the WASM C source code into the WASM binary. - -```Bash -clang-8 --target=wasm32 -O3 -Wl,--initial-memory=131072,--allow-undefined,--export=main, ---no-threads,--strip-all,--no-entry -nostdlib -o test.wasm test.c -``` - -You will get ```test.wasm``` which is the WASM app binary. - -Run WASM app -======================== - -Assume you are using Linux, the command to run the test.wasm is: -``` Bash -cd iwasm/products/linux/build -./iwasm test.wasm -``` -You will get the following output: -``` -Hello world! -buf ptr: 0x400002b0 -buf: 1234 -``` -If you would like to run the test app on Zephyr, we have embedded a test sample into its OS image. You will need to execute: -``` -ninja run -``` Embed WAMR into software production ===================================== -WAMR can be built into a standalone executable which takes the WASM application file name as input, and then executes it. To use it in the embedded environment you should embed WAMR into your own software product. WASM provides a set of API's for embedded code to load the WASM module, instantiate the module and invoke a WASM function from a native call. - -A typical WAMR API usage is shown below (some return value checks are ignored): -``` C - static char global_heap_buf[512 * 1024]; +WAMR application programming library +=================================== - char *buffer; - wasm_module_t module; - wasm_module_inst_t inst; - wasm_function_inst_t func; - wasm_exec_env_t env; - uint32 argv[2]; - bh_memory_init_with_pool(global_heap_buf, sizeof(global_heap_buf)); - wasm_runtime_init(); - - buffer = read_wasm_binary_to_buffer(…); - module = wasm_runtime_load(buffer, size, err, err_size); - inst = wasm_runtime_instantiate(module, 0, 0, err, err_size); - func = wasm_runtime_lookup_function(inst, "fib", "(i32)i32"); - env = wasm_runtime_create_exec_env(stack_size); - - argv[0] = 8; - if (!wasm_runtime_call_wasm(inst, env, func, 1, argv_buf) ) { - wasm_runtime_clear_exception(inst); - } - /* the return value is stored in argv[0] */ - printf("fib function return: %d\n", argv[0]); - - wasm_runtime_destory_exec_env(env); - wasm_runtime_deinstantiate(inst); - wasm_runtime_unload(module); - wasm_runtime_destroy(); - bh_memory_destroy(); -``` - - -WASM application library -======================== -In general, there are 3 classes of API's important for the WASM application: -- Built-in API's: WAMR provides a minimal API set for developers. -- 3rd party API's: Programmer can download and include any 3rd party C source code and add it into their own WASM app source tree. -- Platform native API's: WAMR provides a mechanism to export a native API to the WASM application. - - -Built-in application library ---------------- -Built-in API's include Libc API's, Base library and Extension library reference. - -**Libc API's**
-This is a minimal set of Libc API's for memory allocation, string manipulation and printing. The header file is located at ```lib/app-libs/libc/lib_base.h```. The current supported API set is listed here: -``` C -void *malloc(size_t size); -void *calloc(size_t n, size_t size); -void free(void *ptr); -int memcmp(const void *s1, const void *s2, size_t n); -void *memcpy(void *dest, const void *src, size_t n); -void *memmove(void *dest, const void *src, size_t n); -void *memset(void *s, int c, size_t n); -int putchar(int c); -int snprintf(char *str, size_t size, const char *format, ...); -int sprintf(char *str, const char *format, ...); -char *strchr(const char *s, int c); -int strcmp(const char *s1, const char *s2); -char *strcpy(char *dest, const char *src); -size_t strlen(const char *s); -int strncmp(const char * str1, const char * str2, size_t n); -char *strncpy(char *dest, const char *src, unsigned long n); -``` - -**Base library**
-Basic support for communication, timers, etc is available. You can refer to the header file ```lib/app-libs/base/wasm_app.h``` which contains the definitions for request and response API's, event pub/sub API's and timer API's. Please note that these API's require the native implementations. -The API set is listed below: -``` C -typedef void(*request_handler_f)(request_t *) ; -typedef void(*response_handler_f)(response_t *, void *) ; - -// Request API's -bool api_register_resource_handler(const char *url, request_handler_f); -void api_send_request(request_t * request, response_handler_f response_handler, void * user_data); -void api_response_send(response_t *response); - -// Event API's -bool api_publish_event(const char *url, int fmt, void *payload, int payload_len); -bool api_subscribe_event(const char * url, request_handler_f handler); - -struct user_timer; -typedef struct user_timer * user_timer_t; - -// Timer API's -user_timer_t api_timer_create(int interval, bool is_period, bool auto_start, void(*on_user_timer_update)(user_timer_t -)); -void api_timer_cancel(user_timer_t timer); -void api_timer_restart(user_timer_t timer, int interval); -``` - -**Library extension reference**
-Currently we provide several kinds of extension library for reference including sensor, connection and GUI. - -Sensor API: In the header file ```lib/app-libs/extension/sensor/sensor.h```, the API set is defined as below: -``` C -sensor_t sensor_open(const char* name, int index, - void(*on_sensor_event)(sensor_t, attr_container_t *, void *), - void *user_data); -bool sensor_config(sensor_t sensor, int interval, int bit_cfg, int delay); -bool sensor_config_with_attr_container(sensor_t sensor, attr_container_t *cfg); -bool sensor_close(sensor_t sensor); -``` -Connection API: In the header file `lib/app-libs/extension/connection/connection.h.`, the API set is defined as below: -``` C -/* Connection event type */ -typedef enum { - /* Data is received */ - CONN_EVENT_TYPE_DATA = 1, - /* Connection is disconnected */ - CONN_EVENT_TYPE_DISCONNECT -} conn_event_type_t; - -typedef void (*on_connection_event_f)(connection_t *conn, - conn_event_type_t type, - const char *data, - uint32 len, - void *user_data); -connection_t *api_open_connection(const char *name, - attr_container_t *args, - on_connection_event_f on_event, - void *user_data); -void api_close_connection(connection_t *conn); -int api_send_on_connection(connection_t *conn, const char *data, uint32 len); -bool api_config_connection(connection_t *conn, attr_container_t *cfg); -``` -GUI API: The API's is list in header file ```lib/app-libs/extension/gui/wgl.h``` which is implemented based open soure 2D graphic library [LittlevGL](https://docs.littlevgl.com/en/html/index.html). Currently supported widgets include button, label, list and check box and more wigdet would be provided in future. - - -The mechanism of exporting native API to WASM application -======================================================= - -The basic working flow for WASM application calling into the native API is shown in the following diagram: - - - - -WAMR provides the macro `EXPORT_WASM_API` to enable users to export a native API to a WASM application. WAMR has implemented a base API for the timer and messaging by using `EXPORT_WASM_API`. This can be a point of reference for extending your own library. -``` C -static NativeSymbol extended_native_symbol_defs[] = { - EXPORT_WASM_API(wasm_register_resource), - EXPORT_WASM_API(wasm_response_send), - EXPORT_WASM_API(wasm_post_request), - EXPORT_WASM_API(wasm_sub_event), - EXPORT_WASM_API(wasm_create_timer), - EXPORT_WASM_API(wasm_timer_set_interval), - EXPORT_WASM_API(wasm_timer_cancel), - EXPORT_WASM_API(wasm_timer_restart) -}; -``` - -![#f03c15](https://placehold.it/15/f03c15/000000?text=+) **Security attention:** A WebAssembly application should only have access to its own memory space. As a result, the integrator should carefully design the native function to ensure that the memory accesses are safe. The native API to be exported to the WASM application must: -- Only use 32 bits number for parameters -- Should not pass data to the structure pointer (do data serialization instead) -- Should do the pointer address conversion in the native API -- Should not pass function pointer as callback - -Below is a sample of a library extension. All code invoked across WASM and native world must be serialized and de-serialized, and the native world must do a boundary check for every incoming address from the WASM world. - - - -Steps for exporting native API -========================== - -WAMR implemented a framework for developers to export API's. Below is the procedure to expose the platform API's in three steps: - -**Step 1. Create a header file**
-Declare the API's for your WASM application source project to include. - -**Step 2. Create a source file**
-Export the platform API's, for example in ``` products/linux/ext_lib_export.c ``` -``` C -#include "lib_export.h" - -static NativeSymbol extended_native_symbol_defs[] = -{ -}; - -#include "ext_lib_export.h" -``` - -**Step 3. Register new API's**
-Use the macro `EXPORT_WASM_API` and `EXPORT_WASM_API2` to add exported API's into the array of ```extended_native_symbol_defs```. -The pre-defined MACRO `EXPORT_WASM_API` should be used to declare a function export: -``` c -#define EXPORT_WASM_API(symbol) {#symbol, symbol} -``` - -Below code example shows how to extend the library to support `customized()`: - -``` -//lib_export_impl.c -void customized() -{ - // your code -} - - -// lib_export_dec.h -#ifndef _LIB_EXPORT_DEC_H_ -#define _LIB_EXPORT_DEC_H_ -#ifdef __cplusplus -extern "C" { -#endif - -void customized(); - -#ifdef __cplusplus -} -#endif -#endif - - -// ext_lib_export.c -#include "lib_export.h" -#include "lib_export_dec.h" - -static NativeSymbol extended_native_symbol_defs[] = -{ - EXPORT_WASM_API(customized) -}; - -#include "ext_lib_export.h" -``` - -Use extended library ------------------------- -In the application source project, it will include the WAMR built-in API's header file and platform extension header files. Assuming the board vendor extends the library which added an API called customized(), the WASM application would be like this: -``` C -#include -#include "lib_export_dec.h" // provided by the platform vendor - -int main(int argc, char **argv) -{ - int I; - char *buf = “abcd”; - customized(); // customized API provided by the platform vendor - return i; -} -``` - - -Communication programming models -========================= -WAMR supports two typical communication programming models, the microservice model and the pub/sub model. - - -Microservice model -------------------------- -The microservice model is also known as request and response model. One WASM application acts as the server which provides a specific service. Other WASM applications or host/cloud applications request that service and get the response. - - -Below is the reference implementation of the server application. It provides room temperature measurement service. - -``` C -void on_init() -{ - api_register_resource_handler("/room_temp", room_temp_handler); -} - -void on_destroy() -{ -} - -void room_temp_handler(request_t *request) -{ - response_t response[1]; - attr_container_t *payload; - payload = attr_container_create("room_temp payload"); - if (payload == NULL) - return; - - attr_container_set_string(&payload, "temp unit", "centigrade"); - attr_container_set_int(&payload, "value", 26); - - make_response_for_request(request, response); - set_response(response, - CONTENT_2_05, - FMT_ATTR_CONTAINER, - payload, - attr_container_get_serialize_length(payload)); - - api_response_send(response); - attr_container_destroy(payload); -} -``` - - -Pub/sub model -------------------------- -One WASM application acts as the event publisher. It publishes events to notify WASM applications or host/cloud applications which subscribe to the events. - - - -Below is the reference implementation of the pub application. It utilizes a timer to repeatedly publish an overheat alert event to the subscriber applications. Then the subscriber applications receive the events immediately. - -``` C -/* Timer callback */ -void timer_update(user_timer_t timer -{ - attr_container_t *event; - - event = attr_container_create("event"); - attr_container_set_string(&event, - "warning", - "temperature is over high"); - - api_publish_event("alert/overheat", - FMT_ATTR_CONTAINER, - event, - attr_container_get_serialize_length(event)); - - attr_container_destroy(event); -} - -void on_init() -{ - user_timer_t timer; - timer = api_timer_create(1000, true, true, timer_update); -} - -void on_destroy() -{ -} -``` - -Below is the reference implementation of the sub application. -``` C -void overheat_handler(request_t *event) -{ - printf("Event: %s\n", event->url); - - if (event->payload != NULL && event->fmt == FMT_ATTR_CONTAINER) - attr_container_dump((attr_container_t *) event->payload); -} - -void on_init( -{ - api_subscribe_event ("alert/overheat", overheat_handler); -} - -void on_destroy() -{ -} -``` -**Note:** You can also subscribe this event from host side by using host tool. Please refer `samples/simple` project for deail usage. Samples and demos -========================= -The simple sample --------- -Please refer to the ```samples/simple``` folder for samples of WASM application life cyle management and programming models. - -2D graphic user interface with LittlevGL ------------------------------------------------- -We have 2 samples for 2D graphic user interface. - -One of them demonstrates that a graphic user interface application in WebAssembly integrates the LittlevGL, an open-source embedded 2d graphic library. The sample source code is under ```samples/littlevgl``` - -In this sample, the LittlevGL source code is built into the WebAssembly code with the user application source files. The platform interfaces defined by LittlevGL is implemented in the runtime and exported to the application through the declarations from source "ext_lib_export.c" as below: - - EXPORT_WASM_API(display_init), - EXPORT_WASM_API(display_input_read), - EXPORT_WASM_API(display_flush), - EXPORT_WASM_API(display_fill), - EXPORT_WASM_API(display_vdb_write), - EXPORT_WASM_API(display_map), - EXPORT_WASM_API(time_get_ms), }; - -The runtime component supports building target for Linux and AliOS-Things, Zephyr/STM Nucleo board respectively. The beauty of this sample is the WebAssembly application can have identical display and behavior when running from both runtime environments. That implies we can do the majority of application validation from the desktop environment then load it to the target device as long as two runtime distributions support the same set of the application interface. +================= -Below pictures show the WASM application is running on an STM board with an LCD touch panel. When users click the blue button, the WASM application increases the counter, and the latest counter value is displayed on the top banner of the touch panel. - - - - -The sample also provides the native Linux version of application without the runtime under folder "vgl-native-ui-app". It can help to check differences between the implementations in native and WebAssembly. - - -The other sample demonstrates that a graphic user interface application in WebAssembly programming with WAMR graphic library(WGL), which is implemented based on LittlevGL, an open-source embedded 2d graphic library. The sample source code is under ```samples/gui``` - -Unlike `sample/littlevgl/val-wasm-runtime`, in this sample, the LittlevGL source code is built into the WAMR runtime and exported to Webassembly applicaton but not directly built into Webassembly application. And WGL provides a group of WebAssembly wrapper API's for user to write graphic application. These API's are listed in: `/core/iwasm/lib/app-libs/extension/gui/wgl.h`. Currently only a few API's are provided and there will be more. +Releases, acknowledgment and roadmap +==================================== Submit issues and contact the maintainers From cbd046000d973919d62d9b7c9391ab3cdef60363 Mon Sep 17 00:00:00 2001 From: Xin Wang Date: Sat, 7 Sep 2019 12:14:58 +0800 Subject: [PATCH 13/20] re-organize the readme --- README.md | 74 ++++++-- doc/building.md | 268 ++++++++++++++++++++++++++ doc/embed_wamr.md | 40 ++++ doc/pics/architecture.PNG | Bin 53444 -> 0 bytes doc/pics/architecture_extend.PNG | Bin 78440 -> 0 bytes doc/pics/vgl.PNG | Bin 49192 -> 0 bytes doc/pics/vgl2.PNG | Bin 82855 -> 0 bytes doc/pics/vgl_demo.png | Bin 0 -> 133339 bytes doc/pics/vgl_demo_linux.png | Bin 0 -> 5792 bytes doc/pics/wamr-arch.JPG | Bin 0 -> 131955 bytes doc/wamr_api.md | 316 +++++++++++++++++++++++++++++++ 11 files changed, 681 insertions(+), 17 deletions(-) create mode 100644 doc/building.md create mode 100644 doc/embed_wamr.md delete mode 100644 doc/pics/architecture.PNG delete mode 100644 doc/pics/architecture_extend.PNG delete mode 100644 doc/pics/vgl.PNG delete mode 100644 doc/pics/vgl2.PNG create mode 100644 doc/pics/vgl_demo.png create mode 100644 doc/pics/vgl_demo_linux.png create mode 100644 doc/pics/wamr-arch.JPG create mode 100644 doc/wamr_api.md diff --git a/README.md b/README.md index 196fc51e7..ad4a3a3e2 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ WebAssembly Micro Runtime ========================= WebAssembly Micro Runtime (WAMR) is a standalone WebAssembly (WASM) runtime designed for a small footprint. It includes: -- A WebAssembly (WASM) VM core +- A WebAssembly VM core (namely iwasm) - The supporting API's for the WASM applications - A mechanism for dynamic management of the WASM application @@ -20,45 +20,85 @@ Current Features of WAMR - Supports micro-service and pub-sub event inter-app communication models - Easy to extend to support remote FW application management from host or cloud -Architecture -========================= -The application manager component handles the packets that the platform receives from external sources through any communication buses such as a socket, serial port or SPI. A packet type can be either a request, a response or an event. The application manager will serve the requests with URI "/applet" and call the runtime glue layer interfaces for installing/uninstalling the application. For other URI's, it will filter the resource registration table and route the request to the internal queue of the responsible application. +Application framework architecture +=================================== -- The WebAssembly runtime provides the execution environment for WASM applications. +By using the iwasm VM core, we are flexible to build different application frameworks for the specific domains. -- The messaging layer can support the API for WASM applications to communicate with each other and also the host environment. +The WAMR has offered an comprehensive application framework for IoT device usages. The framework solves many common requirements for building a real project: +- Modular design for multiple runtimes support +- Inter application communication +- Remote application management +- WASM APP programming model and API extension mechanism -- When ahead of time (AOT) compilation is enabled (TODO), the WASM application could be either WASM or a compiled native binary. - - + -Build WAMR Core and run basic WASM applications +Build WAMR Core and run WASM applications ================================================ -Please follow the instructions below to build the WAMR core on different platforms. --Linux --Zephyr --Mac --VxWorks --AliOS-Things --Docker +Please follow the instructions below to build the WAMR core (iwasm) on different platforms: +- Linux +- Zephyr +- Mac +- VxWorks +- AliOS-Things +- Docker + +Then you can build some basic WASM applications and run it with the WAMR core. As the WAMR core doesn't include the extended application library, your WASM applications can only use the built-in APIs supported by WAMR. + +See the [doc/building.md](./doc/building.md) for the details. Embed WAMR into software production ===================================== +WAMR can be built into a standalone executable which takes the WASM application file name as input, and then executes it. In some other situations, the WAMR source code is embedded the product code and built into the final product. +WAMR provides a set of C API for embedding code to load the WASM module, instantiate the module and invoke a WASM function from a native call. + +See the [doc/embed_wamr.md](./doc/embed_wamr.md) for the details. WAMR application programming library =================================== +WAMR defined event driven programming model: +- Single thread per WASM app instance +- App must implement system callbacks: on_init, on_destrory + + +In general there are a few API classes for the WASM application programming: +- Built-in API: WAMR core provides a minimal libc API set for WASM APP +- 3rd party libraries: Programmers can download any 3rd party C/C++ source code and build it together with the WASM APP code +- WAMR application libraries: + - Timer + - Micro service (Request/Response) + - Pub/Sub + - Sensor + - Connection and data transmission + - 2D graphic UI (based on littlevgl) +- User extended native API: extend the native API to the WASM applications + +See the [doc/wamr_api.md](./doc/wamr_api.md) for the details. Samples and demos ================= +The WAMR samples are located in folder [./samples](./samples). A sample usually contains the WAMR runtime build, WASM applications and test tools. The WARM provides following samples: +- [Simple](./samples/simple/README.md): The runtime integrated most of the WAMR APP libaries and multiple WASM applications are provided for using different WASM API set. +- [littlevgl](./samples/littlevgl/README.md): Demostrating the graphic user interface application usage on WAMR. The whole littlevgl 2D user graphic library and the UI application is built into WASM application. +- [gui](./samples/gui/README.md): Moved the littlevgl library into the runtime and defined a WASM application interface by wrapping the littlevgl API. +- [IoT-APP-Store-Demo](./test-tools/IoT-APP-Store-Demo/README.md): A web site for demostrating a WASM APP store usage where we can remotely install and uninstall WASM application on remote devices. + + +The graphic user interface sample: + +![WAMR samples diagram](./doc/pics/vgl_demo.png "WAMR samples diagram") + + + Releases, acknowledgment and roadmap ==================================== diff --git a/doc/building.md b/doc/building.md new file mode 100644 index 000000000..13c5bdc14 --- /dev/null +++ b/doc/building.md @@ -0,0 +1,268 @@ + +Build WAMR Core +========================= +Please follow the instructions below to build the WAMR core on different platforms. + +Linux +------------------------- +First of all please install library dependencies of lib gcc. +Use installation commands below for Ubuntu Linux: +``` Bash +sudo apt install lib32gcc-5-dev g++-multilib +``` +Or in Fedora: +``` Bash +sudo dnf install glibc-devel.i686 +``` + +After installing dependencies, build the source code: +``` Bash +cd core/iwasm/products/linux/ +mkdir build +cd build +cmake .. +make +``` + +Mac +------------------------- +Make sure to install Xcode from App Store firstly, and install cmake. + +If you use Homebrew, install cmake from the command line: +``` Bash +brew install cmake +``` + +Then build the source codes: +``` +cd core/iwasm/products/darwin/ +mkdir build +cd build +cmake .. +make +``` + +VxWorks +------------------------- +VxWorks 7 SR0620 release is validated. + +First you need to build a VSB. Make sure *UTILS_UNIX* layer is added in the VSB. +After the VSB is built, export the VxWorks toolchain path by: +``` +export /host/vx-compiler/bin:$PATH +``` +Now switch to iwasm source tree to build the source code: +``` +cd core/iwasm/products/vxworks/ +mkdir build +cd build +cmake .. +make +``` +Create a VIP based on the VSB. Make sure the following components are added: +* INCLUDE_POSIX_PTHREADS +* INCLUDE_POSIX_PTHREAD_SCHEDULER +* INCLUDE_SHARED_DATA +* INCLUDE_SHL + +Copy the generated iwasm executable, the test WASM binary as well as the needed +shared libraries (libc.so.1, libllvm.so.1 or libgnu.so.1 depending on the VSB, +libunix.so.1) to a supported file system (eg: romfs). + +Zephyr +------------------------- +You need to download the Zephyr source code first and embed WAMR into it. +``` Bash +git clone https://github.com/zephyrproject-rtos/zephyr.git +cd zephyr/samples/ +cp -a /products/zephyr/simple . +cd simple +ln -s iwasm +ln -s shared-lib +mkdir build && cd build +source ../../../zephyr-env.sh +cmake -GNinja -DBOARD=qemu_x86 .. +ninja +``` +AliOS-Things +------------------------- +1. a developerkit board id needed for testing +2. download the AliOS-Things code + ``` Bash + git clone https://github.com/alibaba/AliOS-Things.git + ``` +3. copy /products/alios-things directory to AliOS-Things/middleware, and rename it as iwasm + ``` Bash + cp -a /products/alios-things middleware/iwasm + ``` +4. create a link to in middleware/iwasm/ and rename it to iwasm + ``` Bash + ln -s middleware/iwasm/iwasm + ``` +5. create a link to in middleware/iwasm/ and rename it to shared-lib + ``` Bash + ln -s middle/iwasm/shared-lib + ``` +6. modify file app/example/helloworld/helloworld.c, patch as: + ``` C + #include + #include + extern bool iwasm_init(); + int application_start(int argc, char *argv[]) + { + int count = 0; + iwasm_init(); + ... + } + ``` +7. modify file app/example/helloworld/aos.mk + ``` C + $(NAME)_COMPONENTS := osal_aos iwasm + ``` +8. build source code + ``` Bash + aos make helloworld@developerkit -c config + aos make + ``` +9. download the binary to developerkit board, check the output from serial port + +Docker +------------------------- +[Docker](https://www.docker.com/) will download all the dependencies and build WAMR Core on your behalf. + +Make sure you have Docker installed on your machine: [macOS](https://docs.docker.com/docker-for-mac/install/), [Windows](https://docs.docker.com/docker-for-windows/install/) or [Linux](https://docs.docker.com/install/linux/docker-ce/ubuntu/). + +Build the Docker image: + +``` Bash +docker build --rm -f "Dockerfile" -t wamr:latest . +``` +Run the image in interactive mode: +``` Bash +docker run --rm -it wamr:latest +``` +You'll now enter the container at `/root`. + + +Build WASM app +========================= +You can write a simple ```test.c``` as the first sample. + +```C +#include +#include + +int main(int argc, char **argv) +{ + char *buf; + + printf("Hello world!\n"); + + buf = malloc(1024); + if (!buf) { + printf("malloc buf failed\n"); + return -1; + } + + printf("buf ptr: %p\n", buf); + + sprintf(buf, "%s", "1234\n"); + printf("buf: %s", buf); + + free(buf); + return 0; +} +``` + +There are three methods to build a WASM binary. They are Emscripten, the clang compiler and Docker. + +## Use Emscripten tool + +A method to build a WASM binary is to use Emscripten tool ```emcc```. +Assuming you are using Linux, you may install emcc from Emscripten EMSDK following the steps below: + +``` +git clone https://github.com/emscripten-core/emsdk.git +emsdk install latest +emsdk activate latest +``` +source ```./emsdk_env.sh```. +The Emscripten website provides other installation methods beyond Linux. + +Use the emcc command below to build the WASM C source code into the WASM binary. +``` Bash +emcc -g -O3 *.c -s WASM=1 -s SIDE_MODULE=1 -s ASSERTIONS=1 -s STACK_OVERFLOW_CHECK=2 \ + -s TOTAL_MEMORY=65536 -s TOTAL_STACK=4096 -o test.wasm +``` +You will get ```test.wasm``` which is the WASM app binary. + +## Use clang compiler + +Another method to build a WASM binary is to use clang compiler```clang-8```. + +Add source to your system source list from llvm website, for ubuntu16.04, add following lines to /etc/apt/sources.list: + +```Bash +deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial main +deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial main # 7 +deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main +deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main # 8 +deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-8 main +deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial-8 main +``` + +Download and install clang-8 tool-chain using following commands: + +```Bash +wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - +sudo apt-get update +sudo apt-get install llvm-8 lld-8 clang-8 +``` + +Create a soft link under /usr/bin: + +```Bash +cd /usr/bin +sudo ln -s wasm-ld-8 wasm-ld +``` + +Use the clang-8 command below to build the WASM C source code into the WASM binary. + +```Bash +clang-8 --target=wasm32 -O3 -Wl,--initial-memory=131072,--allow-undefined,--export=main, +--no-threads,--strip-all,--no-entry -nostdlib -o test.wasm test.c +``` + +You will get ```test.wasm``` which is the WASM app binary. + +## Using Docker + +The last method availble is using [Docker](https://www.docker.com/). We assume you've already configured Docker (see Platform section above) and have a running interactive shell. Currently the Dockerfile only supports compiling apps with clang, with Emscripten planned for the future. + +Use the clang-8 command below to build the WASM C source code into the WASM binary. + +```Bash +clang-8 --target=wasm32 -O3 -Wl,--initial-memory=131072,--allow-undefined,--export=main, +--no-threads,--strip-all,--no-entry -nostdlib -o test.wasm test.c +``` + +You will get ```test.wasm``` which is the WASM app binary. + +Run WASM app +======================== + +Assume you are using Linux, the command to run the test.wasm is: +``` Bash +cd iwasm/products/linux/build +./iwasm test.wasm +``` +You will get the following output: +``` +Hello world! +buf ptr: 0x400002b0 +buf: 1234 +``` +If you would like to run the test app on Zephyr, we have embedded a test sample into its OS image. You will need to execute: +``` +ninja run +``` diff --git a/doc/embed_wamr.md b/doc/embed_wamr.md new file mode 100644 index 000000000..4c1588f8f --- /dev/null +++ b/doc/embed_wamr.md @@ -0,0 +1,40 @@ +Embed WAMR into software production +===================================== + +![WAMR embed diagram](./pics/embed.PNG "WAMR embed architecture diagram") + + +A typical WAMR API usage is shown below (some return value checks are ignored): +``` C + static char global_heap_buf[512 * 1024]; + + char *buffer; + wasm_module_t module; + wasm_module_inst_t inst; + wasm_function_inst_t func; + wasm_exec_env_t env; + uint32 argv[2]; + + bh_memory_init_with_pool(global_heap_buf, sizeof(global_heap_buf)); + wasm_runtime_init(); + + buffer = read_wasm_binary_to_buffer(…); + module = wasm_runtime_load(buffer, size, err, err_size); + inst = wasm_runtime_instantiate(module, 0, 0, err, err_size); + func = wasm_runtime_lookup_function(inst, "fib", "(i32)i32"); + env = wasm_runtime_create_exec_env(stack_size); + + argv[0] = 8; + if (!wasm_runtime_call_wasm(inst, env, func, 1, argv_buf) ) { + wasm_runtime_clear_exception(inst); + } + /* the return value is stored in argv[0] */ + printf("fib function return: %d\n", argv[0]); + + wasm_runtime_destory_exec_env(env); + wasm_runtime_deinstantiate(inst); + wasm_runtime_unload(module); + wasm_runtime_destroy(); + bh_memory_destroy(); +``` + diff --git a/doc/pics/architecture.PNG b/doc/pics/architecture.PNG deleted file mode 100644 index 00dba560a4d9bf0288624139eb633aa761821139..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53444 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

mK=*8hnyXH!Z7j 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�iUv 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 diff --git a/doc/pics/architecture_extend.PNG b/doc/pics/architecture_extend.PNG deleted file mode 100644 index 31905df5acf07d13b7d36f87afb8b2e43e69ae50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78440 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 Au>b%7 diff --git a/doc/pics/vgl.PNG b/doc/pics/vgl.PNG deleted file mode 100644 index d7a06d95687b84f551887db6f214df111c3975c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49192 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%0AgHS~+X&wKmLVCu%aiU!d@^8ud7{ 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 Ee@NdHZ~y=R diff --git a/doc/pics/vgl_demo.png b/doc/pics/vgl_demo.png new file mode 100644 index 0000000000000000000000000000000000000000..3cb7eb4648624c79ac07027d7f271fc753c2978d GIT binary patch literal 133339 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

  • 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
    ekDU7W-NV!x9@9bcaGb!TyG`@mg8 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 z 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 literal 0 HcmV?d00001 diff --git a/doc/pics/wamr-arch.JPG b/doc/pics/wamr-arch.JPG new file mode 100644 index 0000000000000000000000000000000000000000..759ed3888d02da457451e225c07866dfaba34cbd GIT binary patch literal 131955 zcmeFY2S8Lyx-PnqD4#c)vxg-{y+0~JR@#Wm71e*FR@0C2B=n;O7I z<>8~!lBfVsZ==3&e#QR${E5Jy2>gk_p9uVkz@G^GpNN3AiK7)ey^f6|0ARjH|4o

    |0m9%KV|+Cfj<%W6M;Vw_!EJ@ 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

    ;t4Nb@ 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 literal 0 HcmV?d00001 diff --git a/doc/wamr_api.md b/doc/wamr_api.md new file mode 100644 index 000000000..54e4945fe --- /dev/null +++ b/doc/wamr_api.md @@ -0,0 +1,316 @@ + +WASM application library +======================== +In general, there are 3 classes of API's important for the WASM application: +- Built-in API's: WAMR provides a minimal API set for developers. +- 3rd party API's: Programmer can download and include any 3rd party C source code and add it into their own WASM app source tree. +- Platform native API's: WAMR provides a mechanism to export a native API to the WASM application. + + +Built-in application library +--------------- +Built-in API's include Libc API's, Base library and Extension library reference. + +**Libc API's**
    +This is a minimal set of Libc API's for memory allocation, string manipulation and printing. The header file is located at ```lib/app-libs/libc/lib_base.h```. The current supported API set is listed here: +``` C +void *malloc(size_t size); +void *calloc(size_t n, size_t size); +void free(void *ptr); +int memcmp(const void *s1, const void *s2, size_t n); +void *memcpy(void *dest, const void *src, size_t n); +void *memmove(void *dest, const void *src, size_t n); +void *memset(void *s, int c, size_t n); +int putchar(int c); +int snprintf(char *str, size_t size, const char *format, ...); +int sprintf(char *str, const char *format, ...); +char *strchr(const char *s, int c); +int strcmp(const char *s1, const char *s2); +char *strcpy(char *dest, const char *src); +size_t strlen(const char *s); +int strncmp(const char * str1, const char * str2, size_t n); +char *strncpy(char *dest, const char *src, unsigned long n); +``` + +**Base library**
    +Basic support for communication, timers, etc is available. You can refer to the header file ```lib/app-libs/base/wasm_app.h``` which contains the definitions for request and response API's, event pub/sub API's and timer API's. Please note that these API's require the native implementations. +The API set is listed below: +``` C +typedef void(*request_handler_f)(request_t *) ; +typedef void(*response_handler_f)(response_t *, void *) ; + +// Request API's +bool api_register_resource_handler(const char *url, request_handler_f); +void api_send_request(request_t * request, response_handler_f response_handler, void * user_data); +void api_response_send(response_t *response); + +// Event API's +bool api_publish_event(const char *url, int fmt, void *payload, int payload_len); +bool api_subscribe_event(const char * url, request_handler_f handler); + +struct user_timer; +typedef struct user_timer * user_timer_t; + +// Timer API's +user_timer_t api_timer_create(int interval, bool is_period, bool auto_start, void(*on_user_timer_update)(user_timer_t +)); +void api_timer_cancel(user_timer_t timer); +void api_timer_restart(user_timer_t timer, int interval); +``` + +**Library extension reference**
    +Currently we provide several kinds of extension library for reference including sensor, connection and GUI. + +Sensor API: In the header file ```lib/app-libs/extension/sensor/sensor.h```, the API set is defined as below: +``` C +sensor_t sensor_open(const char* name, int index, + void(*on_sensor_event)(sensor_t, attr_container_t *, void *), + void *user_data); +bool sensor_config(sensor_t sensor, int interval, int bit_cfg, int delay); +bool sensor_config_with_attr_container(sensor_t sensor, attr_container_t *cfg); +bool sensor_close(sensor_t sensor); +``` +Connection API: In the header file `lib/app-libs/extension/connection/connection.h.`, the API set is defined as below: +``` C +/* Connection event type */ +typedef enum { + /* Data is received */ + CONN_EVENT_TYPE_DATA = 1, + /* Connection is disconnected */ + CONN_EVENT_TYPE_DISCONNECT +} conn_event_type_t; + +typedef void (*on_connection_event_f)(connection_t *conn, + conn_event_type_t type, + const char *data, + uint32 len, + void *user_data); +connection_t *api_open_connection(const char *name, + attr_container_t *args, + on_connection_event_f on_event, + void *user_data); +void api_close_connection(connection_t *conn); +int api_send_on_connection(connection_t *conn, const char *data, uint32 len); +bool api_config_connection(connection_t *conn, attr_container_t *cfg); +``` +GUI API: The API's is list in header file ```lib/app-libs/extension/gui/wgl.h``` which is implemented based open soure 2D graphic library [LittlevGL](https://docs.littlevgl.com/en/html/index.html). Currently supported widgets include button, label, list and check box and more wigdet would be provided in future. + +The mechanism of exporting native API to WASM application +======================================================= + +The basic working flow for WASM application calling into the native API is shown in the following diagram: + +![WAMR WASM API ext diagram](./pics/extend_library.PNG "WAMR WASM API ext architecture diagram") + + +WAMR provides the macro `EXPORT_WASM_API` to enable users to export a native API to a WASM application. WAMR has implemented a base API for the timer and messaging by using `EXPORT_WASM_API`. This can be a point of reference for extending your own library. +``` C +static NativeSymbol extended_native_symbol_defs[] = { + EXPORT_WASM_API(wasm_register_resource), + EXPORT_WASM_API(wasm_response_send), + EXPORT_WASM_API(wasm_post_request), + EXPORT_WASM_API(wasm_sub_event), + EXPORT_WASM_API(wasm_create_timer), + EXPORT_WASM_API(wasm_timer_set_interval), + EXPORT_WASM_API(wasm_timer_cancel), + EXPORT_WASM_API(wasm_timer_restart) +}; +``` + +![#f03c15](https://placehold.it/15/f03c15/000000?text=+) **Security attention:** A WebAssembly application should only have access to its own memory space. As a result, the integrator should carefully design the native function to ensure that the memory accesses are safe. The native API to be exported to the WASM application must: +- Only use 32 bits number for parameters +- Should not pass data to the structure pointer (do data serialization instead) +- Should do the pointer address conversion in the native API +- Should not pass function pointer as callback + +Below is a sample of a library extension. All code invoked across WASM and native world must be serialized and de-serialized, and the native world must do a boundary check for every incoming address from the WASM world. + + + + + +Steps for exporting native API +========================== + +WAMR implemented a framework for developers to export API's. Below is the procedure to expose the platform API's in three steps: + +**Step 1. Create a header file**
    +Declare the API's for your WASM application source project to include. + +**Step 2. Create a source file**
    +Export the platform API's, for example in ``` products/linux/ext_lib_export.c ``` +``` C +#include "lib_export.h" + +static NativeSymbol extended_native_symbol_defs[] = +{ +}; + +#include "ext_lib_export.h" +``` + +**Step 3. Register new API's**
    +Use the macro `EXPORT_WASM_API` and `EXPORT_WASM_API2` to add exported API's into the array of ```extended_native_symbol_defs```. +The pre-defined MACRO `EXPORT_WASM_API` should be used to declare a function export: +``` c +#define EXPORT_WASM_API(symbol) {#symbol, symbol} +``` + +Below code example shows how to extend the library to support `customized()`: + +``` +//lib_export_impl.c +void customized() +{ + // your code +} + + +// lib_export_dec.h +#ifndef _LIB_EXPORT_DEC_H_ +#define _LIB_EXPORT_DEC_H_ +#ifdef __cplusplus +extern "C" { +#endif + +void customized(); + +#ifdef __cplusplus +} +#endif +#endif + + +// ext_lib_export.c +#include "lib_export.h" +#include "lib_export_dec.h" + +static NativeSymbol extended_native_symbol_defs[] = +{ + EXPORT_WASM_API(customized) +}; + +#include "ext_lib_export.h" +``` + +Use extended library +------------------------ +In the application source project, it will include the WAMR built-in API's header file and platform extension header files. Assuming the board vendor extends the library which added an API called customized(), the WASM application would be like this: +``` C +#include +#include "lib_export_dec.h" // provided by the platform vendor + +int main(int argc, char **argv) +{ + int I; + char *buf = “abcd”; + customized(); // customized API provided by the platform vendor + return i; +} +``` + + +Communication programming models +========================= +WAMR supports two typical communication programming models, the microservice model and the pub/sub model. + + +Microservice model +------------------------- +The microservice model is also known as request and response model. One WASM application acts as the server which provides a specific service. Other WASM applications or host/cloud applications request that service and get the response. + + +Below is the reference implementation of the server application. It provides room temperature measurement service. + +``` C +void on_init() +{ + api_register_resource_handler("/room_temp", room_temp_handler); +} + +void on_destroy() +{ +} + +void room_temp_handler(request_t *request) +{ + response_t response[1]; + attr_container_t *payload; + payload = attr_container_create("room_temp payload"); + if (payload == NULL) + return; + + attr_container_set_string(&payload, "temp unit", "centigrade"); + attr_container_set_int(&payload, "value", 26); + + make_response_for_request(request, response); + set_response(response, + CONTENT_2_05, + FMT_ATTR_CONTAINER, + payload, + attr_container_get_serialize_length(payload)); + + api_response_send(response); + attr_container_destroy(payload); +} +``` + + +Pub/sub model +------------------------- +One WASM application acts as the event publisher. It publishes events to notify WASM applications or host/cloud applications which subscribe to the events. + + + +Below is the reference implementation of the pub application. It utilizes a timer to repeatedly publish an overheat alert event to the subscriber applications. Then the subscriber applications receive the events immediately. + +``` C +/* Timer callback */ +void timer_update(user_timer_t timer +{ + attr_container_t *event; + + event = attr_container_create("event"); + attr_container_set_string(&event, + "warning", + "temperature is over high"); + + api_publish_event("alert/overheat", + FMT_ATTR_CONTAINER, + event, + attr_container_get_serialize_length(event)); + + attr_container_destroy(event); +} + +void on_init() +{ + user_timer_t timer; + timer = api_timer_create(1000, true, true, timer_update); +} + +void on_destroy() +{ +} +``` + +Below is the reference implementation of the sub application. +``` C +void overheat_handler(request_t *event) +{ + printf("Event: %s\n", event->url); + + if (event->payload != NULL && event->fmt == FMT_ATTR_CONTAINER) + attr_container_dump((attr_container_t *) event->payload); +} + +void on_init( +{ + api_subscribe_event ("alert/overheat", overheat_handler); +} + +void on_destroy() +{ +} +``` +**Note:** You can also subscribe this event from host side by using host tool. Please refer `samples/simple` project for deail usage. \ No newline at end of file From f022df316045d865878d5803238a0e326529aeb5 Mon Sep 17 00:00:00 2001 From: Xin Wang Date: Sat, 7 Sep 2019 13:23:52 +0800 Subject: [PATCH 14/20] more changes --- README.md | 48 +++++++++++++++++++++++------------- doc/pics/vgl_demo2.png | Bin 0 -> 149435 bytes doc/release_ack.md | 0 doc/roadmap.md | 14 +++++++++++ doc/wamr_api.md | 8 +----- samples/gui/README.md | 12 +++++---- samples/littlevgl/README.md | 16 +++++++++--- 7 files changed, 65 insertions(+), 33 deletions(-) create mode 100644 doc/pics/vgl_demo2.png create mode 100644 doc/release_ack.md create mode 100644 doc/roadmap.md diff --git a/README.md b/README.md index ad4a3a3e2..3a2dbe6e5 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ WebAssembly Micro Runtime ========================= -WebAssembly Micro Runtime (WAMR) is a standalone WebAssembly (WASM) runtime designed for a small footprint. It includes: +WebAssembly Micro Runtime (WAMR) is a standalone WebAssembly (WASM) runtime with small footprint. It includes a few parts as below: - A WebAssembly VM core (namely iwasm) - The supporting API's for the WASM applications - A mechanism for dynamic management of the WASM application @@ -9,9 +9,9 @@ WebAssembly Micro Runtime (WAMR) is a standalone WebAssembly (WASM) runtime desi Current Features of WAMR ========================= - WASM interpreter (AOT is planned) -- Provides support for a subset of Libc. +- Supports for a subset of Libc. - Supports "SIDE_MODULE=1" EMCC compilation option -- Provides API's for embedding runtime into production software +- Provides embedding C API - Provides a mechanism for exporting native API's to WASM applications - Supports the programming of firmware apps in a large range of languages (C/C++/Java/Rust/Go/TypeScript etc.) - App sandbox execution environment on embedded OS @@ -25,38 +25,39 @@ Application framework architecture By using the iwasm VM core, we are flexible to build different application frameworks for the specific domains. -The WAMR has offered an comprehensive application framework for IoT device usages. The framework solves many common requirements for building a real project: -- Modular design for multiple runtimes support +The WAMR has offered a comprehensive application framework for device and IoT usages. The framework solves many common requirements for building a real project: +- Modular design for more language runtimes support - Inter application communication - Remote application management - WASM APP programming model and API extension mechanism - + Build WAMR Core and run WASM applications ================================================ -Please follow the instructions below to build the WAMR core (iwasm) on different platforms: +WAMR VM core (iwasm) can support building on different platforms: - Linux - Zephyr - Mac - VxWorks - AliOS-Things - Docker +- Intel Software Guard Extention (SGX) -Then you can build some basic WASM applications and run it with the WAMR core. As the WAMR core doesn't include the extended application library, your WASM applications can only use the built-in APIs supported by WAMR. +After building the iwasm, we can compile some basic WASM applications and run it from the WAMR core. As the WAMR core doesn't include the extended application library, your WASM applications can only use the [WAMR built-in APIs](./doc/wamr_api.md). -See the [doc/building.md](./doc/building.md) for the details. +See the [doc/building.md](./doc/building.md) for the detailed instructions. -Embed WAMR into software production -===================================== +Embed WAMR +=========== WAMR can be built into a standalone executable which takes the WASM application file name as input, and then executes it. In some other situations, the WAMR source code is embedded the product code and built into the final product. -WAMR provides a set of C API for embedding code to load the WASM module, instantiate the module and invoke a WASM function from a native call. +WAMR provides a set of C API for embedding WAMR code to load the WASM module, instantiate the module and invoke a WASM function from a native call. See the [doc/embed_wamr.md](./doc/embed_wamr.md) for the details. @@ -69,8 +70,7 @@ WAMR defined event driven programming model: In general there are a few API classes for the WASM application programming: -- Built-in API: WAMR core provides a minimal libc API set for WASM APP -- 3rd party libraries: Programmers can download any 3rd party C/C++ source code and build it together with the WASM APP code +- WAMR Built-in API: WAMR core provides a minimal libc API set for WASM APP - WAMR application libraries: - Timer - Micro service (Request/Response) @@ -79,6 +79,7 @@ In general there are a few API classes for the WASM application programming: - Connection and data transmission - 2D graphic UI (based on littlevgl) - User extended native API: extend the native API to the WASM applications +- 3rd party libraries: Programmers can download any 3rd party C/C++ source code and build it together with the WASM APP code See the [doc/wamr_api.md](./doc/wamr_api.md) for the details. @@ -93,16 +94,29 @@ The WAMR samples are located in folder [./samples](./samples). A sample usually - [IoT-APP-Store-Demo](./test-tools/IoT-APP-Store-Demo/README.md): A web site for demostrating a WASM APP store usage where we can remotely install and uninstall WASM application on remote devices. -The graphic user interface sample: +The graphic user interface demo photo: ![WAMR samples diagram](./doc/pics/vgl_demo.png "WAMR samples diagram") -Releases, acknowledgment and roadmap -==================================== +Releases and acknowledgment +=========================== +WAMR is a community efforts. Since Intel Corp contributed the first release of this project, this project received many good contributions from the community. + +See the [major features releasing history and contributor names](./doc/release_ack.md) + + +Roadmap +======= + +See the [roadmap](./doc/roadmap.md) to understand what major features are planed or under development. + +Please submit issues for any new feature request, or your plan for contributing new features. + + Submit issues and contact the maintainers ========================================= diff --git a/doc/pics/vgl_demo2.png b/doc/pics/vgl_demo2.png new file mode 100644 index 0000000000000000000000000000000000000000..8b07e62758bb62d70c131714a635153b4a82ed7b GIT binary patch literal 149435 zcmV)TK(W7xP)Y7XsGLxAeugvr#^$YZ%H<{@^NHX0^ zQsj^`&n?~B40A%v!FQ;KG47M-iM4)~iBZ)pa% z-JHkm9Y}kFA6dM5gX^`ydh@Q`H&B|ICM46=WN0vp4O65-T;W)fR7oO^5Wsp5+01E* zvGiaqFaZfrFh!Wb(I5s5Nfe9%R2Y;n zm1NLX7<@^P+&U>v)*ncEf&(+?y)@L~pGpKcq1xPEY3YeJ(9X%;R zaReQO%uih}Ib@l>>NQmrmJCW)uD;$(JELwoxoQWEtorTEQW=T8X^hL&D+-FscPfI? z00W$H&EW>-|liw%eY(;qJ+Qz_)gNl${9@3@k_5|St_mi(I4;a>-z@1 zI>j_P!U3`p$_aFaa>G&E*M-5vs32%vAMB_W)d2_amqWI$|7&--6dE#Ir$ zx?2P9x^eY?zkY(*Miy^<-_|zR=A&k2hHj!v0T2W;NuI+S9K3#A?<DUf-3h9b{!b zeP2y}52R`aQ`K7}=Gze=nUiSS>DRPHZqu*T4pnT*P#^=RX`wSX)8nYY{WIknZAC6$nI|5FbjLHejWSWw2BA- z0!Jyl_b*`{8(}~~Q~!6}zc(KC7NfQmoZw2KO36@A!$M?asa0{(^_9YHnxH93CnBI{ z)+CH8jq6Q_Od@J#2m5=;Y+5fP7!}Io#TV7+&AawSuQRB{1WTz^tGqZb<+!L~sZHB7 zsc~)yOW8Daw{(I%3E+Kayxk(!H|qvBjk?!T&x)qm8(0J1-VD${QVg5L&Kq<37TZUD zif2z9~(OJgXSk64gx7+Z|kjio(US{>O38~efZv6eJU_xh5P}EY2frTFyC5D5A z5KV02a;>-6TlVC~OdUw03h4KwD98o@GFS_QS8f^M`!fbsuCK3W%SA{@d-&FSCr76g5N2%%bxRqVjH-enM$<$23wnp;vToZ&QUIVOg5XBEvtRaSihJR@RSYLx(@5a$L3?$8S;tgh)v?Axp?0R;zvs<{*c@$R6OlO)j znWNWL53>*yGwpHL+LvG%3h#FHJPQecVeM9WMop- z`zC&80Q1e>vTnbvJ19^!*J-LkCtif4_@YoCMT;8KPmImpD^UXl!{MljdcADhq<~Lo zegH1(QyuH8rH*ZPe^BjDMnzpqY!=joHAa|uMP41lIy z^iy2YRg_{448C`|5q5J6;Q8H&ZXGgVminq`0syMegx)*voFk!0+Ymxqr_^{LOM};} zu8qL>K@5TQU|CP_n^_JV0Ep~0A@dfGjOO1W)zKm-=4wPqo6cf7Y(NL8d-)HfEQDwv4DO5@+CI|PIjAcujGuG1?)12hi? z(znmnjnJ*0a(koW-#Xnl*R)yw#_Xn-N>-sBy~w<6_Q>});J3czTed-xkbc-0SFQr< zU26!!P7;E#aAn~|gfVGo>(JDxjppD1kV1Z|9#3pUk^T^zwzdRrPNM=O9Z6FKC?bTI zDGZj4r`reaB{}EdN@s7<5yQpWaMomqEH+U!BpxHF1nT7z8MqxCGAYg-JFnY`5@H#Kz4a1~=y&6NkWplXY zOBhTw+07VS@g?|jU{qg${O&5>TkT+5IsE3+6dfZ8dVR4QEVsfA(?UGN6(U}w7?h5v0{tX(dA*d?j^Q()> z^Jp|aIoS7$=2D8Y#pOH%l>qF3CV;VvEGx>&VsxPQEPPZjq?t2GbY_Lp>FXfK?SB9F zP85oWxGY$Hh&R4Rx+P&{O|Gg)@j`J@mW2~)N^NM{W*QfOft90_|G!`}GbM#<4HE!B zqm#lpxtz6a)Hb#$ha>;6M0f?0hC~%>A3uLA`zNP+2X`lB<-L(uE*kSe(W;i7YkWDj zZ6$txZ|``o*q;Q5pD)AZd|pReG;Q5B^Hh9$ME5&~iM(A0MMPW|?(?JZJ-i|HtvtQ*h z`OB->BGf2E7DFskvEMq;td|+Z=&W1Y@3KVfB`f6>qNLSKRzdxBN;(f()gSK{_a{R| z4VKq+x{5($&_*qtbD-1c7V}R&KKZLZyR$!*(NIoK??_QTetvc}n?HVW`TNhmd_Jq2 zCMnP)fFqO2Oo9eTDtw`8nqoJ0AmGu1E3+}^2o<$qI%lvDLcN@&CRq!XaOEiLba`OC=v%TG<7OesmJHvY3JKx8izzKb3X@CsZ?moh_TFb%``CioKB&YZkLcP&MAoXS23hR)b1Y zaz!z!q;%oahlihjbb3Ae`O{|?Uq62K^*2wxdUE;sql;%}=hMY>mXORVDzZ@X$ecm} za!yfYw%ygW2|xjiozsQ7i7yqQr{pM-A8PQvE3E+`eVuO04xA^&IdKZ4n3{T_F=>Ph z#1%uVAs+((Hz{vr6_*X7n;)Tx7$w&kV3+lkqakx_PR}sQK9v0F8QdmFYX#6&sm}&A zm|23ES)Bq6?aXsjaYn0`-{cvl#Z{LYb3P2I3Ks2UUr#1}B zVmPP?hQ<4 z3XR$%U1|y%A}u;M@V@Z$Ldi=(S6Z=I7x?GI1Gb)#?Mu1GqHo2iH#`%s`>7*eZN@Db z!bT|wF^e!dUzJ7ay*D7H)HF@38#?jT*cU?)pHl3*Y2N{9RG@w3O99?1w z6wZ;_#2Cz?z|4b@*1Xf0yl*lP(nLI;P2*$SJ4~lX`^Wp^9VdtGa8&xqcz_tDiv}^) zTC>1#w0kvMPUnlJsjI5kKiD(sGNh^+h!lmF@u(V&hNq|U!Nb#E{`~&s_2Tif^Dn-6 z_W2iIfAjd+i}QGP{X9er#!f{;2nhtdZDRv9sHs6Ui++OwLWmoP(4pG{(&4QdEm6Y6mh5ZVSD6UrXvIGoGY~6i!@GIw6)#6BCTo4qf_Dbc8@rNJ^u5 z3hi_eqSEYmueviVlQ&;_QWmOh%cy=CS&EK!_QY40*OzB6p6~7L6vIJ)akdx?szEXE z&U;^$MH#&qv9mMWnT#LYJ^hnU9$x?DFVD^{o}OKP_QlsJ#aI1NNJT1AM7(z$n>Fn`X)*(42+P~&md((M z-Bvf|2Cd?>-%Z!Bembl4_-JqJ9mKJTTDMW@O{Gbq zF_|ysZTRx*$Fu3>{=wd0IB1$h46&a3L0OH*6Ypa1t@9qPbj}qHFzk&6C%cpT$A^Dj z#rgbCu4eVK7qh?rhd=!8_g{YV`1zBI`K(<6CCw+8L6l;UPK!2OL&63CjY9!Iz?>#6 z+z2hM<|f}SYfKq0!~A(L-XVeT?TNOkoz{Ev8ffgyll9%sRU(e`;)G6AHCYNXHD^++ z?4H$6UTVBIxmDu0UV%i@MDY{>iY=)-eKK2z+Z5jQ((GQdQCLcfV3zW0=|GkuUf@K8 znG>@6*fjNWaMs2vdx9iw5;y2k5N1pYiG)Cj#i$q*EUspCn}CQ)L{(UgEcIgYWc`Yl zY)&K?E%h@gdc(L)k`Qit{BKt?4S;T{LWr58pwW?|$?9z1_#xR~MmO?jD>CMuVe+;dneyrSq<7Q!A}Cv2-O73-6cE$z;+(LsVBd zRQ_mp_nz~=RQ>fY?>~R~><^!P{+oY#^2MXeCoe9aTwX1b&5}5`n;;rmHE4|11UIB7 zAgJ8LnOATf>k&JD+}a0~R#B<_X!q@ujU}~YX0N@uPyI#q+K8ThC~q&*C#|!(`oWzs zEu9;Q2ZRY&h7ePWkqQ8*M6#pL3=u$aa|wJ8b_ltNW&ROShnENlBrj4FRnx{gZ0yV| zd|kKi1HCY|t@HJLIzpJsAvz19i@nM4{{HxAZzME`znIm}FRrIeF#4sj2?@(--P(9O zjP0WEy#CwYon6%r9~|uMO!oJ7j}LZWaFi57tEQA?Y*GyKwuZx?DhH#gC@X^Adw@s# z`#Yo2-8*-F_4CD(rL<~?mPCZ~ge27%Q;dyjAV`!#|Lt&#n^d<34ZE9=VMfwk+Zy&TH(3FI zuiRs=B8{rapzFvE3YalQNJfH$U1Ak)I-=LD%9!Go*HM`5FOr0%dQ|ex{(e$CK7Y1I zMQaKvVZl4^o$o-^UXe21+|5?6>xaJF3Yx9ymU_;;)XDXBXJQm*TG;Y%Q2gxV;De)` zp%bg#gWDS6#Y@?=BCY3s1x?DCvuI9_L>*neC#q+c4>AVR+V@##@g;0q^ z69+m|YeQVN?R;6!opVBZaT$#bZP1vU=-y8C@czk1_fJ2%fAX_CCwF!yJB2}nv9=To zq(Z!7<;6QdELV246`L8DHakWxc$wG5>xez4)0^D?Ef4ut+JM!)m1El^D4nmI^B_|~ z+b%=fXo7Q7SF0u2Elkq3+|$K>(3n%C zvZmQ+PN(jE>BJR6$yPOCT-9)8XBeypNF)RPz4qK_CvsLufPo^^#r|k~dU!CM)laXl z7wTFy107xEOSdVmN*W~ddk0Uy{MqDq^!C7)W_mN8H~(A>S6{hVe=9;Mu-NhGlheab z@9yu91}U`DTA!Rx&t{7jE;(;fm{66bUg={(P}iyi6w_t6xW0ULasKGZ)n{LRd3m** z&KGUas0m^s@D4@6LQE{GhD9Cc^ZE7lbas7BLk!W()EZ+Tl9P0}J9v2S@RuLm`{aW= z`#ZyvHFp7#fg&Fu3=i6=Tc1<^=LML-7}-+ggy{*Xz)&<=?)A zxc<-Ww=mZNHZzMW`#1lO&Q+IUA0~3#nVlO)u7tDdvEu}+1*FaE-tQ?Up;#M>}+~* zJv*DXi?&gdI$BZ%3SF7XmQw@YV8h=G$_j^gFB+$rZGH9D1#CSP%q+9Hh=@pGhBkzD z+87|Cq4?5KWX+R(Lw&Ua=UCkzfsg3j=xxkmqroB(%{&ZVWKejaG|8g+lvSDja{nIM z`&LAY12*^fcmCx5@dw8{057iE=U0mt^LiHMa1%8p#6hX5iYBR=B{R5uItYzOHrB*w z+E9g9Tr`ibpa1h$kM@5%INaa6e|q%M{nOo@>Ue)L9F~Kj`ofpaE0QB)8=CntSWHx^ z!E8Jn5;m+Vk>panJA%J6xqCEuc)B;eUR++yzj|@?{Azk}wR~}P*`(B}G{J%*6$1b( z)#Hyov~NqFLqY z{=RokKo%^VE42(UwV`g>cA1tjhGkKkg<2cud^Pj~^`g2n*gM=A9UlxXr<1E$dp5iC z)#Hol5|`6v)})yeGpMGYB$GiwFCyOiWfR*FOwA32^dgRQv`q;gw-Wuvmr-@^URo;s zCClYX2#GMuBx+m|j^acdk=B?Tw{HfUcoU(leNbl3V9A0J3Ll|Hq;)Wofh@fg0G-jZ zvxBJ$cy{MHZIXXTnrS`_YWw*G=FJ4~w7Hks`?8vhE|>K@#vm{^X1f?vI|Elhh1R|r z(`K@)8jG!^xpmlM}yI%SkB`&=hrW; zuM?;oDLu@FMHy2}W~6H^sFWlISJq%pqq`Zix@EPv3>Lr)>U<^68`;D#3yah=6gVf|mB30xT0NR8C6vas zxF$%xnmxTyVQ-`f^ilu-1~33aY=?ku74f~UZZ52MVK3zi8P;b9ZSy$4dBg@g-P{16 zEW85Cwh3y+RZTKP;O*0b-j&v`(GJ-1gtrh}oFDAS&+Z&NI2xCt%O*T}asBLax@en( z!n6wwweENogOKLP&c&T=Q`ZfqcHwz+ssScy3KfHjIVz)-)C^JifB5X#@bR;M{QYQB z^1+?``^S6t?;hPb*gx9eEei*z7ZCwel6NQz(%KL-wRO`van5<~sUnJ0#B{hn+!^Wq zxU7R7-#eMkn-}NPi&;HewhIYux^5w00e}!Q8iaJK3>;f!KxW@}TpyZrlk|HkB)ob% z2`PL55rt`jSqleJ#8srp%Gc_J#XOERmoD;mXjvcn2}yb zs_I5=uSt9YY0ep9vIIDaiba?ZB-Lrht_I_8)95?Z{&}5_U;{&FQ#Ep$IID# zx@=~3oouNn48xf5o9?tu$puU8J>iXSNM->DU_}vwCDS(6ZCz)~+d+Kxa2b%J{@#Fc zrL>LTxo1nLaIgjs)Vk9yoU68q7SmNtR?1fNUo8=m{Rw79vs_gm=fCKU!gu-b0Sa9| zOWHaA-9z09$Eqyb5EjdsaiB($gVBMvAg1yXxQ)zgbQ`Ct-Sr8mi;OlC3F-VFh?p+%Q=5UXl* zbZ~HSd096L(jz5y^_i%kdGUZIHJCW3DMeGjL7WL&I6z6#gz8{XElyj`qq}JI@zs}; z;c!^U{?2%JRNg%v@9m66)c}?pD@}1en=WHRSyt6@Pz}qf6!Fn87*s{YQRQdzWgF74 zEa!`WG7S$$Ay~aXY7;LP_4(Cowp=di>lQl(Gh>1%o#pi@L_X{jQ8tH|zGa#uX=ZBa zwo2H&TMJ0GGN@)v+cxb|fx?Z2B9Npeo7cZlEBu@JGT1w#^%hUxPb9^&8cd3!Sk7l5 z#+aO1VJ-)%8ciwk1FMaNj2MIHd@`_~KiE0ltKzct#pHa}eDUP+s%`?Df&%fND+|>W zLZd15f-B4vWZ~$Yc<)LggjiDsFt}CVK20Ur001BWNklR&g5V+9u@vzZ?ZG2>e?*=fW-Myb>W;;Wl73l z;P(#)LN^!=heI)AiZKPhT+|YEKu$*G-J`>+{i?3pX&tWSm@Vt+{JKp^F;w+N7cBjd zb3*4pfrt^ywhm#g5k@!)Auh)NuM8@_8J~Hfdjmk6vMS`rTS_4HJ$*ms0!G8Zs4B~g z^FrvtE9_}6QSC*DSzgY6?r}M9#Kb;2`tTI#rI*Je> zB{g-f7b0h(fTn=fJ%0A0X_urUs|>GYTi$6-VCm+`ph<6@m2N4ASB9aq$6c*x4 z6X4(-R>4LPc+)CFWVfsVmcZ6L+^^V0Kf|9Td0v<)#fQ4YnVUVXJ3bu1C9e zAs7k*KxB^40?0(dEj_5{MqS#VQF?92E(1_*Nev&^{i!L5s}0a z#R*&tZA?a%-WM@-T6z+iN~3k#wu5q%P>`Z2mXbXv>;2iX#gnM2nlxaQ?_fY84N2et zF_PwTv?&1xNoLV3sf$(uMbKc$Di$Hg<$OI#Zk zuB(Q&#*S~S)eWK`whGJbR!?3)8=QN!%JZt!4#5^DB4(y3sRD#^;$$SIvN{}f#V-Vu zT_qLUEQ43bI}%Xa26x=hVppp=y^;#_l8)SusmW>lIVLz;bh#Kc#OE$E>&!__RY9Q# z#8Ct+2*O;qObj=%{@cWxty0Y0D)5Tg@$4kT=5#!HxVICcUNx@qUM;%V7OAbO18=2R z>dTA#yslGZP6skGCmY--8*iPTYE`di>j^zdB#~SwO0-wHIcY_FbUL{=8H`cYGI(-6 z`L z8C282ur5-$lBAm>(p?M+h?fcgWB`u@EKE}p5w~b%+J=I$@UB1+%@sAgI49n?51CKVGAh)Q1Hd9-BhR?O5p@Fm72Or0CioGFuP(=084P6Q(X z38fi3tgPb~fy)KW69SCu6OLY5o~vT<-#?Zky?V}X;qZEc$jLW&h#62gjE2MAgT1F0 zvqfE#v}8hv`_3o2vFbLsFMZ+NpzHXSX8bY6oq$E zN-8}|XU>voteh-^QtGmD%n=r_IygOXBhv!$z zY2D7|(?zfrjLBl^A`_CqRE<7MiBA3Cs>0;!v^-&HjJb4tG7Tx1wG@g}LJ`V$Ip90j z(C5~pD&B7;+8h1>dGjDIu6+#s_Q=+z-NG)UL9LYGcr<8XXR}!w+ZYoS>?GXkSlw;u z((i?6ker&;X=R;Q+$;H~AKl#>!*m%`UR*36J)bpk5G+u97YHZLDdRpARydf^bRZEfUe z(8WABHlYqhAw|)OgLx^6!jV;342r4^DTEl~LTIBh6&`!Ldri=`-K(2)cD0x-7Slx& zlnHDjBN-qoU%gsBw-Jgrm{!uk^0|LZF~zt9AW}IxN0INg59P99Zz0b42IuE=XE1Ee z^Cod4y-!uU2}XBC3T_rpw!A^V92&C%_r+P~Th+C4`z_%o)G(;Z(P(@&oj$&N5ddpd z9GpiXBjkGXSy%68Nw3eyGc~guO>;x~Y{Toj_>5QEU}|uAzAG=5mZiui_l`fgcd$P( zZS3N5`Ngxd%VlU~KsI^AR9gxyBidQ-yQzJ!*XA3sT`S-7=2&!1Mlni04LU)MX7q;c z#GKp4@1 zi!3auc~=y^Acgc*RXK{bjiqR`(z&7(8+j*#*r2tYcg8#$grxyXO zD}sgf#264#BuOVLu+Y?cp%K~0>Mn199t!QM(i_Z@S_6zNK_SVKWs}{2x2}Vp@+pRNLiX7?~cbJT(nJ4 z&=o|PO4Z+G+;pFaHA(a5l9o6w~A^^>d11p=y;+NOn< zK?gP)k_Mr3;(Xy1rm9fY-UhTeb+JF@u8T0v2jZxy84bbcRg=LIy4v`8|9Kx>RRGS^ zdVZXhQIx?fNveuy9H>b$CS?*}V&7kI-s3)lv$lNIQYC@w{8-}8E zO0tMVQF=>DPoz5RO{7BD9pJA&{_te4Fn3+o)-21X7xh=q+Q5MsCCy48*%AN^g)g9H zh%p9O<$NI~F-Ay-&BM$~XY!>D?7=o-RbwHuUkQ|EFpX+4p|J#AYXW|I2+}60V!KG+ znCdCbS3rY#4n>?}A%LSY*Bb`NB4ceXM+PSgKp=%|l_FMo)@^cuzHJ2^GM7?tLN$h% z>aQ@RV0TzaSyZ8_m^2vFLJXEbj)%q0xcG~|{?qHW{pR`XY!?3ZcYk}i z2+L_*&rnFwMq|K`J8_GPbhz*J4xd%m7}afNES&W;)33e zcZz@aH@`laIMmGtNBd&)x?VgvuP>)~a#26IxK70+5r%?Y$JKz85}>3b3UM9=HASvf zwAwWc+O^&^F9!p)?~GkVw`A*ya6}1dUyGl;4xsB9gLHs#rDZV}d%<=P^OX>7DhZ$t zOVSBlknep^!px1*1h)-S_M4eo!-tkDY8DN7`Pf7_C?>`?EGOaJvS^DUIm zvm}*fj%mLd?~iw`m-83rFPa1$(VV3ezq@H_R6|nIKnNk;WNacxDaA-_0E$L0wp-!9 z{KdWh_OBm){Nc&aJH~YR;@Q{VgnxZ>_4MNM=@ps;x}|YQ8A+~n+09@AN%77(Pak58 zDJjXGv`VR~{+m(7yzy!;lc|^B*cCJqcur{R5w6QQkf@f! z!7|?_fj5_gVrm*C(I;_GAxc~E$ zJ4dH~`ENg{WcQn==bwH3^?&?d{^>XW@wZoBU&Ur=>Ovh5N4^v%m4|byv!|6pgHo|t zrC9ItZw4N@yOT0QO)DN%0@8()q_v{g)A%-d#JVbjW1SI|N0z-5$`!4YMs!+DE}F@V zq8n(Yj^b9Oj|3*LuHfSa;CQX?Be#VF9U)X<@<{jg_V)HBXIIzXTwKp1qBuz5R0|Pd zj#FD_n%NEB+aP#b%MY7!q4X*=(u5SctZ~C6C1{HnJmRFnot^Rj^xyp($K~b4lZOwE zKKS6ygP%P-JviRkJ%IBe24DL5qV^UF1Wz$lXGSvzC*plkc;~(N7-LAWbMLItT4Wa> zQzu_(*raV4(3O)~75B@Ii)<`)pLZhbs(&h=A}*(T2y?lzl}^;3pLKXpe|2n1Q9;$v z#WvH7Gy+uSy;=+qkz^S}We5g1RfLET?CQF{xST$Fa(;ffoY!$#2l!(D`1s_({n5$r z_~FjZz_YIJ4EIka`-5R|c)I^5fBB0C4^DSS!**H6_S%9vi{6n;j^5=AlB}nIsq=Jq z3L83ILEa>3#NC^e?2)Q6*YWA9`MCV)zLcE5O;ycd;dzX}jRmzz?7fM76KX*_JX%4Q z*-SNq$8*5RS&9|M9>7uRpy% zsOx&RXkJ`iUrndhay&Wwu_MK4B>7DvscKvV!t7kN2bKy|HBFWS^OAw^sxYI_sS@T? zxmaSc(Ahj*T`ylezq-6y&Xzjdn|$)=gX7(U0m_5XUOlgeqroE1r|s49;_7%b`NhKz z{_I!3Jlq+JYP-CI8QS34q*?G);R|n|L32~{%N3?DgL@MsvQrw@TZVUn95#V;(^0z$ z+Z3OLmafZicQ>TX<=Qdb%Z|yJLY-~4O-IRUhGdm*b^X>@YNt!7rP{PCo!grXMx)VJ zPoGZfqyp8_gQb{zA1Ut4C10fwYX%M{!@Z;NXjqj_#sf2rdr!}vrI!EAzy0K|e)S;C zpZ)%e^FKT~KR7--KB&LknI4Y!EzVEx9^biha_{ud{;R+I`T4V}>DBySKl|c~C+FWh zdGh=MQ6pq5uqGrk(+tyNC0PN5tST0Cqo}58y8UPbTOS_Kl|6uKl^{aJk>aV_GqM6$laZkvRcptymNWaHdAqKqXDiI zNb3rUWy!bF1_{EE`9pNNNw0h=VU`SQZ?tquW3E_F2hf|56w4<}Q&zB5-p$^q^ej6I zRSXVcP?VG5=;8f4k^0rsC+E}UB0^VI zIJ>`BeRMef#lz!)Pe1?Y=r8~D-l&TI{KeD%?f>|f-+q4i`1#fI7grZAuIhQ1OvV?N zS5KckJHL3bHyQ3t1|Qx({_y_s>FM6l{-kiuN!c{Z*>qYjYV}@C4N1|09^H|dVo9>E zIV<6*)91Iy5uu17YMU8VS4;=VcF4*ucrzlI^&V1a8~I4|rk}6b&2F4DpBGP7IMFGM z5$oVG<|@q{!qTbCmQ0f(sfCzaQK%7cCB3MNO={~@UpG&`dhsv6{pL6S{Q0tuPadDu z%XV0e!gXxVT3l&;Hm$FxSLe^0`7B(YPZ&SGd-&_0Jv`nW?~N;m25J+3z*gBd;x^}W z^UZcM{?(mvhCDK}IPXH9!3XQokxrgW?n`4{uTk8B!|igy?AyNS5(Y(QUA6vt5g5T=2brp`M?(=tY92_ySKal z@kbwgeR=(dM_;^{wezLeU{X*y&gw=N^FGsC3X_iP`$^FzI!u zv4A2ztDdkf3Q25LXFBuMhRwRVM%2LV*0ii3!W_g=h+IOM29toBLHYnj28~+9;AL zsWJkACr~VH#7cULsxGd83c=HXCQZ>RU0sRWii(>!{E;ae0%5tzQmLa4YYM0mc?>pm zL{d)Ipz~2e1uZ}_?|q@{Bjf7nxeiaIcj)$?obEn7+1)uF4bn!^oT}GrafC|9X6W+_ zb6W$nnYCFhmWONC?yk(gzP@&IZa(rd><-C!GHQ?vD0pXx6_uG43QKgcDFgmKUP1JV z9RralWVps5W7r3M)%Yts?cZ+NF@Ao@V_bE9yBLp4u8$KD2!sVhn4r;^u}OT=@1OO1 zX`ZTr6cE)6(aV~fKjzZO|5ju=K?EX(F_|(NL3h;e4dlEFSaeSY!y9Xj>Gt)03eR@? z|N1{aIUbpelc~Aow9s@k%8J5yK$^~qwAU#Pd&5s&oV2G+Yr3&G+uWF+?hb}0-NQ%E z4rXWTNsJHf&cAVMyEk-?pC3GVe*9$T@VJwn^-_U8M-(BbVZwUo;3uF?yHLH`YJ-T8 zlpuqNMdZ~F>RsvkLR3TK$y8XljIkwOUp5l_Uw5g9B5A4huBP9_d&qr3K)?hZ$yx|K zN<<3pf=g+TRw{zeB^}Yp(P2bVw=_R9)0(PHHR3u@GfGU8xJHF)r$6itK{LO<+wC8n zuTC%CSlD=d`{qG+@Zs+6FP=U+?)8URCb7*l9Tf#6Q)FU*yo_uS6tQF)!&{sM-;UVZ0ac!lZg)V;`l7vKkdEP?HqPS-G0^|4D%v8>zroUC>;*!39hfq z+`PVU_r}KN%ED9>F^F?HIFVE}%~7-1B#Di3Hw37cwngd@BjgxSSRAUT0zp*9{E8Df z$}pnkc2%(u617 z(rWcrqR@d=5fMoUfe4X_*m;k{NaVeUWA6}!d)>YikPcloEb_qsy+eQD4>NOiFgrIuLuR8k^#eD zh!|so1fmoaI(o4!j)^C|pvzRpCjkuQHVSSymDJla(+hKRN8R(|^L{TYoC6VIQ*R_S zgMi>kr8+#If?f%;ao?G0O;AupYXQ;u0Y~+bHI4+Ra9Mh7X}KBKYypN%Gs@rn!o$tg zR^i-xKl|i&&rb_G*P+Jhox9)t&wsmmRZNY493 zXE@qDK07=a9Uk@iBQ0_(g&(HF{;=!)s67+k+FH7QbM5}^>#f;Y%MM|Hq(ur}eCv)c z2E&X%(Dw_{+$xCVBAmpD%lhJh+4^!M0f@wpR9$$0dI*eWi3cSh0*FlPT`J;$xztZp zgY$b}rr@e{g4c>)!3kVk2`;T_)k6i)ICiRdD*y@EGbj(u)dR^WkpK#y5Q%~h4F|}O zF$zG)isZebk_d`-D&7)V8-e%fFn3uOfwJ76b$WyIVS-WQjrAtthRbx6jyyOqm|@<{ z&-?w8BI~thl3UlWEzV3YG^aQ(T)*c@$@|162EgT>SDF!Aj*l-^5iO6Wp~xXzQr*Y# zarR=0>!kDs%Da96GZ{~1uMPxM8N6bMrU@8<0SRm{Dd5nr^U_i`F?d(8#i{@z5#}>V zeWqR))csEPxObKXi6~l2k!3^R5ri*sCs)I4f)}~?ql)Bws$|f{L*f8d@tJqfsx@1+ z+Drnk-`Ut&pNb6s^26sp|77oQASbzL-?)GOi(kI^#+y^ExnWwYY;0`ays@;tI=e96 zoS6n|23an^V(Ln<1CxtMJ)Cy3qx0IQ^*@gg~a7=(yT@HP~2h;d%XdB2klv(dTlpN{grkEs?>(wb?vTWymV zWhm4Qv#w~0Mh(H-Ok=qCR0S3`gX7|WhZcrkc?2xg$jNDUh;Of~0br#ge-LATTQ&H;c% zh7)T{*vbF{%qF_y{2`cCG$Z7$2W)D!soZ%_7C-^mL)`5RvurpRb*?Sc9^PF^YP@&S z|EFI*dvu)l?E*~Cf9<<}{@@E=bjBW@oI3B9R~9`;YkhTYW##s358I2&QKQL8O*u}T zcZ#XQ9IfX#S9?D4-NNr5oE`TD$7gbUR-`F9kHb+u==alJuK=GwV80f@Yqz)V-M#+K zn|H3QwQG^q;^}nM_anE^vgv9RqyPXQ07*naR5#b>8VTn4xpPI9<7*Ed4n}F3rTTke zM!;A}=He)}Y(SNWU8SS`cfpMQ?J$GSfY}w#6)YW=Jb(`@Tcwv!0I#B|UV{0IhYb4rZHur-ZleYQ2zY;e61Cy5o!2feeR z7@T@!FS+lm$P7><$2S5MqlaF5XM$uw(ZTp>X zy!+OdzOs4$&Pl(2cyhY7u<+#hi!2}HhHCZZ&8@Au!r!emmN##(!uj#Z-s4BRyU)9w z(<~i&mwDD4Aj^2v!GnX7B!-y=x0})O{M7nfyrKtBRq8>_RA0Q~9GL(vdO0$m&EXZD2 zy#)>J$_qqGCSj^u^+6f}a27)qSfV9~TXKi!yaHV?YJgTZK! z`y#W%Vu>vxt2Y1yLJFW1a(jWAA-zyATz&unD2+T6qE^uej+Pb|Zf@V&d3xv&JbQ0E z6V@qeqkQ$=o%`!kAo}wUkAD87dn`4WZU4!if9D&2@xAG_YZTdTuV>gqbaHKDb7yCFeqq@mZQr{$zqYn<QsB704o|fO)?*ifHY2Al#DV>b3Q&v z_fLjTPkQ^q;;65=+QRAn?*8u6XIZZ|(@yT)UVnJ++P&KwhNW4vG5VU7T0%wPdxOFk z7F?dhU@;|XBSxqOfsrGHf=rBF4CS#+*eIZQmwN4qq@*#bs&^oQl~ihSH)Fo&Rq17b zXoBt@$0w^mlVJ#Lq!KPEg`zLfl{DCF;mSv^b6_bayBdk3yO>| zD>GY@G-`@!m<)NRX%ZXDKC!~9&1iBjeq|Avhz|in3C0BVjwKHPlhyGT>yBupDh_IS zt@3aJ)do>rrF2~_xz-DGVJFP z1I5HjL>ABlT3a>jwXc5amm+Ir`TR9zQxtN4ECHpM3KhfANE<#RZOP#u^2v)f;)?M_E4GZd)?*3rn4DZ?-+x z?GM@ui%!AT8dQtdwzt-rD@sYmuwwq8vx*AX6~8$KKE#ck})8?%v@^ zr!d75i4bvw_WpB$a2=*-;g-8)`^J*{Lmy(m=B19FL2w)UI z$E6+>1p-jzdoX0t5H+yDlSSolaexU)PAG#Y91nC9*AdEnjjPHzFGXZb6xnn%n&7xm zkO6^^nb3>(-sO4jTs9hIC*A%@=X{hoFF+=4G#ZgX8$~vX*pRh`SA%r;KMJ#};|CdU z?pMG}FJQ(@M6bdOt7%@22U0lTDq;|D0}v{bssXWv8kUz^GYELn>+heP_A+st02sqy zku0%A3Iry62FyO|@@fyGE15`uS-JeZ z0yBl*2Q#P)rD>c803c(%_u@S&7~=B7h>xO3RMWh`D!HyeN*sba4zo|a_*?|i+;_U? zXT8DsAn*0E-XP0!pG1_@>QhrwaU8{Q^#6I7O$Oi-cTgw{L)g)TP-2FL<@QXoKgtgK z!*icz5Glu+No>_386Xahu>oeE{i$EQR7sJLku00Y5VP~X(VXfH3!_r=*}To)eSQ1& zt@iox&d+{#^wUocjx$5^8(;g&AHDPKZ>OO3sp-(w+Sn+HlYYNHJv%!$HwR<|DXBM( zPCKjX8}GmW(_44%-Fa~TXaDo3a|;V=8ym=MqPQ_V9W@%a9=yJF>+Z_t*7CJ$U`!50 z&j8wFNIX>5+&JePLa#5od;O<7oo6Q}C%s~jdRMsJy@P}O!_&Q!=_GmW-i>>=Hr~9u zwY4$dYQ{|)`D}zfwXF3dQ7KS`P*Dnt8KNokn~EZ$0GBC@$-$|nb(IJKP(XJj%*Icc zblt_0_s=UUGzHL54h8=Kn1yo&grh-4xu8NJ>b*w=Lb`w%qP2FE=OPNkV;xkOlZ0Rh zLW!m|Hj3(iQCfhA73E>(yS?FHlpde%6`qhxR^)`ptIg>0OfD;4v`UVZ@$rS{E@G9H zcHSW(F&kq8X{xH>8>%Xjl1%_vE=ZozZb^J7X7J%p1O>KbxDsZeB6#d?86I8>RYXDt zWED%pR%2$aHSN4VJ|7(R&&~@dNQ_1iQ^Q(DWQ8h;t`kMzVH765rm9(EkVl8ht2LC= zqof{>(ljqTA+bROjr^!Z`Rmu_-?+6LlRkaE_g{ax)A5bIoqp##fAQt-{Q&C?lSC+B zi2=Zidhy2EAnjG+MsqrfqguVzXg2!8{@K~t`T2Ql?SuQTAz*A{A~rU9^yo=#s%7hq zrS*-u`NcaAURzjOUtU>>YYBJ}#UU%2I3Kb1#@Caf)6T#h^#(ipr>E!H;Jipv9F5%J z;qlYw&xXD3QhR#)+Umo*H`>#+_2q@RnW^bUElqot*sxei+l|>IN@8OfF^OXD3h_B8 zx=;oM8n~)(qX2yAI5CMaP$DkVVCu&Yk$n6$mZ}a>2zCaDXi8)vV#qR=i@AuQSjcSsZTQpgjt^RYBQP)pC)lN`OoTYD^-U}C~q@{@0U`mil0?g z00J@!WrtINs*baifM}@H2IiphHl$a=Ose$bQ6mH!3Ksce6Ljc6!JPBACPU>ab$%<)2fO=B1Y(ir)4_NMI zfP69KDh36S*aA^Wx?ouyz^Kf`f$bwEGK9p2B5MdSxb`?tu7JF7!(rO(p8bbl7Mjz9 zm5PHf2geH!B9bEgewYCwRTY5dGlIr3yD}~T1_Ui7%0vLQ$h4;#^@!8FI5-=0x`UMM z0M!!J$k$N_qJXhdiioAN>6I{3P*oA{KnvzLeEfP0Klt9eUPhxl>zoZ$4H6pC$enI2 z%zyc{&1(zw^Fi;QfARQtJMIjc?Q2_q_ILmL=7Tr5-e3aqMZzR-1OMa>-#s`j3KWD+zx#Y|=j3QFPlxq- zyt%%-wYheEZE0zC+8~Ykqe1^<*zad~Hr<@6B}rZsnb$EB2%s9e%p+gYQ2nojS%{TF zdB&tP??NGX!BaPDH6|+Z!g=QqMFdn3@FHlONPJssL%69@+EBa%v!K2!BS};QU<%Tr zsBloY0zn9gmzyz_ZfzHE3UBesjMXIk2&)RGQYA9x-Iap&8wo(e-79@O0RYgINf<$+ zL`bBJTJ^g@KrBHESViAdod=ManT%+kz(=47;!Lg9Y&0_G56=5X!y-o%M1vZk#$*i< zjMFF8iaTD3D`-tBe?|(Vq(Vm2BdW2S%joUbZ#LWjM``DLRDg*rN0Kj0(U${ z!{H}SJMVqC*MVkQZ+-3ifBDrv{f%(ygB~q-QY<5r#&D04n0bc{>OP2{5VE ziab*g@xIsZ&$e32YpcKg%?FFiOLy+wPV?el-+wP3fAGfE&AW4p zYpunVX0v8%Nk%froy1X=8{ya!7DYZRpqr*UyC*xR-Ggp6bY?h8kGq4zFp&7g87gmPqs7)oL*OsqoD2OVihBT=xQ0Dx-wu7bJ>(G!|=LbAr70*EJ20~E7O zq9k{|aNa2hVJLqkL_>t2FXiWu0`n=LiWvU7G9e=cai@Tw3Qg?fI9`BIP*Gf=qP*OU z5ox?Oj8Q~HV>gwc8=S=67-l8L#?(z<%*z9;Dsp&s>1zNe3JO?AFsCd+yEaCT0A=Yw zxtZ~J=bosgQ3PZpL##N6KyQ5fp_WSF}J@krmQ7suMU{_gky;$)LxD-|3v67dfl1OYgzf!s|B|ne=Hk-IOlvOn@`bPe z$@Ki(+WNKT^t3q0(>xcnNJSySm=23U4&9zR>83AE&wIU5ZzRK!AExR8lRayb6_!1Vu&Fg&Bsxh7GSY<4arc zM4&in$UYf2PClm!5iikzVUt5Z3HunJltxP!yvQP z@Q1bEVi9rNjHep)I>*uJaB$Q=9}b5;bEqBxqNHxggi$2Xs`_W#_~Jq?{L*d>C;%Lo z5K_6mzNRjB#qe8S|H8@9an8x_b`J*mutwST;_O!*t}o9{ogDUl_2K@{KR)c&=BGEd z|N0;P%hs)1fQZ&0Gf>Hf8Dm}w82~`^sz@s|jzUybB66+>?>tIsE2}GwMuU*fyWMm& z1l5z1qla%i{PfAE&iVO;#agrRuRs0CoA10m)0)}X+`4`DUY@(#w{9=5uf~_4hMCHP|I4p%F(S-_M2rNWB4M)f zxMt*1eJYA-c{l+eLSAjgFDrEaV=$}!DvsBiKN4oa-XL`K4ZLkt2ve4!glB>(sMMHZ zjvMu6(rjiTd)@Q%QBMd^BNN3ojv^Z|hUB&41k8fmThy1F%Bw@8p^{Ar01N;1FMW=D z);T%7aed|a-r4@3cz)bL@f)qiH{QIpIm43c&wsu1{)f9A)3VE(-~8*pefak08_g+? z5Y>`EauJ5SCXa90`0xEem|1I`b4gMoHb^03quv!O%S%ZTdsnQittd&BW$%9D-A1#q zyMHh}J1Ydg`rrdZlNIjxr&JIt{c2861B+v3u>eDPc?VJ#~IEFXwZ$G$um_Wps#3w~iFbbr=T6P8uF-JI-GbjNtfB~X$Aq*00Wsdd-VFsZoiYhUJ zDig6W&Py&{02C>do|#gGr@tR&0k8l{s?3ap%uJy+@@1HT(~8dqAVgkk)+RxQ6;Jq5 zKdUe^sJbrw`O9gu@f<=#r>X#=C;(nua3fF+wnQ((EFvx=Dntyu$C;RkKu|pq8KyuL zSYx0V%*@Q%DDJ1DgR^eGC~_%OiNP9UnVA4Ue7G+>))8F1H!8>Nl`AybLqtP5mC(aG z+fxzkz1TVLkDeW$@0|3+!?f|Azq9qm_R4HTPj`F&_=}Hshf#;8U;oCpzy5(P+vstqM#J~uJcZD%dTxLv!2r5GaF{Z|BK#_v~p70`n? z3B}!k{7~PwA_I9e~h6kwK9G3=^+46TD(kzv6l| z;JNhAiT5`CUg_v{3cIb|;V-)^IIJ;w1J+sq<%p zVODroI8tLx#LT9uEC~A{UA1jZ!fZ0t<0K;!Tjr@G(Y*IydlTI-9gH$>9`7G}Jvi+C*Ps0M(UGQ8OKT5b|Mm}mw6=XS7-=FC5C-j1IZna7d|X>pUNpHv zUEIX#YXD%bxH!D1FIDe@ue6CxQco;10X%*3WNZ8S;o;$F=k$#?-hS`Be}4VVx7zJi zf7pNP?YDE6#r32<)tp~mUfEdNzI|t7`$lVVDQQeOgaXkaI%LmLrdj}{L)$%*HNL*Fbm!*!jjg54jkVQRvpm>Wthi4JvuUGSH}epe}8I7Z4CfDiN_| ziWzyMnOrpquX?Mmz>KQWgh~8g{vE2EM8Nq!0%qZcD2yHd5CPPOtarGR%xsLQHDW~= zq>jW z!>79^>5!x1-g^6+Z`@d!w*CJ3&p$l=_4DJyVH9s%``Vv>|Lw1Sg(yKwXb_mV+{Vi7 zYHW&lc~5((Zh1UT@+!;_WqiIDk??vV&UVb`QXltS`^i+QJ1HK4A6jh zMr2?{GHfC;bu=*m`;=rYNBj2D*6W}9 z{OQ5|{lxqg~To}*#yj!duXPVMN~&e>f1V0AWLo10o$XcPq> z9`y-6XwT1XZ{ONj-unC-_n*Bu`QW2RAAhp*^WW}w&(DX0z7#pdhBacu$P2hZQZuuy zg=-rNGp+i<{A{xk=fkr!EwVIMB@s;1tlv-fdvti(>kS8JZ0a&WFQ6h0L4Zre5)pxf zWwpwjA&emq)+<#k9m+H)5DKCQOIk)QS(Ar(H~vRiFoRSH{;{g&{;UnkklG|_O-;9^ z8sKtXZ6*j~$3kEv6#-R)jH*z&@E){qk&S8w zV^qRmejr*|gcFbeconZ6$prDS2X;ydnb%P&fVL?BmZ)Ki7_z_nv+o|ic;=n^_2VZ` zJHy9k!=HZm81n3^_qN~JnzC3t-p~H=*JnG!`e|nGeC{hh_}l+;cI7%X>NI6RlmSE1 zJsh_XQ4l<^0C-U+;1v`JkkmOSeF3~>qNeS+VZDnzKreQnBdnZQ+M~8dI zM|-_)*JVXw&Ejmm-8A#FNwW@v!HIxFjS*^!pkx%tpc()ok6ai;LJumU8onZC1~MKA z$$JqH(Oe}r9L3Dxcw&$U2{jPoW!w~sZAgU?460RO)!?&Mx^S0g{!0n*0O@AJ8!L;S zd$4tPedgv`%Unrw1-kSin0fWbuY3nDI=Wn16E6Q2Uir(v_X?XDA}5v&Tce0hq?e|n zVpJ3$3f5R=j);vSVrioo)(EYnALGYFv-68B*4RWu$mdZ~CsI_W+E?F?EWS87`rz?V z()zG>-n+Bj+L*7iQnxR^{AlOV{%OZGm$zUHNXWt4$ zG{%UCb4B1MUwzI+OYTeN5Em~T!tBbGdo>x%}hUh?bd@ktB1#LzIf63^!d?`-~ZLo(fPYyeDm!$?jRPOvmr=Ds_WZTg)j^(4HS14y_D{|Ro;X!->cshARgB~TGZlc) z$xTtkgR%fJamZ1McrQ*gM?@3aKUGnC2+;8}+%FJ;sv`iFsn_3k_0yu$8|>^KoItU< zIM1uiWRfAkif$&N3zgGl#(yH=J@L&kFG3FGoydv0!au~q-;AH16nJH5f6pYzb!EYGg3H6L!zuFu9bQ~$;94&VQH|0G9j zEx-G{AAIp!-$~lD5*xMbQQ7O*hY-eRTExQZn8KYrgN?JS%ohl~Fi4*`@$zKNNOdWK zmf4Q-sme9H0RR9X07*naR9L;*_!nuSmgFT#R5;sM8#S6!J1<_m|FfSprkc;5@7%m~ zd+X+nxK?W|EZ)5TTC2S@x3tc2Lpc(wnW`Wwv&NV@pL*!0vVS~$^5W$1w4Y^86`b>f zVeiA={HoXKEX}uGzkmC!2e;pTc<1fcZ+_*=uM?y%c0U!LGO0SJB3YVQ)5x-7ILMp> z!|Yw*J>-)12g7GOpRO)1Z!FJS1UJgWjf9iXL)$1IIMks47>IcEH!HRk;?|%p+UfIn;bjZetbNh$;PhY&? zwPu2^zzh*X9qS(nGkgVR5O^~}1t?)A5^_WWsNlg1A`+Ig%_}eqsU|=O5jYYv8wSAC zxirs5zVHeJ5HTiHtFg6!rCAjqV%bCl0hEH(X{h0u5SAh#3W7j5V9KbTm>U}_E+4k1 zh}I@ZW#>=t(CpYIB>fz4g5x{q_9jW=4o{ ztOz2WwG1jI5uymrUoan6!fc!=QB~)PU?nyQi80J@;tF-gSaDyIFq;_u@)zk9n1vT9 z3V(KX_LHCdWOHk4VPWZ`k3Ra&_rCwj-~Q^opZ@rKFi7f+ufF^4y@zjHzj=G@`gIf8 z0w5P~M5(Yh3B--w&=n@m)prN!$=Ug{ox{DuZtq;$Q?uRk{Mpm}ofkWVerc_>(yrI) z*89BCFa%QMX_2LAn)lE9M<*wTN5={>Gt+D|>PeC$HLK`HS?-;7PWPI%_|EpVm|*Yl zR80h^D5*s@ng*J{axKtmB|irgx_AnJ^UnEE5Kb@}W;@0hDKK$K)>Sh205huEYFg$J zW)%R!iSGgq6XQ}iMZi4IhNGUK;kBvSWJibqFe=qy6EKA_q9)*5?m0w6DwlbWGDs_} z!xX4ck#L|O7F7TbqTpTm0!Uaox`jqVhCy zWO=c*Hv86{<)+ob(Les|(+~CsgQ(r!-1@V>`}-TOJ#fqz8&4=AC=lE7-6LWY#aP*K zLdA@6C`v$ti}G*82|WNJn$lC0bQ+gM9#Nn^U+T4*nCtlqeH=lZQXOKa=R z*?A%B&AB{F@fgUU~Z;yZGEXfO!rSu zn7C1!YBd_Qs0LnbloZaDz7t_;0#)X9k`?`6QotA)ju6U*4-;ThP#qhG1dhNE86q~! z)e1P)9;)hCJAxC|3;+;BVMURPI6B2mkW%ixZvVnT4-?=g+?Uo$uFXW`qf?K_miV2&%V>n^DeY3hgs5-ApJ6 z)mP8ZW0!_Y7nMJvNlXGF8)ha$2H;{hyYi~mK!8iRI~Zjd5E&cUD2|il?)?Y*hX)^h z`0;nX`~Cm+|NJ*`vUz>eS`)=lQj40it+}PejjiqNTX#3MZ%(%tIjW_u$N@a^$fKH? z#`PSNLCT%e?*3W#`B7)*@G#9`kh(#pd%LHPpFBG}I0A&_<)!Oen@dZJt=24|8e^H! zTCx^rW*hDHbggE$uC1*sEzQi%)Dr8Vn4WFUFDyTMaoRoa5eh4ZY>-!{Uw8Q_-b&cA%`S}F^=rk*7nOV z3*wYX$iDm%0ArY4l385@jei(s2iVmP+Q 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%0DVb$aiPXQi~j}y2F!6%wbd2N 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 This is a minimal set of Libc API's for memory allocation, string manipulation and printing. The header file is located at ```lib/app-libs/libc/lib_base.h```. The current supported API set is listed here: diff --git a/samples/gui/README.md b/samples/gui/README.md index 3bfd18dd6..e04e33dc7 100644 --- a/samples/gui/README.md +++ b/samples/gui/README.md @@ -1,15 +1,17 @@ Introduction ============== -This sample demonstrates that a graphic user interface application in WebAssembly programming with WAMR graphic library(WGL) extension. WGL is implemented based on LittlevGL, an open-source embedded 2d graphic library. LittlevGL source code is built into the WAMR runtime and exported to Webassembly application with WGL extension. These extension API's are listed in: `/core/iwasm/lib/app-libs/extension/gui/wgl.h`. Currently only a small set of API's are provided and that would be extended in future. +This sample demonstrates that a graphic user interface application in WebAssembly programming with WAMR graphic library(WGL) extension. WGL defined a WASM application API set for programming the UI applications. + +WGL implemention is based on [LittlevGL](https://github.com/littlevgl/), an open-source embedded 2d graphic library. Comparing the building the LittlevGL into WASM bytecode in the [littlevgl](../littlevgl) sample, WGL compiled LittlevGL source code into the WAMR runtime and defined a wrapper API for exporting to Webassembly application. These extension API's are listed in: `/core/iwasm/lib/app-libs/extension/gui/wgl.h`. Currently only a small set of API's are provided and that would be extended in future. + The runtime component supports building target for Linux and Zephyr/STM Nucleo board. The beauty of this sample is the WebAssembly application can have identical display and behavior when running from both runtime environments. That implies we can do majority of application validation from desktop environment as long as two runtime distributions support the same set of application interface. -The sample also provides the native Linux version of application without the runtime under folder "lvgl-native-ui-app". It can help to check differences between the implementations in native and WebAssembly. - - +Below pictures show the WASM application is running on an STM board with an LCD touch panel. When users click the blue button, the WASM application increases the counter, and the latest counter value is displayed on the top banner of the touch panel. The number on top will plus one each second, and the number on the bottom will plus one when clicked. -The number on top will plus one each second, and the number on the bottom will plus one when clicked. + +![WAMR UI SAMPLE](../../doc/pics/vgl_demo2.png "WAMR UI DEMO") Configure 32 bit or 64 bit build ============== diff --git a/samples/littlevgl/README.md b/samples/littlevgl/README.md index 18e2527fc..4f37d84fc 100644 --- a/samples/littlevgl/README.md +++ b/samples/littlevgl/README.md @@ -1,6 +1,6 @@ Introduction ============== -This sample demonstrates that a graphic user interface application in WebAssembly integrates the LittlevGL, an open-source embedded 2d graphic library. +This sample demonstrates that a graphic user interface application in WebAssembly by compiling the LittlevGL, an open-source embedded 2d graphic library into the WASM bytecode. In this sample, the whole LittlevGL source code is built into the WebAssembly code with the user application. The platform interfaces defined by LittlevGL is implemented in the runtime and exported to the application through the declarations from source "ext_lib_export.c" as below: @@ -14,12 +14,20 @@ In this sample, the whole LittlevGL source code is built into the WebAssembly co The runtime component supports building target for Linux and Zephyr/STM Nucleo board. The beauty of this sample is the WebAssembly application can have identical display and behavior when running from both runtime environments. That implies we can do majority of application validation from desktop environment as long as two runtime distributions support the same set of application interface. + +Below pictures show the WASM application is running on an STM board with an LCD touch panel. + +![WAMR UI SAMPLE](../../doc/pics/vgl_demo2.png "WAMR UI DEMO STM32") + +![WAMR UI SAMPLE](../../doc/pics/vgl_demo_linux.png "WAMR UI DEMO LINUX") + + +The number on top will plus one each second, and the number on the bottom will plus one when clicked. When users click the blue button, the WASM application increases the counter, and the latest counter value is displayed on the top banner of the touch panel. + The sample also provides the native Linux version of application without the runtime under folder "vgl-native-ui-app". It can help to check differences between the implementations in native and WebAssembly. - - -The number on top will plus one each second, and the number on the bottom will plus one when clicked. + Configure 32 bit or 64 bit build ============== From 1eb0febc54b3e2d4969f5e674317e92764dd10e6 Mon Sep 17 00:00:00 2001 From: Xin Wang Date: Sat, 7 Sep 2019 14:16:50 +0800 Subject: [PATCH 15/20] roadmap and releases --- README.md | 16 ++++++++------ doc/release_ack.md | 53 ++++++++++++++++++++++++++++++++++++++++++++++ doc/roadmap.md | 12 ++++++----- 3 files changed, 69 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 3a2dbe6e5..47cb7d3ac 100644 --- a/README.md +++ b/README.md @@ -88,9 +88,9 @@ Samples and demos ================= The WAMR samples are located in folder [./samples](./samples). A sample usually contains the WAMR runtime build, WASM applications and test tools. The WARM provides following samples: -- [Simple](./samples/simple/README.md): The runtime integrated most of the WAMR APP libaries and multiple WASM applications are provided for using different WASM API set. -- [littlevgl](./samples/littlevgl/README.md): Demostrating the graphic user interface application usage on WAMR. The whole littlevgl 2D user graphic library and the UI application is built into WASM application. -- [gui](./samples/gui/README.md): Moved the littlevgl library into the runtime and defined a WASM application interface by wrapping the littlevgl API. +- [Simple](./samples/simple/README.md): The runtime is integrated with most of the WAMR APP libaries and multiple WASM applications are provided for using different WASM API set. +- [littlevgl](./samples/littlevgl/README.md): Demostrating the graphic user interface application usage on WAMR. The whole [LittlevGL](https://github.com/littlevgl/) 2D user graphic library and the UI application is built into WASM application. +- [gui](./samples/gui/README.md): Moved the [LittlevGL](https://github.com/littlevgl/) library into the runtime and defined a WASM application interface by wrapping the littlevgl API. - [IoT-APP-Store-Demo](./test-tools/IoT-APP-Store-Demo/README.md): A web site for demostrating a WASM APP store usage where we can remotely install and uninstall WASM application on remote devices. @@ -101,10 +101,10 @@ The graphic user interface demo photo: -Releases and acknowledgment -=========================== +Releases and acknowledgments +============================ -WAMR is a community efforts. Since Intel Corp contributed the first release of this project, this project received many good contributions from the community. +WAMR is a community efforts. Since Intel Corp contributed the first release of this open source project, this project has received many good contributions from the community. See the [major features releasing history and contributor names](./doc/release_ack.md) @@ -116,7 +116,9 @@ See the [roadmap](./doc/roadmap.md) to understand what major features are planed Please submit issues for any new feature request, or your plan for contributing new features. - + + + Submit issues and contact the maintainers ========================================= diff --git a/doc/release_ack.md b/doc/release_ack.md index e69de29bb..7b2a46643 100644 --- a/doc/release_ack.md +++ b/doc/release_ack.md @@ -0,0 +1,53 @@ +Major feature releases and contributors +========================================= + + +**May 07, 2019: WAMR first GitHub release** + +- Contributors: Wenyong Huang, Weining Lu, Lei Shi, Li Tian, Jizhao Zhang, Yi Zhang, Daoming Qiu, Xin Wang (Intel) + +**May 17, 2019: Application manager, WASM APP API, samples and test tools** + +- Contributors: Wenyong Huang, Weining Lu, Lei Shi, Li Tian, Jizhao Zhang, Yi Zhang, Daoming Qiu, Xin Wang (Intel) + +**May 23, 2019: Support AliOS Things** + +- Contributor: JinZhong Zhu (Alibaba) + + +**May 24, 2019: Support memory usage profiler** + +- Contributors Wenyong Huang (Intel) + +**Jun 11, 2019: Add WASM APP API: connection ** + +- Contributor: Weining Lu (Intel) + +**Jun 10, 2019: Support VxWorks ** + +- Contributor: Yiting Wang (WindRiver) + +**Aug 1, 2019: Add WGL graphic user interface API ** + +- Contributor: Weining Lu + +**Aug 14, 2019: Add Docker support ** + +- Contributor: beriberikix + + +**Aug 14, 2019: WASM IoT app store demo ** + +- Contributor: Luhanzhi Li, Jun Xu (Intel) + + +**Aug 28, 2019: SGX support ** + +- Contributor: Mic Bowman (Intel) + + +**Sep 6, 2019: Mac platform support ** + +- Contributor: Jonathan Dong (Alibaba) + + diff --git a/doc/roadmap.md b/doc/roadmap.md index da3f6ead1..4cff8ac60 100644 --- a/doc/roadmap.md +++ b/doc/roadmap.md @@ -1,14 +1,16 @@ +# WebAssembly Micro Runtime Roadmap + + ## Ahead of time compilation - +Status: under development. The first release is targetted to the end of 2019. ## WASI support - +Evaluated solution. ## Data serialization - +Evauating using cbor as the default data serialization ## Threading +Not started yet - -## \ No newline at end of file From 5872a700d72a3d51b711d9bc64bb5523ddf9f691 Mon Sep 17 00:00:00 2001 From: Wang Xin Date: Sat, 7 Sep 2019 14:23:18 +0800 Subject: [PATCH 16/20] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 47cb7d3ac..a7383eb65 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ Embed WAMR WAMR can be built into a standalone executable which takes the WASM application file name as input, and then executes it. In some other situations, the WAMR source code is embedded the product code and built into the final product. -WAMR provides a set of C API for embedding WAMR code to load the WASM module, instantiate the module and invoke a WASM function from a native call. +WAMR provides a set of C API for loading the WASM module, instantiating the module and invoking a WASM function from a native call. See the [doc/embed_wamr.md](./doc/embed_wamr.md) for the details. From 2f71a92ca3bc37ebd9350c2303794c164987632f Mon Sep 17 00:00:00 2001 From: Wang Xin Date: Sat, 7 Sep 2019 14:27:11 +0800 Subject: [PATCH 17/20] re-organized the readme (#111) * Update README.md * re-organize the readme * more changes * roadmap and releases * Update README.md --- README.md | 731 +++---------------------------- doc/building.md | 268 +++++++++++ doc/embed_wamr.md | 40 ++ doc/pics/architecture.PNG | Bin 53444 -> 0 bytes doc/pics/architecture_extend.PNG | Bin 78440 -> 0 bytes doc/pics/vgl.PNG | Bin 49192 -> 0 bytes doc/pics/vgl2.PNG | Bin 82855 -> 0 bytes doc/pics/vgl_demo.png | Bin 0 -> 133339 bytes doc/pics/vgl_demo2.png | Bin 0 -> 149435 bytes doc/pics/vgl_demo_linux.png | Bin 0 -> 5792 bytes doc/pics/wamr-arch.JPG | Bin 0 -> 131955 bytes doc/release_ack.md | 53 +++ doc/roadmap.md | 16 + doc/wamr_api.md | 310 +++++++++++++ samples/gui/README.md | 12 +- samples/littlevgl/README.md | 16 +- 16 files changed, 779 insertions(+), 667 deletions(-) create mode 100644 doc/building.md create mode 100644 doc/embed_wamr.md delete mode 100644 doc/pics/architecture.PNG delete mode 100644 doc/pics/architecture_extend.PNG delete mode 100644 doc/pics/vgl.PNG delete mode 100644 doc/pics/vgl2.PNG create mode 100644 doc/pics/vgl_demo.png create mode 100644 doc/pics/vgl_demo2.png create mode 100644 doc/pics/vgl_demo_linux.png create mode 100644 doc/pics/wamr-arch.JPG create mode 100644 doc/release_ack.md create mode 100644 doc/roadmap.md create mode 100644 doc/wamr_api.md diff --git a/README.md b/README.md index f7c9bbdbc..a7383eb65 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,17 @@ WebAssembly Micro Runtime ========================= -WebAssembly Micro Runtime (WAMR) is a standalone WebAssembly (WASM) runtime designed for a small footprint. It includes: -- A WebAssembly (WASM) VM core +WebAssembly Micro Runtime (WAMR) is a standalone WebAssembly (WASM) runtime with small footprint. It includes a few parts as below: +- A WebAssembly VM core (namely iwasm) - The supporting API's for the WASM applications - A mechanism for dynamic management of the WASM application -Why should you use a WASM runtime out of your browser? There are a few points where this might be meaningful: -1. WASM is already an LLVM official backend target. That means WASM can run any programming languages which can be compiled to LLVM IR. It is a huge advantage compared to language bound runtimes like JS or Lua. -2. WASM is an open standard and it is fast becoming supported by the whole web ecosystem. -3. WASM is designed to be very friendly for compiling to native binaries and gaining the native speed. -4. It can potentially change the development practices. Imagine we can do both the WASM application development and validation in a browser, then just download the WASM binary code onto the target device. -5. WASM can work without garbage collection. It is designed to support execution determinics for the time sensitive requirement. -6. Maintain the safety goals WASM has of providing a sandboxed execution environment for untrusted code. In addition, because WASM is a compilation target, this implies the benefit of being able to target both an execution and security profile that is consistent across popular high-level programming languages. - - Current Features of WAMR ========================= - WASM interpreter (AOT is planned) -- Provides support for a subset of Libc. +- Supports for a subset of Libc. - Supports "SIDE_MODULE=1" EMCC compilation option -- Provides API's for embedding runtime into production software +- Provides embedding C API - Provides a mechanism for exporting native API's to WASM applications - Supports the programming of firmware apps in a large range of languages (C/C++/Java/Rust/Go/TypeScript etc.) - App sandbox execution environment on embedded OS @@ -29,680 +20,104 @@ Current Features of WAMR - Supports micro-service and pub-sub event inter-app communication models - Easy to extend to support remote FW application management from host or cloud -Architecture -========================= -The application manager component handles the packets that the platform receives from external sources through any communication buses such as a socket, serial port or SPI. A packet type can be either a request, a response or an event. The application manager will serve the requests with URI "/applet" and call the runtime glue layer interfaces for installing/uninstalling the application. For other URI's, it will filter the resource registration table and route the request to the internal queue of the responsible application. +Application framework architecture +=================================== -- The WebAssembly runtime provides the execution environment for WASM applications. +By using the iwasm VM core, we are flexible to build different application frameworks for the specific domains. -- The messaging layer can support the API for WASM applications to communicate with each other and also the host environment. +The WAMR has offered a comprehensive application framework for device and IoT usages. The framework solves many common requirements for building a real project: +- Modular design for more language runtimes support +- Inter application communication +- Remote application management +- WASM APP programming model and API extension mechanism -- When ahead of time (AOT) compilation is enabled (TODO), the WASM application could be either WASM or a compiled native binary. + - +Build WAMR Core and run WASM applications +================================================ -Build WAMR Core -========================= -Please follow the instructions below to build the WAMR core on different platforms. +WAMR VM core (iwasm) can support building on different platforms: +- Linux +- Zephyr +- Mac +- VxWorks +- AliOS-Things +- Docker +- Intel Software Guard Extention (SGX) -Linux -------------------------- -First of all please install library dependencies of lib gcc. -Use installation commands below for Ubuntu Linux: -``` Bash -sudo apt install lib32gcc-5-dev g++-multilib -``` -Or in Fedora: -``` Bash -sudo dnf install glibc-devel.i686 -``` +After building the iwasm, we can compile some basic WASM applications and run it from the WAMR core. As the WAMR core doesn't include the extended application library, your WASM applications can only use the [WAMR built-in APIs](./doc/wamr_api.md). -After installing dependencies, build the source code: -``` Bash -cd core/iwasm/products/linux/ -mkdir build -cd build -cmake .. -make -``` +See the [doc/building.md](./doc/building.md) for the detailed instructions. -Mac -------------------------- -Make sure to install Xcode from App Store firstly, and install cmake. -If you use Homebrew, install cmake from the command line: -``` Bash -brew install cmake -``` +Embed WAMR +=========== -Then build the source codes: -``` -cd core/iwasm/products/darwin/ -mkdir build -cd build -cmake .. -make -``` +WAMR can be built into a standalone executable which takes the WASM application file name as input, and then executes it. In some other situations, the WAMR source code is embedded the product code and built into the final product. -VxWorks -------------------------- -VxWorks 7 SR0620 release is validated. +WAMR provides a set of C API for loading the WASM module, instantiating the module and invoking a WASM function from a native call. -First you need to build a VSB. Make sure *UTILS_UNIX* layer is added in the VSB. -After the VSB is built, export the VxWorks toolchain path by: -``` -export /host/vx-compiler/bin:$PATH -``` -Now switch to iwasm source tree to build the source code: -``` -cd core/iwasm/products/vxworks/ -mkdir build -cd build -cmake .. -make -``` -Create a VIP based on the VSB. Make sure the following components are added: -* INCLUDE_POSIX_PTHREADS -* INCLUDE_POSIX_PTHREAD_SCHEDULER -* INCLUDE_SHARED_DATA -* INCLUDE_SHL +See the [doc/embed_wamr.md](./doc/embed_wamr.md) for the details. -Copy the generated iwasm executable, the test WASM binary as well as the needed -shared libraries (libc.so.1, libllvm.so.1 or libgnu.so.1 depending on the VSB, -libunix.so.1) to a supported file system (eg: romfs). +WAMR application programming library +=================================== -Zephyr -------------------------- -You need to download the Zephyr source code first and embed WAMR into it. -``` Bash -git clone https://github.com/zephyrproject-rtos/zephyr.git -cd zephyr/samples/ -cp -a /products/zephyr/simple . -cd simple -ln -s iwasm -ln -s shared-lib -mkdir build && cd build -source ../../../zephyr-env.sh -cmake -GNinja -DBOARD=qemu_x86 .. -ninja -``` -AliOS-Things -------------------------- -1. a developerkit board id needed for testing -2. download the AliOS-Things code - ``` Bash - git clone https://github.com/alibaba/AliOS-Things.git - ``` -3. copy /products/alios-things directory to AliOS-Things/middleware, and rename it as iwasm - ``` Bash - cp -a /products/alios-things middleware/iwasm - ``` -4. create a link to in middleware/iwasm/ and rename it to iwasm - ``` Bash - ln -s middleware/iwasm/iwasm - ``` -5. create a link to in middleware/iwasm/ and rename it to shared-lib - ``` Bash - ln -s middle/iwasm/shared-lib - ``` -6. modify file app/example/helloworld/helloworld.c, patch as: - ``` C - #include - #include - extern bool iwasm_init(); - int application_start(int argc, char *argv[]) - { - int count = 0; - iwasm_init(); - ... - } - ``` -7. modify file app/example/helloworld/aos.mk - ``` C - $(NAME)_COMPONENTS := osal_aos iwasm - ``` -8. build source code - ``` Bash - aos make helloworld@developerkit -c config - aos make - ``` -9. download the binary to developerkit board, check the output from serial port +WAMR defined event driven programming model: +- Single thread per WASM app instance +- App must implement system callbacks: on_init, on_destrory -Docker -------------------------- -[Docker](https://www.docker.com/) will download all the dependencies and build WAMR Core on your behalf. -Make sure you have Docker installed on your machine: [macOS](https://docs.docker.com/docker-for-mac/install/), [Windows](https://docs.docker.com/docker-for-windows/install/) or [Linux](https://docs.docker.com/install/linux/docker-ce/ubuntu/). +In general there are a few API classes for the WASM application programming: +- WAMR Built-in API: WAMR core provides a minimal libc API set for WASM APP +- WAMR application libraries: + - Timer + - Micro service (Request/Response) + - Pub/Sub + - Sensor + - Connection and data transmission + - 2D graphic UI (based on littlevgl) +- User extended native API: extend the native API to the WASM applications +- 3rd party libraries: Programmers can download any 3rd party C/C++ source code and build it together with the WASM APP code -Build the Docker image: +See the [doc/wamr_api.md](./doc/wamr_api.md) for the details. -``` Bash -docker build --rm -f "Dockerfile" -t wamr:latest . -``` -Run the image in interactive mode: -``` Bash -docker run --rm -it wamr:latest -``` -You'll now enter the container at `/root`. - -Build WASM app -========================= -You can write a simple ```test.c``` as the first sample. - -```C -#include -#include - -int main(int argc, char **argv) -{ - char *buf; - - printf("Hello world!\n"); - - buf = malloc(1024); - if (!buf) { - printf("malloc buf failed\n"); - return -1; - } - - printf("buf ptr: %p\n", buf); - - sprintf(buf, "%s", "1234\n"); - printf("buf: %s", buf); - - free(buf); - return 0; -} -``` - -There are three methods to build a WASM binary. They are Emscripten, the clang compiler and Docker. - -## Use Emscripten tool - -A method to build a WASM binary is to use Emscripten tool ```emcc```. -Assuming you are using Linux, you may install emcc from Emscripten EMSDK following the steps below: - -``` -git clone https://github.com/emscripten-core/emsdk.git -emsdk install latest -emsdk activate latest -``` -source ```./emsdk_env.sh```. -The Emscripten website provides other installation methods beyond Linux. - -Use the emcc command below to build the WASM C source code into the WASM binary. -``` Bash -emcc -g -O3 *.c -s WASM=1 -s SIDE_MODULE=1 -s ASSERTIONS=1 -s STACK_OVERFLOW_CHECK=2 \ - -s TOTAL_MEMORY=65536 -s TOTAL_STACK=4096 -o test.wasm -``` -You will get ```test.wasm``` which is the WASM app binary. - -## Use clang compiler - -Another method to build a WASM binary is to use clang compiler```clang-8```. - -Add source to your system source list from llvm website, for ubuntu16.04, add following lines to /etc/apt/sources.list: - -```Bash -deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial main -deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial main # 7 -deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main -deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main # 8 -deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-8 main -deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial-8 main -``` - -Download and install clang-8 tool-chain using following commands: - -```Bash -wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - -sudo apt-get update -sudo apt-get install llvm-8 lld-8 clang-8 -``` - -Create a soft link under /usr/bin: - -```Bash -cd /usr/bin -sudo ln -s wasm-ld-8 wasm-ld -``` - -Use the clang-8 command below to build the WASM C source code into the WASM binary. - -```Bash -clang-8 --target=wasm32 -O3 -Wl,--initial-memory=131072,--allow-undefined,--export=main, ---no-threads,--strip-all,--no-entry -nostdlib -o test.wasm test.c -``` - -You will get ```test.wasm``` which is the WASM app binary. - -## Using Docker - -The last method availble is using [Docker](https://www.docker.com/). We assume you've already configured Docker (see Platform section above) and have a running interactive shell. Currently the Dockerfile only supports compiling apps with clang, with Emscripten planned for the future. - -Use the clang-8 command below to build the WASM C source code into the WASM binary. - -```Bash -clang-8 --target=wasm32 -O3 -Wl,--initial-memory=131072,--allow-undefined,--export=main, ---no-threads,--strip-all,--no-entry -nostdlib -o test.wasm test.c -``` - -You will get ```test.wasm``` which is the WASM app binary. - -Run WASM app -======================== - -Assume you are using Linux, the command to run the test.wasm is: -``` Bash -cd iwasm/products/linux/build -./iwasm test.wasm -``` -You will get the following output: -``` -Hello world! -buf ptr: 0x400002b0 -buf: 1234 -``` -If you would like to run the test app on Zephyr, we have embedded a test sample into its OS image. You will need to execute: -``` -ninja run -``` - -Embed WAMR into software production -===================================== -WAMR can be built into a standalone executable which takes the WASM application file name as input, and then executes it. To use it in the embedded environment you should embed WAMR into your own software product. WASM provides a set of API's for embedded code to load the WASM module, instantiate the module and invoke a WASM function from a native call. - - - - -A typical WAMR API usage is shown below (some return value checks are ignored): -``` C - static char global_heap_buf[512 * 1024]; - - char *buffer; - wasm_module_t module; - wasm_module_inst_t inst; - wasm_function_inst_t func; - wasm_exec_env_t env; - uint32 argv[2]; - - bh_memory_init_with_pool(global_heap_buf, sizeof(global_heap_buf)); - wasm_runtime_init(); - - buffer = read_wasm_binary_to_buffer(…); - module = wasm_runtime_load(buffer, size, err, err_size); - inst = wasm_runtime_instantiate(module, 0, 0, err, err_size); - func = wasm_runtime_lookup_function(inst, "fib", "(i32)i32"); - env = wasm_runtime_create_exec_env(stack_size); - - argv[0] = 8; - if (!wasm_runtime_call_wasm(inst, env, func, 1, argv_buf) ) { - wasm_runtime_clear_exception(inst); - } - /* the return value is stored in argv[0] */ - printf("fib function return: %d\n", argv[0]); - - wasm_runtime_destory_exec_env(env); - wasm_runtime_deinstantiate(inst); - wasm_runtime_unload(module); - wasm_runtime_destroy(); - bh_memory_destroy(); -``` - - -WASM application library -======================== -In general, there are 3 classes of API's important for the WASM application: -- Built-in API's: WAMR provides a minimal API set for developers. -- 3rd party API's: Programmer can download and include any 3rd party C source code and add it into their own WASM app source tree. -- Platform native API's: WAMR provides a mechanism to export a native API to the WASM application. - - -Built-in application library ---------------- -Built-in API's include Libc API's, Base library and Extension library reference. - -**Libc API's**
    -This is a minimal set of Libc API's for memory allocation, string manipulation and printing. The header file is located at ```lib/app-libs/libc/lib_base.h```. The current supported API set is listed here: -``` C -void *malloc(size_t size); -void *calloc(size_t n, size_t size); -void free(void *ptr); -int memcmp(const void *s1, const void *s2, size_t n); -void *memcpy(void *dest, const void *src, size_t n); -void *memmove(void *dest, const void *src, size_t n); -void *memset(void *s, int c, size_t n); -int putchar(int c); -int snprintf(char *str, size_t size, const char *format, ...); -int sprintf(char *str, const char *format, ...); -char *strchr(const char *s, int c); -int strcmp(const char *s1, const char *s2); -char *strcpy(char *dest, const char *src); -size_t strlen(const char *s); -int strncmp(const char * str1, const char * str2, size_t n); -char *strncpy(char *dest, const char *src, unsigned long n); -``` - -**Base library**
    -Basic support for communication, timers, etc is available. You can refer to the header file ```lib/app-libs/base/wasm_app.h``` which contains the definitions for request and response API's, event pub/sub API's and timer API's. Please note that these API's require the native implementations. -The API set is listed below: -``` C -typedef void(*request_handler_f)(request_t *) ; -typedef void(*response_handler_f)(response_t *, void *) ; - -// Request API's -bool api_register_resource_handler(const char *url, request_handler_f); -void api_send_request(request_t * request, response_handler_f response_handler, void * user_data); -void api_response_send(response_t *response); - -// Event API's -bool api_publish_event(const char *url, int fmt, void *payload, int payload_len); -bool api_subscribe_event(const char * url, request_handler_f handler); - -struct user_timer; -typedef struct user_timer * user_timer_t; - -// Timer API's -user_timer_t api_timer_create(int interval, bool is_period, bool auto_start, void(*on_user_timer_update)(user_timer_t -)); -void api_timer_cancel(user_timer_t timer); -void api_timer_restart(user_timer_t timer, int interval); -``` - -**Library extension reference**
    -Currently we provide several kinds of extension library for reference including sensor, connection and GUI. - -Sensor API: In the header file ```lib/app-libs/extension/sensor/sensor.h```, the API set is defined as below: -``` C -sensor_t sensor_open(const char* name, int index, - void(*on_sensor_event)(sensor_t, attr_container_t *, void *), - void *user_data); -bool sensor_config(sensor_t sensor, int interval, int bit_cfg, int delay); -bool sensor_config_with_attr_container(sensor_t sensor, attr_container_t *cfg); -bool sensor_close(sensor_t sensor); -``` -Connection API: In the header file `lib/app-libs/extension/connection/connection.h.`, the API set is defined as below: -``` C -/* Connection event type */ -typedef enum { - /* Data is received */ - CONN_EVENT_TYPE_DATA = 1, - /* Connection is disconnected */ - CONN_EVENT_TYPE_DISCONNECT -} conn_event_type_t; - -typedef void (*on_connection_event_f)(connection_t *conn, - conn_event_type_t type, - const char *data, - uint32 len, - void *user_data); -connection_t *api_open_connection(const char *name, - attr_container_t *args, - on_connection_event_f on_event, - void *user_data); -void api_close_connection(connection_t *conn); -int api_send_on_connection(connection_t *conn, const char *data, uint32 len); -bool api_config_connection(connection_t *conn, attr_container_t *cfg); -``` -GUI API: The API's is list in header file ```lib/app-libs/extension/gui/wgl.h``` which is implemented based open soure 2D graphic library [LittlevGL](https://docs.littlevgl.com/en/html/index.html). Currently supported widgets include button, label, list and check box and more wigdet would be provided in future. - - -The mechanism of exporting native API to WASM application -======================================================= - -The basic working flow for WASM application calling into the native API is shown in the following diagram: - - - - -WAMR provides the macro `EXPORT_WASM_API` to enable users to export a native API to a WASM application. WAMR has implemented a base API for the timer and messaging by using `EXPORT_WASM_API`. This can be a point of reference for extending your own library. -``` C -static NativeSymbol extended_native_symbol_defs[] = { - EXPORT_WASM_API(wasm_register_resource), - EXPORT_WASM_API(wasm_response_send), - EXPORT_WASM_API(wasm_post_request), - EXPORT_WASM_API(wasm_sub_event), - EXPORT_WASM_API(wasm_create_timer), - EXPORT_WASM_API(wasm_timer_set_interval), - EXPORT_WASM_API(wasm_timer_cancel), - EXPORT_WASM_API(wasm_timer_restart) -}; -``` - -![#f03c15](https://placehold.it/15/f03c15/000000?text=+) **Security attention:** A WebAssembly application should only have access to its own memory space. As a result, the integrator should carefully design the native function to ensure that the memory accesses are safe. The native API to be exported to the WASM application must: -- Only use 32 bits number for parameters -- Should not pass data to the structure pointer (do data serialization instead) -- Should do the pointer address conversion in the native API -- Should not pass function pointer as callback - -Below is a sample of a library extension. All code invoked across WASM and native world must be serialized and de-serialized, and the native world must do a boundary check for every incoming address from the WASM world. - - - -Steps for exporting native API -========================== - -WAMR implemented a framework for developers to export API's. Below is the procedure to expose the platform API's in three steps: - -**Step 1. Create a header file**
    -Declare the API's for your WASM application source project to include. - -**Step 2. Create a source file**
    -Export the platform API's, for example in ``` products/linux/ext_lib_export.c ``` -``` C -#include "lib_export.h" - -static NativeSymbol extended_native_symbol_defs[] = -{ -}; - -#include "ext_lib_export.h" -``` - -**Step 3. Register new API's**
    -Use the macro `EXPORT_WASM_API` and `EXPORT_WASM_API2` to add exported API's into the array of ```extended_native_symbol_defs```. -The pre-defined MACRO `EXPORT_WASM_API` should be used to declare a function export: -``` c -#define EXPORT_WASM_API(symbol) {#symbol, symbol} -``` - -Below code example shows how to extend the library to support `customized()`: - -``` -//lib_export_impl.c -void customized() -{ - // your code -} - - -// lib_export_dec.h -#ifndef _LIB_EXPORT_DEC_H_ -#define _LIB_EXPORT_DEC_H_ -#ifdef __cplusplus -extern "C" { -#endif - -void customized(); - -#ifdef __cplusplus -} -#endif -#endif - - -// ext_lib_export.c -#include "lib_export.h" -#include "lib_export_dec.h" - -static NativeSymbol extended_native_symbol_defs[] = -{ - EXPORT_WASM_API(customized) -}; - -#include "ext_lib_export.h" -``` - -Use extended library ------------------------- -In the application source project, it will include the WAMR built-in API's header file and platform extension header files. Assuming the board vendor extends the library which added an API called customized(), the WASM application would be like this: -``` C -#include -#include "lib_export_dec.h" // provided by the platform vendor - -int main(int argc, char **argv) -{ - int I; - char *buf = “abcd”; - customized(); // customized API provided by the platform vendor - return i; -} -``` - - -Communication programming models -========================= -WAMR supports two typical communication programming models, the microservice model and the pub/sub model. - - -Microservice model -------------------------- -The microservice model is also known as request and response model. One WASM application acts as the server which provides a specific service. Other WASM applications or host/cloud applications request that service and get the response. - - -Below is the reference implementation of the server application. It provides room temperature measurement service. - -``` C -void on_init() -{ - api_register_resource_handler("/room_temp", room_temp_handler); -} - -void on_destroy() -{ -} - -void room_temp_handler(request_t *request) -{ - response_t response[1]; - attr_container_t *payload; - payload = attr_container_create("room_temp payload"); - if (payload == NULL) - return; - - attr_container_set_string(&payload, "temp unit", "centigrade"); - attr_container_set_int(&payload, "value", 26); - - make_response_for_request(request, response); - set_response(response, - CONTENT_2_05, - FMT_ATTR_CONTAINER, - payload, - attr_container_get_serialize_length(payload)); - - api_response_send(response); - attr_container_destroy(payload); -} -``` - - -Pub/sub model -------------------------- -One WASM application acts as the event publisher. It publishes events to notify WASM applications or host/cloud applications which subscribe to the events. - - - -Below is the reference implementation of the pub application. It utilizes a timer to repeatedly publish an overheat alert event to the subscriber applications. Then the subscriber applications receive the events immediately. - -``` C -/* Timer callback */ -void timer_update(user_timer_t timer -{ - attr_container_t *event; - - event = attr_container_create("event"); - attr_container_set_string(&event, - "warning", - "temperature is over high"); - - api_publish_event("alert/overheat", - FMT_ATTR_CONTAINER, - event, - attr_container_get_serialize_length(event)); - - attr_container_destroy(event); -} - -void on_init() -{ - user_timer_t timer; - timer = api_timer_create(1000, true, true, timer_update); -} - -void on_destroy() -{ -} -``` - -Below is the reference implementation of the sub application. -``` C -void overheat_handler(request_t *event) -{ - printf("Event: %s\n", event->url); - - if (event->payload != NULL && event->fmt == FMT_ATTR_CONTAINER) - attr_container_dump((attr_container_t *) event->payload); -} - -void on_init( -{ - api_subscribe_event ("alert/overheat", overheat_handler); -} - -void on_destroy() -{ -} -``` -**Note:** You can also subscribe this event from host side by using host tool. Please refer `samples/simple` project for deail usage. Samples and demos -========================= -The simple sample --------- -Please refer to the ```samples/simple``` folder for samples of WASM application life cyle management and programming models. +================= -2D graphic user interface with LittlevGL ------------------------------------------------- -We have 2 samples for 2D graphic user interface. - -One of them demonstrates that a graphic user interface application in WebAssembly integrates the LittlevGL, an open-source embedded 2d graphic library. The sample source code is under ```samples/littlevgl``` - -In this sample, the LittlevGL source code is built into the WebAssembly code with the user application source files. The platform interfaces defined by LittlevGL is implemented in the runtime and exported to the application through the declarations from source "ext_lib_export.c" as below: - - EXPORT_WASM_API(display_init), - EXPORT_WASM_API(display_input_read), - EXPORT_WASM_API(display_flush), - EXPORT_WASM_API(display_fill), - EXPORT_WASM_API(display_vdb_write), - EXPORT_WASM_API(display_map), - EXPORT_WASM_API(time_get_ms), }; - -The runtime component supports building target for Linux and AliOS-Things, Zephyr/STM Nucleo board respectively. The beauty of this sample is the WebAssembly application can have identical display and behavior when running from both runtime environments. That implies we can do the majority of application validation from the desktop environment then load it to the target device as long as two runtime distributions support the same set of the application interface. +The WAMR samples are located in folder [./samples](./samples). A sample usually contains the WAMR runtime build, WASM applications and test tools. The WARM provides following samples: +- [Simple](./samples/simple/README.md): The runtime is integrated with most of the WAMR APP libaries and multiple WASM applications are provided for using different WASM API set. +- [littlevgl](./samples/littlevgl/README.md): Demostrating the graphic user interface application usage on WAMR. The whole [LittlevGL](https://github.com/littlevgl/) 2D user graphic library and the UI application is built into WASM application. +- [gui](./samples/gui/README.md): Moved the [LittlevGL](https://github.com/littlevgl/) library into the runtime and defined a WASM application interface by wrapping the littlevgl API. +- [IoT-APP-Store-Demo](./test-tools/IoT-APP-Store-Demo/README.md): A web site for demostrating a WASM APP store usage where we can remotely install and uninstall WASM application on remote devices. -Below pictures show the WASM application is running on an STM board with an LCD touch panel. When users click the blue button, the WASM application increases the counter, and the latest counter value is displayed on the top banner of the touch panel. +The graphic user interface demo photo: - - +![WAMR samples diagram](./doc/pics/vgl_demo.png "WAMR samples diagram") + + + + +Releases and acknowledgments +============================ + +WAMR is a community efforts. Since Intel Corp contributed the first release of this open source project, this project has received many good contributions from the community. + +See the [major features releasing history and contributor names](./doc/release_ack.md) + + +Roadmap +======= + +See the [roadmap](./doc/roadmap.md) to understand what major features are planed or under development. + +Please submit issues for any new feature request, or your plan for contributing new features. -The sample also provides the native Linux version of application without the runtime under folder "vgl-native-ui-app". It can help to check differences between the implementations in native and WebAssembly. - -The other sample demonstrates that a graphic user interface application in WebAssembly programming with WAMR graphic library(WGL), which is implemented based on LittlevGL, an open-source embedded 2d graphic library. The sample source code is under ```samples/gui``` -Unlike `sample/littlevgl/val-wasm-runtime`, in this sample, the LittlevGL source code is built into the WAMR runtime and exported to Webassembly applicaton but not directly built into Webassembly application. And WGL provides a group of WebAssembly wrapper API's for user to write graphic application. These API's are listed in: `/core/iwasm/lib/app-libs/extension/gui/wgl.h`. Currently only a few API's are provided and there will be more. Submit issues and contact the maintainers diff --git a/doc/building.md b/doc/building.md new file mode 100644 index 000000000..13c5bdc14 --- /dev/null +++ b/doc/building.md @@ -0,0 +1,268 @@ + +Build WAMR Core +========================= +Please follow the instructions below to build the WAMR core on different platforms. + +Linux +------------------------- +First of all please install library dependencies of lib gcc. +Use installation commands below for Ubuntu Linux: +``` Bash +sudo apt install lib32gcc-5-dev g++-multilib +``` +Or in Fedora: +``` Bash +sudo dnf install glibc-devel.i686 +``` + +After installing dependencies, build the source code: +``` Bash +cd core/iwasm/products/linux/ +mkdir build +cd build +cmake .. +make +``` + +Mac +------------------------- +Make sure to install Xcode from App Store firstly, and install cmake. + +If you use Homebrew, install cmake from the command line: +``` Bash +brew install cmake +``` + +Then build the source codes: +``` +cd core/iwasm/products/darwin/ +mkdir build +cd build +cmake .. +make +``` + +VxWorks +------------------------- +VxWorks 7 SR0620 release is validated. + +First you need to build a VSB. Make sure *UTILS_UNIX* layer is added in the VSB. +After the VSB is built, export the VxWorks toolchain path by: +``` +export /host/vx-compiler/bin:$PATH +``` +Now switch to iwasm source tree to build the source code: +``` +cd core/iwasm/products/vxworks/ +mkdir build +cd build +cmake .. +make +``` +Create a VIP based on the VSB. Make sure the following components are added: +* INCLUDE_POSIX_PTHREADS +* INCLUDE_POSIX_PTHREAD_SCHEDULER +* INCLUDE_SHARED_DATA +* INCLUDE_SHL + +Copy the generated iwasm executable, the test WASM binary as well as the needed +shared libraries (libc.so.1, libllvm.so.1 or libgnu.so.1 depending on the VSB, +libunix.so.1) to a supported file system (eg: romfs). + +Zephyr +------------------------- +You need to download the Zephyr source code first and embed WAMR into it. +``` Bash +git clone https://github.com/zephyrproject-rtos/zephyr.git +cd zephyr/samples/ +cp -a /products/zephyr/simple . +cd simple +ln -s iwasm +ln -s shared-lib +mkdir build && cd build +source ../../../zephyr-env.sh +cmake -GNinja -DBOARD=qemu_x86 .. +ninja +``` +AliOS-Things +------------------------- +1. a developerkit board id needed for testing +2. download the AliOS-Things code + ``` Bash + git clone https://github.com/alibaba/AliOS-Things.git + ``` +3. copy /products/alios-things directory to AliOS-Things/middleware, and rename it as iwasm + ``` Bash + cp -a /products/alios-things middleware/iwasm + ``` +4. create a link to in middleware/iwasm/ and rename it to iwasm + ``` Bash + ln -s middleware/iwasm/iwasm + ``` +5. create a link to in middleware/iwasm/ and rename it to shared-lib + ``` Bash + ln -s middle/iwasm/shared-lib + ``` +6. modify file app/example/helloworld/helloworld.c, patch as: + ``` C + #include + #include + extern bool iwasm_init(); + int application_start(int argc, char *argv[]) + { + int count = 0; + iwasm_init(); + ... + } + ``` +7. modify file app/example/helloworld/aos.mk + ``` C + $(NAME)_COMPONENTS := osal_aos iwasm + ``` +8. build source code + ``` Bash + aos make helloworld@developerkit -c config + aos make + ``` +9. download the binary to developerkit board, check the output from serial port + +Docker +------------------------- +[Docker](https://www.docker.com/) will download all the dependencies and build WAMR Core on your behalf. + +Make sure you have Docker installed on your machine: [macOS](https://docs.docker.com/docker-for-mac/install/), [Windows](https://docs.docker.com/docker-for-windows/install/) or [Linux](https://docs.docker.com/install/linux/docker-ce/ubuntu/). + +Build the Docker image: + +``` Bash +docker build --rm -f "Dockerfile" -t wamr:latest . +``` +Run the image in interactive mode: +``` Bash +docker run --rm -it wamr:latest +``` +You'll now enter the container at `/root`. + + +Build WASM app +========================= +You can write a simple ```test.c``` as the first sample. + +```C +#include +#include + +int main(int argc, char **argv) +{ + char *buf; + + printf("Hello world!\n"); + + buf = malloc(1024); + if (!buf) { + printf("malloc buf failed\n"); + return -1; + } + + printf("buf ptr: %p\n", buf); + + sprintf(buf, "%s", "1234\n"); + printf("buf: %s", buf); + + free(buf); + return 0; +} +``` + +There are three methods to build a WASM binary. They are Emscripten, the clang compiler and Docker. + +## Use Emscripten tool + +A method to build a WASM binary is to use Emscripten tool ```emcc```. +Assuming you are using Linux, you may install emcc from Emscripten EMSDK following the steps below: + +``` +git clone https://github.com/emscripten-core/emsdk.git +emsdk install latest +emsdk activate latest +``` +source ```./emsdk_env.sh```. +The Emscripten website provides other installation methods beyond Linux. + +Use the emcc command below to build the WASM C source code into the WASM binary. +``` Bash +emcc -g -O3 *.c -s WASM=1 -s SIDE_MODULE=1 -s ASSERTIONS=1 -s STACK_OVERFLOW_CHECK=2 \ + -s TOTAL_MEMORY=65536 -s TOTAL_STACK=4096 -o test.wasm +``` +You will get ```test.wasm``` which is the WASM app binary. + +## Use clang compiler + +Another method to build a WASM binary is to use clang compiler```clang-8```. + +Add source to your system source list from llvm website, for ubuntu16.04, add following lines to /etc/apt/sources.list: + +```Bash +deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial main +deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial main # 7 +deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main +deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main # 8 +deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-8 main +deb-src http://apt.llvm.org/xenial/ llvm-toolchain-xenial-8 main +``` + +Download and install clang-8 tool-chain using following commands: + +```Bash +wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - +sudo apt-get update +sudo apt-get install llvm-8 lld-8 clang-8 +``` + +Create a soft link under /usr/bin: + +```Bash +cd /usr/bin +sudo ln -s wasm-ld-8 wasm-ld +``` + +Use the clang-8 command below to build the WASM C source code into the WASM binary. + +```Bash +clang-8 --target=wasm32 -O3 -Wl,--initial-memory=131072,--allow-undefined,--export=main, +--no-threads,--strip-all,--no-entry -nostdlib -o test.wasm test.c +``` + +You will get ```test.wasm``` which is the WASM app binary. + +## Using Docker + +The last method availble is using [Docker](https://www.docker.com/). We assume you've already configured Docker (see Platform section above) and have a running interactive shell. Currently the Dockerfile only supports compiling apps with clang, with Emscripten planned for the future. + +Use the clang-8 command below to build the WASM C source code into the WASM binary. + +```Bash +clang-8 --target=wasm32 -O3 -Wl,--initial-memory=131072,--allow-undefined,--export=main, +--no-threads,--strip-all,--no-entry -nostdlib -o test.wasm test.c +``` + +You will get ```test.wasm``` which is the WASM app binary. + +Run WASM app +======================== + +Assume you are using Linux, the command to run the test.wasm is: +``` Bash +cd iwasm/products/linux/build +./iwasm test.wasm +``` +You will get the following output: +``` +Hello world! +buf ptr: 0x400002b0 +buf: 1234 +``` +If you would like to run the test app on Zephyr, we have embedded a test sample into its OS image. You will need to execute: +``` +ninja run +``` diff --git a/doc/embed_wamr.md b/doc/embed_wamr.md new file mode 100644 index 000000000..4c1588f8f --- /dev/null +++ b/doc/embed_wamr.md @@ -0,0 +1,40 @@ +Embed WAMR into software production +===================================== + +![WAMR embed diagram](./pics/embed.PNG "WAMR embed architecture diagram") + + +A typical WAMR API usage is shown below (some return value checks are ignored): +``` C + static char global_heap_buf[512 * 1024]; + + char *buffer; + wasm_module_t module; + wasm_module_inst_t inst; + wasm_function_inst_t func; + wasm_exec_env_t env; + uint32 argv[2]; + + bh_memory_init_with_pool(global_heap_buf, sizeof(global_heap_buf)); + wasm_runtime_init(); + + buffer = read_wasm_binary_to_buffer(…); + module = wasm_runtime_load(buffer, size, err, err_size); + inst = wasm_runtime_instantiate(module, 0, 0, err, err_size); + func = wasm_runtime_lookup_function(inst, "fib", "(i32)i32"); + env = wasm_runtime_create_exec_env(stack_size); + + argv[0] = 8; + if (!wasm_runtime_call_wasm(inst, env, func, 1, argv_buf) ) { + wasm_runtime_clear_exception(inst); + } + /* the return value is stored in argv[0] */ + printf("fib function return: %d\n", argv[0]); + + wasm_runtime_destory_exec_env(env); + wasm_runtime_deinstantiate(inst); + wasm_runtime_unload(module); + wasm_runtime_destroy(); + bh_memory_destroy(); +``` + diff --git a/doc/pics/architecture.PNG b/doc/pics/architecture.PNG deleted file mode 100644 index 00dba560a4d9bf0288624139eb633aa761821139..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53444 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

  • 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
    ekDU7W-NV!x9@9bcaGb!TyG`@mg8 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 z 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%0ArY4l385@jei(s2iVmP+Q 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%0DVb$aiPXQi~j}y2F!6%wbd2N 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 literal 0 HcmV?d00001 diff --git a/doc/pics/wamr-arch.JPG b/doc/pics/wamr-arch.JPG new file mode 100644 index 0000000000000000000000000000000000000000..759ed3888d02da457451e225c07866dfaba34cbd GIT binary patch literal 131955 zcmeFY2S8Lyx-PnqD4#c)vxg-{y+0~JR@#Wm71e*FR@0C2B=n;O7I z<>8~!lBfVsZ==3&e#QR${E5Jy2>gk_p9uVkz@G^GpNN3AiK7)ey^f6|0ARjH|4o

    |0m9%KV|+Cfj<%W6M;Vw_!EJ@ zA;8PcBO=O;`WK={ee(#4@(Ba~Q62zj115kYUZwZFqY8OSte`Rwq zNQ%3fTZ*bZm-$NxR7!&3FMaXy^5XR3<8*Sh;^Gkz5#i$I<>KY#K$YNd^Ko=H@#b)J zWBf}6&n?`{Ty31)ZJZqGe^qE=>g3@r!QkOxV=iiGVkuy1ZZ5!KYQksE!NX&2!eL_0 z$HQUH$7e1iz$46S$z#g!m*&mQ{@S{;hpYW>ZJV2MS=d`RSU9@7q0r#rV&M9{)Bm&D zL_ze|M*l+h(2?*FmbndjtY{$hL(dH^)ICHZ^O+gC@d(>^>^jOxqgB1?>hQF zx99&Yv?RsN%|y+9_1($!_vY0tT>kHkw!MwyUlr-!MMUNN9zoTOns~Qw-xlZk_s#wz z4!`A~<{j$3zs^$Bo%H_?eEw|YUjq40xc-FeUqawtD*Wf{`V+2y34wp9@Sn5m|6_3d zP1Ch-M5(u4C_NTA13Uw;F)^_)F|e^Pv2d`lac~LoP&x)KDZxE_LUK|{3UX5N`&6_n z52$FEY3`FVa56AIdd$YoMoG`b$HmIa!pg?_s}eM9930%+xFmRZB&^ir)U5yV2iXP? z;@pbH@JB~u0B#YYp%bDZI{`YB4-ymQwfyC{{L2UJ7CHtd7BU+Q~G<5V^ z80eUo7$}z|S^(-gfI)~!^ngbSi&)hJo56*I_f1?54&&4Ec2c$BLnb~`*Pz?DWcSG_ zD48F!JbKK^FCZu+EF${sxwMR|oVbwT-QtyN9Qjw~z1Jcflc{ zVc`++2_F)Zl0T-T=H}%Wd@3v|{#;R6Rb5kCSKsipqw`x=cTaEM$mrPk#N^MZ>80hB z)wT7F&8_XD}prB@^)|`&PsW61WF{HFRoMSX~~Yq-;H7_wgh9t1CwdFd*A(Ds?oE z^#KohOKxRef0PTr#A4w=cj}hO47edYkNKrGHtcspd|?xHC_enAUOjio9k+<<{6n zvtk#kgm=B|Ni^?x>eq>j6)S!U6^fhgn^+?Dqqs#> zXF#3466I!~(h*?Xr597|oyi$6e+=5`cE)5#pd79*7=9DE;iFz+kASPosPy$T>GwM z_;I34`JKsp>I5^xXHfZjy{p>U!y?TTw8ut+CAY%J(tydT>a4Y?V{QwEP4q%b?pZYCdu?ug_ZpF1H;$7W-;03E@x#bO@{=*We)z~ z{9?kBj_B?8qPttx+6O1MF0P6F_~=Dzi2_LOw3>?pKT6nYxxZQRi-%JqQq zF-rn%{sVF-IEJq;le9eiHes*N$w~`hxwa&}e*675;+u*7Q>6xdZLV@{=*I|;0!sJd zrNDAE@qtD{y#l?uGKhLItHQcdh$Qz-rG}DN=fq<(_83ND>Gz+fx+wJH&IUZ_?!i_3 zmbmUb%qf({s1*3xspVl>_aN3(WVxwh#iHb%_sG1Cs+Roj_*(bTz5eX1HZ+*F{1Jn$ zqvV~cM7Da@GqT|hmNuiEHH2MSg4Xjx+_N1p+;WKkH@yXn>}c`(ZoEZA zioWeL^=R7YXP^w9+4C>6{`P)0d0N3|CA?-Kv`!2)(bVkQ8U?+FJAT_{tUrs?3$&+= z(-ife<+s2(mLo-SGrcwq&YlT*FG&6Bd1hpk~yxcU-IKv9|}oVSda`s1vJ z!Nt`Tp+Rz2HFn#Vcr=DHZkN$DU#E65jzzz0U(W1B@Iu|-S*hsQ=Ga%(!&o-uZVTMR z;uV_PgDC=TS;H+t#uSdAn$v45DKZm9X>+RtdQ9e&x^_^qui{|jJlm+FnS*S{kX}1W zf4Der*N>KdWr9i40r3YjC_Sstre{9BYa9*{ z3f-f)Q{BajE~mvMlFZ&&o%ctkVQd|qPz>?CG?>&NQ-~(U;t_l&!^BJh`aC;7S!*|L z=tvDBlji2)l&fuDzla1PUAM1x^<=}?&8jlJj#rXs+HQjy`dnpHXnYYKl}9XHdZBMi z>@7zh)FhTNnY%bgwE<`=_!4$K)ixgTl8RMp5JqTJsdj~q8ofAKD84N6!L3Sq7K!0|mG0GqWgRkc7DH5j9x z3P1V3IO-}`9NZn;t>dt`Hcnd)$e}2&wdAP|y@+=5b~6@@4T5?MXmmKWp!0u2!+A}d z(91$jy3tAtUPng)PIT7_1>-D9bW;-8GH8$ak@uS0~3#uju$kp??+Z8R$bOKevOGH zypUl+R3U*kT8CgO+sOwSvlME)E2M5MucChHy zxwm%sRaxcbf?=tf-wU;l0H@ca1MDaa+O zH&VU29F$L9SgXq@4p_>2cHH?aIq-2?n>l>Y1PScajC>c`U1+f1zlTWy`dUkFJcL_( z_;8wNdSLj8r7^2O;F9vP?D7+Mu$gi+rMGWFF|8Ga{;^=OQMG}RFlrh5;B;AzY9T;t zQje_V(TGWHm}KvB)h5?x`$mm4j)4w?@#BncFLL2$QF~XYe^z3YqD+e{92|JS@+qJf{-(?h_SS~^pyS4rT%+=m zs*UFSefO!}F=|5>jUt1@rjZY6+7dQug(S143AJV$v4D4m|6{1({7uUKdeT64 z5D7vAFNfm%YwAuu?Ax*-pSn)<92TDUG2YW*dHlwJNMbmIWwAP6NK!0b{ym@mR8#pz zrK9xVYF7hY%w~&B*tN{wDE>tkQAkhJs^5qE2E~o>z2fS18gi} zptQ+s!v(}xsmh`iJW4d{#y9o`UptLjLf~m-O}VGay02@ehQ}t;Zhq-x&(uU9+cqUj z?D~kKL&=X6%&*-{Z|DYap7j3MHMbfm+6LWkQeeCe%vu@?RkZx7;)WkZ4sO9QKzQ`Q zzT%X&aLwt@Qa|H>+dMc`uc8}ic{2v(upHWla%vI{L#L=6E;R*L3co-h?1HrXX@y=) zWj9{jxktj`nhFIU^lQ(4Zir*9?0_j|6sg}w+Fd*2e|ei|fjG{3alU65;D34OG8g#Z z`Mvj0r$_!?S>tSo0oj|9{0M~iI*WIUWeC9P+SjsA- zZ0M>TncEXBYvLZvl8R#UGqi=$J|V3uPP97SLFbc-hlA7hOCL)30)o8en`74O>Apsz zcg>5p9$_Yy7B6L0>JB{8{dA47RqmJ3|C277P8HHS=&|5@b;B9>tG0XI7Yauip^*iX za8AcNjWTbNrfR8+5RZ^Rn9HW^9rP7_ndO;pTKF-Ab}Ei_C?laN^os6lV-^wYLh7*c zqX$)zUp5-qQ0YedR%XYMz-kM_kpvRx^lPoKo~L;Cg^`#&(0tLaw@vj7zBAMzwfwkf zqHw>gx)v_7VfyLI8Fi87MH-lMg6 z#>?w?Ijs4>0lHu}^+K5#Qtfn~G*3j!N-0!f{K$#mwrhUbPVMDK#64I&ZTaVi$z@Z} z=>D<_5i=GOr~UUn>Y1WhUz<5wd|~w%T3LiFelHnq7-F=ix(8!gjnK*hM%Us41Sf2| znBz&TXy3h7vWm%3<_@;C?Nc;+f$1Bcp&&prYqSvocSQnm6&;ACP(;Z1ju9a$#qtaZ zeDP>SMCu(I#~2?A>VPNTBY~mmX1lMTW2Q~;`CXI+H*BZ3+&WwIaS61rLxnQ-y*H}< zLzDlXQ33x-{!3-i36xHeL)#FeTT`>>-23A8i>>O!KJg{&bdno#BVW?3`Wh{gRT zry|8T2NJ=ZpNowIokv$%2Gi#d(AB_G7sQG^N(dK2)piZPO&<@w2tt^;RgtRE3#Zbb zYo!}3V|@!N3bm6FuC;E(XGC8R)rDimC*(-LLG}_vJn^WEE7W*A8}u+o1PKJ7Kjune0$@DFN7-=l}FbdcctapuAy)1q#~Td70&PFuJtf$c|hAnlVqvOXnRrKnep@oVWk=)$kODbC?nS^?_`6o>O~1ri%2 z)=p;G_L!rB4KT^!elM{|Nui&;^>v4#S}SVh-X>7YW0t(}k~CB`-dSZ-02EpE-GN1;CTN5h z$4)rkgI#`JYS4J?2|2&E?&1J}(%6Ig`iY^BdUAUXKaN|Q-6n&0pLEv>1k*->1q(dP zFtGF^U#@GY_uvHDTa^vDTHgvLg%rWebViVKwB)2nq%)RQ0rIX~#Xpwn}zO^5ea46BU2m73sRogr=`Y z5ahIa^xRW#;BEe6D#b@9K;PnCJ9btYdIYe#2_2Aq-Y{Afme(+Xug$R8Imxgn;uaNl zek;H&)#Bn^^?+czr54#G%6RfnaT6zpUgKTC%iGOL_gM6YazmS%^2{Sje{QcS6V- z=7o^SU_rEIqaN8v-SNDog-c5JtSiJ@Bp}0K2#TiALXb35oZcZ(eQEpa0VY+{9dYoO zqg_#IRXQ|yIMMymH%Owr9a5zp>EiYDgGORz_uy4%$KZXKtd@`{PF=k;leCAaoT~%{ zTF;d$tM-^AtL-qJP^`8lqhnz2x&Mu^E#g!2e#9BLYKcvo8`+Shm)7@cWkj#mJb&+)_Tppd@|ap zPdy{E=Rto)OfAd%gpxL^em2l79lW{^J4Y(5bRsp+L>5EgYp%rYk3W^_JT)zi7!h;?{-8SSQm=Buc`4> zRCyX=;$sS{rE|_C9Tb0sGmIX%FJSg!<=IH&cOCtd6@L*O4f%ny_02i!Fm?xYSdW;y zi36Xj?8Wl!(OH7ItWq*&%A?Gh{h%bWG>^tI6#buNV(}I#XCTmnVU30J+eUaXcSJ}0 z>VubgVsKJssPxm(MpI)K_cH=Mc}s57DEwIdq1Ea|IQx9K+?bOmop6*Mp}C-{8(?u` z{8L|Xc5=J?YH)%J3N>3>z}DX(hQ*T|&IFI;XeHf~qxvFZvlxYrAU?n z&M|mKB+UGv+Iz*5uJcD{45F?O&UT2XEJUe!(a+>stKU7N=T))a%uZa1=P}wb>Jph_Gs~A2Pe}RRo`DIT*S;)6^<904wTol})KZhm%(%2SffIlx$ms>D4yY0qqP#knW zw&}K?m(!smo2|bvHr?mLNPJT121K3fT|G5bWK2Z& zpy=c~e;cv_hh@AuNxSbe#r_v^47}tia%~ny>1MIYY!FzYO(`t0eV#6(DlLWUW94kS zgX7*BQC?6}9BdLgtS8>3{4yb;2@Ihqsleq6N~mguq?dIlilq^R`dU<4|@!9bHRwm%!QCt~|G3xnS2sp3Sv!w)$OAndrbmir#|D5*ejXtR(gJ z1-9Ji{MBt|@^80OMP7>&K~B(nPsLN^;X*6mu!d7F%C)qgPv1Ij&o~v7nayQ+|9sFrHYvb^#osHFTc8qXtI9}t@3&4~CMRt|sVi|d%$cade3y>QkE6rp6!#UhJ4fLP&nKf;t^Kx{x}^VX!WMM#9vb++o~Id zVsPBP~BJx^62R zi@m<1cElB0U5sEK@WF}&GZ(jpcW&9P;YQbsz3yT|(M+Aoc?u-W;~bJ3IcrN_Dj=fs zCo#>UP!%DV=Au~HUH0kHO7e*FCGonPo`+0}>DTetH01|IanhvA+ECFm8u|S}*I*oz zt#ll6sn^8G3=}c>+5Zptq``&K)^{^~24~M*MqM7Px-T@j&1>x~Y z9lmMvdBhA}gtv_dvmb=q^sxM!v~;8H?0S>O64MblRByo0v?07{#)sUQioE??0%SD4 zcE!=%sdB4BFwH7g$pg()QwgFR(G5#{f6@KaWe@dG8&aDWkDjYVeDLG7Tg=lctd2^z zn4^7=4F?_FkMw`(kwq@e+;oRN-h_MlcqJEe8(Zp!@RrenG-)OavG_BCY32&UJKR5Y zOh#45n`gGY7rG<}w8q7iEI3mN=8a@(Omz45=AYa>7iK~q@C66w#4og8@e2_)sdby& z5_c@n)se{#B6xboc3Aln^H?6Gl0QR1aJ1-XNmeIn=XIqq`Kur6-~3ts-Ct65Ezd~l zX78VQ(8fdyVfsDs2%uKlN9eq(5D7?8wO%6@R%HKu;t6f#e{or^pHPtp7h6q5;TXIZ zt%3*=0$<#;cIDJHH#7o<1_RtiLGpNJC!e5W%I8C;X|2Rtf+=@AD{3!HE|Gw0_l~Z* z_wf{XWxme}36w?=Us~4b@fi{(Vm8<>7USEuP!yn;5I$&fw^wkho7F7>S<{6jRXXbJ zjGQXELo6h)3`riKfCkji1iVdI;u%C3)986`!@(uhwN4ja1lzW=k`ihzF0a~ryB~s| zVxN?<@LMK8Lcy!0F*k)g#~7^H}hjE=AFaj9rCr zpR-n!3d1LLqmueUwcP}M%gVJD9$R^bo7Fp4aW||8yO#8ExnjnSPE~hSQK#(sJpPnC zfr2PbPV0e()&pdC5h^5DrdY@F=;$ojr}+aEx$SNrP;Ro=nb@msl&()$^jW_Qc9Vr@ zXhpoUWxd>9_?8TjJi$insleHeaUbPYhz2!)anQZ2pj*ySvqrk>q&=5YcRgd>vPSA7 z;^&v`6yIe|Yene%P#s!)`-IY$CDidOLka3xUGcnR6lENIdChm?ex+@;^d+~WLrRYC zQZ#gGuq1{2hR+}x2}B9(DGxxoJnnmwn|xp>UD}ibQga3DmN3)VoO_bk2b`)fd6Gm} z7&G&l0e4B-Yp-+JaB!9QLd8uSd_fF!bQD)Bg5Yc|thS$LX68fWslINGyRX7oK@R9yG7 zZ-5i5#4v+waF^C5%2qqjDKV4zB&L6*MN|viNdUTb9o@@1Iy%SkU${7QyPB{_j_`nr z>Zh=mWj<_hV_IN+-|w4F_&V_8=hT=&ABX|_)w?bmO$?KW*PbyMqBqv)WpSrUj2)sf z86`D&G#vzc=;x$TA*P;5bF*j>lQAsGT?8eYZ75P=R6gD=0Ji)RXh(1H+?btAw-rsC zhj=@dt)F~iz3(|x2fRX^iO`l^-1F68^3(tRbE&$vDt+cMSlzBx_|7EL`2ZlFLshT3tr zbFw0X{$r`e;b+lgbBm)+ndIrKpTrW=n59B7+oX>wm9URN9CxDtfj; zRgvvUDsU0$F`&?~>(%fs{>c+e&!V|AdUFInTC<;*bL!+<6Zs4?eMN2DLUi_3V%VFA zRKKFVkXqX6g6|%Al4X286DJPVYrW+3v@$%Cx9YY8?4}&qH{$JkO~Yv#?TzDJuE{Dp z2e@hNHmR3vO==4XdJRw~E1RdSs?mh^ipjO@{CtTSORgIbsT1ljKG*LyBg=1jn85J( z2g$}L=^HJsvi)kd?uM3>!W6_w?d39L=(i&bdXgxjBd$;$36yPuPE98~{%F8ytE|Xq zwgz*_1fWZkXi)y<-24aM|KFbl_}?V0HUVBm2O|Na5%A{2(s2$e#1kPTaJI*S2(m`+ zEy|4mQ2u`45rooTUb4V}B=0d(PYGXC&=Y}jaKY1Ck81>Zt7o1^eBL#WB4{FsmmfqY z$L2>H9M&hcHnvLRQ(}6F2bM^c6Ksf{@!TCWSZVdmTu=J@+>8t9as3FjzBy;|OnHx%VkCyJOsbf8$P%*sGB_@lo?*+4}a z`>k}xLWtQ8B*5NEaKiHl+PW(SzT6R72YrqGTkQ981bh9UArR&fLFjl{hhfrD7thH32c-s zd_)4cpnn&a{JkuwmKzCt=jwp>E3i3T-(5iX4qV0_LdYoZW-!Aa2T1hIR62OdywsMs zRDaesrf^{#dwEx6f>wzQ)B*qD8gW(z)1+j9BWytz#~=hl>>pBfm)hV#c&z@k;-&Et z!YY2)s2bIYyyr+DYd{u(kVWlas{fGD*N6bG(vBGSp-y|8h$sE$EyQRpppN*^pT{G# zVc?Y2>OWFQzAA9mXkr9dfbRN|4n?|R_*^^}%PEBa_@5-_|ow>b-BuQ|)thQT4q7r~Dk2CXE~VUq%|MY9^?aC#WYVE6#YfMDVaphimkODWjA8c*4@c z^MuU$-`1Od`deolE-Bu4STu49zB|liwbZYebJ3h=P732=}YPf>NlP-m0J zT1uSHUUNlbl(4=vPMYGk?0~H_mN$AvWg9oB2`A)$R?9TYe1jU=?NW z&-lQ<0lv}y+0OD`t>&da^}CsycTaNMgQ$zJ>BR0qF0D{Zs#0`Pd{dZv{Xf|X2Cs3ha1UBAFIMQ%2|y;%#aw z%~Kr#M*q(tGM1+KG=L;yw8Ves!& zcb3L*NfG+^H6!0)S|i8@!())8)K<~(p$NYp1d36$c-@kTLMT^p(33?^C{6cVvLS$Of-X*hcaH2|pLu*>! z^vKXB{<)dmOZ>FB5MEuC{qAQM(pD|Oo(W9Gjh23~mGJxw=xZr)clr&6z_woW>b-i2DN?qQ2^QGpcuU3(;{{f);Beogh?wJ}0}EM?=Q_h? z&tEKQxKqc2`LsagYc?kL1~JMNsKXP(q^B+_-{Z8kZ_S$V4;Lh?i!|2Uqc>jIH_fk= z2JTEP9>t8IJ&hO9#AUKq*GEt1D#!5)+Y)>h(HIA=8)*f`{R{ zG3$uUHkQ$ZZV792%7~%N0d-lT562rJYuO*nGiJ^G@J&KVvz|~S*j(JtWC&|_BcXqa zMN5QQrUJ;d4u=Hr!95D7Wfwq&7)>gbO9GTz&Y=55VDfI_Fusxwn{;|Lx3@3q5GJuD zHj2Xwy}^LC9^Pq%tNB7w9+shg}|#B(>)al1cM_5u7AR0JOSYsa*u zr0ERG;0r+nyKt^!#w?Wk5Bw74s7|a!prLkI>byU+)qwlxY7M*&zX!Hj0>@D!f&Zf4 zvXg8`KxpypH3$zLwt)ne=*B>s%&7h7H7azYoUDIrtTZS>vflWz6@zXHX1pp3LLIF| zl5$|b zfG7<`3;7vdxsR@0MgFP{Tj1LOMSkwWi3*c)r0So?S`MW~E|tu`*ILiQEWBi1uGNJrRlYfjT=^SN0=YRQ&KK4r| z`%CzKB)xj&_0A)5M(B8-qr@terA^GxjES0-fU%jsbQi0DH2mgm5lU~HDgiG*KnNb$ z^SgOS;F)DP5(q3oq4!OUb475oL}iyo77;RFhPcs10!I;`FCKJPR06TrXDI%o>rur% z*4%$t5t(7zOm6w#-HB))18>?-fDXn{vy43VdmWX#7R%pvf$pbh?9H9j?whMh)YK=@ z^+I=y==|fIdDqw|Js_u22MM%lf#If+oQn>_I$3|b5&UW!bSh{^cdBzDh<4;SSb36VUn|@}N_|U+OU1wgBP|OZyc!O3Lezl}(Y_n*D9du`!A+sK z6vTSTs%qHXVstGfaAlSZpIGweEAT8o+SJYh3H<(2hSKScm0<*1U5G`o z`sBA&E#gSFwLaIAV0uq93jb8{Y!arwWLfOAXnY^$*E#q}maNr{{rvpOPVAYrq3qn< z>?m$EY~krg=pzRnViF*^ERCi*xf1A-T{w&Q=Ps<}S&x-Wwuc+tffSX81-0Q$0^SZ) zY54@0oqfIQZ+oWSIWon#L`{Zekr;btEoQ!1lsF)31%JMC>(GjW#F?8{WFws=Im@8h z0d_vB9=ehoRAqQ;M!}k$KiPqILEDQAVY{y${W^X-?48RDKiXCcB`k7D<-U=;Rkj`B ztYKGU>a^TEh3D0~IL)wCS4`Jw6?i(L6$zNa>8^Nen-|^&((fR|4<}knWARXHf$40r zPt{f_{>bx=J9Ixj(np;!Qb<;tp~fL0YZ3|U8vo{rMV%sNf#oa?V$DZ_2zQ3`=3Wus z%IiZZJfGPJVH2&PO)9ytGNo&9sK+A#Jck*@&IONVa$1dRLL-MmB62Q!xF%#FSH4W8 zbXL}n={3bYd%L;EVQCagZOuKzcN~N~BoAoe(WU~A#cci-gYOhCTV-2;!7->*wGlf%%CpMmGczpw5KMgJK>e@$dp7Tb|^PoOo#1r|8c(U$cyIo0|#43#*rooI|sKCBaS8^FP`bI*A#E%P%jktXRk;W#;P0K6n;BE zGxmPtuBbw+``v$^QTpW!P3)5jGZU66$QxM3(lwN8(fC~xsBC~{_Rv;KFqwdus1&eh zV?vK|Nk`WMS7F5#+8_b+b$vW?j%20G*{LwI+vjfUtZO`@LDGOREbS;k<&Z9nKj5KQ znwuNPE@;|DqN(InrTu=Q!Xg>@qJQ^If?;cjxOOh=yDVbtaPDBnzNss6;5ZZX(Twpf z+P;`}7ToY7%C@yBpeH+0iY(v6@)6h}0fK{~%G)mTbqNtW=%)hV%f0h=xZLff25r|* zn`IPL?hh8`$83=sx40^6(Cz4d)(#cuH`G^2>dqdPD`dUH@yecbRgx!OjBDDjZBl5( zqUroT*`eHm*N+EXlC7e#uzO`jrFPx47$Z%7dEYEPR~;%jJjxt7o;p`@px^8R7mn6p z0PfZ6v`na{EaA}j<}DZKlvtS#UtBu?XA~}dB&N|ijM$l;nUZy2FTR<~khjEe4zSB> zJQUZayXQ_v)Zw$*ou~WVIw?@=fLpjt?7}5BX8>@P#2Y#tr1Mulnt(1}lY7X!H_KiN z_Kh6#FnJ#4nA9=4oH$?$pPljFfaEI=W%oF23SdTr7N2%}#Rh%M2nZST1gCDD8rNYv z7EUxscr69Yws1Ba2?aH&dMpJfUy?fcH=5UnESAae)T4WfpYK&{032bK7JK8TZ#MvQ5jw=YY<@G<%cVatlu}MZ8##ZxB>Up2e*jX>%LeU~poChcp^RsL=yNX_tp?~$+K)+yLG&=)% zVwgv`_aKHz<)E=%ckXNc^>Ndt7|hlxB7UAKzhx7`F4sCVXP%x-Uj+YUb(i-ixuwSq z!g!i{8@0j26xoV(J$$Qk<<)_T|17h^bD?j|-kX+Vx(IS>NfOE#ZD5CbKY^U6h0vd&W^-39hKu z(jwuh(-Vt33@RbKlHz=@UkRYJeL=Am~MQ+g3U-y6WgpH{(P;} zwU&@+63gY>E{o$0BL?x?xVAl=4==Gkj251g4O|!0HSoSSb^{=98fTM0iI&6C0PiT` z*%1<$W*yVTBI;w;?Mi7Lq5Wq(4;xG8!ZEtj)d4mlMq#2Pix}K<8+9JN ziS9~-O%L=f_A?&@F5=5a$8VV?9l&#$*lig#YMsrgIssj49PQ-hTsBwpK?kT42COZM z=jLyc?5yF<>pp@WT?@X|QcY_h3!Lgt&_I=Anp8fe+_!i!0~DWzpBNa7L-}3?@To-{ z5t{R4)!h&{wT+AFDYGi{7il=hfAEqmv+>PnftuC|Lf?B^NW8qFtT)nL8nCDe&@_y_ z63=Jqn3>!Lbv3`d_k@0x_MP_Nvb7(@l>K1y_j1U6g@a{%lvlu@F#qp~HPY}EuTUg>n?>K z63BC~b1eV6bn)(M)|x^SGD!a1)&=tfRUPeZTxxDDwL*%6w_4W4=-*3PFl;=@cz!-x zp`!p>$>2uP?Y;WqAks5k#4RGhV>lS%|2P*WCTqyokwiG9S3LW4wX*giC6+y4z+UwU zEw~s?HMD>B9jY%oUVU(9cE060CubXLip6pFdl27gH`Kj_^zc*G;ti`J4aa_g?k6E) zB`@budG>d#NtTW<)lu|_ncUaH&0+D1Y(*V^ZaKaNeTj2{Yl;O;|eAB16x zm|a9$!@Ap2>0<2nQ2whAO4bMq=v-CEW9ZB{wfm;92sMF}Aq@#y$0i8(bnm`i^|&L7 zk|o?p)-tayA3qaJF=1ASCjmr>CnfA07rqLT&5Jc1nY+$XT{rSq#`At(!_exXHxpTz zq#bXR2AuUazTP3wKEnJ_UAV2c5L%7*!|~HFS9I$%0VL|4$|wbN5XYNN`cV4Aq4oRT zbwl~}IfGd_^VFrw%Zx#z!kL5}!#gBsiy-_!s;x}cA&+RqYek)54}!hM9-{-yoQhR9#3VrrUp&D531j){ z8Av-~QI|9_2u`|Shd!9!-C%w~qjSFX;?VdVKN7eF(_4@lVXjM>n9E4q*VXN{WOvm- z8@tjvBS9PR_GiT@QLh8J}MUYgT4Syu$`}ylvrgP{erdlQG>R96}L*rUsc47`Tpv~5AWKxX;8Gd2w8N=?TJS; z%t78vQ|!Et+C1z%+9hK3YL{Z~$}R=a?GkS5C4G7k&1SHj{LtrPx`+K;;jM_DxvxbQ zD8N08N2Lmr2nEf95zq~q9rP#}9t5IXg@RWLjBXfFlmS^IBb+PY=B^0%{(7tWs2LK_ zlKil358mz`$uO{br7G=W#5(4}2UQ+^bO(*glBi6(F zZ!u~cZmQwQdWp@swxd7U!6qTkLX$Mqt7}$@0P`4>Wwlvq{H%Q9bcPM`9SM-thB@Td zE;t(fAV2>?F-u90{`j6>Be$QE|C?OhNWMGJ|#dE6#E}59e1118YT% z2zI95OY8+NaPVBeZS@^$}UlAO)db-wY3;j;Q1<5GjWhn z_+7!m1_f(*MCq_Gxl#$hPwR6O(s(3{dHQ{-4H**~V9R3g`$G{8< z8HFP+)Z!M0IyU|5t?^!#2(Ghu)@$M?1i7CD^X|(f$*WwmA^3|t@M6ydm#`sjPsoZX z#<2{8V%;Jbht6(aW-fj3<)Z6@b}Z?TtgGo<4`I0(>vQRTKmv_}$De4P(k&5zh6&C} zV>qyWfG#cX=qia$iORGl0Adl|^^lfu8e;r>rf1nEjXL~(P(s7>%Ua<1AOmW6o2 zg#-*y5A$%Z{!0XVfNG-C()ZzyAJnbO3PD_T+mEYW-e;Sgy7{y}VfJv?@mtM`SOpJE z^Yfq(Z$^Ma;t|nI3Wc+X*ca9_Y-vaDE?kvQnb9?(5e_8O7c|m>5w})~er;wRzO^Ba zdIuezuAuqbUr?gS8*dq@7!@x)N~Ob_3MFSRS$JbAyA^TbM$(*mCK(wz+fvRvvhZ0D zwJ#qLRQ|&*(|J?|50j)vdDJWh5fQdCB`TCipy%x}!8Mk_FJ|O(Y-dQV;C4-c>x8f7 z+?a`C2VPH30})9k%Co0Y{c+w93n84CF+VM>sT$u|+;%Hph9yKmg>Z*^+V*~A!KW;4 z)9?4*EAYJMiI;r|!VSz=p3xW{Ini&aH0JdTXR3*L8Hz3}79w@ArRh(&WXDFs+O1mm zCH~G!wgVfA@eq0HVqt1OZ3(N~1;Oatc9%kfdksG>^Sr6nqT=E^s5$w1mtTu%AH}>S zt#0m24Jy&b9V8~7b;Nb{^Nq>aW?U(|6Be(sCwE@ob~CdYAj1oyghIAPR90@VG%Ia5 zOk&I!!z#i&)6G|a4f2Z;x?TO80`E?+<@a?J_pVtVY+lY|nI9r_3cx5||xt<%>*GK+H#vXlC7@IEIUY0?LNS+v5_GMq6D~<$C8P8aiVv)aeNkGk@ zK`K=*-gEb_;`Joyd;V`xFN02$ZV%|o9!5Q7vq@F7d!jXqIJ&_6G5EpNt^3w%?oxj{ zH|)s39{SMh$DBzc@;zdm!7BbMz_n-TTlFK_#60CM+g_1Qj4U5>;$pOgcR|Y4UkR{x zDq)=ROs&qxd`5zq4p=8#*Ozm3F+b0X4?NgnVG80RV6RUGD$X@8ENTb?Pq}Ard=79NlLNSSrIzYr!GVcr`8kh&hN^@~r)~u}2QC^a0 zde^lTlP8V@qNSFL8Ls*78Ch#nHs|MGW?2~y5|XzAZa-A$V=~XWWtRqwoUpgw&*;s5 zbDWgtC`fF-S#Qtipo=&{3;{SWCqVEJAh-sC2M7*T zNN`KxZiNI0E(s7E0zpzp2=1>@U zoOVaG5jZ-Ut)mUc5Nmzh!;3?^=hn~NIi3&3?jzA1U#dR5>;KAwUCc}N=*7^_czSf> zCRDLhkW)=m*h|G{C%Xw3TZFf!_e!AyMJSys;Gv$_mY*HlLp4EK82)$yeeRLpzUoOX zvm5VKc&rZ2%Yx~02-do?H>_7_43Oonywi@k0b0s|`ee8XpYvIROpLxXzXS0z<`IH) zF5$07c^(^^=gF`)4fGKGuh2Rky#PLQ}ALNQTx~nd3Ob|6gx1s-O)YwjNM)_w#1D_ZI-vv`}yQk z8BVx;H={sNh424Ck*dSy2G{hI{FKzRH~BS zKqyG(O&-5x4(y_8xCJIq{G67O(#V%T%-d*YDYxz5 zF<&V5)Mf*1EX54FY+D~z&tsDq*(R#OXv_i9>+w4v`Du%}V8NxU`>i7@Q{hE81Z4q*xuLf&g4LJLpY+swctK70dq(ia(bK%JKNRyh`s7jsFOdh% z{ez_W|6Y+LtEw_|dv38x{HTlfXWDZ1*N6|pR=pD@y?Z@~wX2`Wj&caizX9GR%Q@uy{_QXUTpJhPf3z%iFP$>&0+zk#&8`EDPS-fqso za~10DRA4P-d3`2_r|DCI#!+pZmW_4296%cHS2A<~2-C1EqqJd-9<7@huqR-Ez}oXnJP@Z5gyX$!kh$MPmxO_wKXx2{>Q%)dk+ z2@J3XaKoByp4*<089ll}i6kI+08GzmoO*@stya7Z1ebl^m5bi6vz^`W2<4%Ev?s7#x&iu%Z^r}f9Zz_P9s7XAYS2|Mm zWW?bG4);E@;Sq0){gUG{lg)*t#IrB6?lz)Q{YtYoyKWuU3FTGgqewoU@rb9hQqU|? z+YP?}nYtbvi#9t5O4M*Q1lRLT*=={MO^7nXzM$(f} z)d60?`<2E`qUCWpv#$(S4lw7ejyrL)(@62Bx;e4n_Mh4P-OzH099t%moPh)`?2)b| z9?p;Q4=8INyngZI3KE=SkOu_4@whbmf zuXTO)Ez7ONG+DFs*ar3E7)q#iD@q`Us(|#d%B_NDA9zRdu;LTtV_k#UyYFuMqy=WA zFIELW(PR~o!QafRxZHvzE@Lt-!`d{j_3G=lke#Uoj4>yT>}1f*DwIwzXs5W&dnuJy z;o|`hj}G*kg;|JU%p949PUM)Xi!b8D*jB`9H;sAd$uK*Q91oLJ;BFWti2wsxGJiLc zI+%VD$1!x}mJYs|?vV1LH2hsla(T1D|Xf z`gY_nD-l69b1umWdnkxc5hW>3U7YPU(K@}KJx;FwwNwx71Pw}&>4ZGq2k~F%j#7&q z;SL1Wk+^@K%!Ue^65wQfme?n;?=(yq$M{%Wc4xj!D6Ehw7$?b9-IMrg-UT`(UVXT_qA<}OO}PCLlV;=JbWL$`aLTRgk<8&8L0 zvmt`dD^IdGqY{;cDbv0@E4`&UdNk5jlap!4Y?{ci7Szj-vQ14S-kkcy5OQEApN2ts z;+LJ1x^xhdB%Qd(uC@m@y>%1?#BS`*KSJZQSZM`>9vFw4r+1VA!oO(xf+K}R#!>1C z+O^hhI!z8>!b$OMnI7du3sj$#WsX4h;zRk$(qfh0Ur&NWh0)OhC#q%vg~tjA?SegmzdF#fX*mAouD16a$!9MXmW zfa)l1y^V(m{{5Q;X}kXurwOdAKGq)7gLbUS0@=170|I5x z51?YjucoqI&JHD+^Y0EN*;w>}gaBAJDQS4vbLVqqSx9zV|Gm8IY5Co}_U5WPRMxcuad4fNV|>yJm*lln7e` zrXTO4*e)4hjlU*+7kflLJM%S^<@JB!u)3`~s*qW?VD*@6PpB|^-HZK}cxQn#sS+*FgLWH z@6EOx>ZUIq{4Iupl#ylh_JoUO$a138K-dceuyR|GQ)_L0fPp=R)x(;EQ<)K9pRRDMw`_{j?b%p zcWH_$i>V^;S4fM?GAuw)XZdK}ok5>ZkM#4ge01p&;0zM~-f4qZAq8?8)wG;o4?Z{V z=D2+Wh}#{C8hmo?8=&+sgXey1?@Os927AwzphdUxj!rR42HfiC2OmKD9||n{^5zw= zv$k>RUTWPyR4c6QqTLIo-U6lYh#-2WgMdEm!@2DEX?j~HvEib`B6G35>RFjZOqxKD z)zE(;WGErPWUcDqBdcaxTxW^M`=$+5ys0S$G z3L+=KrIuav=WYgEy%vQ`*r2r%fNGWf1|mQ9PPyUUs?Qe6Qi9JjF{GzfMiXEB~{VB*ScoFZZMcfE#ZjUre<)4m&e58ks3;??# z@8@0)?QTp3mjye4OGXNuY7K33bY`ZS9=_H*VzW-q0BN`!BEv7#W*cJOjm&1r2; z%NM-p=_Gq6gGODp@NX|Q?Lc`CI9QI!9W;x#NXp7VmKgo~3`E(HCq` zcem%2&jX!A2Keo>T>RT-tZ1BN>0$D-J7=pR-rr7KgB3?CWdPl)51n2^gRK3Iu?I2B7rcX_CO15I62Tp@ucNxyqLW1n4;aYP}Q~xAzrAylv;TW+2hJX1jV})=bH1m2gGSV{JI17Fh=PAJxjTfAv3p zwf~1chz6uywN=>^ark!t|!Wi98|7b-;hex ze(~{C=&Pns2MK42gJj}r>6noQe}o8Q7@xJ z>zR{8V@(g+epp$(o{o0636>~iROwpu^SjhsBSeYFh3v#@Mr(JUlNkqNJ`ZbHe>K9n z*RhM^eQTcPp(eKUXc$%@I(3fC!P<3<95`2>sdaI^^K`nkc7XF{zE6tPe)*-wtrt!` z(i7nCI8q2Q*SmzgsU0gk(C;6)Fq7n>Fco!w@6b6)ndUg2oHN~Zy`Sj??d5C=Gc~7p z-drNB?H5&}y+|Wf*u#XHlrBDM%YIf(A5Q@(lrvVBH8s<~6eMX$Po}4Qh;pDouW{)HBH-K2${@C_wvwO6%5xRPaO-lTHDjWiSjEWCc~Z(Xc|yjPPQ%B zN^rf0ttdV09%)bM2t9VmcYYYps5Mu(&wU~raEdg!mepKw%`=@NQM+4 z#MuO*DFm5q>(f})aoA>W?UB3VKEz(VN8rck>&}0>W%H7mMyEarBT`6Fy0_J#TBxpH zqKdTnN)97tx;Vo84PUwmc|>OQLTUHoqPzKI$CMk5&uL`OVhQ8OwM*7%-|29V&{bHV zCRYye1XT@*PQKTqV)Zw2HT(RYHBB95Cerg{I^BBdrWtTA z^1rf62gr!>!kWKr$o&cM!db-s)o}Y)+cvxa=`Y%-j%rqeD`u@mfV_8lzo@dq;287P zI=1{bP;8v%DIh^64&IGAY*0SsU%NF(x>Ht+y3@W^%LlMTIE}oseX8H@sYs$OD{A_h zkp_C*sR35r1nAPnC^ecCn~Baxwg($R(wr%8F$|;}uKA+a&cf~l7j8JzN)$EcieBD? zb;YQzsk6QS37FFI+HF^ZVxn0Sj~Jt9Gz=bAgjg1UC+FOP#!1g;iD>J>70XAV4mT7j zwi-AXWB^_(7`kR7N~;Z-Q-Uau8oa5fyCJ;(nGG`wg*IbF8}!l&U}`^k>-eepDPYLj z;Mfm%9PgqEbitdSt_0&|UoghK=Y`uM_@CcvkQMLEFv;uL2kqt+*{UBEmIv;&m&YgM zZLbf{+1RX(jPokEO+Ly_aGsY%3smg$8;MD}puv9+E6XYwI;~fOBtZqKl(=)-sXHs9 zt2F26G6uRYF>rk!{tR7PJ=#xY$ccC!VeVPbS14`+WiNZD;P~DK@aIAzJmQ zh*U8zsmD*J7Yx!N&92qKL^_R3FK(noY1~{V^~=)QM6K z74u?0s%y%{rl!Ne(7lPtJszD$oVLQ%v>?<(kWn_e36|0eAJaaw%j8_fX)`FJ7P)s? z#^ex%GxazbA{84KEAr@==uUnu$}t5_q7dah`peIOS?t>?m?hR){S6f!3bcDS}H8sGa* z_t9x-yCJIMhSW{t>>%`MD9vrqqsMPNy`Su|IkR4s!$hEag-ZsUCLfk%7aWK^!UQ5`+r*}9yFK~S`^%CLNPqUVb7$91V0XbbyTR{!ioaWT%;gC^3L}q2nO3l^2A9$3}L(@^pt-oqY z#@ar6+4FfrNw-wfxKvh~i9Q;%t*ELePnK)J&dnOgXh%aU;`eeA`kdhrmApori7x3| zLz3$xvjr`?aroMdQt=QhHMk<aFK|Zw0f6*y<^jBe zvrc4$)mk}rK-LcV2OtN_p($#Gcc4Inh-wq`(Kz9W+fg1vn)i)nZ!cR(*}B?_zz}L* zzgEpy(3cNET4NioM5ic0>B}KaF;T1ZG=by|xfV&I6ML>$-QN(DDlH}`iLkXI5&>a; z8ufxJ9`<*Xxd;-UX`3=YiFVaRT}uEygEpG}w*CiseA*z>eN6KTIssF)$yLhy0qQaN zYtyi{4K2UQb|}=Q_tni{wO!|7m+d7k7Rl2zylK{ar(35HpM&C6pck^{@y*o9Svm=X zj-Rm`2`rXKTjC-8#TK8H3(L7x)Ud+e{NO>b*L3v~K40;7@Gx|MVd>UBr6xL&VBX9nPlS$EUO7UBE@_DC{ssT zKDu|tkLq%3B#9FIV9E5sOF%)s+-zeLKhhC0!Zy7+sI_6)0}6WW_6Z;h$J=?Rg7 zX=&wV*Do87i0T6e@vJHagd}DQ3aiCu1@XC4JYu$Fo>vg&NvW?XD;U_aUhrBJBp&66 zln2G&ybzfUmtK5hf1k_^k7TDf2W!ZyA~RhM8lC;4!Z%s9q`4ugzAncj6P z-AVv5snRMB!!YPMZ(PV(zattz^bMSdhx$o0V=oc%k ziKGuM=QQRa^rZ@^Cv*a;ZQ<_-(gLbF>nRItv0oND+g_Sqaa$!4mJB>XpoP)fa1}*F zw~i8M^ST1%@8t0@!sAB;2e>`8_k5(KHQv>&paqOR9?suNDyyh@7G(}SuAO!-eo`Lm z{rv@KI^|ed)sA!Fn)*7IUbqXNM^vN@cCybGg$y51o$eA9RDJg zN&FqY{5_WW9^nGqZN7z{{FRvuW8TKSg7u8ZDZ0A&MPd#n&_)L8aDbIk(z@ebZt*QH zLIButyffJ8!P(4WDAr6Sx{m#zhqo02Q;YEMqF@k_QV=#9;91vq~G!N_RZhC;9n5Qzq-$jRJuah(% zInh9pAooK%`la~hNioUG6Q>-+qjx)HPK zO0#O^xG8iR)jo861`TZ+#85(BRNP*R~xSFJgDKQEZ zQuJTdk0<+tV_)c3X__&(Z-hIb>@tfjQICis>}}51)oW;bM*!`v=og|c3{`srKr%@P z;;p4n;>TVt9j}nQX((srhyApq8N&h;elkeo@!Xc9!0Q#!$A(z9#?tkavV7|0#c-N9 znK$FHn}QB`=p@l0!z*5;LM2W&*`<$^L>_dO%em&fa^%)?H{SD+Y>Fl3$C@h{DJ};& zx+J9))QE=U59B2(o*unoqn2keMC!GM?_;d*MAo6SD=)=alb+SWlegwcIf`&Xcc>{q zk2bI#+HZ=V!#zj>p)Y4BXv$yz)SF=v(9z4n3nx}*v=F^S&m9%!vvw!yX&Qi@cWPEo z?`pn^WB)K$#(f{vg?nP$S70YERhR)PvTvjZQHiv^h2bd8KKBG=Vr=X{rXyx7FOt0L zYE0o%-OiN6`wUlKq1pbA&Cp-S;DV25T19GK33GO1|G(2Q$^ zSzZ1dUcg=58uI@BR_327e`&-;jcls1^ zEgKEf&RrAw9EIg)D#!7ZzTKjZaU>%Fz!e%YZ zXUH$Q0D}-Eb;&MvVJCrWsR+;)pbz>lHJVQ0ep?K;--x{?MI+@{7j5V`AW0Wt9Lia)A`K!$30o|_BHU}- z0aD-B0z2g6tnNPebb9YF3&~|?YGfZwzuI+->aT$)qPH}UPJ8DtNVAoMb-UbCQtqy` z1vJ4T@vygex3C!Mq6itC>=5?!G5Kehy;{O)qbRP5?k2-f>J3px@t`+R%hTM~*#zE($GKmK`UE-2)l}Nn<60YlIDnkz5)J~ z;{pZSdv0k|c&!aImM>#+E@5hw)sd?T%t_m%-+J;DeWjZPZ~IB3mIi`Rwgk5Ctbf902|`)*fu7CKuEPsejE1GBa;6cun4 zv}4CT!$PRc%JHo4b!}(rnD+2ty>Vkj;4g3#091P0yxW(ubqdaTU^iH6%`Hj%;cG2j zT{){E+HgYKXNucBB&^5B_3kTQhi^G~lUK~g9`D*u0=16dt&&!opcfH@u_eK{^P!n;=ji2BNm+lVy>r-|8I zgk@JQ0w|f;1Wi_iwLGOjrU-M_LO1<&pd1NXC=B8LE|J~batQTawU&v58|~fD0OeVc z^gv4*YqH8=$XK#WprRUhIww*I@9}?90vQ>N&c)$dFjsx9GD>x~m(J!=a#K zJd8^Nts}l>g(=(TnaNs5_@S>HUzlhHJ)yLJ>?=D*3AuKTKJD|s9Nd>_lb)z-KUe#P z&7LT95u&g`+VR5MF>S0K=!ra0En)Ry@`p2eTWK^$_vaIHs06nM)CQuZ?{?T!NmJmc zF~Hm1<{VJ7TzarqZi_t!nXv?Wk*n%mohNyjF~#Me-s3^V0Lm*WMeMl!Cf~}UGWr4} zCDX&_CDh4YP?M6_6Xc_)J%q(-+^_)Md@jNjQ=WHlHqbCd%Ntc5YV27S$y|ZTBJ;#q zx|5a@6piPA?tR~IN0gb@Xr7%!DP5lHcdrG4 zsns`JxH?1d>GJ2w{ou+<@Q`FdnPjB{RI+_gst9JZHSIl~>rwD^=}FXsdnuH)d{hs; z@1#sCTiY8a%o@izN-?98Jr$TfFu`Z+w>ycZWysqy-@bc?S4^6#Aq@|1&V2mgSs{aC zq-{`*>a!WSjSnuQs$$|Sc$b>dK%syfu&4u2aj#z+$|@CB)G)MxU~TT3YdryUmb&UB zmud^|8CJQE_gy^09=)cK)DA2iuOD`MTH}{l6=4$5L8fg&zF2+`d@K$2#=i;~ohi8r z9=!MsBw{_(x?;?LP?MRxx@~=y%DWM)6=egz1&$ir=Y0LAuy4cPS|^G1V;VEzB0QWx z&+JbzU@qr4fuNf^&z>6cVA~xKp|}m=p}9s@0p_<*M=(AH`dtLBn}9y9!t$QhoGOay zAqMr>jJ_KUI9ateiR1@opFLZCgDVEkT99<>fM_}1Ep5`l1&|rTgdzD1#8d<2)IVp9 zHNbBNo)zguYOJZIP#;vPMM0lVmA8$_!9_CSdhI zCQ1^JcmP&A`(sPA7=k!3Sm*QYO`nAMb-c=)p3$BHw++89P3V)5Meqq%Qf}Cv!U0jK zA62!LH4X93v4f>jlvY^XRqvwAP8q|A4}3k8FJJL28~_PKeBc?|ME$u1AOHOhuufKIPFGu)Qhc@kzSM^sq zhk#KBOxkOFYrxm|Z(q{pb-gV|JuI=?;C@&>1B;UY_@w^Y**lU~@rh}u7}x$<5#6U= zg+fHV(hED@Jyc3#8=b8(tmTptvmh7 zg!#ta)@`x`S+UmZ%J|Nw*Ct$Y9&6csyAsSVWI*@$SBiVBg3sBqw59z$!`uvi%09A~ zbC5M#^v4v&cZ~Yx+IZ-1-8c^iBk^%bQTxkzDIJoMq& z4W%umu>gh-pjwhrrn2+o8jcyzs%;d9_YymS4x4(b0S)c&86Fn;|WN1^zNrmXk|T_50m z%z$T#tik1JI~~&!)B4@!EL#%=KcB);ZxH$b2hnlYyB&fY9X;LW3BwZw`ZkA$M*@vz z*g^3vhPNfcses!mw9q(DXZx-DI0@&hOv+;lbBw`j8e>f>a%+3wPG#?f=6^P{%{*(zV=Z;nhdX`_ z`g{fJ<&L;aTtG@9cdREqf1v>RIQZcl!nJ|`C zB&z>=WAMSPVzv}XI6eN0FJ0p`UcDuCCOGuLmp{D4u;xab;8fIoP$z_Jp`pQIgnhc> zws#*Sw?FI9`%dC6^qiMC$@H@e5Rbc@ABEG~7lGiwdW!njC4cP3L>y(cR7xTV<3qii zzS<6=!Ffe|s+Vft6sk|#L(#V%X$Np@gh!3nPP1A$Z>wGE3~1rX7hWawSs+i{<~CYW zB?jm%?Ub@EGo{`msbKP*RfAG+X!Y>;vr{(^GVb6rK4vo+(F|pW^>W0(vm8a((pW5@ zy?C{|bskWdLWi8fJIvZ8hMnwS+}#izI9SF%rtCAdeR5{;`8SaKhfNQa-#}lW#Y@28 z4}4!rdKS`ktg9@)kbad$bdD`{bryiUi#q&94$a>(CAfYq)>1!ek)(P$0u?&|*x-TM zp~KU7XT(P`$YqqE)1LURmp29jnMXZbig8>aD~=)BsVf>0!Bh66dmYJ?1UWIf=Fcv064bAsrsSIioP5Ch(Xzn1)Qj1JGYwi06 znduo)HYT*m#VN!`qv>hzE9ir?Ub~c&k^I2prj$?Nzx71&sM{Y$#_=$c#mQSI+w{ zK+S67E2Uf$pEQ|O!0i$KguEiET}p;nKHBN^f7V*WN6Wul0{3jCaXGjBss;Zc{b>jZuSNgxvd@im|`1=1XbxH%#N?>GR3 zI^fY@O?<7oTAMxF@BP~^MQN}%iBGZzEj-?Cd^knxr$F>&2c4Me4mrcy(dnz4~c!A%@#QFT;P@3|a$CJZMSefb|z@IE< zf0H^HzO#qkaSbc`Z0%Y1P7fjwY0w@#Pu)p34Y!$a8feHbn2Fq~pzsw88@K=$bqrbd8gVXPfUQxtM@9zaJLi$L0;pY zTIn#BV8vBs}8NYW*7h&}9+DuiX<6K3EgOH61AsHWW?B;Y}oL|LDRte~C~i8($u#Jt;1p7mvctHj~6;jCUMF8NE2qD=aG}(A!x*(HhGN>L8=& zDk)WtS6@Y?<71?&RQ_h$ZjJUxj-K6#4fl(wStCg+BhN0MQ0~cVDm}dk5im zX0hz9AWTb18KSpD@(;OM30c+QfF9+e3Vo|CMSt};hy zcjxAPYp|QGObL(_^cKbUSetOaa|AnSg|Up8)+M$pV+7?E&?a<&K<{u+CRL<}LPi0v zAN1>w2(g_cvR=Is_So|QId3w}^kX*6w8a#h$SRcq5oCE~!M44{G{bt9*la~eHr-9z zLyToRF>*!X{dK@zmDV=+LH8L0P24`m;>V;of~9&`6FqP(^F2bD3Vtmd^7|?NPd@*q z0P`jdvk1t-t0vu--YMz(v&SkOSad< zWw2XN*l(batiS9$P z_c)NxqW-#@XZ`OIo`1RjzwPGwyNc)k!;eixPglkqSVC{Ff=MOYaWexLSS;Ote-F1$ zeE!rQL}y`Fp>Sk~j3-%*o}dJ~--LPv*wu4S~Ber;MEb@Ll&|L#EcEs;bX2*nq} zitzs1@4$FLnT`)pNCava{!@C0>?NnJ#E>$%0!28Npg*Z+fDX;%BkkLHntD%sv9;+} z>oe)l4{NYRdOTx@x&|}P57Ne&N@AMljqlET#MZVKxW&D@Q5|4SK^Xak)}9}27IpT_ zA}vx(O(FtV@r+pHyQ>cOvXmwSJrOx`oCrk=i38E14@9uG#|O%DK9YmuUrT&u3bs%^cYbYFQY|M>Dd^-jkj1>FTypPI7}(Dylqvt0 zIs0XzQ8tniLU}&&SXUX=%}_elFdauPqSLy3UpS24ft>)4BKp%UOFUpro*)jcuRa02 zk4N5@w{eMm9MF;n;M*sRmnr}c$)@r*kXYl@1F@D8iwxZ2O9kh~t2=;WAP1<@w?F{k zbKn3ep?p{XW>$}i#=iFZ6TRL0INUV6hD zV@XwJ9zV_1@2wL>e`hTLPn21_X*r+F&#{b85>3U8Oecx6#oCjag`f&-yKh^~5o$s! z_J5ga+J9TTeuZc~k5_dQ5)YbaU6CCxKHD-bKZ3|$;Ue7WxE|0MGn++#X^XxWj_|j8 zQ|NNsvI5365bQZ>tyY-K`cQv5p8@mjX`H&Ld@kn;R~(qx#evRvY`Yf;y*jOT*C1cQ2hp1 z6ZeIg83say1quef%e_ousPE-iZ>cQ`N02_3-_xK&^xs?Ds9-{khEci=i#@zdR&{$R z?54WyW>Z4hc*LpQ(tZ3K;L$p+aUH*@HgW?w4$fX?X^h<}LNhN7c3p~`HqV6Mh)Zf` z*;NMP2xBb??Kt|_CQ$tYVL=0ws|L!Wpt!rNs7tvb#^k&9;DY)_4`kD4{GK&u!?@lbT_fAuvRVlb9topStG^CgYP^5Bc74; zvexs)nyaS#+CYyx-jdE&lKh(GnYLf&5jW+h{ud~Pur5@fh^1Hu(9Be{!RR3Xc*+JD z|0n>Y+)(p2H(M0BC!*hug%w7TLhU_tC!= zz864`&ye|KO>;~M2(1+-ik;G_f8YPh%p*vVN<6**fL;oolNs(GjMgTJydpV|A71Xe zp??Qb`+Vn&(>}K4?l-~(QPru{*Za%)3ky8!`3&0}pZk}5aZ_`5zy^o0czed~=M2ZU z^=V2-?na;8m7Ceq44giBOsF&SVuhK-vV&iGK3%}|df|el%Ji1q0A=_{(U3#%C3ex; zN+lVF$aXf#N$c^;Ql47TEyG9AKRq^fBFi1TeXPILD||7w*bja!C6P^;KZ_2b639T; zvv355ysD~eX_-?l(W za!Itbx3(}R!DSe0mB@JpdUo&l6^4lWs=Wq@g5{IMrD}ia5S?DDwh}3R_7UpKe)~(+ zBDgSERY&~zHEOL8{RdkdU#;oN14c#OuVez17MMCEWZhz-z25sC>%Mdq!!GkW zg`+=cxU}mK-mCmtbj8%EeqDWB2MWg=y~@J)=(9I^{l;&O((ve=P#LFFoGrlH^Lqu| zH4#}HPZENsBEupdH0{fj%kvygq+7*LCiVzJSrp0-eYP+tUr^fYGuX|z9<_< z(AEpF#<;0k5x(PZ?qeEUJDGo0T`5s|m#PzHBqx-2<=7#^h?-UohZeAJOq;c2?FAAG z*wD>3yL!#6qEQ0~fqd?>A~w_Nve4yi3$ODSM*j_j8NK5te^UDi)anCqvf-_tkg1S; zhRCPAJu$q?ePxTMq&wSEYK5d{QlTx&pie@&sI`6R4kppA(3y)LpnhvXU&ddv{w8dJ zXonbfv_&&qmo|VD12R@#S_J@n*qIHJ2c?C!P2B3_T)MCLuOdWtTVG5;p2X^i`noJ0 zd$Xh>Q?TVCtF*{*mS#j{U>c5k3VL|Tjh!aJ=Okve*z zSrOfCZ#R<@_ZB_+CaF^9rRv37vKqeNvSPfMFJ)m&d#&CVsK5kvz_~ge_dknoGoMxG zN-bl)6nM^=Hw&rnwR>-y#PdX_(%7Qeu)|Sn=X1k&@zP~^wnfQ6rE>Lfkqtwz(d{sO z%zfx&SCbi_1EMP$uxv|$7felZl$N_p=XQ}$F{r2Q9Z47@Ynsr__{22?<=sud{S^w% z6kks&qK$<4C!@QfPX{cEwBJ#BvL~IV~tv*Ky_|+Qz*xhYKKbc z&elhCovz$&L8tB3-Vfp!73?Xe$|T4o=+K~D9pn0h=EAF}BRkm0$BL+3Ck+cXjeE+w zURPYO&Uqkxgt%#(UvZtgXtxK$!iy$4kQ9|aj~-?fPVR6i<91G$IYO;t2x3esK1l6T|wJLb{gcNdjrzE_=pA zZ7qx}y?iEDC5v2#objKxCR_~weMk|PqUM#W3^jiorRV^Ogo*UWQe?*ugPBIdNiSM4Eo+k&0Jx8CS}-UZ49U@O7*7jG3^37L87e*6rgsd=p$ zPEVypTdax)qH0$iZ(K#mgH05qUq2{jAG}pqZaXCT;H8&;8CXoCT3=RKTXI9mjNQ(C z1@XhKlf}m9dRJ#`L9`8?xb@}1yFLTLgjX-e7rioRuFJ2noB{rs^(o=@^``>XDWChW zE)HOv6n_M~C#<9I=LUWT$Jpbron^7RdsRn`%_i!X${JroS(^n~{$uX+x8rgn)by!) zp4?jFzjc&olQbEeqGF}C|94k*3oN)+S2{hjda=@S1TX%y-gp@5G>)FMb$Ld3(I%u`QKClI_tc-P}Wp#k;X z4*_iDGKKCX?%Jse)A|Gw*WR64nj1h81{7Yxux+Po*p`tai}yqpggX~mTf;>2aOo6x z}WT?mh#T!y{noW@>#xK*Brm9L>f=|vv<>J8WCoXuM(Fp&*>jOTBp1p z1{XsWDZ6C2xN(F)(zZAX>edVgxiUr~C4vC{^l{Ew=Tb+md7AP@E4U07kD7yb0Na zW;&L?@62P8l;sfNmMIfVm`8=}S3q$Tc|w0Tn%w5nCEwK(S&JVU3Lf+IL1!Ui9W z9R#vazgdCB>fR%)$V5DP=zsY5q%8b;D6(}=7=xFMceP+>M9Vwdd?gM3@}fk=)=}o2 zWdv!4i<&f@V_*{vcqnHX$mfvZ8;+|6FZa+rN;yAII;?eUM#ltr*j~}ac#|u<&P9Q~ zRFg8PRU(P@ic+fOAtvjoDaElyr**L8$dzdP%O##8w@O)y@9 zg{CXUUl~rOqD%%*6r>%?Lp#>8zl~E_Nc616cEe)BLM34O8;v;<(a_1$Z8E0Cv2SrdGg+ZT8Hk~;2`ZyIK;pB$ z2hZU81a{@2=}}khSN?h*&MME%I^f_bHKERfg99rrS*Y~#Ex6q%pM;e&S#m>%e(aya zM+%?!>SVr75cU>lbRXrCJ^qZBr6KB$$r*W5&{+i4eaJv*xp|?=knl3w=sK+Ckm!Xm z$m`6;!!=b{d*uUSa*izR=Ox+bv_@pgr!UTgaADsO32W+>9We$thZ43tLcdu!2<~yA zFlR{aF$>j$k9_Wa+TE|yxYgMe>mq(a|B&rgL|rnA50YWaCP+C|?(DoekW>$)jIvdva;(R?M$eowyfkxc){B}2|}B7 zIld;|)^=dh`J|zR?pCAWXd!+g!;;!I%k3$zP|&71%sXc|&nAJLb%~ek&EAsN076~8 zpjrhk;*HxE1atD04N{FV?k*1Py=t3!Xv9@TkplA1gda z$K1j1k9b6*D(Lb8fZm2r$Nt>t@#EGoJY5({wdYeqT3aJWpYbg`9~Tuitu3L@{T^9a zWc?h&fjUa5@lG<#(x*Ed)4308ww$zO>8jh%vKLQP<;B;37km0s^y#0!mM+>I*(z|H zIP|RZ=DmrfNp>5^4#_SKl$WcrObwGgKVKU)#{C0?Gu(aLMDa^tixyB`f@g;u7eZj0 z?nXanGtWCAOyU56!}f2a(Ekm*FbQGH0a2GZ@%&vN$h+M`7ylz<@GO&a@e&!RX81%qz` ztmO6hMaVl{$T;GC;lCI1>)GUe1%N{2*z-pmK%FWevHf~l{FnaO@AWup|9f@c{#nFr zFZ%|TnR@&7<2y7U!0=1%N@95VZtp*B@LONg#53f|qFR127m}I;D{BT-T4cA%Gg3>OWM&VD8Gb z;QqvDDC*BbwDax*4s6^3fa}OAID^~7BAN{uX_Tgqgb?$P||OABPi(2+TriWAlTYxJ>N%8WjS_wwY?*mw!%op zD|Cv_mb@zIzmsNue=8Io##iLZVvg^b{v~pyG7EM3-;=y)t~pfxsEiWyUn}n!yBM)# z7asB8WK>#G28|P-jIcJ+NuM693mR@wfB$U&qAnrq91D zfqyWv{{Lp|6*nb@)>`wV)`0m=m?c(Xzn}1B-dY=e{?mLa)*Z{V;UPJr)DN@f?7yQ6 z`jiLp$7f3Xo9Vcj^ba0HomVH2>gpD?yna(Vtu{94IkWk)kD3s4_y@>3$N_)<4-f*Y zN#>hb^od}qH4ZNEALTx8a){ky8zVd#Uk?2EM*|Q@TmQu#{=ZqG=f4gyEb;&2Y|;26 zAKMD?P{b-d0~ED6@A=1VN7Ek|>5H7lFfAZ@{dWhTxY)y6UQx+Fl2z+aO`6JmLFug% z5_iCjx^}4ez*}oY!{cAZIgq;h-6sA|y2J>uuRq@X%aQq)BlG`7UzKYVkWE9@{!ek1 z|BIdVKgMDH^UvWniKp#SHjgeXMteS*n^8M%6>1gRc(JzSJvKONtHY?MABzU=t>8a> zZ6Z_Xn$*^-$EPg{DC4|BKy>89 zKm`%gkffS0vCH|Ov%~qDS8~(@rXV8vADTrcZC|k#DB_u5daCqC0WdXqwxumwxi<;N zl|%6hpaBHq^{L3U?2?q_5LXgrEKb_9@xmuntUOP*PJ4UvMn@`$5xSn!pcje)c{Fu9 zkv_YxYMZQfPw-~4`%n9F?gHb=h3 zFou0o3m_HQH?a$0#tFPA0T~;s>L-RiGQfm8iF0+`LwTdVEe@lkQ{VASTA*Rfn# z)IF~48n($5R*gv56-0P+zH;c{Fh{V@OY84fgAnlp)-wUT)$^5fg&w-8!*-K!@t^nO z?0(v8{Ko4Q*=4?B$A`BTWj_=%t%7KOrX4Q8^+AY10EG|5GZAwUwAFx85{i1uJ!S~= z*xBQqnPBJcZs_jL-!;e^!`g|^j6UB&0w22@maNYVA1cQBMoYEqMx4`J$5#zR0feW1 zd!UG=h>`0Wp;X9E@k(CLnvt9N`(u`M$RdgJ?)a>~Q0U*ZFiIO+uE}5{x)Wzp=T2ZlahPQ?X{iCZg6_*v3wa?LP30plj8c;?0KBH3F z!4P7R*KE6sq~E6JIycldvI6&)P=1A%nWIlaj(zmj_A`$S`!OL4Zy>t+dl|_kI(sK_ ze3|SiF>k&%LbWgp5S+wy8|uDZEcl{*QI(ST@MqTSzwwI21&b)P(S`J82G6?jU-Mnf z)oalSUYCvkwMO6gul&5?VtD@|8uX=Pp@)0zD zK#oqUrdUZ${}AR@w9`L$N)xPFs!dp|B-i@ z(1+m!sm#P1o%k^fLCdXM<>krv7tmAAaVET@jmsk^A!S6^Bv`M{D-n>&UWK_p@N}TL zRV_Fyl?(GnT~z}}5{QqxyUqLl==LELWIW2x^~tz3+v)?g8`={{m~FjvIufvlI89Ly z!nbK$c9>`OhaaCr`%sh{Z z&F`<O$k*L;3oR7wQSvUyI5f#Uc z8 D>Ejz#vS@hT6er^d3D$_wLc_sL55?N^N(1ow*#PP8yeTgHWH^?*F5~|^3wVog zzZm003)!8rwNS;UW3hhoHj=ZEHub@Co+)D!IPpC12oFf4k9rPF_$qzU)gF7vH?qgW zewgblx?tvZ=`iQIa)^ z9wS2K(w{K(mlGNQ$=cei!h__7ERpKBm||uEYtBJIR4xIc^6{=rycV)`Urj~+ZsPv= z^0kj+rw<8MCjs$t!&ziH9%G*6_A5YG`m<4Z`vJJ^QT02Ldx#&s$93Oq^$!pGE~sxt zWxo80O`>kv_?1AOCiSpHCO2oFV;Z}Y6Nc+DhKRlAIxD+sl-@T*ah*wa!@gUTq#Exz zSajNnUqOLke9(z8cG3N-0U(N9cYYJ<-enR+=p!@!fDVMfv%Vu^otV9a1+jOf3M(U6 zHNDi+mE*Ksw6uP*P#KeyD@P$>jxi!JCS!9Eh2o=DKih&_vY+yhJz0K1L>uz97NdRG zqfcpB{{nuFI-_=*0_l;_D&r|kqu_@}9onHFQGUYE{=qnlR@Tr@6cthq3cpAje;E^ z1YPy+t3sE?t)wLdOn&$+tY~gF6a>wTqEmatDwy26bz22FHb~7ADQj~=JMUmxpVB+7 zI$4S?2j(H3r)`+f9XBsXcuj=Sn^RJbQY|l^s6u;BiEez9d50bxWHQ_G)8*jr_XH=K za{)Ze^WKVBsv(+Ta>+(xXWhaaOe1=3M(%2kDWFkUUdg>e)T&Zx8^?DS%c)}%iSax| z%7mU{HIeT(=v;iUA)vI2^8KDAp}0;lgp;#fsOR)$gobhT)WP*3j;xAPe^sP7j*u&< za?f~}5JiL--afJY$Ff=sc~5Y+0g&^{`%uEn8UF(=gX76IU9A{3bos|F1(uJIg@x!t zdq{qy!VlKzY7|2r^i}V5`_+tY9=P#){prUS{VNSDE%rIP7+^=p`-x?%$pJMaOw2(7 zB~PN85F)~3!<_XB5?~0(Bc5y^JIhDs8qDsvF(Iv_dmUJE z4s5++LeE1QZBcqwc;DLY_;KV^68ss2su0jP%t1(WzKK#V+*WN~kIWDLm0}THnMyn8fE2vfv2`jOJs1u|Lx<~vv1Z5Bd`D+S347= zqv2X)#{Pp>SAX8Ujp)hg%1}jB>$fO#0y5>$5(&V zbd)SIh?vW#CO=m^$sLHT8W`Jy9xXsR4d~^%G%w@9nAajRd8>B;a*qlh#Fh~>iL*Ww zP3rI8kWaHP4!L`maqcy~Lb?DhXk5wqNed(eVb+&AiZj#3mkYU61pP$F6$QMQ1*f5# ze&inReN7f0pXM#tJhd(DbRf#DQR~$%LU2Mk!gObU(sJAlzbYM-HE(T%U6ZaQb4vU5 zhM(X}0djXmYOl-~y4tWCFiz@hSf3Aj)!jx3V|LAgxyv<8^0X=uwS;+ZI3;lSHj)5+R@Qo_87eptRPUNk^0| z*s!#VMMe~gcG&GmKjdylwT9jjcP*ib@xF#23$dr6qD_{Z{yO@GfCPd(J_gnIg~oEI1N9p`g9y8qF? z=zXtX;%fR)IM|y>t7=fuLlH6sliyj=MoyK9|5om4>*PgEp)7rmCF)TOfXk@WL?(oA z6%7y#CN8`WAsS&yliA$*@*ZUP&zm_9a^`L)a(1qvk0k`@c`q#+zMKd#vAdc5{AG%N zy(d|jr$Dwgl&Yg^{sQmp(v89Fg(XE6ayeM;qeQE!sTarS6cXq|VzzR~JW$s&=j3l^ zmt>M>FS(QR?Xi(}LRHE`EiSHE@EW)@k^AJAz1_HsXw9D@9p#Fd^DI=yK0l4Yc$t|` zavfUdiXlBEU*$de()GiVh-bJkhKO*~FixsLtt z+0V)`H8tdQLQK*EYMv`@d4)$J$JO;e-H0F|BV)^x)z}7Xv+M5@##<$!J3>+2vn@Zg zJ?gt}=|8bt%zIL{&$TEB&l?8g(59CJ(XB>NIu!pvZe#vlnrmOLK(?+E*6M#yZ`N$z z=KT)e^ah-&)JW_fQHK784hJhbU+g{L`(>doW5F^N=Iq$OJgJTBk6rk*E!de%(mOBP z_$t@w$!nYS3xZPhm~E(yFeA_z0ceCJ5qCWW+r+ikx_E?z$GrShZN=wD)aqFlR(rr3 zk_vyWQd%f0`_1hemA~kd&@-^w9w3|X2Pl+x9}7`WVwPh^p|t$VN|K3dTIp9BH9pVJ z4MC*#`YRiub8});2D!w&$H6%@jZ+unm=If{Eotz%ESf|b$GRyuzYo_+DCmNT`P0QDq*lX50o4`>v!s@iRt`a8cxu@}hpZ8S@v7F?UQPK!m!Oxw+XJP0+5QoT{!aNMV>~44YbY zIza^P$ads;|05eYQB)7)-2_dIP`CAm{`Z44Ifsf*o@L zfpr__q>qe!&R+Fy%CqUOjF!9hT;HMzb3bo5N$=bSZ;*fR7iA)HDev#ei3iI0b zFKQCD@ERL5txT*zo-fxOHTEPHxFeIvYqu3oDRd?;7M*+*6k~5#%FI$G&+n-A--KG5 zM@zpjZx|dfEpVzNv8%h=lOsl9u%q3mvzX%ic5jE`1Kz4NPy%L3eCerIJU0PV;Fc%9CLYR zZk$QaXuh?j>?z!gwsEv9wYZAy%TUlZWEE+G<^){~vn`;aCJC(egSGp~K`}^k0o08S z9}{Vt5VB$v;x37qSLzX_IR*Z~BV_QHZ(jSx1r9{&ZQ05e3fdCUTM-rS?dsfWo8c)* z7ZI8_u;#a1lAXCa()X7ZlRAVZuVRIy$OPJzAA{+qdC8Pc5F4glh2uod78_Hvj>Pza9nu@%x6% zPjot$6)4ujo}OT^ZwZe()!31qWej3XDPGI_vhYHIaU0NKVTE9-J_R5XU!-ef^L#D^ zbtl$lmu&jbk+)ikD(9>0MlxH zQ?4*M(#u$hffJceM?A+!9?sH}EY$5Yyzt&kGQ9mUK>A(S-rb>G2IyM#*hPODke4fd zukQUz_i0v^ii<#7&Y4WvHmY^6dF4&d7_RgjFImoDN?8^-qP3zuBmA=Wuiz2G#oP)+ zgTCAb=hoGovw%FST7ocpu^K^egD+f=U%-F2Dn}Y#`>2~AhL9o^-+EOfR_c1bQttzoJ*c*?v^=Y|1y?EJjGASRhJYL!~VGOl-tc?lX3&S@xv zlnlx1xpvcPdo{>%PRY4JdGnITBG}Iuwq6EuztBpTDfa+4vvg0#(hKJS-_%lDriv@k zyoG5tyKm-9`k`mz$fPC~X$6ixKt$EoHV4KoJLB@{5bUbRN?qBgS4k6os#g+2<1HaE zL>7R#02iIR0`g+T?}ANw&qF?CV1l_u?b+m)nPh0XXaG`|wCa`UoS)iv#0l)5)Rglj zVyr1^2QPJ8;-`A&j(Sdm-0 z;f*;1cm-(y-VW0W{(E75pMFoihDLPZLh-!6Xomn1ISg;_Z_}MA=;5MrsLqWuu_akM zhYJ@^o5FM8Fjjyx?bbYa*-&3j*!tFx;CL8wYLJMtE3Xn(ug_jDaBMl&wbV(YXAZT9 z9;U`o5GK!!8$1y8hp*L$oe8%HPREZ*roSC7x=Q^#aFb`unQ5|<6Oh5Qh^Gc_{r5|n z|MPSW&bOKOAM@_Tqq8tSgl+=p%JTmgf2RBgwxc1@TE$0bUdSiPuKQhNm#jkaFx-RK!Z_Q_WGm&6?{hd&)81U!vP0+$3N4NY^;Dn6HgOlyo za<$MgH79rTBUcwKMk!e`1NWl)s?8SiWONZMEQy9X0mN2YD6$B>3a( zB-fxjPtbO}jNuUSH;N)&GJG2+RmYuvcUv+8YK$Qnk#Gk`{WAO~bcxa_(A%ML*+>O% z_qg%a*5$-##x>FYxQ5FseCf4y{r1XfHkTW6y$F5{N3w5lnp^lF!l(*#2W78H4R%)p z@i#vo@_fP8Tkqawa`iWpImV5v-b~5Wo6}8dy?d4C0a2W+U}NW*e`R%TOk^re$vr15 zwj*+huhm12r|7OZ#Vc^B_rP}j2A2irCyLVR>{m!QeJdw9^<~b>CtqNY$G|50M}zYH`x7{=GJdt}@ZUdURS&XppwXPNZQ?>n7kQ&ezDSXO3zB9`dix zm;msQ$^bBOM;OTau9!pCWvVkR$tTGsru1RDefz2t6?C4%JEsbGD1>0wSdNJH@C@Yl z&e~8&w*r~iz7*sz-E?hPG8)kD;+gPNVU$+PWHCuYeE(!K2~0@M+LU-tD+W+7WF4gf zoSHEJ@gT)-?FAZWa!9#I0^dQb3o{i((Kqx>5S6)mEq1xQ<(qRzIJN*@?&C~zALpg3 zT=C`CYo4`ZD`=9L<*CeDKv|T~4sdRCD!{nw+t_drC>4jv`-lTKTNe5M0Ko$nNQuQ) z8BhKIJs`U*-=jy}TU|LHbVFY?@!9)eAwWZoc2oL_atwVV-dm>hejV+RcS`MvX*$xc zBYIgsBJCJ%ZQDj(bBY{f&x1C|hBJAzFyEY;9L-2LwzU{{Is zzFBIX$8-vR;XAM!Q}QgW_^-8(=LHO$uVZzqk&s+yZ2;an}7I}l!8 z;KwnfJX9b^l&c)IYnH;0p)N8uBL}yFz~- zv)||FpZbCJ3M)JI7rw8Q<}Sg?x}mp}xV7_r!Mw=Srd^-11Ge4x%`qK7&wh9ikQibA z*sq5!RTS?LaLC!CC&u>HNZ&c3$`F@3H7-WFAGJkx*$rc%cK);l+dZeNVF>TY(DJ2e`a;;+^ zi89^?QViUBA9!}SXO)E|dg2~Th$Nia1nZdZwOx;7H-iacKDQLJ7W6%q5Oo%a` z#P>#ZvtxU*I~Utt&!H8TUM0ZXS~Q~u&!$*3p7j%U(xc{9ilj`1bg2Eb@*|B>nC>kv z%a-mEZp`NH7mRTfPfGpr&H3D6ND{PND4Ncvb++o>=T;6?LKr3G0$b5G{N0JoHK%7r=eAawvz#{&o(-+XE_C%9)nT2c}-YmO9zdYLxK zgEs8%;q41yYhb6fW7qWFyiYm`}ai6)CaRHnh%#>e(=`^ux#bV?8Nu zt0ion{90e#(iEnSKIn=r7>f9`g(o-qEx%+xO@IWE@~Uw58iw21yjl>;rx2=^i$E&HjgdV|x6`iVN#jePU51Tk(r zN~yt@3_40g%7TQwZqq8rjNny8-6cgCwa0~eu(yiU$3*d;z}DZza7KXrG`em%eehvx zZ8U9tvvl4*xXKzzo@t-A=T=ugOI(vus?_Ais=7#qu3%U7r1CI&1$j)`$;r0$t3Nh8 z%Czh&F{HH|P^QTkqZL41HQLbJ(A;b*%2AwTu3R%p#W$nIr6HSKe zZ2D-BYj?8v#+{iHp2Uor^n;R~2tJ_rfM#p;{?M$hHo`QR7WGpr2p@uZ7j6*|PVD+s zPnT|Bjy_h-R7sBJOpcx=qt-N(iT_Wkl)urX{Eti1Ha;jnzEpdp7|@c`e=Gn9RTv>y z8w^kKJVU}R!P4`+S}}S?i?47FpfMvuIUDNVi7#%?u*f;cIa+&4Nc;}&dz|lTOPQAw zUv-Sm!G(b@~iuv9&RhJO1D^P8z3xR!IQ?L5iX3lZC6WYQ}Y2yHsq=wAA1-qr4w_p3fMmjHwcYS+KmfA6gx7iWM`X9TW`1YkY###s%3 zRm~dilsapM8*uuU$@aWb+qQX1G?W&`k1hTH9WEL@en@Qp#U{Njb9Gb!oUjVZ0PFT? zF`nwk;MFArU|?+jXAgMUgawldxu+#)(rz=VUg)Stb2IC}PP$H*&*&h3C@OzfSxWn< z=w$FH;o*wAz1|gaiwfLq`9+T%K{4Od{(#61`NfOeR}Sgo+x0B#c68h*kBuCqjQUI{ zAZ6HMH;$a*+8?wT*m+{xZiQ~{*fwuT%)>HNuH=RD(IsbzJ@I*Y#p|U9-0D5m-&)QC zu>&Gp7kI$Umkz)JBCfX2(e2OEGupeJ)a~^+sM|+uPaDBoO|BaD$3%AWT%S`{Iw8G= z_T?3b?#a-mJ+WFeW2p`Xl?xJ%$&~Tr4+V+nLsjjK#F?)TO#Y#0@!wiyaMB)}*;Aj0 z?VEEj(fRbt;O6n*LBqiQ_=YWJ{HATvkoKoe#lfFT&?|O8Uj4T^{$7yE*Fv7L2)o&x#(n6e?{No&}-qKS*38}095enIaTsanhD=bNNa zgl@jLSh2<09&xFIs}ONXvenS`Nmf%hqzj{w1vm;qr+@1`-qAfil}5^;s{V1hrPll6R5g59&S)!&EQd2+=d-QgbUH+}8f1HZh zxe^PK1K5 zbvp=qbn_Fc(_lQ}dFC+(VXp#3P=TC7-n)N3^^^-e{A|VXFbIe=-D9;Ui5zRqu_DTri55g{M%u_~9Sf!M_Y|Go3rgg8 zob+yNc3K3b7n}nlQS>8y3$H)?D5-VNPrbamydnC1VnqG5L0XsXXl*fBySiT&Zcg{G zk1WovZfN`^#+01n#>p5{>Vuc%Pp%S+J7O=17E2U3NfRv21`q02vxZx({c+h+kDes zP?$u~eji2l#Z_!$cBZx^(Op%qgI|vOqhv;I8Y(Cgn}b7Qbih1ar@yV-FB4o#+YWns1mNIXFh-z-M}aws*?F?k^iAYtbsn z%I1EUrsqVi$&Sr-QXd;X@hFy2Y9*k$__^R4eUUk2&vG8s8t%I0&#bCx4&1@7ea`iB zfwtNBvo0N~^HiEy3MV_u9h%Un9tL-`XP*9naUZC8xozCpMa#M1SQzUgz zQVC|(ii2+v{qDFtL!&vQTR@V)B=HPpkBp16_nVsKD#t z4-4-Kc=4{zb;rIhzM|nOSc;Tl8oosGr~VavE@BnmU@d^mJ=6nY)seY?7ZP0u+~zd8 zTD}!z+P$}(4$XwW5RLq+dlLHBU;ZEXD*xuQV5+Yvo@slqX{JDlR#VncEcoB7E#Z6O z5z(VcS|tiv&@iKyI4F85$N@-@(+$4oZd%0VUcpJHd_gu>vkQaI+&=KSzlcp&jnu{g z(ww&ZJ;Y@7p8)q_csoJBJeCpdrNsMwssW)7LRsTv+!Ew6rEDKfPQSFl6ZA{lBP~Wq zl{#*umQpbLiEq}8^Sk-I$6th2?7Zqe^Qi8w@}M5JjWKcJ-TIix{q752SlP08@>W0; z_txs2Wvh(dWY$~_#w*ztYn)}3+SpmmPyT!5d2(u!M4js|W>T#PW+zEJ1{raf80~W5 zBCX*2M0o6x5?846ApO_(lUf{F)!GK=?WC(22)}`K<4@Klml-WDb=zMF!pjs}w^OmfuxQKb zo|5(9`@IuRrM3M#m2CbXl@zWVGs0`c(O(m;Oj1zW6=OEaZ>KNk?cWYJ7^TzjNk7(a;08GC+ z$Stc?#YqO%Ghq``K%}jm&Z%;#A4j(O8xlyQPwGZe6jaD=?p^Nz&JK2~H#YyU>Ib9# zP*Cq@)6?W*Z^l|d1#aRi#&0(-0K@BjZJG`jhjf23glbd6WYj z;c&XNL)zk`nUC-LY0d<C3HuUvQFqM#ElE(a9*(Nfej6UF

    ;t4Nb@ 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 literal 0 HcmV?d00001 diff --git a/doc/release_ack.md b/doc/release_ack.md new file mode 100644 index 000000000..7b2a46643 --- /dev/null +++ b/doc/release_ack.md @@ -0,0 +1,53 @@ +Major feature releases and contributors +========================================= + + +**May 07, 2019: WAMR first GitHub release** + +- Contributors: Wenyong Huang, Weining Lu, Lei Shi, Li Tian, Jizhao Zhang, Yi Zhang, Daoming Qiu, Xin Wang (Intel) + +**May 17, 2019: Application manager, WASM APP API, samples and test tools** + +- Contributors: Wenyong Huang, Weining Lu, Lei Shi, Li Tian, Jizhao Zhang, Yi Zhang, Daoming Qiu, Xin Wang (Intel) + +**May 23, 2019: Support AliOS Things** + +- Contributor: JinZhong Zhu (Alibaba) + + +**May 24, 2019: Support memory usage profiler** + +- Contributors Wenyong Huang (Intel) + +**Jun 11, 2019: Add WASM APP API: connection ** + +- Contributor: Weining Lu (Intel) + +**Jun 10, 2019: Support VxWorks ** + +- Contributor: Yiting Wang (WindRiver) + +**Aug 1, 2019: Add WGL graphic user interface API ** + +- Contributor: Weining Lu + +**Aug 14, 2019: Add Docker support ** + +- Contributor: beriberikix + + +**Aug 14, 2019: WASM IoT app store demo ** + +- Contributor: Luhanzhi Li, Jun Xu (Intel) + + +**Aug 28, 2019: SGX support ** + +- Contributor: Mic Bowman (Intel) + + +**Sep 6, 2019: Mac platform support ** + +- Contributor: Jonathan Dong (Alibaba) + + diff --git a/doc/roadmap.md b/doc/roadmap.md new file mode 100644 index 000000000..4cff8ac60 --- /dev/null +++ b/doc/roadmap.md @@ -0,0 +1,16 @@ + +# WebAssembly Micro Runtime Roadmap + + +## Ahead of time compilation +Status: under development. The first release is targetted to the end of 2019. + +## WASI support +Evaluated solution. + +## Data serialization +Evauating using cbor as the default data serialization + +## Threading +Not started yet + diff --git a/doc/wamr_api.md b/doc/wamr_api.md new file mode 100644 index 000000000..7b46e2220 --- /dev/null +++ b/doc/wamr_api.md @@ -0,0 +1,310 @@ + +WASM application library +======================== + +WAMR APP API includes built-in Libc API's, Base library and Extension library reference. + + +**Libc API's**
    +This is a minimal set of Libc API's for memory allocation, string manipulation and printing. The header file is located at ```lib/app-libs/libc/lib_base.h```. The current supported API set is listed here: +``` C +void *malloc(size_t size); +void *calloc(size_t n, size_t size); +void free(void *ptr); +int memcmp(const void *s1, const void *s2, size_t n); +void *memcpy(void *dest, const void *src, size_t n); +void *memmove(void *dest, const void *src, size_t n); +void *memset(void *s, int c, size_t n); +int putchar(int c); +int snprintf(char *str, size_t size, const char *format, ...); +int sprintf(char *str, const char *format, ...); +char *strchr(const char *s, int c); +int strcmp(const char *s1, const char *s2); +char *strcpy(char *dest, const char *src); +size_t strlen(const char *s); +int strncmp(const char * str1, const char * str2, size_t n); +char *strncpy(char *dest, const char *src, unsigned long n); +``` + +**Base library**
    +Basic support for communication, timers, etc is available. You can refer to the header file ```lib/app-libs/base/wasm_app.h``` which contains the definitions for request and response API's, event pub/sub API's and timer API's. Please note that these API's require the native implementations. +The API set is listed below: +``` C +typedef void(*request_handler_f)(request_t *) ; +typedef void(*response_handler_f)(response_t *, void *) ; + +// Request API's +bool api_register_resource_handler(const char *url, request_handler_f); +void api_send_request(request_t * request, response_handler_f response_handler, void * user_data); +void api_response_send(response_t *response); + +// Event API's +bool api_publish_event(const char *url, int fmt, void *payload, int payload_len); +bool api_subscribe_event(const char * url, request_handler_f handler); + +struct user_timer; +typedef struct user_timer * user_timer_t; + +// Timer API's +user_timer_t api_timer_create(int interval, bool is_period, bool auto_start, void(*on_user_timer_update)(user_timer_t +)); +void api_timer_cancel(user_timer_t timer); +void api_timer_restart(user_timer_t timer, int interval); +``` + +**Library extension reference**
    +Currently we provide several kinds of extension library for reference including sensor, connection and GUI. + +Sensor API: In the header file ```lib/app-libs/extension/sensor/sensor.h```, the API set is defined as below: +``` C +sensor_t sensor_open(const char* name, int index, + void(*on_sensor_event)(sensor_t, attr_container_t *, void *), + void *user_data); +bool sensor_config(sensor_t sensor, int interval, int bit_cfg, int delay); +bool sensor_config_with_attr_container(sensor_t sensor, attr_container_t *cfg); +bool sensor_close(sensor_t sensor); +``` +Connection API: In the header file `lib/app-libs/extension/connection/connection.h.`, the API set is defined as below: +``` C +/* Connection event type */ +typedef enum { + /* Data is received */ + CONN_EVENT_TYPE_DATA = 1, + /* Connection is disconnected */ + CONN_EVENT_TYPE_DISCONNECT +} conn_event_type_t; + +typedef void (*on_connection_event_f)(connection_t *conn, + conn_event_type_t type, + const char *data, + uint32 len, + void *user_data); +connection_t *api_open_connection(const char *name, + attr_container_t *args, + on_connection_event_f on_event, + void *user_data); +void api_close_connection(connection_t *conn); +int api_send_on_connection(connection_t *conn, const char *data, uint32 len); +bool api_config_connection(connection_t *conn, attr_container_t *cfg); +``` +GUI API: The API's is list in header file ```lib/app-libs/extension/gui/wgl.h``` which is implemented based open soure 2D graphic library [LittlevGL](https://docs.littlevgl.com/en/html/index.html). Currently supported widgets include button, label, list and check box and more wigdet would be provided in future. + +The mechanism of exporting native API to WASM application +======================================================= + +The basic working flow for WASM application calling into the native API is shown in the following diagram: + +![WAMR WASM API ext diagram](./pics/extend_library.PNG "WAMR WASM API ext architecture diagram") + + +WAMR provides the macro `EXPORT_WASM_API` to enable users to export a native API to a WASM application. WAMR has implemented a base API for the timer and messaging by using `EXPORT_WASM_API`. This can be a point of reference for extending your own library. +``` C +static NativeSymbol extended_native_symbol_defs[] = { + EXPORT_WASM_API(wasm_register_resource), + EXPORT_WASM_API(wasm_response_send), + EXPORT_WASM_API(wasm_post_request), + EXPORT_WASM_API(wasm_sub_event), + EXPORT_WASM_API(wasm_create_timer), + EXPORT_WASM_API(wasm_timer_set_interval), + EXPORT_WASM_API(wasm_timer_cancel), + EXPORT_WASM_API(wasm_timer_restart) +}; +``` + +![#f03c15](https://placehold.it/15/f03c15/000000?text=+) **Security attention:** A WebAssembly application should only have access to its own memory space. As a result, the integrator should carefully design the native function to ensure that the memory accesses are safe. The native API to be exported to the WASM application must: +- Only use 32 bits number for parameters +- Should not pass data to the structure pointer (do data serialization instead) +- Should do the pointer address conversion in the native API +- Should not pass function pointer as callback + +Below is a sample of a library extension. All code invoked across WASM and native world must be serialized and de-serialized, and the native world must do a boundary check for every incoming address from the WASM world. + + + + + +Steps for exporting native API +========================== + +WAMR implemented a framework for developers to export API's. Below is the procedure to expose the platform API's in three steps: + +**Step 1. Create a header file**
    +Declare the API's for your WASM application source project to include. + +**Step 2. Create a source file**
    +Export the platform API's, for example in ``` products/linux/ext_lib_export.c ``` +``` C +#include "lib_export.h" + +static NativeSymbol extended_native_symbol_defs[] = +{ +}; + +#include "ext_lib_export.h" +``` + +**Step 3. Register new API's**
    +Use the macro `EXPORT_WASM_API` and `EXPORT_WASM_API2` to add exported API's into the array of ```extended_native_symbol_defs```. +The pre-defined MACRO `EXPORT_WASM_API` should be used to declare a function export: +``` c +#define EXPORT_WASM_API(symbol) {#symbol, symbol} +``` + +Below code example shows how to extend the library to support `customized()`: + +``` +//lib_export_impl.c +void customized() +{ + // your code +} + + +// lib_export_dec.h +#ifndef _LIB_EXPORT_DEC_H_ +#define _LIB_EXPORT_DEC_H_ +#ifdef __cplusplus +extern "C" { +#endif + +void customized(); + +#ifdef __cplusplus +} +#endif +#endif + + +// ext_lib_export.c +#include "lib_export.h" +#include "lib_export_dec.h" + +static NativeSymbol extended_native_symbol_defs[] = +{ + EXPORT_WASM_API(customized) +}; + +#include "ext_lib_export.h" +``` + +Use extended library +------------------------ +In the application source project, it will include the WAMR built-in API's header file and platform extension header files. Assuming the board vendor extends the library which added an API called customized(), the WASM application would be like this: +``` C +#include +#include "lib_export_dec.h" // provided by the platform vendor + +int main(int argc, char **argv) +{ + int I; + char *buf = “abcd”; + customized(); // customized API provided by the platform vendor + return i; +} +``` + + +Communication programming models +========================= +WAMR supports two typical communication programming models, the microservice model and the pub/sub model. + + +Microservice model +------------------------- +The microservice model is also known as request and response model. One WASM application acts as the server which provides a specific service. Other WASM applications or host/cloud applications request that service and get the response. + + +Below is the reference implementation of the server application. It provides room temperature measurement service. + +``` C +void on_init() +{ + api_register_resource_handler("/room_temp", room_temp_handler); +} + +void on_destroy() +{ +} + +void room_temp_handler(request_t *request) +{ + response_t response[1]; + attr_container_t *payload; + payload = attr_container_create("room_temp payload"); + if (payload == NULL) + return; + + attr_container_set_string(&payload, "temp unit", "centigrade"); + attr_container_set_int(&payload, "value", 26); + + make_response_for_request(request, response); + set_response(response, + CONTENT_2_05, + FMT_ATTR_CONTAINER, + payload, + attr_container_get_serialize_length(payload)); + + api_response_send(response); + attr_container_destroy(payload); +} +``` + + +Pub/sub model +------------------------- +One WASM application acts as the event publisher. It publishes events to notify WASM applications or host/cloud applications which subscribe to the events. + + + +Below is the reference implementation of the pub application. It utilizes a timer to repeatedly publish an overheat alert event to the subscriber applications. Then the subscriber applications receive the events immediately. + +``` C +/* Timer callback */ +void timer_update(user_timer_t timer +{ + attr_container_t *event; + + event = attr_container_create("event"); + attr_container_set_string(&event, + "warning", + "temperature is over high"); + + api_publish_event("alert/overheat", + FMT_ATTR_CONTAINER, + event, + attr_container_get_serialize_length(event)); + + attr_container_destroy(event); +} + +void on_init() +{ + user_timer_t timer; + timer = api_timer_create(1000, true, true, timer_update); +} + +void on_destroy() +{ +} +``` + +Below is the reference implementation of the sub application. +``` C +void overheat_handler(request_t *event) +{ + printf("Event: %s\n", event->url); + + if (event->payload != NULL && event->fmt == FMT_ATTR_CONTAINER) + attr_container_dump((attr_container_t *) event->payload); +} + +void on_init( +{ + api_subscribe_event ("alert/overheat", overheat_handler); +} + +void on_destroy() +{ +} +``` +**Note:** You can also subscribe this event from host side by using host tool. Please refer `samples/simple` project for deail usage. \ No newline at end of file diff --git a/samples/gui/README.md b/samples/gui/README.md index 3bfd18dd6..e04e33dc7 100644 --- a/samples/gui/README.md +++ b/samples/gui/README.md @@ -1,15 +1,17 @@ Introduction ============== -This sample demonstrates that a graphic user interface application in WebAssembly programming with WAMR graphic library(WGL) extension. WGL is implemented based on LittlevGL, an open-source embedded 2d graphic library. LittlevGL source code is built into the WAMR runtime and exported to Webassembly application with WGL extension. These extension API's are listed in: `/core/iwasm/lib/app-libs/extension/gui/wgl.h`. Currently only a small set of API's are provided and that would be extended in future. +This sample demonstrates that a graphic user interface application in WebAssembly programming with WAMR graphic library(WGL) extension. WGL defined a WASM application API set for programming the UI applications. + +WGL implemention is based on [LittlevGL](https://github.com/littlevgl/), an open-source embedded 2d graphic library. Comparing the building the LittlevGL into WASM bytecode in the [littlevgl](../littlevgl) sample, WGL compiled LittlevGL source code into the WAMR runtime and defined a wrapper API for exporting to Webassembly application. These extension API's are listed in: `/core/iwasm/lib/app-libs/extension/gui/wgl.h`. Currently only a small set of API's are provided and that would be extended in future. + The runtime component supports building target for Linux and Zephyr/STM Nucleo board. The beauty of this sample is the WebAssembly application can have identical display and behavior when running from both runtime environments. That implies we can do majority of application validation from desktop environment as long as two runtime distributions support the same set of application interface. -The sample also provides the native Linux version of application without the runtime under folder "lvgl-native-ui-app". It can help to check differences between the implementations in native and WebAssembly. - - +Below pictures show the WASM application is running on an STM board with an LCD touch panel. When users click the blue button, the WASM application increases the counter, and the latest counter value is displayed on the top banner of the touch panel. The number on top will plus one each second, and the number on the bottom will plus one when clicked. -The number on top will plus one each second, and the number on the bottom will plus one when clicked. + +![WAMR UI SAMPLE](../../doc/pics/vgl_demo2.png "WAMR UI DEMO") Configure 32 bit or 64 bit build ============== diff --git a/samples/littlevgl/README.md b/samples/littlevgl/README.md index 18e2527fc..4f37d84fc 100644 --- a/samples/littlevgl/README.md +++ b/samples/littlevgl/README.md @@ -1,6 +1,6 @@ Introduction ============== -This sample demonstrates that a graphic user interface application in WebAssembly integrates the LittlevGL, an open-source embedded 2d graphic library. +This sample demonstrates that a graphic user interface application in WebAssembly by compiling the LittlevGL, an open-source embedded 2d graphic library into the WASM bytecode. In this sample, the whole LittlevGL source code is built into the WebAssembly code with the user application. The platform interfaces defined by LittlevGL is implemented in the runtime and exported to the application through the declarations from source "ext_lib_export.c" as below: @@ -14,12 +14,20 @@ In this sample, the whole LittlevGL source code is built into the WebAssembly co The runtime component supports building target for Linux and Zephyr/STM Nucleo board. The beauty of this sample is the WebAssembly application can have identical display and behavior when running from both runtime environments. That implies we can do majority of application validation from desktop environment as long as two runtime distributions support the same set of application interface. + +Below pictures show the WASM application is running on an STM board with an LCD touch panel. + +![WAMR UI SAMPLE](../../doc/pics/vgl_demo2.png "WAMR UI DEMO STM32") + +![WAMR UI SAMPLE](../../doc/pics/vgl_demo_linux.png "WAMR UI DEMO LINUX") + + +The number on top will plus one each second, and the number on the bottom will plus one when clicked. When users click the blue button, the WASM application increases the counter, and the latest counter value is displayed on the top banner of the touch panel. + The sample also provides the native Linux version of application without the runtime under folder "vgl-native-ui-app". It can help to check differences between the implementations in native and WebAssembly. - - -The number on top will plus one each second, and the number on the bottom will plus one when clicked. + Configure 32 bit or 64 bit build ============== From a522e985f30c12c9c66eda6ff3ab41f493b31b2c Mon Sep 17 00:00:00 2001 From: Wang Xin Date: Sat, 7 Sep 2019 14:34:03 +0800 Subject: [PATCH 18/20] Update release_ack.md --- doc/release_ack.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/doc/release_ack.md b/doc/release_ack.md index 7b2a46643..57ffab2a2 100644 --- a/doc/release_ack.md +++ b/doc/release_ack.md @@ -12,14 +12,15 @@ Major feature releases and contributors **May 23, 2019: Support AliOS Things** -- Contributor: JinZhong Zhu (Alibaba) +- Contributor: JinZhou Zhu (Alibaba) **May 24, 2019: Support memory usage profiler** - Contributors Wenyong Huang (Intel) -**Jun 11, 2019: Add WASM APP API: connection ** + +**Jun 11, 2019: Add WASM APP API connection** - Contributor: Weining Lu (Intel) @@ -27,26 +28,26 @@ Major feature releases and contributors - Contributor: Yiting Wang (WindRiver) -**Aug 1, 2019: Add WGL graphic user interface API ** +**Aug 1, 2019: Add WGL graphic user interface API** - Contributor: Weining Lu -**Aug 14, 2019: Add Docker support ** +**Aug 14, 2019: Add Docker support** - Contributor: beriberikix -**Aug 14, 2019: WASM IoT app store demo ** +**Aug 14, 2019: WASM IoT app store demo** - Contributor: Luhanzhi Li, Jun Xu (Intel) -**Aug 28, 2019: SGX support ** +**Aug 28, 2019: SGX support** - Contributor: Mic Bowman (Intel) -**Sep 6, 2019: Mac platform support ** +**Sep 6, 2019: Mac platform support** - Contributor: Jonathan Dong (Alibaba) From bc762fe9e2cf2d26a0cde42931c4b6ed79860047 Mon Sep 17 00:00:00 2001 From: Wang Xin Date: Mon, 9 Sep 2019 20:51:40 +0800 Subject: [PATCH 19/20] Update README.md (#114) --- test-tools/IoT-APP-Store-Demo/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test-tools/IoT-APP-Store-Demo/README.md b/test-tools/IoT-APP-Store-Demo/README.md index fe69e1442..06d17a659 100644 --- a/test-tools/IoT-APP-Store-Demo/README.md +++ b/test-tools/IoT-APP-Store-Demo/README.md @@ -32,3 +32,5 @@ pip3 install django ./simple -a [your.server.ip.address] ``` +# Online demo + http://39.106.110.7/ From fb9f5f670db6fa3f397bf9f13e703b432cc9a329 Mon Sep 17 00:00:00 2001 From: wenyongh Date: Tue, 10 Sep 2019 10:23:46 +0800 Subject: [PATCH 20/20] Add parameter module inst for native wrapper functions (#117) And add asm code of em64/arm/mips version to call native wrapper functions; Fix some issues of calling wrapper functions; --- core/app-mgr/app-manager/event.c | 3 +- core/app-mgr/app-manager/module_wasm_app.c | 7 +- core/app-mgr/app-manager/resource_reg.c | 6 +- core/iwasm/lib/app-libs/base/request.c | 14 +- core/iwasm/lib/app-libs/base/request.h | 1 - core/iwasm/lib/app-libs/base/timer.c | 6 +- core/iwasm/lib/app-libs/base/wasm_app.h | 1 - .../extension/connection/connection.c | 8 +- .../lib/app-libs/extension/gui/src/wgl_btn.c | 6 +- .../lib/app-libs/extension/gui/src/wgl_cb.c | 4 +- .../app-libs/extension/gui/src/wgl_label.c | 4 +- .../lib/app-libs/extension/gui/src/wgl_list.c | 4 +- .../lib/app-libs/extension/gui/src/wgl_obj.c | 4 +- .../lib/app-libs/extension/sensor/sensor.c | 6 +- .../lib/native-interface/connection_api.h | 15 +- core/iwasm/lib/native-interface/gui_api.h | 26 +- .../lib/native-interface/native_interface.h | 127 +++++--- core/iwasm/lib/native-interface/readme.txt | 2 +- .../iwasm/lib/native-interface/req_resp_api.h | 43 +++ .../lib/native-interface/restful_utils.c | 1 - core/iwasm/lib/native-interface/sensor_api.h | 10 +- .../iwasm/lib/native-interface/shared_utils.h | 68 ++-- core/iwasm/lib/native-interface/timer_api.h | 48 +++ .../lib/native-interface/wasm_export_api.h | 102 ++++++ core/iwasm/lib/native/base/base_lib_export.c | 25 +- core/iwasm/lib/native/base/request_response.c | 19 +- core/iwasm/lib/native/base/runtime_lib.h | 1 - core/iwasm/lib/native/base/timer_wrapper.c | 19 +- .../extension/connection/connection_wrapper.c | 19 +- .../native/extension/gui/wgl_btn_wrapper.c | 4 +- .../lib/native/extension/gui/wgl_cb_wrapper.c | 4 +- .../native/extension/gui/wgl_label_wrapper.c | 4 +- .../native/extension/gui/wgl_list_wrapper.c | 4 +- .../native/extension/gui/wgl_obj_wrapper.c | 4 +- .../native/extension/sensor/runtime_sensor.c | 38 ++- .../native/extension/sensor/runtime_sensor.h | 15 +- core/iwasm/lib/native/libc/libc_wrapper.c | 126 ++++---- .../runtime/platform/linux-sgx/wasm_native.c | 94 +++--- .../runtime/platform/linux/wasm_native.c | 105 +++--- .../runtime/vmcore-wasm/invokeNative_arm.s | 75 +++++ .../runtime/vmcore-wasm/invokeNative_em64.s | 72 +++++ .../runtime/vmcore-wasm/invokeNative_mips.s | 85 +++++ core/iwasm/runtime/vmcore-wasm/vmcore.cmake | 8 +- core/iwasm/runtime/vmcore-wasm/wasm_interp.c | 76 +---- core/iwasm/runtime/vmcore-wasm/wasm_loader.c | 2 +- core/iwasm/runtime/vmcore-wasm/wasm_runtime.c | 299 ++++++++++++++++-- core/iwasm/runtime/vmcore-wasm/wasm_runtime.h | 5 + core/shared-lib/mem-alloc/ems/ems_alloc.c | 4 +- core/shared-lib/platform/darwin/bh_platform.c | 0 core/shared-lib/platform/darwin/bh_thread.c | 0 core/shared-lib/platform/darwin/bh_time.c | 0 .../gui/wasm-runtime-wgl/src/ext_lib_export.c | 2 +- .../vgl-wasm-runtime/src/display_indev.h | 45 ++- .../vgl-wasm-runtime/src/ext_lib_export.c | 5 +- .../src/platform/linux/display_indev.c | 47 +-- .../src/platform/zephyr/display_indev.c | 49 +-- test-tools/host-tool/CMakeLists.txt | 1 + test-tools/host-tool/src/main.c | 9 +- 58 files changed, 1287 insertions(+), 494 deletions(-) create mode 100644 core/iwasm/lib/native-interface/req_resp_api.h create mode 100644 core/iwasm/lib/native-interface/timer_api.h create mode 100644 core/iwasm/lib/native-interface/wasm_export_api.h create mode 100644 core/iwasm/runtime/vmcore-wasm/invokeNative_arm.s create mode 100644 core/iwasm/runtime/vmcore-wasm/invokeNative_em64.s create mode 100644 core/iwasm/runtime/vmcore-wasm/invokeNative_mips.s mode change 100755 => 100644 core/shared-lib/platform/darwin/bh_platform.c mode change 100755 => 100644 core/shared-lib/platform/darwin/bh_thread.c mode change 100755 => 100644 core/shared-lib/platform/darwin/bh_time.c diff --git a/core/app-mgr/app-manager/event.c b/core/app-mgr/app-manager/event.c index 2f78a406c..2295f20fe 100644 --- a/core/app-mgr/app-manager/event.c +++ b/core/app-mgr/app-manager/event.c @@ -176,7 +176,8 @@ void am_publish_event(request_t * event) if (c->subscriber_id == ID_HOST) { send_request_to_host(event); } else { - module_request_handler(event, (void *)c->subscriber_id); + module_request_handler + (event, (void *)(uintptr_t)c->subscriber_id); } c = c->next; } diff --git a/core/app-mgr/app-manager/module_wasm_app.c b/core/app-mgr/app-manager/module_wasm_app.c index 3958520a7..4154b33e3 100644 --- a/core/app-mgr/app-manager/module_wasm_app.c +++ b/core/app-mgr/app-manager/module_wasm_app.c @@ -224,8 +224,8 @@ static void app_instance_queue_callback(void *queue_msg) app_manager_printf("Cannot find function _on_timer_callback\n"); break; } - unsigned int timer_id = (unsigned int) bh_message_payload( - queue_msg); + unsigned int timer_id = (unsigned int)(uintptr_t) + bh_message_payload(queue_msg); argv[0] = timer_id; if (!wasm_runtime_call_wasm(inst, NULL, func_onTimer, 1, argv)) { app_manager_printf("Got exception running wasm code: %s\n", @@ -642,7 +642,8 @@ static bool wasm_app_module_uninstall(request_t *msg) static bool wasm_app_module_handle_host_url(void *queue_msg) { //todo: implement in future - app_manager_printf("App handles host url address %d\n", (int) queue_msg); + app_manager_printf("App handles host url address %d\n", + (int)(uintptr_t)queue_msg); return false; } diff --git a/core/app-mgr/app-manager/resource_reg.c b/core/app-mgr/app-manager/resource_reg.c index bbadcd03f..4fe477e3d 100644 --- a/core/app-mgr/app-manager/resource_reg.c +++ b/core/app-mgr/app-manager/resource_reg.c @@ -33,7 +33,7 @@ static app_res_register_t * g_resources = NULL; void module_request_handler(request_t *request, void *user_data) { - unsigned int mod_id = (unsigned int) user_data; + unsigned int mod_id = (unsigned int)(uintptr_t)user_data; bh_message_t msg; module_data *m_data; request_t *req; @@ -99,7 +99,7 @@ void targeted_app_request_handler(request_t *request, void *unused) goto end; } - module_request_handler(request, (void *)m_data->id); + module_request_handler(request, (void *)(uintptr_t)m_data->id); end: request->url = url; } @@ -138,7 +138,7 @@ void * am_dispatch_request(request_t *request) while (r) { if (check_url_start(request->url, strlen(request->url), r->url) > 0) { - r->request_handler(request, (void *)r->register_id); + r->request_handler(request, (void *)(uintptr_t)r->register_id); return r; } r = r->next; diff --git a/core/iwasm/lib/app-libs/base/request.c b/core/iwasm/lib/app-libs/base/request.c index 4251e2bfe..ade6ce4e2 100644 --- a/core/iwasm/lib/app-libs/base/request.c +++ b/core/iwasm/lib/app-libs/base/request.c @@ -18,6 +18,8 @@ #include "request.h" #include "shared_utils.h" #include "wasm_app.h" +#include "req_resp_api.h" +#include "timer_api.h" #define TRANSACTION_TIMEOUT_MS 5000 @@ -138,15 +140,15 @@ static bool register_url_handler(const char *url, // tell app mgr to route this url to me if (reg_type == Reg_Request) - wasm_register_resource((int32)url); + wasm_register_resource(url); else - wasm_sub_event((int32)url); + wasm_sub_event(url); return true; } bool api_register_resource_handler(const char *url, - request_handler_f request_handler) + request_handler_f request_handler) { return register_url_handler(url, request_handler, Reg_Request); } @@ -242,7 +244,7 @@ void api_send_request(request_t * request, response_handler_f response_handler, } } - wasm_post_request((int32)buffer, size); + wasm_post_request(buffer, size); free_req_resp_packet(buffer); } @@ -329,7 +331,7 @@ void api_response_send(response_t *response) if (buffer == NULL) return; - wasm_response_send((int32)buffer, size); + wasm_response_send(buffer, size); free_req_resp_packet(buffer); } @@ -343,7 +345,7 @@ bool api_publish_event(const char *url, int fmt, void *payload, int payload_len) char * buffer = pack_request(request, &size); if (buffer == NULL) return false; - wasm_post_request((int32)buffer, size); + wasm_post_request(buffer, size); free_req_resp_packet(buffer); diff --git a/core/iwasm/lib/app-libs/base/request.h b/core/iwasm/lib/app-libs/base/request.h index e7766dac0..f60b9f698 100644 --- a/core/iwasm/lib/app-libs/base/request.h +++ b/core/iwasm/lib/app-libs/base/request.h @@ -17,7 +17,6 @@ #ifndef _AEE_REQUEST_H_ #define _AEE_REQUEST_H_ -#include "native_interface.h" #include "shared_utils.h" #ifdef __cplusplus diff --git a/core/iwasm/lib/app-libs/base/timer.c b/core/iwasm/lib/app-libs/base/timer.c index cb042670e..0b3cd9f01 100644 --- a/core/iwasm/lib/app-libs/base/timer.c +++ b/core/iwasm/lib/app-libs/base/timer.c @@ -14,12 +14,12 @@ * limitations under the License. */ -#include "timer_wasm_app.h" -#include "native_interface.h" - #include #include +#include "timer_wasm_app.h" +#include "timer_api.h" + #if 1 #include #else diff --git a/core/iwasm/lib/app-libs/base/wasm_app.h b/core/iwasm/lib/app-libs/base/wasm_app.h index 081b2bfe2..3513001e4 100644 --- a/core/iwasm/lib/app-libs/base/wasm_app.h +++ b/core/iwasm/lib/app-libs/base/wasm_app.h @@ -32,7 +32,6 @@ #ifndef _LIB_AEE_H_ #define _LIB_AEE_H_ -#include "native_interface.h" #include "shared_utils.h" #include "attr_container.h" #include "request.h" diff --git a/core/iwasm/lib/app-libs/extension/connection/connection.c b/core/iwasm/lib/app-libs/extension/connection/connection.c index 1c7845d4b..e60504c24 100644 --- a/core/iwasm/lib/app-libs/extension/connection/connection.c +++ b/core/iwasm/lib/app-libs/extension/connection/connection.c @@ -15,7 +15,7 @@ */ #include "connection.h" -#include "native_interface.h" +#include "connection_api.h" /* Raw connection structure */ typedef struct _connection { @@ -44,7 +44,7 @@ connection_t *api_open_connection(const char *name, char *args_buffer = (char *)args; uint32 handle, args_len = attr_container_get_serialize_length(args); - handle = wasm_open_connection((int32)name, (int32)args_buffer, args_len); + handle = wasm_open_connection(name, args_buffer, args_len); if (handle == -1) return NULL; @@ -91,7 +91,7 @@ void api_close_connection(connection_t *c) int api_send_on_connection(connection_t *conn, const char *data, uint32 len) { - return wasm_send_on_connection(conn->handle, (int32)data, len); + return wasm_send_on_connection(conn->handle, data, len); } bool api_config_connection(connection_t *conn, attr_container_t *cfg) @@ -99,7 +99,7 @@ bool api_config_connection(connection_t *conn, attr_container_t *cfg) char *cfg_buffer = (char *)cfg; uint32 cfg_len = attr_container_get_serialize_length(cfg); - return wasm_config_connection(conn->handle, (int32)cfg_buffer, cfg_len); + return wasm_config_connection(conn->handle, cfg_buffer, cfg_len); } void on_connection_data(uint32 handle, char *buffer, uint32 len) diff --git a/core/iwasm/lib/app-libs/extension/gui/src/wgl_btn.c b/core/iwasm/lib/app-libs/extension/gui/src/wgl_btn.c index 5cf8c1c29..5623abe6c 100644 --- a/core/iwasm/lib/app-libs/extension/gui/src/wgl_btn.c +++ b/core/iwasm/lib/app-libs/extension/gui/src/wgl_btn.c @@ -15,11 +15,11 @@ */ #include "wgl.h" -#include "native_interface.h" - +#include "bh_platform.h" +#include "gui_api.h" #define ARGC sizeof(argv)/sizeof(uint32) -#define CALL_BTN_NATIVE_FUNC(id) wasm_btn_native_call(id, (int32)argv, ARGC) +#define CALL_BTN_NATIVE_FUNC(id) wasm_btn_native_call(id, argv, ARGC) wgl_obj_t wgl_btn_create(wgl_obj_t par, wgl_obj_t copy) { diff --git a/core/iwasm/lib/app-libs/extension/gui/src/wgl_cb.c b/core/iwasm/lib/app-libs/extension/gui/src/wgl_cb.c index df646fbc8..cbfa11ebd 100644 --- a/core/iwasm/lib/app-libs/extension/gui/src/wgl_cb.c +++ b/core/iwasm/lib/app-libs/extension/gui/src/wgl_cb.c @@ -15,12 +15,12 @@ */ #include "wgl.h" -#include "native_interface.h" +#include "gui_api.h" #include #define ARGC sizeof(argv)/sizeof(uint32) -#define CALL_CB_NATIVE_FUNC(id) wasm_cb_native_call(id, (uint32)argv, ARGC) +#define CALL_CB_NATIVE_FUNC(id) wasm_cb_native_call(id, argv, ARGC) wgl_obj_t wgl_cb_create(wgl_obj_t par, const wgl_obj_t copy) { diff --git a/core/iwasm/lib/app-libs/extension/gui/src/wgl_label.c b/core/iwasm/lib/app-libs/extension/gui/src/wgl_label.c index 3a14cdb47..a602e2aee 100644 --- a/core/iwasm/lib/app-libs/extension/gui/src/wgl_label.c +++ b/core/iwasm/lib/app-libs/extension/gui/src/wgl_label.c @@ -16,12 +16,12 @@ #include "wgl.h" -#include "native_interface.h" +#include "gui_api.h" #include #define ARGC sizeof(argv)/sizeof(uint32) -#define CALL_LABEL_NATIVE_FUNC(id) wasm_label_native_call(id, (uint32)argv, ARGC) +#define CALL_LABEL_NATIVE_FUNC(id) wasm_label_native_call(id, argv, ARGC) wgl_obj_t wgl_label_create(wgl_obj_t par, wgl_obj_t copy) { diff --git a/core/iwasm/lib/app-libs/extension/gui/src/wgl_list.c b/core/iwasm/lib/app-libs/extension/gui/src/wgl_list.c index ad580b7fa..c815964db 100644 --- a/core/iwasm/lib/app-libs/extension/gui/src/wgl_list.c +++ b/core/iwasm/lib/app-libs/extension/gui/src/wgl_list.c @@ -15,12 +15,12 @@ */ #include "wgl.h" -#include "native_interface.h" +#include "gui_api.h" #include #define ARGC sizeof(argv)/sizeof(uint32) -#define CALL_LIST_NATIVE_FUNC(id) wasm_list_native_call(id, (int32)argv, ARGC) +#define CALL_LIST_NATIVE_FUNC(id) wasm_list_native_call(id, argv, ARGC) wgl_obj_t wgl_list_create(wgl_obj_t par, const wgl_obj_t copy) diff --git a/core/iwasm/lib/app-libs/extension/gui/src/wgl_obj.c b/core/iwasm/lib/app-libs/extension/gui/src/wgl_obj.c index d53f8b29f..5798ca3dd 100644 --- a/core/iwasm/lib/app-libs/extension/gui/src/wgl_obj.c +++ b/core/iwasm/lib/app-libs/extension/gui/src/wgl_obj.c @@ -15,12 +15,12 @@ */ #include "wgl.h" -#include "native_interface.h" +#include "gui_api.h" #include #include #define ARGC sizeof(argv)/sizeof(uint32) -#define CALL_OBJ_NATIVE_FUNC(id) wasm_obj_native_call(id, (int32)argv, ARGC) +#define CALL_OBJ_NATIVE_FUNC(id) wasm_obj_native_call(id, argv, ARGC) typedef struct _obj_evt_cb { struct _obj_evt_cb *next; diff --git a/core/iwasm/lib/app-libs/extension/sensor/sensor.c b/core/iwasm/lib/app-libs/extension/sensor/sensor.c index 53f413bf7..212b2e166 100644 --- a/core/iwasm/lib/app-libs/extension/sensor/sensor.c +++ b/core/iwasm/lib/app-libs/extension/sensor/sensor.c @@ -15,7 +15,7 @@ */ #include "sensor.h" -#include "native_interface.h" +#include "sensor_api.h" typedef struct _sensor { struct _sensor * next; @@ -31,7 +31,7 @@ sensor_t sensor_open(const char* name, int index, sensor_event_handler_f sensor_event_handler, void *user_data) { - uint32 id = wasm_sensor_open((int32)name, index); + uint32 id = wasm_sensor_open(name, index); if (id == -1) return NULL; @@ -66,7 +66,7 @@ bool sensor_config_with_attr_container(sensor_t sensor, attr_container_t *cfg) char *buffer = (char *)cfg; int len = attr_container_get_serialize_length(cfg); - return wasm_sensor_config_with_attr_container(sensor->handle, (int32)buffer, len); + return wasm_sensor_config_with_attr_container(sensor->handle, buffer, len); } bool sensor_config(sensor_t sensor, int interval, int bit_cfg, int delay) diff --git a/core/iwasm/lib/native-interface/connection_api.h b/core/iwasm/lib/native-interface/connection_api.h index f55583bd9..21142b70a 100644 --- a/core/iwasm/lib/native-interface/connection_api.h +++ b/core/iwasm/lib/native-interface/connection_api.h @@ -16,23 +16,28 @@ #ifndef CONNECTION_API_H_ #define CONNECTION_API_H_ + #include "bh_platform.h" #ifdef __cplusplus extern "C" { #endif -uint32 wasm_open_connection(int32 name_offset, int32 args_offset, uint32 len); +uint32 +wasm_open_connection(const char *name, char *args_buf, uint32 args_buf_len); -void wasm_close_connection(uint32 handle); +void +wasm_close_connection(uint32 handle); -int wasm_send_on_connection(uint32 handle, int32 data_offset, uint32 len); +int +wasm_send_on_connection(uint32 handle, const char *data, uint32 data_len); -bool wasm_config_connection(uint32 handle, int32 cfg_offset, uint32 len); +bool +wasm_config_connection(uint32 handle, const char *cfg_buf, uint32 cfg_buf_len); #ifdef __cplusplus } #endif -#endif /* CONNECTION_API_H_ */ +#endif /* end of CONNECTION_API_H_ */ diff --git a/core/iwasm/lib/native-interface/gui_api.h b/core/iwasm/lib/native-interface/gui_api.h index 0b1dbb005..04031c1fa 100644 --- a/core/iwasm/lib/native-interface/gui_api.h +++ b/core/iwasm/lib/native-interface/gui_api.h @@ -14,19 +14,29 @@ * limitations under the License. */ -#ifndef GUI_API_H_ -#define GUI_API_H_ +#ifndef _GUI_API_H_ +#define _GUI_API_H_ + #include "bh_platform.h" #ifdef __cplusplus extern "C" { #endif -void wasm_obj_native_call(int32 func_id, uint32 argv_offset, uint32 argc); -void wasm_btn_native_call(int32 func_id, uint32 argv_offset, uint32 argc); -void wasm_label_native_call(int32 func_id, uint32 argv_offset, uint32 argc); -void wasm_cb_native_call(int32 func_id, uint32 argv_offset, uint32 argc); -void wasm_list_native_call(int32 func_id, uint32 argv_offset, uint32 argc); +void +wasm_obj_native_call(int32 func_id, uint32 *argv, uint32 argc); + +void +wasm_btn_native_call(int32 func_id, uint32 *argv, uint32 argc); + +void +wasm_label_native_call(int32 func_id, uint32 *argv, uint32 argc); + +void +wasm_cb_native_call(int32 func_id, uint32 *argv, uint32 argc); + +void +wasm_list_native_call(int32 func_id, uint32 *argv, uint32 argc); #ifdef __cplusplus @@ -34,4 +44,4 @@ void wasm_list_native_call(int32 func_id, uint32 argv_offset, uint32 argc); #endif -#endif /* GUI_API_H_ */ +#endif /* end of _GUI_API_H_ */ diff --git a/core/iwasm/lib/native-interface/native_interface.h b/core/iwasm/lib/native-interface/native_interface.h index 0312b1f63..49c7c1e66 100644 --- a/core/iwasm/lib/native-interface/native_interface.h +++ b/core/iwasm/lib/native-interface/native_interface.h @@ -14,12 +14,13 @@ * limitations under the License. */ -#ifndef DEPS_SSG_MICRO_RUNTIME_WASM_POC_APP_LIBS_NATIVE_INTERFACE_NATIVE_INTERFACE_H_ -#define DEPS_SSG_MICRO_RUNTIME_WASM_POC_APP_LIBS_NATIVE_INTERFACE_NATIVE_INTERFACE_H_ +#ifndef _NATIVE_INTERFACE_H_ +#define _NATIVE_INTERFACE_H_ -// note: the bh_plaform.h is the only head file separately -// implemented by both [app] and [native] worlds +/* Note: the bh_plaform.h is the only head file separately + implemented by both [app] and [native] worlds */ #include "bh_platform.h" +#include "wasm_export.h" #define get_module_inst() \ wasm_runtime_get_current_module_inst() @@ -39,52 +40,102 @@ #define module_free(offset) \ wasm_runtime_module_free(module_inst, offset) -char *wa_strdup(const char *); - -bool -wasm_response_send(int32 buffer_offset, int size); - -void wasm_register_resource(int32 url_offset); - -void wasm_post_request(int32 buffer_offset, int size); - -void wasm_sub_event(int32 url_offset); +/*char *wa_strdup(const char *);*/ /* - * ************* sensor interfaces ************* + * request/response interfaces */ bool -wasm_sensor_config(uint32 sensor, int interval, int bit_cfg, int delay); -uint32 -wasm_sensor_open(int32 name_offset, int instance); -bool -wasm_sensor_config_with_attr_container(uint32 sensor, int32 buffer_offset, - int len); - -bool -wasm_sensor_close(uint32 sensor); +wasm_response_send(wasm_module_inst_t module_inst, + int32 buffer_offset, int size); +void +wasm_register_resource(wasm_module_inst_t module_inst, + int32 url_offset); +void +wasm_post_request(wasm_module_inst_t module_inst, + int32 buffer_offset, int size); +void +wasm_sub_event(wasm_module_inst_t module_inst, + int32 url_offset); /* - * *** timer interface *** + * sensor interfaces + */ + +bool +wasm_sensor_config(wasm_module_inst_t module_inst, + uint32 sensor, int interval, int bit_cfg, int delay); +uint32 +wasm_sensor_open(wasm_module_inst_t module_inst, + int32 name_offset, int instance); +bool +wasm_sensor_config_with_attr_container(wasm_module_inst_t module_inst, + uint32 sensor, + int32 buffer_offset, int len); +bool +wasm_sensor_close(wasm_module_inst_t module_inst, + uint32 sensor); + +/* + * timer interfaces */ typedef unsigned int timer_id_t; -timer_id_t wasm_create_timer(int interval, bool is_period, bool auto_start); -void wasm_timer_destory(timer_id_t timer_id); -void wasm_timer_cancel(timer_id_t timer_id); -void wasm_timer_restart(timer_id_t timer_id, int interval); -uint32 wasm_get_sys_tick_ms(void); + +timer_id_t +wasm_create_timer(wasm_module_inst_t module_inst, + int interval, bool is_period, bool auto_start); +void +wasm_timer_destory(wasm_module_inst_t module_inst, timer_id_t timer_id); +void +wasm_timer_cancel(wasm_module_inst_t module_inst, timer_id_t timer_id); +void +wasm_timer_restart(wasm_module_inst_t module_inst, + timer_id_t timer_id, int interval); +uint32 +wasm_get_sys_tick_ms(wasm_module_inst_t module_inst); /* - * *** connection interface *** + * connection interfaces */ -uint32 wasm_open_connection(int32 name_offset, int32 args_offset, uint32 len); -void wasm_close_connection(uint32 handle); -int wasm_send_on_connection(uint32 handle, int32 data_offset, uint32 len); -bool wasm_config_connection(uint32 handle, int32 cfg_offset, uint32 len); -#include "gui_api.h" +uint32 +wasm_open_connection(wasm_module_inst_t module_inst, + int32 name_offset, int32 args_offset, uint32 len); +void +wasm_close_connection(wasm_module_inst_t module_inst, + uint32 handle); +int +wasm_send_on_connection(wasm_module_inst_t module_inst, + uint32 handle, int32 data_offset, uint32 len); +bool +wasm_config_connection(wasm_module_inst_t module_inst, + uint32 handle, int32 cfg_offset, uint32 len); + +/** + * gui interfaces + */ + +void +wasm_obj_native_call(wasm_module_inst_t module_inst, + int32 func_id, uint32 argv_offset, uint32 argc); + +void +wasm_btn_native_call(wasm_module_inst_t module_inst, + int32 func_id, uint32 argv_offset, uint32 argc); + +void +wasm_label_native_call(wasm_module_inst_t module_inst, + int32 func_id, uint32 argv_offset, uint32 argc); + +void +wasm_cb_native_call(wasm_module_inst_t module_inst, + int32 func_id, uint32 argv_offset, uint32 argc); + +void +wasm_list_native_call(wasm_module_inst_t module_inst, + int32 func_id, uint32 argv_offset, uint32 argc); + +#endif /* end of _NATIVE_INTERFACE_H */ -#endif /* DEPS_SSG_MICRO_RUNTIME_WASM_PO -C_APP_LIBS_NATIVE_INTERFACE_NATIVE_INTERFACE_H_ */ diff --git a/core/iwasm/lib/native-interface/readme.txt b/core/iwasm/lib/native-interface/readme.txt index e3b59042b..7197d5844 100644 --- a/core/iwasm/lib/native-interface/readme.txt +++ b/core/iwasm/lib/native-interface/readme.txt @@ -1,6 +1,6 @@ Attention: ======= -Only add files are shared by both wasm application and native runtime into this directory! +Only add files which are shared by both wasm application and native runtime into this directory! The c files are both compiled into the the WASM APP and native runtime. diff --git a/core/iwasm/lib/native-interface/req_resp_api.h b/core/iwasm/lib/native-interface/req_resp_api.h new file mode 100644 index 000000000..8b2235712 --- /dev/null +++ b/core/iwasm/lib/native-interface/req_resp_api.h @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _REQ_RESP_API_H_ +#define _REQ_RESP_API_H_ + +#include "bh_platform.h" + +#ifdef __cplusplus +extern "C" { +#endif + +bool +wasm_response_send(const char *buf, int size); + +void +wasm_register_resource(const char *url); + +void +wasm_post_request(const char *buf, int size); + +void +wasm_sub_event(const char *url); + +#ifdef __cplusplus +} +#endif + +#endif /* end of _REQ_RESP_API_H_ */ + diff --git a/core/iwasm/lib/native-interface/restful_utils.c b/core/iwasm/lib/native-interface/restful_utils.c index 71b5d782e..e7afad469 100644 --- a/core/iwasm/lib/native-interface/restful_utils.c +++ b/core/iwasm/lib/native-interface/restful_utils.c @@ -19,7 +19,6 @@ #include #include -#include "native_interface.h" #include "shared_utils.h" /* Serialization of request and response message diff --git a/core/iwasm/lib/native-interface/sensor_api.h b/core/iwasm/lib/native-interface/sensor_api.h index 0f8a8583b..1adf93b1e 100644 --- a/core/iwasm/lib/native-interface/sensor_api.h +++ b/core/iwasm/lib/native-interface/sensor_api.h @@ -14,8 +14,9 @@ * limitations under the License. */ -#ifndef DEPS_IWASM_APP_LIBS_NATIVE_INTERFACE_SENSOR_API_H_ -#define DEPS_IWASM_APP_LIBS_NATIVE_INTERFACE_SENSOR_API_H_ +#ifndef _SENSOR_API_H_ +#define _SENSOR_API_H_ + #include "bh_platform.h" #ifdef __cplusplus @@ -29,7 +30,7 @@ bool wasm_sensor_config(uint32 sensor, int interval, int bit_cfg, int delay); bool -wasm_sensor_config_with_attr_container(uint32 sensor, char * buffer, int len); +wasm_sensor_config_with_attr_container(uint32 sensor, char *buffer, int len); bool wasm_sensor_close(uint32 sensor); @@ -38,4 +39,5 @@ wasm_sensor_close(uint32 sensor); } #endif -#endif /* DEPS_IWASM_APP_LIBS_NATIVE_INTERFACE_SENSOR_API_H_ */ +#endif /* end of _SENSOR_API_H_ */ + diff --git a/core/iwasm/lib/native-interface/shared_utils.h b/core/iwasm/lib/native-interface/shared_utils.h index 693dcf957..70f561b43 100644 --- a/core/iwasm/lib/native-interface/shared_utils.h +++ b/core/iwasm/lib/native-interface/shared_utils.h @@ -14,10 +14,10 @@ * limitations under the License. */ -#ifndef DEPS_SSG_MICRO_RUNTIME_WASM_POC_APP_LIBS_NATIVE_INTERFACE_SHARED_UTILS_H_ -#define DEPS_SSG_MICRO_RUNTIME_WASM_POC_APP_LIBS_NATIVE_INTERFACE_SHARED_UTILS_H_ +#ifndef _SHARED_UTILS_H_ +#define _SHARED_UTILS_H_ -#include "native_interface.h" +#include "bh_platform.h" #ifdef __cplusplus extern "C" { @@ -71,16 +71,27 @@ typedef struct response { unsigned long reciever; } response_t; -int check_url_start(const char* url, int url_len, const char * leading_str); -bool match_url(char * pattern, char * matched); -char * find_key_value(char * buffer, int buffer_len, char * key, char * value, - int value_len, char delimiter); +int +check_url_start(const char* url, int url_len, const char * leading_str); -request_t *clone_request(request_t *request); -void request_cleaner(request_t *request); +bool +match_url(char * pattern, char * matched); -response_t * clone_response(response_t * response); -void response_cleaner(response_t * response); +char * +find_key_value(char * buffer, int buffer_len, char * key, char * value, + int value_len, char delimiter); + +request_t * +clone_request(request_t *request); + +void +request_cleaner(request_t *request); + +response_t * +clone_response(response_t * response); + +void +response_cleaner(response_t * response); /** * @brief Set fields of response. @@ -95,8 +106,9 @@ void response_cleaner(response_t * response); * * @warning the response pointer MUST NOT be NULL */ -response_t * set_response(response_t * response, int status, int fmt, - const char *payload, int payload_len); +response_t * +set_response(response_t * response, int status, int fmt, + const char *payload, int payload_len); /** * @brief Make a response for a request. @@ -108,8 +120,8 @@ response_t * set_response(response_t * response, int status, int fmt, * * @warning the request and response pointers MUST NOT be NULL */ -response_t * make_response_for_request(request_t * request, - response_t * response); +response_t * +make_response_for_request(request_t * request, response_t * response); /** * @brief Initialize a request. @@ -125,14 +137,24 @@ response_t * make_response_for_request(request_t * request, * * @warning the request pointer MUST NOT be NULL */ -request_t * init_request(request_t * request, char *url, int action, int fmt, - void *payload, int payload_len); +request_t * +init_request(request_t * request, char *url, int action, int fmt, + void *payload, int payload_len); -char * pack_request(request_t *request, int * size); -request_t * unpack_request(char * packet, int size, request_t * request); -char * pack_response(response_t *response, int * size); -response_t * unpack_response(char * packet, int size, response_t * response); -void free_req_resp_packet(char * packet); +char * +pack_request(request_t *request, int * size); + +request_t * +unpack_request(char * packet, int size, request_t * request); + +char * +pack_response(response_t *response, int * size); + +response_t * +unpack_response(char * packet, int size, response_t * response); + +void +free_req_resp_packet(char * packet); #include "wgl_shared_utils.h" @@ -140,4 +162,4 @@ void free_req_resp_packet(char * packet); } #endif -#endif /* DEPS_SSG_MICRO_RUNTIME_WASM_POC_APP_LIBS_NATIVE_INTERFACE_SHARED_UTILS_H_ */ +#endif /* end of _SHARED_UTILS_H_ */ diff --git a/core/iwasm/lib/native-interface/timer_api.h b/core/iwasm/lib/native-interface/timer_api.h new file mode 100644 index 000000000..81ea839ab --- /dev/null +++ b/core/iwasm/lib/native-interface/timer_api.h @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _TIMER_API_H_ +#define _TIMER_API_H_ + +#include "bh_platform.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef unsigned int timer_id_t; + +timer_id_t +wasm_create_timer(int interval, bool is_period, bool auto_start); + +void +wasm_timer_destory(timer_id_t timer_id); + +void +wasm_timer_cancel(timer_id_t timer_id); + +void +wasm_timer_restart(timer_id_t timer_id, int interval); + +uint32 +wasm_get_sys_tick_ms(void); + +#ifdef __cplusplus +} +#endif + +#endif /* end of _TIMER_API_H_ */ + diff --git a/core/iwasm/lib/native-interface/wasm_export_api.h b/core/iwasm/lib/native-interface/wasm_export_api.h new file mode 100644 index 000000000..ed9d570f8 --- /dev/null +++ b/core/iwasm/lib/native-interface/wasm_export_api.h @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _WASM_EXPORT_H +#define _WASM_EXPORT_H + +#include +#include + +/** + * API exported to WASM application + */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Get current WASM module instance of the current native thread + * + * @return current WASM module instance of the current native thread, 0 + * if not found + * Note: the return type is uint64_t but not pointer type, because that + * the we only supports WASM-32, in which the pointer type is + * compiled to WASM i32 type, but the pointer type in native can be + * 32-bit and 64-bit. And if the native pointer is 64-bit, data loss + * occurs after converting it to WASM i32 type. + */ +uint64_t +wasm_runtime_get_current_module_inst(); + +/** + * Validate the app address, check whether it belongs to WASM module + * instance's address space, or in its heap space or memory space. + * + * @param module_inst the WASM module instance + * @param app_offset the app address to validate, which is a relative address + * @param size the size bytes of the app address + * + * @return true if success, false otherwise. + */ +bool +wasm_runtime_validate_app_addr(uint64_t module_inst, + int32_t app_offset, uint32_t size); + +/** + * Validate the native address, check whether it belongs to WASM module + * instance's address space, or in its heap space or memory space. + * + * @param module_inst the WASM module instance + * @param native_ptr the native address to validate, which is an absolute + * address + * @param size the size bytes of the app address + * + * @return true if success, false otherwise. + */ +bool +wasm_runtime_validate_native_addr(uint64_t module_inst, + uint64_t native_ptr, uint32_t size); + +/** + * Convert app address(relative address) to native address(absolute address) + * + * @param module_inst the WASM module instance + * @param app_offset the app adress + * + * @return the native address converted + */ +uint64_t +wasm_runtime_addr_app_to_native(uint64_t module_inst, + int32_t app_offset); + +/** + * Convert native address(absolute address) to app address(relative address) + * + * @param module_inst the WASM module instance + * @param native_ptr the native address + * + * @return the app address converted + */ +int32_t +wasm_runtime_addr_native_to_app(uint64_t module_inst, + uint64_t native_ptr); + +#ifdef __cplusplus +} +#endif + +#endif /* end of _WASM_EXPORT_H */ diff --git a/core/iwasm/lib/native/base/base_lib_export.c b/core/iwasm/lib/native/base/base_lib_export.c index 353871b6d..4d259a392 100644 --- a/core/iwasm/lib/native/base/base_lib_export.c +++ b/core/iwasm/lib/native/base/base_lib_export.c @@ -26,19 +26,17 @@ #endif static uint64 -wasm_runtime_get_current_module_inst_wrapper() +wasm_runtime_get_current_module_inst_wrapper(wasm_module_inst_t module_inst) { - return (uint64)(uintptr_t) - wasm_runtime_get_current_module_inst(); + return (uint64)(uintptr_t)module_inst; } static bool -wasm_runtime_validate_app_addr_wrapper(uint32 inst_part0, uint32 inst_part1, +wasm_runtime_validate_app_addr_wrapper(wasm_module_inst_t module_inst, + uint32 inst_part0, uint32 inst_part1, int32 app_offset, uint32 size) { bool ret; - wasm_module_inst_t module_inst = - wasm_runtime_get_current_module_inst(); union { uint64 u64; uint32 parts[2]; } inst; inst.parts[0] = inst_part0; @@ -56,14 +54,13 @@ wasm_runtime_validate_app_addr_wrapper(uint32 inst_part0, uint32 inst_part1, } static bool -wasm_runtime_validate_native_addr_wrapper(uint32 inst_part0, uint32 inst_part1, +wasm_runtime_validate_native_addr_wrapper(wasm_module_inst_t module_inst, + uint32 inst_part0, uint32 inst_part1, uint32 native_ptr_part0, uint32 native_ptr_part1, uint32 size) { bool ret; - wasm_module_inst_t module_inst = - wasm_runtime_get_current_module_inst(); union { uint64 u64; uint32 parts[2]; } inst; union { uint64 u64; uint32 parts[2]; } native_ptr; @@ -86,11 +83,10 @@ wasm_runtime_validate_native_addr_wrapper(uint32 inst_part0, uint32 inst_part1, } static uint64 -wasm_runtime_addr_app_to_native_wrapper(uint32 inst_part0, uint32 inst_part1, +wasm_runtime_addr_app_to_native_wrapper(wasm_module_inst_t module_inst, + uint32 inst_part0, uint32 inst_part1, int32 app_offset) { - wasm_module_inst_t module_inst = - wasm_runtime_get_current_module_inst(); union { uint64 u64; uint32 parts[2]; } inst; inst.parts[0] = inst_part0; @@ -105,12 +101,11 @@ wasm_runtime_addr_app_to_native_wrapper(uint32 inst_part0, uint32 inst_part1, } static int32 -wasm_runtime_addr_native_to_app_wrapper(uint32 inst_part0, uint32 inst_part1, +wasm_runtime_addr_native_to_app_wrapper(wasm_module_inst_t module_inst, + uint32 inst_part0, uint32 inst_part1, uint32 native_ptr_part0, uint32 native_ptr_part1) { - wasm_module_inst_t module_inst = - wasm_runtime_get_current_module_inst(); union { uint64 u64; uint32 parts[2]; } inst; union { uint64 u64; uint32 parts[2]; } native_ptr; diff --git a/core/iwasm/lib/native/base/request_response.c b/core/iwasm/lib/native/base/request_response.c index 641dc549c..6e6ab5992 100644 --- a/core/iwasm/lib/native/base/request_response.c +++ b/core/iwasm/lib/native/base/request_response.c @@ -14,16 +14,16 @@ * limitations under the License. */ -#include "native_interface.h" #include "app_manager_export.h" #include "coap_ext.h" #include "wasm_export.h" extern void module_request_handler(request_t *request, void *user_data); -bool wasm_response_send(int32 buffer_offset, int size) +bool +wasm_response_send(wasm_module_inst_t module_inst, + int32 buffer_offset, int size) { - wasm_module_inst_t module_inst = get_module_inst(); char *buffer = NULL; if (!validate_app_addr(buffer_offset, size)) @@ -45,9 +45,9 @@ bool wasm_response_send(int32 buffer_offset, int size) return false; } -void wasm_register_resource(int32 url_offset) +void +wasm_register_resource(wasm_module_inst_t module_inst, int32 url_offset) { - wasm_module_inst_t module_inst = get_module_inst(); char *url = NULL; if (!validate_app_addr(url_offset, 1)) @@ -61,9 +61,10 @@ void wasm_register_resource(int32 url_offset) } } -void wasm_post_request(int32 buffer_offset, int size) +void +wasm_post_request(wasm_module_inst_t module_inst, + int32 buffer_offset, int size) { - wasm_module_inst_t module_inst = get_module_inst(); char *buffer = NULL; if (!validate_app_addr(buffer_offset, size)) @@ -92,9 +93,9 @@ void wasm_post_request(int32 buffer_offset, int size) } } -void wasm_sub_event(int32 url_offset) +void +wasm_sub_event(wasm_module_inst_t module_inst, int32 url_offset) { - wasm_module_inst_t module_inst = get_module_inst(); char *url = NULL; if (!validate_app_addr(url_offset, 1)) diff --git a/core/iwasm/lib/native/base/runtime_lib.h b/core/iwasm/lib/native/base/runtime_lib.h index bf4dccfe3..d264eb84e 100644 --- a/core/iwasm/lib/native/base/runtime_lib.h +++ b/core/iwasm/lib/native/base/runtime_lib.h @@ -17,7 +17,6 @@ #ifndef LIB_BASE_RUNTIME_LIB_H_ #define LIB_BASE_RUNTIME_LIB_H_ -#include "native_interface.h" #include "runtime_timer.h" diff --git a/core/iwasm/lib/native/base/timer_wrapper.c b/core/iwasm/lib/native/base/timer_wrapper.c index da5c8943f..c655ed040 100644 --- a/core/iwasm/lib/native/base/timer_wrapper.c +++ b/core/iwasm/lib/native/base/timer_wrapper.c @@ -37,7 +37,7 @@ void wasm_timer_callback(timer_id_t id, unsigned int mod_id) // !!! the length parameter must be 0, so the receiver will // not free the payload pointer. - bh_post_msg(module->queue, TIMER_EVENT_WASM, (char *) id, 0); + bh_post_msg(module->queue, TIMER_EVENT_WASM, (char *)(uintptr_t)id, 0); } /// @@ -149,30 +149,37 @@ timer_ctx_t get_wasm_timer_ctx() return m->timer_ctx; } -timer_id_t wasm_create_timer(int interval, bool is_period, bool auto_start) +timer_id_t +wasm_create_timer(wasm_module_inst_t module_inst, + int interval, bool is_period, bool auto_start) { return sys_create_timer(get_wasm_timer_ctx(), interval, is_period, auto_start); } -void wasm_timer_destory(timer_id_t timer_id) +void +wasm_timer_destory(wasm_module_inst_t module_inst, timer_id_t timer_id) { sys_timer_destory(get_wasm_timer_ctx(), timer_id); } -void wasm_timer_cancel(timer_id_t timer_id) +void +wasm_timer_cancel(wasm_module_inst_t module_inst, timer_id_t timer_id) { sys_timer_cancel(get_wasm_timer_ctx(), timer_id); } -void wasm_timer_restart(timer_id_t timer_id, int interval) +void +wasm_timer_restart(wasm_module_inst_t module_inst, + timer_id_t timer_id, int interval) { sys_timer_restart(get_wasm_timer_ctx(), timer_id, interval); } extern uint32 get_sys_tick_ms(); -uint32 wasm_get_sys_tick_ms(void) +uint32 +wasm_get_sys_tick_ms(wasm_module_inst_t module_inst) { return (uint32) bh_get_tick_ms(); } diff --git a/core/iwasm/lib/native/extension/connection/connection_wrapper.c b/core/iwasm/lib/native/extension/connection/connection_wrapper.c index 7bcf5860d..1a163e429 100644 --- a/core/iwasm/lib/native/extension/connection/connection_wrapper.c +++ b/core/iwasm/lib/native/extension/connection/connection_wrapper.c @@ -23,10 +23,10 @@ * This file is the consumer of connection lib which is implemented by different platforms */ - -uint32 wasm_open_connection(int32 name_offset, int32 args_offset, uint32 len) +uint32 +wasm_open_connection(wasm_module_inst_t module_inst, + int32 name_offset, int32 args_offset, uint32 len) { - wasm_module_inst_t module_inst = get_module_inst(); attr_container_t *args; char *name, *args_buf; @@ -44,15 +44,17 @@ uint32 wasm_open_connection(int32 name_offset, int32 args_offset, uint32 len) return -1; } -void wasm_close_connection(uint32 handle) +void +wasm_close_connection(wasm_module_inst_t module_inst, uint32 handle) { if (connection_impl._close != NULL) connection_impl._close(handle); } -int wasm_send_on_connection(uint32 handle, int32 data_offset, uint32 len) +int +wasm_send_on_connection(wasm_module_inst_t module_inst, + uint32 handle, int32 data_offset, uint32 len) { - wasm_module_inst_t module_inst = get_module_inst(); char *data; if (!validate_app_addr(data_offset, len) || @@ -65,9 +67,10 @@ int wasm_send_on_connection(uint32 handle, int32 data_offset, uint32 len) return -1; } -bool wasm_config_connection(uint32 handle, int32 cfg_offset, uint32 len) +bool +wasm_config_connection(wasm_module_inst_t module_inst, + uint32 handle, int32 cfg_offset, uint32 len) { - wasm_module_inst_t module_inst = get_module_inst(); char *cfg_buf; attr_container_t *cfg; diff --git a/core/iwasm/lib/native/extension/gui/wgl_btn_wrapper.c b/core/iwasm/lib/native/extension/gui/wgl_btn_wrapper.c index 7b41826d1..fa46cb66a 100644 --- a/core/iwasm/lib/native/extension/gui/wgl_btn_wrapper.c +++ b/core/iwasm/lib/native/extension/gui/wgl_btn_wrapper.c @@ -45,7 +45,9 @@ static WGLNativeFuncDef btn_native_func_defs[] = { }; /*************** Native Interface to Wasm App ***********/ -void wasm_btn_native_call(int32 func_id, uint32 argv_offset, uint32 argc) +void +wasm_btn_native_call(wasm_module_inst_t module_inst, + int32 func_id, uint32 argv_offset, uint32 argc) { uint32 size = sizeof(btn_native_func_defs) / sizeof(WGLNativeFuncDef); diff --git a/core/iwasm/lib/native/extension/gui/wgl_cb_wrapper.c b/core/iwasm/lib/native/extension/gui/wgl_cb_wrapper.c index 435643310..d0ed63e07 100644 --- a/core/iwasm/lib/native/extension/gui/wgl_cb_wrapper.c +++ b/core/iwasm/lib/native/extension/gui/wgl_cb_wrapper.c @@ -61,7 +61,9 @@ static WGLNativeFuncDef cb_native_func_defs[] = { }; /*************** Native Interface to Wasm App ***********/ -void wasm_cb_native_call(int32 func_id, uint32 argv_offset, uint32 argc) +void +wasm_cb_native_call(wasm_module_inst_t module_inst, + int32 func_id, uint32 argv_offset, uint32 argc) { uint32 size = sizeof(cb_native_func_defs) / sizeof(WGLNativeFuncDef); diff --git a/core/iwasm/lib/native/extension/gui/wgl_label_wrapper.c b/core/iwasm/lib/native/extension/gui/wgl_label_wrapper.c index edf5ba49e..a99b591b3 100644 --- a/core/iwasm/lib/native/extension/gui/wgl_label_wrapper.c +++ b/core/iwasm/lib/native/extension/gui/wgl_label_wrapper.c @@ -60,7 +60,9 @@ static WGLNativeFuncDef label_native_func_defs[] = { }; /*************** Native Interface to Wasm App ***********/ -void wasm_label_native_call(int32 func_id, uint32 argv_offset, uint32 argc) +void +wasm_label_native_call(wasm_module_inst_t module_inst, + int32 func_id, uint32 argv_offset, uint32 argc) { uint32 size = sizeof(label_native_func_defs) / sizeof(WGLNativeFuncDef); diff --git a/core/iwasm/lib/native/extension/gui/wgl_list_wrapper.c b/core/iwasm/lib/native/extension/gui/wgl_list_wrapper.c index 882230777..59040fc05 100644 --- a/core/iwasm/lib/native/extension/gui/wgl_list_wrapper.c +++ b/core/iwasm/lib/native/extension/gui/wgl_list_wrapper.c @@ -51,7 +51,9 @@ static WGLNativeFuncDef list_native_func_defs[] = { }; /*************** Native Interface to Wasm App ***********/ -void wasm_list_native_call(int32 func_id, uint32 argv_offset, uint32 argc) +void +wasm_list_native_call(wasm_module_inst_t module_inst, + int32 func_id, uint32 argv_offset, uint32 argc) { uint32 size = sizeof(list_native_func_defs) / sizeof(WGLNativeFuncDef); diff --git a/core/iwasm/lib/native/extension/gui/wgl_obj_wrapper.c b/core/iwasm/lib/native/extension/gui/wgl_obj_wrapper.c index cd9c724b8..625077626 100644 --- a/core/iwasm/lib/native/extension/gui/wgl_obj_wrapper.c +++ b/core/iwasm/lib/native/extension/gui/wgl_obj_wrapper.c @@ -341,7 +341,9 @@ static WGLNativeFuncDef obj_native_func_defs[] = { }; /*************** Native Interface to Wasm App ***********/ -void wasm_obj_native_call(int32 func_id, uint32 argv_offset, uint32 argc) +void +wasm_obj_native_call(wasm_module_inst_t module_inst, + int32 func_id, uint32 argv_offset, uint32 argc) { uint32 size = sizeof(obj_native_func_defs) / sizeof(WGLNativeFuncDef); diff --git a/core/iwasm/lib/native/extension/sensor/runtime_sensor.c b/core/iwasm/lib/native/extension/sensor/runtime_sensor.c index ffaf4826d..54e1e799e 100644 --- a/core/iwasm/lib/native/extension/sensor/runtime_sensor.c +++ b/core/iwasm/lib/native/extension/sensor/runtime_sensor.c @@ -22,8 +22,10 @@ static sys_sensor_t * g_sys_sensors = NULL; static int g_sensor_id_max = 0; -static sensor_client_t *find_sensor_client(sys_sensor_t * sensor, - unsigned int client_id, bool remove_if_found); + +static sensor_client_t * +find_sensor_client(sys_sensor_t * sensor, + unsigned int client_id, bool remove_if_found); void (*rechedule_sensor_callback)() = NULL; @@ -32,7 +34,8 @@ void (*rechedule_sensor_callback)() = NULL; * */ -static void sensor_event_cleaner(sensor_event_data_t *sensor_event) +static void +sensor_event_cleaner(sensor_event_data_t *sensor_event) { if (sensor_event->data != NULL) { if (sensor_event->data_fmt == FMT_ATTR_CONTAINER) @@ -44,8 +47,8 @@ static void sensor_event_cleaner(sensor_event_data_t *sensor_event) bh_free(sensor_event); } -static void wasm_sensor_callback(void *client, uint32 sensor_id, - void *user_data) +static void +wasm_sensor_callback(void *client, uint32 sensor_id, void *user_data) { attr_container_t *sensor_data = (attr_container_t *) user_data; attr_container_t *sensor_data_clone; @@ -92,7 +95,10 @@ static void wasm_sensor_callback(void *client, uint32 sensor_id, bh_post_msg2(module->queue, msg); } -bool wasm_sensor_config(uint32 sensor, int interval, int bit_cfg, int delay) +bool +wasm_sensor_config(wasm_module_inst_t module_inst, + uint32 sensor, int interval, + int bit_cfg, int delay) { attr_container_t * attr_cont; sensor_client_t * c; @@ -132,9 +138,10 @@ bool wasm_sensor_config(uint32 sensor, int interval, int bit_cfg, int delay) return true; } -uint32 wasm_sensor_open(int32 name_offset, int instance) +uint32 +wasm_sensor_open(wasm_module_inst_t module_inst, + int32 name_offset, int instance) { - wasm_module_inst_t module_inst = get_module_inst(); char *name = NULL; if (!validate_app_addr(name_offset, 1)) @@ -185,10 +192,11 @@ uint32 wasm_sensor_open(int32 name_offset, int instance) return -1; } -bool wasm_sensor_config_with_attr_container(uint32 sensor, int32 buffer_offset, - int len) +bool +wasm_sensor_config_with_attr_container(wasm_module_inst_t module_inst, + uint32 sensor, int32 buffer_offset, + int len) { - wasm_module_inst_t module_inst = get_module_inst(); char *buffer = NULL; if (!validate_app_addr(buffer_offset, len)) @@ -211,7 +219,8 @@ bool wasm_sensor_config_with_attr_container(uint32 sensor, int32 buffer_offset, return false; } -bool wasm_sensor_close(uint32 sensor) +bool +wasm_sensor_close(wasm_module_inst_t module_inst, uint32 sensor) { unsigned int mod_id = app_manager_get_module_id(Module_WASM_App); unsigned int client_id = mod_id; @@ -271,8 +280,9 @@ void refresh_read_interval(sensor_obj_t sensor) sensor->read_interval = interval; } -sensor_obj_t add_sys_sensor(char * name, char * description, int instance, - uint32 default_interval, void * read_func, void * config_func) +sensor_obj_t +add_sys_sensor(char * name, char * description, int instance, + uint32 default_interval, void * read_func, void * config_func) { sys_sensor_t * s = (sys_sensor_t *) bh_malloc(sizeof(sys_sensor_t)); if (s == NULL) diff --git a/core/iwasm/lib/native/extension/sensor/runtime_sensor.h b/core/iwasm/lib/native/extension/sensor/runtime_sensor.h index ce53392fa..f19b4f09d 100644 --- a/core/iwasm/lib/native/extension/sensor/runtime_sensor.h +++ b/core/iwasm/lib/native/extension/sensor/runtime_sensor.h @@ -19,6 +19,8 @@ #include "bh_platform.h" #include "attr_container.h" +#include "wasm_export.h" + struct _sys_sensor; typedef struct _sys_sensor* sensor_obj_t; @@ -60,16 +62,19 @@ int check_sensor_timers(); void reschedule_sensor_read(); uint32 -wasm_sensor_open(int32 name_offset, int instance); +wasm_sensor_open(wasm_module_inst_t module_inst, + int32 name_offset, int instance); bool -wasm_sensor_config(uint32 sensor, int interval, int bit_cfg, int delay); +wasm_sensor_config(wasm_module_inst_t module_inst, + uint32 sensor, int interval, int bit_cfg, int delay); bool -wasm_sensor_config_with_attr_container(uint32 sensor, int32 buffer_offset, - int len); +wasm_sensor_config_with_attr_container(wasm_module_inst_t module_inst, + uint32 sensor, int32 buffer_offset, + int len); bool -wasm_sensor_close(uint32 sensor); +wasm_sensor_close(wasm_module_inst_t module_inst, uint32 sensor); #endif /* LIB_EXTENSION_RUNTIME_SENSOR_H_ */ diff --git a/core/iwasm/lib/native/libc/libc_wrapper.c b/core/iwasm/lib/native/libc/libc_wrapper.c index 8972356ec..bfd2c53df 100644 --- a/core/iwasm/lib/native/libc/libc_wrapper.c +++ b/core/iwasm/lib/native/libc/libc_wrapper.c @@ -34,9 +34,6 @@ wasm_runtime_get_llvm_stack(wasm_module_inst_t module); void wasm_runtime_set_llvm_stack(wasm_module_inst_t module, uint32 llvm_stack); -#define get_module_inst() \ - wasm_runtime_get_current_module_inst() - #define validate_app_addr(offset, size) \ wasm_runtime_validate_app_addr(module_inst, offset, size) @@ -454,9 +451,9 @@ parse_printf_args(wasm_module_inst_t module_inst, int32 fmt_offset, } static int -_printf_wrapper(int32 fmt_offset, int32 va_list_offset) +_printf_wrapper(wasm_module_inst_t module_inst, + int32 fmt_offset, int32 va_list_offset) { - wasm_module_inst_t module_inst = get_module_inst(); struct str_context ctx = { NULL, 0, 0 }; const char *fmt; _va_list va_args; @@ -470,9 +467,9 @@ _printf_wrapper(int32 fmt_offset, int32 va_list_offset) } static int -_sprintf_wrapper(int32 str_offset, int32 fmt_offset, int32 va_list_offset) +_sprintf_wrapper(wasm_module_inst_t module_inst, + int32 str_offset, int32 fmt_offset, int32 va_list_offset) { - wasm_module_inst_t module_inst = get_module_inst(); int32 app_end_offset; struct str_context ctx; char *str; @@ -505,10 +502,10 @@ _sprintf_wrapper(int32 str_offset, int32 fmt_offset, int32 va_list_offset) } static int -_snprintf_wrapper(int32 str_offset, int32 size, int32 fmt_offset, +_snprintf_wrapper(wasm_module_inst_t module_inst, + int32 str_offset, int32 size, int32 fmt_offset, int32 va_list_offset) { - wasm_module_inst_t module_inst = get_module_inst(); struct str_context ctx; char *str; const char *fmt; @@ -537,9 +534,9 @@ _snprintf_wrapper(int32 str_offset, int32 size, int32 fmt_offset, } static int -_puts_wrapper(int32 str_offset) +_puts_wrapper(wasm_module_inst_t module_inst, + int32 str_offset) { - wasm_module_inst_t module_inst = get_module_inst(); const char *str; if (!validate_str_addr(module_inst, str_offset)) @@ -550,16 +547,16 @@ _puts_wrapper(int32 str_offset) } static int -_putchar_wrapper(int c) +_putchar_wrapper(wasm_module_inst_t module_inst, int c) { bh_printf("%c", c); return 1; } static int32 -_strdup_wrapper(int32 str_offset) +_strdup_wrapper(wasm_module_inst_t module_inst, + int32 str_offset) { - wasm_module_inst_t module_inst = get_module_inst(); char *str, *str_ret; uint32 len; int32 str_ret_offset = 0; @@ -583,9 +580,9 @@ _strdup_wrapper(int32 str_offset) } static int32 -_memcmp_wrapper(int32 s1_offset, int32 s2_offset, int32 size) +_memcmp_wrapper(wasm_module_inst_t module_inst, + int32 s1_offset, int32 s2_offset, int32 size) { - wasm_module_inst_t module_inst = get_module_inst(); void *s1, *s2; if (!validate_app_addr(s1_offset, size) @@ -598,9 +595,9 @@ _memcmp_wrapper(int32 s1_offset, int32 s2_offset, int32 size) } static int32 -_memcpy_wrapper(int32 dst_offset, int32 src_offset, int32 size) +_memcpy_wrapper(wasm_module_inst_t module_inst, + int32 dst_offset, int32 src_offset, int32 size) { - wasm_module_inst_t module_inst = get_module_inst(); void *dst, *src; if (size == 0) @@ -617,9 +614,9 @@ _memcpy_wrapper(int32 dst_offset, int32 src_offset, int32 size) } static int32 -_memmove_wrapper(int32 dst_offset, int32 src_offset, int32 size) +_memmove_wrapper(wasm_module_inst_t module_inst, + int32 dst_offset, int32 src_offset, int32 size) { - wasm_module_inst_t module_inst = get_module_inst(); void *dst, *src; if (!validate_app_addr(dst_offset, size) @@ -633,9 +630,9 @@ _memmove_wrapper(int32 dst_offset, int32 src_offset, int32 size) } static int32 -_memset_wrapper(int32 s_offset, int32 c, int32 size) +_memset_wrapper(wasm_module_inst_t module_inst, + int32 s_offset, int32 c, int32 size) { - wasm_module_inst_t module_inst = get_module_inst(); void *s; if (!validate_app_addr(s_offset, size)) @@ -647,9 +644,9 @@ _memset_wrapper(int32 s_offset, int32 c, int32 size) } static int32 -_strchr_wrapper(int32 s_offset, int32 c) +_strchr_wrapper(wasm_module_inst_t module_inst, + int32 s_offset, int32 c) { - wasm_module_inst_t module_inst = get_module_inst(); const char *s; char *ret; @@ -662,9 +659,9 @@ _strchr_wrapper(int32 s_offset, int32 c) } static int32 -_strcmp_wrapper(int32 s1_offset, int32 s2_offset) +_strcmp_wrapper(wasm_module_inst_t module_inst, + int32 s1_offset, int32 s2_offset) { - wasm_module_inst_t module_inst = get_module_inst(); void *s1, *s2; if (!validate_str_addr(module_inst, s1_offset) @@ -677,9 +674,9 @@ _strcmp_wrapper(int32 s1_offset, int32 s2_offset) } static int32 -_strncmp_wrapper(int32 s1_offset, int32 s2_offset, uint32 size) +_strncmp_wrapper(wasm_module_inst_t module_inst, + int32 s1_offset, int32 s2_offset, uint32 size) { - wasm_module_inst_t module_inst = get_module_inst(); void *s1, *s2; if (!validate_app_addr(s1_offset, size) @@ -692,9 +689,9 @@ _strncmp_wrapper(int32 s1_offset, int32 s2_offset, uint32 size) } static int32 -_strcpy_wrapper(int32 dst_offset, int32 src_offset) +_strcpy_wrapper(wasm_module_inst_t module_inst, + int32 dst_offset, int32 src_offset) { - wasm_module_inst_t module_inst = get_module_inst(); char *dst, *src; uint32 len; @@ -713,9 +710,9 @@ _strcpy_wrapper(int32 dst_offset, int32 src_offset) } static int32 -_strncpy_wrapper(int32 dst_offset, int32 src_offset, uint32 size) +_strncpy_wrapper(wasm_module_inst_t module_inst, + int32 dst_offset, int32 src_offset, uint32 size) { - wasm_module_inst_t module_inst = get_module_inst(); char *dst, *src; if (!validate_app_addr(dst_offset, size) @@ -729,9 +726,9 @@ _strncpy_wrapper(int32 dst_offset, int32 src_offset, uint32 size) } static uint32 -_strlen_wrapper(int32 s_offset) +_strlen_wrapper(wasm_module_inst_t module_inst, + int32 s_offset) { - wasm_module_inst_t module_inst = get_module_inst(); char *s; if (!validate_str_addr(module_inst, s_offset)) @@ -742,17 +739,17 @@ _strlen_wrapper(int32 s_offset) } static int32 -_malloc_wrapper(uint32 size) +_malloc_wrapper(wasm_module_inst_t module_inst, + uint32 size) { - wasm_module_inst_t module_inst = get_module_inst(); return module_malloc(size); } static int32 -_calloc_wrapper(uint32 nmemb, uint32 size) +_calloc_wrapper(wasm_module_inst_t module_inst, + uint32 nmemb, uint32 size) { uint64 total_size = (uint64) nmemb * (uint64) size; - wasm_module_inst_t module_inst = get_module_inst(); uint32 ret_offset = 0; uint8 *ret_ptr; @@ -769,31 +766,30 @@ _calloc_wrapper(uint32 nmemb, uint32 size) } static void -_free_wrapper(int32 ptr_offset) +_free_wrapper(wasm_module_inst_t module_inst, + int32 ptr_offset) { - wasm_module_inst_t module_inst = get_module_inst(); - if (!validate_app_addr(ptr_offset, 4)) return; return module_free(ptr_offset); } static void -setTempRet0_wrapper(uint32 temp_ret) +setTempRet0_wrapper(wasm_module_inst_t module_inst, + uint32 temp_ret) { - wasm_module_inst_t module_inst = get_module_inst(); wasm_runtime_set_temp_ret(module_inst, temp_ret); } static uint32 -getTempRet0_wrapper() +getTempRet0_wrapper(wasm_module_inst_t module_inst) { - wasm_module_inst_t module_inst = get_module_inst(); return wasm_runtime_get_temp_ret(module_inst); } static uint32 -_llvm_bswap_i16_wrapper(uint32 data) +_llvm_bswap_i16_wrapper(wasm_module_inst_t module_inst, + uint32 data) { return (data & 0xFFFF0000) | ((data & 0xFF) << 8) @@ -801,7 +797,8 @@ _llvm_bswap_i16_wrapper(uint32 data) } static uint32 -_llvm_bswap_i32_wrapper(uint32 data) +_llvm_bswap_i32_wrapper(wasm_module_inst_t module_inst, + uint32 data) { return ((data & 0xFF) << 24) | ((data & 0xFF00) << 8) @@ -810,10 +807,10 @@ _llvm_bswap_i32_wrapper(uint32 data) } static uint32 -_bitshift64Lshr_wrapper(uint32 uint64_part0, uint32 uint64_part1, +_bitshift64Lshr_wrapper(wasm_module_inst_t module_inst, + uint32 uint64_part0, uint32 uint64_part1, uint32 bits) { - wasm_module_inst_t module_inst = get_module_inst(); union { uint64 value; uint32 parts[2]; @@ -829,10 +826,10 @@ _bitshift64Lshr_wrapper(uint32 uint64_part0, uint32 uint64_part1, } static uint32 -_bitshift64Shl_wrapper(uint32 int64_part0, uint32 int64_part1, +_bitshift64Shl_wrapper(wasm_module_inst_t module_inst, + uint32 int64_part0, uint32 int64_part1, uint32 bits) { - wasm_module_inst_t module_inst = get_module_inst(); union { int64 value; uint32 parts[2]; @@ -848,26 +845,25 @@ _bitshift64Shl_wrapper(uint32 int64_part0, uint32 int64_part1, } static void -_llvm_stackrestore_wrapper(uint32 llvm_stack) +_llvm_stackrestore_wrapper(wasm_module_inst_t module_inst, + uint32 llvm_stack) { - wasm_module_inst_t module_inst = get_module_inst(); bh_printf("_llvm_stackrestore called!\n"); wasm_runtime_set_llvm_stack(module_inst, llvm_stack); } static uint32 -_llvm_stacksave_wrapper() +_llvm_stacksave_wrapper(wasm_module_inst_t module_inst) { - wasm_module_inst_t module_inst = get_module_inst(); bh_printf("_llvm_stacksave called!\n"); return wasm_runtime_get_llvm_stack(module_inst); } static int32 -_emscripten_memcpy_big_wrapper(int32 dst_offset, int32 src_offset, +_emscripten_memcpy_big_wrapper(wasm_module_inst_t module_inst, + int32 dst_offset, int32 src_offset, uint32 size) { - wasm_module_inst_t module_inst = get_module_inst(); void *dst, *src; if (!validate_app_addr(dst_offset, size) @@ -882,27 +878,27 @@ _emscripten_memcpy_big_wrapper(int32 dst_offset, int32 src_offset, } static void -abort_wrapper(int32 code) +abort_wrapper(wasm_module_inst_t module_inst, + int32 code) { - wasm_module_inst_t module_inst = get_module_inst(); char buf[32]; snprintf(buf, sizeof(buf), "env.abort(%i)", code); wasm_runtime_set_exception(module_inst, buf); } static void -abortStackOverflow_wrapper(int32 code) +abortStackOverflow_wrapper(wasm_module_inst_t module_inst, + int32 code) { - wasm_module_inst_t module_inst = get_module_inst(); char buf[32]; snprintf(buf, sizeof(buf), "env.abortStackOverflow(%i)", code); wasm_runtime_set_exception(module_inst, buf); } static void -nullFunc_X_wrapper(int32 code) +nullFunc_X_wrapper(wasm_module_inst_t module_inst, + int32 code) { - wasm_module_inst_t module_inst = get_module_inst(); char buf[32]; snprintf(buf, sizeof(buf), "env.nullFunc_X(%i)", code); wasm_runtime_set_exception(module_inst, buf); @@ -912,13 +908,13 @@ nullFunc_X_wrapper(int32 code) #ifdef ENABLE_SPEC_TEST static void -print_i32_wrapper(int i32) +print_i32_wrapper(wasm_module_inst_t module_inst, int i32) { bh_printf("%d\n", i32); } static void -print_wrapper(int i32) +print_wrapper(wasm_module_inst_t module_inst, int i32) { bh_printf("%d\n", i32); } diff --git a/core/iwasm/runtime/platform/linux-sgx/wasm_native.c b/core/iwasm/runtime/platform/linux-sgx/wasm_native.c index 59b081b7b..b8d64b08c 100644 --- a/core/iwasm/runtime/platform/linux-sgx/wasm_native.c +++ b/core/iwasm/runtime/platform/linux-sgx/wasm_native.c @@ -35,9 +35,6 @@ #include -#define get_module_inst() \ - wasm_runtime_get_current_module_inst() - #define validate_app_addr(offset, size) \ wasm_runtime_validate_app_addr(module_inst, offset, size) @@ -55,7 +52,7 @@ static int32 -__syscall0_wrapper(int32 arg0) +__syscall0_wrapper(WASMModuleInstance *module_inst, int32 arg0) { switch (arg0) { case 199: /* getuid */ @@ -67,7 +64,7 @@ __syscall0_wrapper(int32 arg0) } static int32 -__syscall1_wrapper(int32 arg0, int32 arg1) +__syscall1_wrapper(WASMModuleInstance *module_inst, int32 arg0, int32 arg1) { switch (arg0) { case 6: /* close */ @@ -79,7 +76,8 @@ __syscall1_wrapper(int32 arg0, int32 arg1) } static int32 -__syscall2_wrapper(int32 arg0, int32 arg1, int32 arg2) +__syscall2_wrapper(WASMModuleInstance *module_inst, + int32 arg0, int32 arg1, int32 arg2) { switch (arg0) { case 183: /* getcwd */ @@ -91,10 +89,9 @@ __syscall2_wrapper(int32 arg0, int32 arg1, int32 arg2) } static int32 -__syscall3_wrapper(int32 arg0, int32 arg1, int32 arg2, int32 arg3) +__syscall3_wrapper(WASMModuleInstance *module_inst, + int32 arg0, int32 arg1, int32 arg2, int32 arg3) { - WASMModuleInstance *module_inst = get_module_inst(); - switch (arg0) { case 146: /* writev */ { @@ -145,7 +142,8 @@ __syscall3_wrapper(int32 arg0, int32 arg1, int32 arg2, int32 arg3) } static int32 -__syscall4_wrapper(int32 arg0, int32 arg1, int32 arg2, +__syscall4_wrapper(WASMModuleInstance *module_inst, + int32 arg0, int32 arg1, int32 arg2, int32 arg3, int32 arg4) { bh_printf("##_syscall4 called, syscall id: %d\n", arg0); @@ -153,7 +151,8 @@ __syscall4_wrapper(int32 arg0, int32 arg1, int32 arg2, } static int32 -__syscall5_wrapper(int32 arg0, int32 arg1, int32 arg2, +__syscall5_wrapper(WASMModuleInstance *module_inst, + int32 arg0, int32 arg1, int32 arg2, int32 arg3, int32 arg4, int32 arg5) { switch (arg0) { @@ -166,46 +165,54 @@ __syscall5_wrapper(int32 arg0, int32 arg1, int32 arg2, } #define GET_EMCC_SYSCALL_ARGS() \ - WASMModuleInstance *module_inst = get_module_inst(); \ int32 *args; \ if (!validate_app_addr(args_off, 1)) \ return 0; \ args = addr_app_to_native(args_off) \ -#define EMCC_SYSCALL_WRAPPER0(id) \ - static int32 ___syscall##id##_wrapper(int32 _id) { \ - return __syscall0_wrapper(id); \ +#define EMCC_SYSCALL_WRAPPER0(id) \ + static int32 ___syscall##id##_wrapper(WASMModuleInstance *module_inst,\ + int32 _id) { \ + return __syscall0_wrapper(module_inst, id); \ } -#define EMCC_SYSCALL_WRAPPER1(id) \ - static int32 ___syscall##id##_wrapper(int32 _id, int32 args_off) {\ - GET_EMCC_SYSCALL_ARGS(); \ - return __syscall1_wrapper(id, args[0]); \ +#define EMCC_SYSCALL_WRAPPER1(id) \ + static int32 ___syscall##id##_wrapper(WASMModuleInstance *module_inst,\ + int32 _id, int32 args_off) { \ + GET_EMCC_SYSCALL_ARGS(); \ + return __syscall1_wrapper(module_inst, id, args[0]); \ } -#define EMCC_SYSCALL_WRAPPER2(id) \ - static int32 ___syscall##id##_wrapper(int32 _id, int32 args_off) {\ - GET_EMCC_SYSCALL_ARGS(); \ - return __syscall2_wrapper(id, args[0], args[1]); \ +#define EMCC_SYSCALL_WRAPPER2(id) \ + static int32 ___syscall##id##_wrapper(WASMModuleInstance *module_inst,\ + int32 _id, int32 args_off){ \ + GET_EMCC_SYSCALL_ARGS(); \ + return __syscall2_wrapper(module_inst, id, args[0], args[1]); \ } -#define EMCC_SYSCALL_WRAPPER3(id) \ - static int32 ___syscall##id##_wrapper(int32 _id, int32 args_off) {\ - GET_EMCC_SYSCALL_ARGS(); \ - return __syscall3_wrapper(id, args[0], args[1], args[2]); \ +#define EMCC_SYSCALL_WRAPPER3(id) \ + static int32 ___syscall##id##_wrapper(WASMModuleInstance *module_inst,\ + int32 _id, int32 args_off) { \ + GET_EMCC_SYSCALL_ARGS(); \ + return __syscall3_wrapper(module_inst, id, \ + args[0], args[1], args[2]); \ } -#define EMCC_SYSCALL_WRAPPER4(id) \ - static int32 ___syscall##id##_wrapper(int32 _id, int32 args_off) {\ - GET_EMCC_SYSCALL_ARGS(); \ - return __syscall4_wrapper(id, args[0], args[1], args[2], args[3]);\ +#define EMCC_SYSCALL_WRAPPER4(id) \ + static int32 ___syscall##id##_wrapper(WASMModuleInstance *module_inst,\ + int32 _id, int32 args_off) { \ + GET_EMCC_SYSCALL_ARGS(); \ + return __syscall4_wrapper(module_inst, id, \ + args[0], args[1], args[2], args[3]); \ } -#define EMCC_SYSCALL_WRAPPER5(id) \ - static int32 ___syscall##id##_wrapper(int32 _id, int32 args_off) {\ - GET_EMCC_SYSCALL_ARGS(); \ - return __syscall5_wrapper(id, args[0], args[1], args[2], \ - args[3], args[4]); \ +#define EMCC_SYSCALL_WRAPPER5(id) \ + static int32 ___syscall##id##_wrapper(WASMModuleInstance *module_inst,\ + int32 _id, int32 args_off) { \ + GET_EMCC_SYSCALL_ARGS(); \ + return __syscall5_wrapper(module_inst, id, \ + args[0], args[1], args[2], \ + args[3], args[4]); \ } EMCC_SYSCALL_WRAPPER0(199) @@ -224,18 +231,16 @@ EMCC_SYSCALL_WRAPPER3(221) EMCC_SYSCALL_WRAPPER5(140) static int32 -getTotalMemory_wrapper() +getTotalMemory_wrapper(WASMModuleInstance *module_inst) { - WASMModuleInstance *module_inst = wasm_runtime_get_current_module_inst(); WASMMemoryInstance *memory = module_inst->default_memory; return NumBytesPerPage * memory->cur_page_count; } static int32 -enlargeMemory_wrapper() +enlargeMemory_wrapper(WASMModuleInstance *module_inst) { bool ret; - WASMModuleInstance *module_inst = wasm_runtime_get_current_module_inst(); WASMMemoryInstance *memory = module_inst->default_memory; uint32 DYNAMICTOP_PTR_offset = module_inst->DYNAMICTOP_PTR_offset; uint32 addr_data_offset = *(uint32*)(memory->global_data + DYNAMICTOP_PTR_offset); @@ -254,9 +259,8 @@ enlargeMemory_wrapper() } static void -_abort_wrapper(int32 code) +_abort_wrapper(WASMModuleInstance *module_inst, int32 code) { - WASMModuleInstance *module_inst = wasm_runtime_get_current_module_inst(); char buf[32]; snprintf(buf, sizeof(buf), "env.abort(%i)", code); @@ -264,14 +268,13 @@ _abort_wrapper(int32 code) } static void -abortOnCannotGrowMemory_wrapper() +abortOnCannotGrowMemory_wrapper(WASMModuleInstance *module_inst) { - WASMModuleInstance *module_inst = wasm_runtime_get_current_module_inst(); wasm_runtime_set_exception(module_inst, "abort on cannot grow memory"); } static void -___setErrNo_wrapper(int32 error_no) +___setErrNo_wrapper(WASMModuleInstance *module_inst, int32 error_no) { errno = error_no; } @@ -330,3 +333,4 @@ wasm_platform_native_func_lookup(const char *module_name, return NULL; } + diff --git a/core/iwasm/runtime/platform/linux/wasm_native.c b/core/iwasm/runtime/platform/linux/wasm_native.c index c12e85c75..638f57344 100644 --- a/core/iwasm/runtime/platform/linux/wasm_native.c +++ b/core/iwasm/runtime/platform/linux/wasm_native.c @@ -35,9 +35,6 @@ #include -#define get_module_inst() \ - wasm_runtime_get_current_module_inst() - #define validate_app_addr(offset, size) \ wasm_runtime_validate_app_addr(module_inst, offset, size) @@ -55,46 +52,46 @@ static int32 -__syscall0_wrapper(int32 arg0) +__syscall0_wrapper(WASMModuleInstance *module_inst, int32 arg0) { switch (arg0) { case 199: /* getuid */ /* TODO */ default: - printf("##_syscall0 called, syscall id: %d\n", arg0); + bh_printf("##_syscall0 called, syscall id: %d\n", arg0); } return 0; } static int32 -__syscall1_wrapper(int32 arg0, int32 arg1) +__syscall1_wrapper(WASMModuleInstance *module_inst, int32 arg0, int32 arg1) { switch (arg0) { case 6: /* close */ /* TODO */ default: - printf("##_syscall1 called, syscall id: %d\n", arg0); + bh_printf("##_syscall1 called, syscall id: %d\n", arg0); } return 0; } static int32 -__syscall2_wrapper(int32 arg0, int32 arg1, int32 arg2) +__syscall2_wrapper(WASMModuleInstance *module_inst, + int32 arg0, int32 arg1, int32 arg2) { switch (arg0) { case 183: /* getcwd */ /* TODO */ default: - printf("##_syscall2 called, syscall id: %d\n", arg0); + bh_printf("##_syscall2 called, syscall id: %d\n", arg0); } return 0; } static int32 -__syscall3_wrapper(int32 arg0, int32 arg1, int32 arg2, int32 arg3) +__syscall3_wrapper(WASMModuleInstance *module_inst, + int32 arg0, int32 arg1, int32 arg2, int32 arg3) { - WASMModuleInstance *module_inst = get_module_inst(); - switch (arg0) { case 54: /* ioctl */ { @@ -152,73 +149,83 @@ __syscall3_wrapper(int32 arg0, int32 arg1, int32 arg2, int32 arg3) case 221: /* fcntl */ /* TODO */ default: - printf("##_syscall3 called, syscall id: %d\n", arg0); + bh_printf("##_syscall3 called, syscall id: %d\n", arg0); } return 0; } static int32 -__syscall4_wrapper(int32 arg0, int32 arg1, int32 arg2, +__syscall4_wrapper(WASMModuleInstance *module_inst, + int32 arg0, int32 arg1, int32 arg2, int32 arg3, int32 arg4) { - printf("##_syscall4 called, syscall id: %d\n", arg0); + bh_printf("##_syscall4 called, syscall id: %d\n", arg0); return 0; } static int32 -__syscall5_wrapper(int32 arg0, int32 arg1, int32 arg2, +__syscall5_wrapper(WASMModuleInstance *module_inst, + int32 arg0, int32 arg1, int32 arg2, int32 arg3, int32 arg4, int32 arg5) { switch (arg0) { case 140: /* llseek */ /* TODO */ default: - printf("##_syscall5 called, args[0]: %d\n", arg0); + bh_printf("##_syscall5 called, args[0]: %d\n", arg0); } return 0; } #define GET_EMCC_SYSCALL_ARGS() \ - WASMModuleInstance *module_inst = get_module_inst(); \ int32 *args; \ if (!validate_app_addr(args_off, 1)) \ return 0; \ args = addr_app_to_native(args_off) \ -#define EMCC_SYSCALL_WRAPPER0(id) \ - static int32 ___syscall##id##_wrapper(int32 _id) { \ - return __syscall0_wrapper(id); \ +#define EMCC_SYSCALL_WRAPPER0(id) \ + static int32 ___syscall##id##_wrapper(WASMModuleInstance *module_inst,\ + int32 _id) { \ + return __syscall0_wrapper(module_inst, id); \ } -#define EMCC_SYSCALL_WRAPPER1(id) \ - static int32 ___syscall##id##_wrapper(int32 _id, int32 args_off) {\ - GET_EMCC_SYSCALL_ARGS(); \ - return __syscall1_wrapper(id, args[0]); \ +#define EMCC_SYSCALL_WRAPPER1(id) \ + static int32 ___syscall##id##_wrapper(WASMModuleInstance *module_inst,\ + int32 _id, int32 args_off) { \ + GET_EMCC_SYSCALL_ARGS(); \ + return __syscall1_wrapper(module_inst, id, args[0]); \ } -#define EMCC_SYSCALL_WRAPPER2(id) \ - static int32 ___syscall##id##_wrapper(int32 _id, int32 args_off) {\ - GET_EMCC_SYSCALL_ARGS(); \ - return __syscall2_wrapper(id, args[0], args[1]); \ +#define EMCC_SYSCALL_WRAPPER2(id) \ + static int32 ___syscall##id##_wrapper(WASMModuleInstance *module_inst,\ + int32 _id, int32 args_off){ \ + GET_EMCC_SYSCALL_ARGS(); \ + return __syscall2_wrapper(module_inst, id, args[0], args[1]); \ } -#define EMCC_SYSCALL_WRAPPER3(id) \ - static int32 ___syscall##id##_wrapper(int32 _id, int32 args_off) {\ - GET_EMCC_SYSCALL_ARGS(); \ - return __syscall3_wrapper(id, args[0], args[1], args[2]); \ +#define EMCC_SYSCALL_WRAPPER3(id) \ + static int32 ___syscall##id##_wrapper(WASMModuleInstance *module_inst,\ + int32 _id, int32 args_off) { \ + GET_EMCC_SYSCALL_ARGS(); \ + return __syscall3_wrapper(module_inst, id, \ + args[0], args[1], args[2]); \ } -#define EMCC_SYSCALL_WRAPPER4(id) \ - static int32 ___syscall##id##_wrapper(int32 _id, int32 args_off) {\ - GET_EMCC_SYSCALL_ARGS(); \ - return __syscall4_wrapper(id, args[0], args[1], args[2], args[3]);\ +#define EMCC_SYSCALL_WRAPPER4(id) \ + static int32 ___syscall##id##_wrapper(WASMModuleInstance *module_inst,\ + int32 _id, int32 args_off) { \ + GET_EMCC_SYSCALL_ARGS(); \ + return __syscall4_wrapper(module_inst, id, \ + args[0], args[1], args[2], args[3]); \ } -#define EMCC_SYSCALL_WRAPPER5(id) \ - static int32 ___syscall##id##_wrapper(int32 _id, int32 args_off) {\ - GET_EMCC_SYSCALL_ARGS(); \ - return __syscall5_wrapper(id, args[0], args[1], args[2], \ - args[3], args[4]); \ +#define EMCC_SYSCALL_WRAPPER5(id) \ + static int32 ___syscall##id##_wrapper(WASMModuleInstance *module_inst,\ + int32 _id, int32 args_off) { \ + GET_EMCC_SYSCALL_ARGS(); \ + return __syscall5_wrapper(module_inst, id, \ + args[0], args[1], args[2], \ + args[3], args[4]); \ } EMCC_SYSCALL_WRAPPER0(199) @@ -237,18 +244,16 @@ EMCC_SYSCALL_WRAPPER3(221) EMCC_SYSCALL_WRAPPER5(140) static int32 -getTotalMemory_wrapper() +getTotalMemory_wrapper(WASMModuleInstance *module_inst) { - WASMModuleInstance *module_inst = wasm_runtime_get_current_module_inst(); WASMMemoryInstance *memory = module_inst->default_memory; return NumBytesPerPage * memory->cur_page_count; } static int32 -enlargeMemory_wrapper() +enlargeMemory_wrapper(WASMModuleInstance *module_inst) { bool ret; - WASMModuleInstance *module_inst = wasm_runtime_get_current_module_inst(); WASMMemoryInstance *memory = module_inst->default_memory; uint32 DYNAMICTOP_PTR_offset = module_inst->DYNAMICTOP_PTR_offset; uint32 addr_data_offset = *(uint32*)(memory->global_data + DYNAMICTOP_PTR_offset); @@ -267,9 +272,8 @@ enlargeMemory_wrapper() } static void -_abort_wrapper(int32 code) +_abort_wrapper(WASMModuleInstance *module_inst, int32 code) { - WASMModuleInstance *module_inst = wasm_runtime_get_current_module_inst(); char buf[32]; snprintf(buf, sizeof(buf), "env.abort(%i)", code); @@ -277,14 +281,13 @@ _abort_wrapper(int32 code) } static void -abortOnCannotGrowMemory_wrapper() +abortOnCannotGrowMemory_wrapper(WASMModuleInstance *module_inst) { - WASMModuleInstance *module_inst = wasm_runtime_get_current_module_inst(); wasm_runtime_set_exception(module_inst, "abort on cannot grow memory"); } static void -___setErrNo_wrapper(int32 error_no) +___setErrNo_wrapper(WASMModuleInstance *module_inst, int32 error_no) { errno = error_no; } diff --git a/core/iwasm/runtime/vmcore-wasm/invokeNative_arm.s b/core/iwasm/runtime/vmcore-wasm/invokeNative_arm.s new file mode 100644 index 000000000..10f6b591d --- /dev/null +++ b/core/iwasm/runtime/vmcore-wasm/invokeNative_arm.s @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + .text + .align 2 + .global invokeNative + .type invokeNative,function + +/* + * Arguments passed in: + * + * r0 argv + * r1 argc + * r2 function pntr + */ + +invokeNative: + stmfd sp!, {r4, r5, r6, r7, lr} + mov r4, r0 /* get argv */ + mov r5, r1 /* get argc */ + mov ip, r2 /* get function ptr */ + + cmp r5, #2 /* is argc < 2 ? */ + blt return + + ldr r0, [r4], #4 /* argv[0] */ + ldr r1, [r4], #4 /* argv[1] */ + + mov r6, #0 + + cmp r5, #2 + beq call_func + ldr r2, [r4], #4 + cmp r5, #3 + beq call_func + ldr r3, [r4], #4 + + subs r5, r5, #4 /* now we have r0 ~ r3 */ + + /* Ensure address is 8 byte aligned */ + mov r6, r5, lsl#2 + add r6, r6, #7 + bic r6, r6, #7 + add r6, r6, #4 /* +4 because only odd(5) registers are in stack */ + subs sp, sp, r6 /* for stacked args */ + mov r7, sp + +loop_args: + cmp r5, #0 + beq call_func + ldr lr, [r4], #4 + str lr, [r7], #4 + subs r5, r5, #1 + b loop_args + +call_func: + blx ip + + add sp, sp, r6 /* recover sp */ + +return: + ldmfd sp!, {r4, r5, r6, r7, lr} + bx lr diff --git a/core/iwasm/runtime/vmcore-wasm/invokeNative_em64.s b/core/iwasm/runtime/vmcore-wasm/invokeNative_em64.s new file mode 100644 index 000000000..d4c922f65 --- /dev/null +++ b/core/iwasm/runtime/vmcore-wasm/invokeNative_em64.s @@ -0,0 +1,72 @@ +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Author: Ivan Volosyuk +// + .text + .align 2 +.globl invokeNative + .type invokeNative, @function +invokeNative: + /* rdi - memory */ + /* rsi - n fp args */ + /* rdx - n mem args */ + /* rcx - function ptr */ + + push %rbp + mov %rsp, %rbp + + /* cycle to fill all fp args */ + movq 8(%rdi), %xmm0 + movq 16(%rdi), %xmm1 + movq 24(%rdi), %xmm2 + movq 32(%rdi), %xmm3 + movq 40(%rdi), %xmm4 + movq 48(%rdi), %xmm5 + movq 56(%rdi), %xmm6 + movq 64(%rdi), %xmm7 + + mov %rsp, %r10 /* Check that stack is aligned on */ + and $8, %r10 /* 16 bytes. This code may be removed */ + jz no_abort /* when we are sure that compiler always */ + int3 /* calls us with aligned stack */ +no_abort: + mov %rdx, %r10 /* Align stack on 16 bytes before pushing */ + and $1, %r10 /* stack arguments in case we have an odd */ + shl $3, %r10 /* number of stack arguments */ + sub %r10, %rsp + /* store memory args */ + movq %rcx, %r10 /* func ptr */ + movq %rdx, %rcx /* counter */ + lea 8+64+48-8(%rdi,%rcx,8), %rdx + sub %rsp, %rdx + cmpq $0, %rcx + jz cycle_end +cycle: + push 0(%rsp,%rdx) + loop cycle +cycle_end: + movq 80(%rdi), %rsi + movq 88(%rdi), %rdx + movq 96(%rdi), %rcx + movq 104(%rdi), %r8 + movq 112(%rdi), %r9 + + movq 72(%rdi), %rdi + + call *%r10 + leave + ret + diff --git a/core/iwasm/runtime/vmcore-wasm/invokeNative_mips.s b/core/iwasm/runtime/vmcore-wasm/invokeNative_mips.s new file mode 100644 index 000000000..bf1ad5965 --- /dev/null +++ b/core/iwasm/runtime/vmcore-wasm/invokeNative_mips.s @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + .text + .align 2 + .globl invokeNative + .ent invokeNative + .type invokeNative, @function + +/** + * On function entry parameters: + * $4 = args + * $5 = arg_num + * $6 = func_ptr + */ + +invokeNative: + .frame $fp, 8, $0 + .mask 0x00000000, 0 + .fmask 0x00000000, 0 + + /* Fixed part of frame */ + subu $sp, 8 + + /* save registers */ + sw $31, 4($sp) + sw $fp, 0($sp) + + /* set frame pointer to bottom of fixed frame */ + move $fp, $sp + + /* allocate enough stack space */ + sll $11, $5, 2 + subu $sp, $11 + + /* make 8-byte aligned */ + and $sp, ~7 + + move $9, $sp + move $25, $6 /* $25 = func_ptr */ + +push_args: + beq $5, 0, done /* arg_num == 0 ? */ + lw $8, 0($4) + sw $8, 0($9) + addu $4, 4 + addu $9, 4 + subu $5, 1 /* arg_index-- */ + j push_args + +done: + lw $4, 0($sp) /* Load $4..$7 from stack */ + lw $5, 4($sp) + lw $6, 8($sp) + lw $7, 12($sp) + ldc1 $f12, 0($sp) /* Load $f12, $f13, $f14, $f15 */ + ldc1 $f14, 8($sp) + + jalr $25 /* call function */ + + nop + + /* restore saved registers */ + move $sp, $fp + lw $31, 4($sp) + lw $fp, 0($sp) + + /* pop frame */ + addu $sp, $sp, 8 + + j $31 + .end invokeNative diff --git a/core/iwasm/runtime/vmcore-wasm/vmcore.cmake b/core/iwasm/runtime/vmcore-wasm/vmcore.cmake index 8e3d94ca9..7af218ee6 100644 --- a/core/iwasm/runtime/vmcore-wasm/vmcore.cmake +++ b/core/iwasm/runtime/vmcore-wasm/vmcore.cmake @@ -17,11 +17,13 @@ set (VMCORE_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}) include_directories(${VMCORE_LIB_DIR}) include_directories(${VMCORE_LIB_DIR}/../include) +file (GLOB_RECURSE c_source_all ${VMCORE_LIB_DIR}/*.c) +list (REMOVE_ITEM c_source_all ${VMCORE_LIB_DIR}/invokeNative_general.c) + if (${BUILD_AS_64BIT_SUPPORT} STREQUAL "YES") -file (GLOB_RECURSE source_all ${VMCORE_LIB_DIR}/*.c) +set (source_all ${c_source_all} ${VMCORE_LIB_DIR}/invokeNative_em64.s) else () -file (GLOB_RECURSE source_all ${VMCORE_LIB_DIR}/*.c ${VMCORE_LIB_DIR}/*.s) -list (REMOVE_ITEM source_all ${VMCORE_LIB_DIR}/invokeNative_general.c) +set (source_all ${c_source_all} ${VMCORE_LIB_DIR}/invokeNative_ia32.s) endif () set (VMCORE_LIB_SOURCE ${source_all}) diff --git a/core/iwasm/runtime/vmcore-wasm/wasm_interp.c b/core/iwasm/runtime/vmcore-wasm/wasm_interp.c index 04cf74400..d4afabe5e 100644 --- a/core/iwasm/runtime/vmcore-wasm/wasm_interp.c +++ b/core/iwasm/runtime/vmcore-wasm/wasm_interp.c @@ -284,7 +284,7 @@ read_leb(const uint8 *buf, uint32 *p_offset, uint32 maxbits, bool sign) } if (sign && (shift < maxbits) && (byte & 0x40)) { /* Sign extend */ - result |= - (1 << shift); + result |= - ((uint64)1 << shift); } return result; } @@ -622,21 +622,6 @@ FREE_FRAME(WASMThread *self, WASMInterpFrame *frame) wasm_thread_free_wasm_frame(self, frame); } -typedef void (*GenericFunctionPointer)(); -int64 invokeNative(uint32 *args, uint32 sz, GenericFunctionPointer f); - -typedef float64 (*Float64FuncPtr)(uint32*, uint32, GenericFunctionPointer); -typedef float32 (*Float32FuncPtr)(uint32*, uint32, GenericFunctionPointer); -typedef int64 (*Int64FuncPtr)(uint32*, uint32, GenericFunctionPointer); -typedef int32 (*Int32FuncPtr)(uint32*, uint32, GenericFunctionPointer); -typedef void (*VoidFuncPtr)(uint32*, uint32, GenericFunctionPointer); - -static Int64FuncPtr invokeNative_Int64 = (Int64FuncPtr)invokeNative; -static Int32FuncPtr invokeNative_Int32 = (Int32FuncPtr)invokeNative; -static Float64FuncPtr invokeNative_Float64 = (Float64FuncPtr)invokeNative; -static Float32FuncPtr invokeNative_Float32 = (Float32FuncPtr)invokeNative; -static VoidFuncPtr invokeNative_Void = (VoidFuncPtr)invokeNative; - static void wasm_interp_call_func_native(WASMThread *self, WASMFunctionInstance *cur_func, @@ -644,9 +629,8 @@ wasm_interp_call_func_native(WASMThread *self, { unsigned local_cell_num = 2; WASMInterpFrame *frame; - typedef void (*F)(WASMThread*, uint32 *argv); - union { F f; void *v; } u; - uint32 argv_buf[32], *argv, argc = cur_func->param_cell_num; + uint32 argv_ret[2]; + bool ret; if (!(frame = ALLOC_FRAME (self, wasm_interp_interp_frame_size(local_cell_num), prev_frame))) @@ -658,60 +642,24 @@ wasm_interp_call_func_native(WASMThread *self, wasm_thread_set_cur_frame (self, frame); - if (argc <= 32) - argv = argv_buf; - else { - if (!(argv = wasm_malloc(sizeof(uint32) * argc))) { - wasm_runtime_set_exception(self->module_inst, - "WASM call native failed: allocate memory failed."); - return; - } - } + ret = wasm_runtime_invoke_native(cur_func->u.func_import->func_ptr_linked, + cur_func->u.func_import->func_type, + self->module_inst, + frame->lp, cur_func->param_cell_num, argv_ret); - word_copy(argv, frame->lp, argc); - - u.v = cur_func->u.func_import->func_ptr_linked; - { - WASMType *func_type = cur_func->u.func_import->func_type; - uint8 ret_type = func_type->result_count - ? func_type->types[func_type->param_count] - : VALUE_TYPE_VOID; - GenericFunctionPointer f = (GenericFunctionPointer)(uintptr_t)u.v; - - if (func_type->result_count == 0) { - invokeNative_Void(argv, argc, f); - } - else { - switch (ret_type) { - case VALUE_TYPE_I32: - argv[0] = invokeNative_Int32(argv, argc, f); - break; - case VALUE_TYPE_I64: - PUT_I64_TO_ADDR(argv, invokeNative_Int64(argv, argc, f)); - break; - case VALUE_TYPE_F32: - *(float32*)argv = invokeNative_Float32(argv, argc, f); - break; - case VALUE_TYPE_F64: - PUT_F64_TO_ADDR(argv, invokeNative_Float64(argv, argc, f)); - break; - } - } - } + if (!ret) + return; if (cur_func->ret_cell_num == 1) { - prev_frame->sp[0] = argv[0]; + prev_frame->sp[0] = argv_ret[0]; prev_frame->sp++; } else if (cur_func->ret_cell_num == 2) { - prev_frame->sp[0] = argv[0]; - prev_frame->sp[1] = argv[1]; + prev_frame->sp[0] = argv_ret[0]; + prev_frame->sp[1] = argv_ret[1]; prev_frame->sp += 2; } - if (argc > 32) - wasm_free(argv); - FREE_FRAME(self, frame); wasm_thread_set_cur_frame(self, prev_frame); } diff --git a/core/iwasm/runtime/vmcore-wasm/wasm_loader.c b/core/iwasm/runtime/vmcore-wasm/wasm_loader.c index dbf8a4dcd..8057f3805 100644 --- a/core/iwasm/runtime/vmcore-wasm/wasm_loader.c +++ b/core/iwasm/runtime/vmcore-wasm/wasm_loader.c @@ -72,7 +72,7 @@ read_leb(const uint8 *buf, const uint8 *buf_end, } if (sign && (shift < maxbits) && (byte & 0x40)) { /* Sign extend */ - result |= - (1 << shift); + result |= - ((uint64)1 << shift); } *p_result = result; return true; diff --git a/core/iwasm/runtime/vmcore-wasm/wasm_runtime.c b/core/iwasm/runtime/vmcore-wasm/wasm_runtime.c index eec38bcc9..fc46f97d5 100644 --- a/core/iwasm/runtime/vmcore-wasm/wasm_runtime.c +++ b/core/iwasm/runtime/vmcore-wasm/wasm_runtime.c @@ -70,33 +70,41 @@ wasm_runtime_call_wasm(WASMModuleInstance *module_inst, WASMFunctionInstance *function, unsigned argc, uint32 argv[]) { - if (!exec_env) { - if (!module_inst->wasm_stack) { - if (!(module_inst->wasm_stack = - wasm_malloc(module_inst->wasm_stack_size))) { - wasm_runtime_set_exception(module_inst, "allocate memory failed."); - return false; + /* Only init stack when no application is running. */ + if (!wasm_runtime_get_self()->cur_frame) { + if (!exec_env) { + if (!module_inst->wasm_stack) { + if (!(module_inst->wasm_stack = + wasm_malloc(module_inst->wasm_stack_size))) { + wasm_runtime_set_exception(module_inst, + "allocate memory failed."); + return false; + } + + init_wasm_stack(&module_inst->main_tlr.wasm_stack, + module_inst->wasm_stack, + module_inst->wasm_stack_size); } - } + } + else { + uintptr_t stack = (uintptr_t)exec_env->stack; + uint32 stack_size; - init_wasm_stack(&module_inst->main_tlr.wasm_stack, - module_inst->wasm_stack, module_inst->wasm_stack_size); - } - else { - uintptr_t stack = (uintptr_t)exec_env->stack; - uint32 stack_size; + /* Set to 8 bytes align */ + stack = (stack + 7) & ~7; + stack_size = exec_env->stack_size + - (stack - (uintptr_t)exec_env->stack); - /* Set to 8 bytes align */ - stack = (stack + 7) & ~7; - stack_size = exec_env->stack_size - (stack - (uintptr_t)exec_env->stack); + if (!exec_env->stack || exec_env->stack_size <= 0 + || exec_env->stack_size < stack - (uintptr_t)exec_env->stack) { + wasm_runtime_set_exception(module_inst, + "Invalid execution stack info."); + return false; + } - if (!exec_env->stack || exec_env->stack_size <= 0 - || exec_env->stack_size < stack - (uintptr_t)exec_env->stack) { - wasm_runtime_set_exception(module_inst, "Invalid execution stack info."); - return false; - } - - init_wasm_stack(&module_inst->main_tlr.wasm_stack, (uint8*)stack, stack_size); + init_wasm_stack(&module_inst->main_tlr.wasm_stack, + (uint8*)stack, stack_size); + } } wasm_interp_call_wasm(function, argc, argv); @@ -1419,3 +1427,248 @@ wasm_runtime_load_aot(uint8 *aot_file, uint32 aot_file_size, return NULL; } +static inline void +word_copy(uint32 *dest, uint32 *src, unsigned num) +{ + for (; num > 0; num--) + *dest++ = *src++; +} + +#define PUT_I64_TO_ADDR(addr, value) do { \ + union { int64 val; uint32 parts[2]; } u; \ + u.val = (value); \ + (addr)[0] = u.parts[0]; \ + (addr)[1] = u.parts[1]; \ + } while (0) + +#define PUT_F64_TO_ADDR(addr, value) do { \ + union { float64 val; uint32 parts[2]; } u; \ + u.val = (value); \ + (addr)[0] = u.parts[0]; \ + (addr)[1] = u.parts[1]; \ + } while (0) + +#if !defined(__x86_64__) && !defined(__amd_64__) + +typedef void (*GenericFunctionPointer)(); +int64 invokeNative(uint32 *args, uint32 sz, GenericFunctionPointer f); + +typedef float64 (*Float64FuncPtr)(uint32*, uint32, GenericFunctionPointer); +typedef float32 (*Float32FuncPtr)(uint32*, uint32, GenericFunctionPointer); +typedef int64 (*Int64FuncPtr)(uint32*, uint32, GenericFunctionPointer); +typedef int32 (*Int32FuncPtr)(uint32*, uint32, GenericFunctionPointer); +typedef void (*VoidFuncPtr)(uint32*, uint32, GenericFunctionPointer); + +static Int64FuncPtr invokeNative_Int64 = (Int64FuncPtr)invokeNative; +static Int32FuncPtr invokeNative_Int32 = (Int32FuncPtr)invokeNative; +static Float64FuncPtr invokeNative_Float64 = (Float64FuncPtr)invokeNative; +static Float32FuncPtr invokeNative_Float32 = (Float32FuncPtr)invokeNative; +static VoidFuncPtr invokeNative_Void = (VoidFuncPtr)invokeNative; + +/* As JavaScript can't represent int64s, emcc compiles C int64 argument + into two WASM i32 arguments, see: + https://github.com/emscripten-core/emscripten/issues/7199 + And also JavaScript float point is always 64-bit, emcc compiles + float32 argument into WASM f64 argument. + But clang compiles C int64 argument into WASM i64 argument, and + compiles C float32 argument into WASM f32 argument. + So for the compatability of emcc and clang, we treat i64 as two i32s, + treat f32 as f64 while passing arguments to the native function, and + require the native function uses two i32 arguments instead one i64 + argument, and uses double argument instead of float argment. */ + +bool +wasm_runtime_invoke_native(void *func_ptr, WASMType *func_type, + WASMModuleInstance *module_inst, + uint32 *argv, uint32 argc, uint32 *ret) +{ + union { float64 val; int32 parts[2]; } u; + uint32 argv_buf[32], *argv1 = argv_buf, argc1, i, j = 0; + uint64 size; + + argc1 = func_type->param_count * 2 + 2; + + if (argc1 > sizeof(argv_buf) / sizeof(uint32)) { + size = ((uint64)sizeof(uint32)) * argc1; + if (size >= UINT_MAX + || !(argv1 = wasm_malloc((uint32)size))) { + wasm_runtime_set_exception(module_inst, "allocate memory failed."); + return false; + } + } + + for (i = 0; i < sizeof(WASMModuleInstance*) / sizeof(uint32); i++) + argv1[j++] = ((uint32*)&module_inst)[i]; + + for (i = 0; i < func_type->param_count; i++) { + switch (func_type->types[i]) { + case VALUE_TYPE_I32: + argv1[j++] = *argv++; + break; + case VALUE_TYPE_I64: + case VALUE_TYPE_F64: + argv1[j++] = *argv++; + argv1[j++] = *argv++; + break; + case VALUE_TYPE_F32: + u.val = *(float32*)argv++; +#if defined(__arm__) || defined(__mips__) + /* 64-bit data must be 8 bytes alined in arm and mips */ + if (j & 1) + j++; +#endif + argv1[j++] = u.parts[0]; + argv1[j++] = u.parts[1]; + break; + default: + wasm_assert(0); + break; + } + } + + if (func_type->result_count == 0) { + invokeNative_Void(argv1, argc1, func_ptr); + } + else { + switch (func_type->types[func_type->param_count]) { + case VALUE_TYPE_I32: + ret[0] = invokeNative_Int32(argv1, argc1, func_ptr); + break; + case VALUE_TYPE_I64: + PUT_I64_TO_ADDR(ret, invokeNative_Int64(argv1, argc1, func_ptr)); + break; + case VALUE_TYPE_F32: + *(float32*)ret = invokeNative_Float32(argv1, argc1, func_ptr); + break; + case VALUE_TYPE_F64: + PUT_F64_TO_ADDR(ret, invokeNative_Float64(argv1, argc1, func_ptr)); + break; + } + } + + if (argv1 != argv_buf) + wasm_free(argv1); + return true; +} + +#else /* else of !defined(__x86_64__) && !defined(__amd_64__) */ + +typedef void (*GenericFunctionPointer)(); +int64 invokeNative(uint64 *args, uint64 n_fps, uint64 n_stacks, GenericFunctionPointer f); + +typedef float64 (*Float64FuncPtr)(uint64*, uint64, uint64, GenericFunctionPointer); +typedef float32 (*Float32FuncPtr)(uint64*, uint64, uint64, GenericFunctionPointer); +typedef int64 (*Int64FuncPtr)(uint64*,uint64, uint64, GenericFunctionPointer); +typedef int32 (*Int32FuncPtr)(uint64*, uint64, uint64, GenericFunctionPointer); +typedef void (*VoidFuncPtr)(uint64*, uint64, uint64, GenericFunctionPointer); + +static Float64FuncPtr invokeNative_Float64 = (Float64FuncPtr)invokeNative; +static Float32FuncPtr invokeNative_Float32 = (Float32FuncPtr)invokeNative; +static Int64FuncPtr invokeNative_Int64 = (Int64FuncPtr)invokeNative; +static Int32FuncPtr invokeNative_Int32 = (Int32FuncPtr)invokeNative; +static VoidFuncPtr invokeNative_Void = (VoidFuncPtr)invokeNative; + +#if defined(_WIN32) || defined(_WIN32_) +#define MAX_REG_FLOATS 4 +#define MAX_REG_INTS 4 +#else +#define MAX_REG_FLOATS 8 +#define MAX_REG_INTS 6 +#endif + +bool +wasm_runtime_invoke_native(void *func_ptr, WASMType *func_type, + WASMModuleInstance *module_inst, + uint32 *argv, uint32 argc, uint32 *ret) +{ + uint64 argv_buf[32], *argv1 = argv_buf, *fps, *ints, *stacks, size; + uint32 *argv_src = argv, i, j, argc1, n_ints = 0, n_stacks = 0; +#if defined(_WIN32) || defined(_WIN32_) + /* important difference in calling conventions */ +#define n_fps n_ints +#else + int n_fps = 0; +#endif + + argc1 = 1 + MAX_REG_FLOATS + func_type->param_count + 2; + if (argc1 > sizeof(argv_buf) / sizeof(uint64)) { + size = sizeof(uint64) * argc1; + if (size >= UINT32_MAX + || !(argv1 = wasm_malloc(size))) { + wasm_runtime_set_exception(module_inst, "allocate memory failed."); + return false; + } + } + + fps = argv1 + 1; + ints = fps + MAX_REG_FLOATS; + stacks = ints + MAX_REG_INTS; + + ints[n_ints++] = (uint64)(uintptr_t)module_inst; + + for (i = 0; i < func_type->param_count; i++) { + switch (func_type->types[i]) { + case VALUE_TYPE_I32: + if (n_ints < MAX_REG_INTS) + ints[n_ints++] = *argv_src++; + else + stacks[n_stacks++] = *argv_src++; + break; + case VALUE_TYPE_I64: + for (j = 0; j < 2; j++) { + if (n_ints < MAX_REG_INTS) + ints[n_ints++] = *argv_src++; + else + stacks[n_stacks++] = *argv_src++; + } + break; + case VALUE_TYPE_F32: + if (n_fps < MAX_REG_FLOATS) + *(float64*)&fps[n_fps++] = *(float32*)argv_src++; + else + *(float64*)&stacks[n_stacks++] = *(float32*)argv_src++; + break; + case VALUE_TYPE_F64: + if (n_fps < MAX_REG_FLOATS) + *(float64*)&fps[n_fps++] = *(float64*)argv_src; + else + *(float64*)&stacks[n_stacks++] = *(float64*)argv_src; + argv_src += 2; + break; + default: + wasm_assert(0); + break; + } + } + + if (func_type->result_count == 0) { + invokeNative_Void(argv1, n_fps, n_stacks, func_ptr); + } + else { + switch (func_type->types[func_type->param_count]) { + case VALUE_TYPE_I32: + ret[0] = invokeNative_Int32(argv1, n_fps, n_stacks, func_ptr); + break; + case VALUE_TYPE_I64: + PUT_I64_TO_ADDR(ret, invokeNative_Int64(argv1, n_fps, n_stacks, func_ptr)); + break; + case VALUE_TYPE_F32: + *(float32*)ret = invokeNative_Float32(argv1, n_fps, n_stacks, func_ptr); + break; + case VALUE_TYPE_F64: + PUT_F64_TO_ADDR(ret, invokeNative_Float64(argv1, n_fps, n_stacks, func_ptr)); + break; + default: + wasm_assert(0); + break; + } + } + + if (argv1 != argv_buf) + wasm_free(argv1); + + return true; +} + +#endif /* end of !defined(__x86_64__) && !defined(__amd_64__) */ + diff --git a/core/iwasm/runtime/vmcore-wasm/wasm_runtime.h b/core/iwasm/runtime/vmcore-wasm/wasm_runtime.h index 30ef58c33..85c0bcf37 100644 --- a/core/iwasm/runtime/vmcore-wasm/wasm_runtime.h +++ b/core/iwasm/runtime/vmcore-wasm/wasm_runtime.h @@ -315,6 +315,11 @@ int32 wasm_runtime_addr_native_to_app(WASMModuleInstance *module_inst, void *native_ptr); +bool +wasm_runtime_invoke_native(void *func_ptr, WASMType *func_type, + WASMModuleInstance *module_inst, + uint32 *argv, uint32 argc, uint32 *ret); + #ifdef __cplusplus } #endif diff --git a/core/shared-lib/mem-alloc/ems/ems_alloc.c b/core/shared-lib/mem-alloc/ems/ems_alloc.c index 2c27b71cf..ca575f35b 100644 --- a/core/shared-lib/mem-alloc/ems/ems_alloc.c +++ b/core/shared-lib/mem-alloc/ems/ems_alloc.c @@ -152,7 +152,7 @@ void gci_add_fc(gc_heap_t *heap, hmu_t *hmu, gc_size_t size) bh_assert( hmu && (gc_uint8*) hmu >= heap->base_addr && (gc_uint8*) hmu < heap->base_addr + heap->current_size); - bh_assert(((gc_uint32) hmu_to_obj(hmu) & 7) == 0); + bh_assert(((gc_uint32)(uintptr_t)hmu_to_obj(hmu) & 7) == 0); bh_assert( size > 0 && ((gc_uint8*) hmu) + size @@ -242,7 +242,7 @@ BH_STATIC hmu_t *alloc_hmu(gc_heap_t *heap, gc_size_t size) p = node->next; node->next = p->next; - bh_assert(((gc_int32) hmu_to_obj(p) & 7) == 0); + bh_assert(((gc_int32)(uintptr_t)hmu_to_obj(p) & 7) == 0); if ((gc_size_t) node_idx != init_node_idx&& ((gc_size_t)node_idx << 3) >= size + GC_SMALLEST_SIZE) { /* with bigger size*/ diff --git a/core/shared-lib/platform/darwin/bh_platform.c b/core/shared-lib/platform/darwin/bh_platform.c old mode 100755 new mode 100644 diff --git a/core/shared-lib/platform/darwin/bh_thread.c b/core/shared-lib/platform/darwin/bh_thread.c old mode 100755 new mode 100644 diff --git a/core/shared-lib/platform/darwin/bh_time.c b/core/shared-lib/platform/darwin/bh_time.c old mode 100755 new mode 100644 diff --git a/samples/gui/wasm-runtime-wgl/src/ext_lib_export.c b/samples/gui/wasm-runtime-wgl/src/ext_lib_export.c index e478b7e45..4f696f0ad 100644 --- a/samples/gui/wasm-runtime-wgl/src/ext_lib_export.c +++ b/samples/gui/wasm-runtime-wgl/src/ext_lib_export.c @@ -1,5 +1,5 @@ #include "lib_export.h" -#include "native_interface.h" +#include "sensor_api.h" #include "connection_api.h" #include "gui_api.h" diff --git a/samples/littlevgl/vgl-wasm-runtime/src/display_indev.h b/samples/littlevgl/vgl-wasm-runtime/src/display_indev.h index 154071e36..cb8d76e0e 100644 --- a/samples/littlevgl/vgl-wasm-runtime/src/display_indev.h +++ b/samples/littlevgl/vgl-wasm-runtime/src/display_indev.h @@ -1,9 +1,10 @@ #ifndef DISPLAY_INDEV_H_ #define DISPLAY_INDEV_H_ #include -#include "bh_platform.h" #include #include +#include "bh_platform.h" +#include "wasm_export.h" #define USE_MOUSE 1 typedef union { @@ -54,21 +55,37 @@ enum { LV_OPA_100 = 255, LV_OPA_COVER = 255, }; -extern void display_init(void); -extern void display_deinit(void); -extern int time_get_ms(); -extern bool touchscreen_read(lv_indev_data_t * data); extern void xpt2046_init(void); -extern void display_flush(int32_t x1, int32_t y1, int32_t x2, int32_t y2, - int32 color_p_offset); -extern void display_fill(int32_t x1, int32_t y1, int32_t x2, int32_t y2, - lv_color_t color_p); -extern void display_map(int32_t x1, int32_t y1, int32_t x2, int32_t y2, - const lv_color_t * color_p); -extern bool display_input_read(int32 data_offset); -void display_vdb_write(int32 buf_offset, lv_coord_t buf_w, lv_coord_t x, - lv_coord_t y, int32 color_p_offset, lv_opa_t opa); + +extern bool touchscreen_read(lv_indev_data_t * data); + extern bool mouse_read(lv_indev_data_t * data); + +extern void display_init(wasm_module_inst_t module_inst); + +extern void display_deinit(wasm_module_inst_t module_inst); + +extern int time_get_ms(wasm_module_inst_t module_inst); + +extern void display_flush(wasm_module_inst_t module_inst, + int32_t x1, int32_t y1, int32_t x2, int32_t y2, + int32 color_p_offset); + +extern void display_fill(wasm_module_inst_t module_inst, + int32_t x1, int32_t y1, int32_t x2, int32_t y2, + lv_color_t color_p); + +extern void display_map(wasm_module_inst_t module_inst, + int32_t x1, int32_t y1, int32_t x2, int32_t y2, + const lv_color_t * color_p); + +extern bool display_input_read(wasm_module_inst_t module_inst, + int32 data_offset); + +void display_vdb_write(wasm_module_inst_t module_inst, + int32 buf_offset, lv_coord_t buf_w, lv_coord_t x, + lv_coord_t y, int32 color_p_offset, lv_opa_t opa); + #endif diff --git a/samples/littlevgl/vgl-wasm-runtime/src/ext_lib_export.c b/samples/littlevgl/vgl-wasm-runtime/src/ext_lib_export.c index 3897b3b0b..0f68dd860 100644 --- a/samples/littlevgl/vgl-wasm-runtime/src/ext_lib_export.c +++ b/samples/littlevgl/vgl-wasm-runtime/src/ext_lib_export.c @@ -1,5 +1,5 @@ #include "lib_export.h" -#include "native_interface.h" +#include "sensor_api.h" #include "connection_api.h" #include "display_indev.h" @@ -12,6 +12,7 @@ static NativeSymbol extended_native_symbol_defs[] = { EXPORT_WASM_API(display_fill), EXPORT_WASM_API(display_vdb_write), EXPORT_WASM_API(display_map), - EXPORT_WASM_API(time_get_ms), }; + EXPORT_WASM_API(time_get_ms) +}; #include "ext_lib_export.h" diff --git a/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/display_indev.c b/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/display_indev.c index f7d8b5cce..5fe98d429 100644 --- a/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/display_indev.c +++ b/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/display_indev.c @@ -35,7 +35,8 @@ static uint32_t tft_fb[MONITOR_HOR_RES * MONITOR_VER_RES]; -int time_get_ms() +int +time_get_ms(wasm_module_inst_t module_inst) { static struct timeval tv; gettimeofday(&tv, NULL); @@ -157,15 +158,16 @@ void monitor_map(int32_t x1, int32_t y1, int32_t x2, int32_t y2, } -void display_init(void) +void +display_init(wasm_module_inst_t module_inst) { } -void display_flush(int32_t x1, int32_t y1, int32_t x2, int32_t y2, - int32 color_p_offset) +void +display_flush(wasm_module_inst_t module_inst, + int32_t x1, int32_t y1, int32_t x2, int32_t y2, + int32 color_p_offset) { - - wasm_module_inst_t module_inst = wasm_runtime_get_current_module_inst(); if (!wasm_runtime_validate_app_addr(module_inst, color_p_offset, 1)) return; lv_color_t * color_p = wasm_runtime_addr_app_to_native(module_inst, @@ -173,21 +175,28 @@ void display_flush(int32_t x1, int32_t y1, int32_t x2, int32_t y2, monitor_flush(x1, y1, x2, y2, color_p); } -void display_fill(int32_t x1, int32_t y1, int32_t x2, int32_t y2, - lv_color_t color_p) + +void +display_fill(wasm_module_inst_t module_inst, + int32_t x1, int32_t y1, int32_t x2, int32_t y2, + lv_color_t color_p) { monitor_fill(x1, y1, x2, y2, color_p); } -void display_map(int32_t x1, int32_t y1, int32_t x2, int32_t y2, - const lv_color_t * color_p) + +void +display_map(wasm_module_inst_t module_inst, + int32_t x1, int32_t y1, int32_t x2, int32_t y2, + const lv_color_t * color_p) { monitor_map(x1, y1, x2, y2, color_p); } -bool display_input_read(int32 data_p_offset) +bool +display_input_read(wasm_module_inst_t module_inst, + int32 data_p_offset) { bool ret; - wasm_module_inst_t module_inst = wasm_runtime_get_current_module_inst(); if (!wasm_runtime_validate_app_addr(module_inst, data_p_offset, 1)) return false; @@ -205,21 +214,23 @@ bool display_input_read(int32 data_p_offset) data_p_offset); data_app->point = data.point; - data_app->user_data_offset = (int32_t)data.user_data; + data_app->user_data_offset = + wasm_runtime_addr_native_to_app(module_inst, data.user_data); data_app->state = data.state; return ret; } -void display_deinit(void) +void +display_deinit(wasm_module_inst_t module_inst) { - } -void display_vdb_write(int32 buf_offset, lv_coord_t buf_w, lv_coord_t x, - lv_coord_t y, int32 color_p_offset, lv_opa_t opa) +void +display_vdb_write(wasm_module_inst_t module_inst, + int32 buf_offset, lv_coord_t buf_w, lv_coord_t x, + lv_coord_t y, int32 color_p_offset, lv_opa_t opa) { - wasm_module_inst_t module_inst = wasm_runtime_get_current_module_inst(); if (!wasm_runtime_validate_app_addr(module_inst, color_p_offset, 1)) return; lv_color_t *color = wasm_runtime_addr_app_to_native(module_inst, diff --git a/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_indev.c b/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_indev.c index 1ed562c02..58ac43f72 100644 --- a/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_indev.c +++ b/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_indev.c @@ -24,8 +24,11 @@ #ifndef MONITOR_ZOOM #define MONITOR_ZOOM 1 #endif -int lcd_initialized = 0; -void display_init(void) + +static int lcd_initialized = 0; + +void +display_init(wasm_module_inst_t module_inst) { if (lcd_initialized != 0) { return; @@ -36,10 +39,11 @@ void display_init(void) display_blanking_off(NULL); } -void display_flush(int32_t x1, int32_t y1, int32_t x2, int32_t y2, - int32 color_p_offset) +void +display_flush(wasm_module_inst_t module_inst, + int32_t x1, int32_t y1, int32_t x2, int32_t y2, + int32 color_p_offset) { - wasm_module_inst_t module_inst = wasm_runtime_get_current_module_inst(); if (!wasm_runtime_validate_app_addr(module_inst, color_p_offset, 1)) return; lv_color_t * color_p = wasm_runtime_addr_app_to_native(module_inst, @@ -57,20 +61,24 @@ void display_flush(int32_t x1, int32_t y1, int32_t x2, int32_t y2, /*lv_flush_ready();*/ } -void display_fill(int32_t x1, int32_t y1, int32_t x2, int32_t y2, - lv_color_t color_p) -{ -} -void display_map(int32_t x1, int32_t y1, int32_t x2, int32_t y2, - const lv_color_t * color_p) +void +display_fill(wasm_module_inst_t module_inst, + int32_t x1, int32_t y1, int32_t x2, int32_t y2, + lv_color_t color_p) { - } -bool display_input_read(int32 data_p_offset) +void +display_map(wasm_module_inst_t module_inst, + int32_t x1, int32_t y1, int32_t x2, int32_t y2, + const lv_color_t * color_p) +{ +} + +bool +display_input_read(wasm_module_inst_t module_inst, int32 data_p_offset) { - wasm_module_inst_t module_inst = wasm_runtime_get_current_module_inst(); if (!wasm_runtime_validate_app_addr(module_inst, data_p_offset, 1)) return false; lv_indev_data_t * data = wasm_runtime_addr_app_to_native(module_inst, @@ -80,15 +88,17 @@ bool display_input_read(int32 data_p_offset) } -void display_deinit(void) +void +display_deinit(wasm_module_inst_t module_inst) { } -void display_vdb_write(int32 buf_offset, lv_coord_t buf_w, lv_coord_t x, - lv_coord_t y, int32 color_p_offset, lv_opa_t opa) +void +display_vdb_write(wasm_module_inst_t module_inst, + int32 buf_offset, lv_coord_t buf_w, lv_coord_t x, + lv_coord_t y, int32 color_p_offset, lv_opa_t opa) { - wasm_module_inst_t module_inst = wasm_runtime_get_current_module_inst(); if (!wasm_runtime_validate_app_addr(module_inst, color_p_offset, 1)) return; lv_color_t *color = wasm_runtime_addr_app_to_native(module_inst, @@ -112,7 +122,8 @@ void display_vdb_write(int32 buf_offset, lv_coord_t buf_w, lv_coord_t x, *(buf_xy + 2) = color->blue; } -int time_get_ms() +int +time_get_ms(wasm_module_inst_t module_inst) { return k_uptime_get_32(); } diff --git a/test-tools/host-tool/CMakeLists.txt b/test-tools/host-tool/CMakeLists.txt index df1512a7b..ea9438707 100644 --- a/test-tools/host-tool/CMakeLists.txt +++ b/test-tools/host-tool/CMakeLists.txt @@ -51,6 +51,7 @@ add_definitions(-Wall -Wno-pointer-sign -DMALLOC_MEMORY_FROM_SYSTEM) include_directories( ${CMAKE_CURRENT_LIST_DIR}/src + ${WASM_DIR}/runtime/include ) file (GLOB_RECURSE HOST_TOOL_SRC src/*.c) diff --git a/test-tools/host-tool/src/main.c b/test-tools/host-tool/src/main.c index ead6a9b96..e4a3a48de 100644 --- a/test-tools/host-tool/src/main.c +++ b/test-tools/host-tool/src/main.c @@ -95,11 +95,6 @@ typedef enum REPLY_PACKET_TYPE { REPLY_TYPE_EVENT = 0, REPLY_TYPE_RESPONSE = 1 } REPLY_PACKET_TYPE; -/* Package Type */ -typedef enum { - Wasm_Module_Bytecode = 0, Wasm_Module_AoT, Package_Type_Unknown = 0xFFFF -} PackageType; - static uint32_t g_timeout_ms = DEFAULT_TIMEOUT_MS; static uint32_t g_alive_time_ms = DEFAULT_ALIVE_TIME_MS; static char *g_redirect_file_name = NULL; @@ -153,7 +148,7 @@ static int send_request(request_t *request, bool is_install_wasm_bytecode_app) return ret; } -static PackageType get_package_type(const char *buf, int size) +static package_type_t get_app_package_type(const char *buf, int size) { if (buf && size > 4) { if (buf[0] == '\0' && buf[1] == 'a' && buf[2] == 's' && buf[3] == 'm') @@ -205,7 +200,7 @@ static int install(inst_info *info) request->mid = gen_random_id(); if ((info->module_type == NULL || strcmp(info->module_type, "wasm") == 0) - && get_package_type(app_file_buf, app_size) == Wasm_Module_Bytecode) + && get_app_package_type(app_file_buf, app_size) == Wasm_Module_Bytecode) is_wasm_bytecode_app = true; else is_wasm_bytecode_app = false;

    +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

  • mK=*8hnyXH!Z7j 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�iUv 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 diff --git a/doc/pics/architecture_extend.PNG b/doc/pics/architecture_extend.PNG deleted file mode 100644 index 31905df5acf07d13b7d36f87afb8b2e43e69ae50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78440 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 Au>b%7 diff --git a/doc/pics/vgl.PNG b/doc/pics/vgl.PNG deleted file mode 100644 index d7a06d95687b84f551887db6f214df111c3975c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49192 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%0AgHS~+X&wKmLVCu%aiU!d@^8ud7{ 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 Ee@NdHZ~y=R diff --git a/doc/pics/vgl_demo.png b/doc/pics/vgl_demo.png new file mode 100644 index 0000000000000000000000000000000000000000..3cb7eb4648624c79ac07027d7f271fc753c2978d GIT binary patch literal 133339 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