Re-org memory allocation interfaces, add --stack-size and --heap-size option (#193)
This commit is contained in:
@ -9,6 +9,7 @@
|
||||
#include "bh_assert.h"
|
||||
#include "bh_log.h"
|
||||
#include "wasm_runtime_common.h"
|
||||
#include "wasm_memory.h"
|
||||
#if WASM_ENABLE_INTERP != 0
|
||||
#include "../interpreter/wasm_runtime.h"
|
||||
#endif
|
||||
@ -23,8 +24,8 @@ set_error_buf(char *error_buf, uint32 error_buf_size, const char *string)
|
||||
snprintf(error_buf, error_buf_size, "%s", string);
|
||||
}
|
||||
|
||||
bool
|
||||
wasm_runtime_init()
|
||||
static bool
|
||||
wasm_runtime_env_init()
|
||||
{
|
||||
if (bh_platform_init() != 0)
|
||||
return false;
|
||||
@ -35,8 +36,20 @@ wasm_runtime_init()
|
||||
if (vm_thread_sys_init() != 0)
|
||||
return false;
|
||||
|
||||
if (wasm_native_init() == false) {
|
||||
wasm_runtime_destroy();
|
||||
if (wasm_native_init() == false)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
wasm_runtime_init()
|
||||
{
|
||||
if (!wasm_runtime_memory_init(Alloc_With_System_Allocator, NULL))
|
||||
return false;
|
||||
|
||||
if (!wasm_runtime_env_init()) {
|
||||
wasm_runtime_memory_destroy();
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -48,56 +61,30 @@ wasm_runtime_destroy()
|
||||
{
|
||||
wasm_native_destroy();
|
||||
vm_thread_sys_destroy();
|
||||
wasm_runtime_memory_destroy();
|
||||
}
|
||||
|
||||
int bh_memory_init_with_allocator_internal(void *_malloc_func,
|
||||
void *_realloc_func,
|
||||
void *_free_func);
|
||||
|
||||
bool
|
||||
wasm_runtime_full_init(RuntimeInitArgs *init_args)
|
||||
{
|
||||
if (init_args->mem_alloc_type == Alloc_With_Pool) {
|
||||
void *heap_buf = init_args->mem_alloc.pool.heap_buf;
|
||||
uint32 heap_size = init_args->mem_alloc.pool.heap_size;
|
||||
if (bh_memory_init_with_pool(heap_buf, heap_size) != 0)
|
||||
return false;
|
||||
}
|
||||
else if (init_args->mem_alloc_type == Alloc_With_Allocator) {
|
||||
void *malloc_func = init_args->mem_alloc.allocator.malloc_func;
|
||||
void *realloc_func = init_args->mem_alloc.allocator.realloc_func;
|
||||
void *free_func = init_args->mem_alloc.allocator.free_func;
|
||||
if (bh_memory_init_with_allocator_internal(malloc_func,
|
||||
realloc_func,
|
||||
free_func) != 0)
|
||||
return false;
|
||||
}
|
||||
else
|
||||
if (!wasm_runtime_memory_init(init_args->mem_alloc_type,
|
||||
&init_args->mem_alloc_option))
|
||||
return false;
|
||||
|
||||
if (!wasm_runtime_init())
|
||||
goto fail1;
|
||||
if (!wasm_runtime_env_init()) {
|
||||
wasm_runtime_memory_destroy();
|
||||
return false;
|
||||
}
|
||||
|
||||
if (init_args->n_native_symbols > 0
|
||||
&& !wasm_runtime_register_natives(init_args->native_module_name,
|
||||
init_args->native_symbols,
|
||||
init_args->n_native_symbols))
|
||||
goto fail2;
|
||||
init_args->n_native_symbols)) {
|
||||
wasm_runtime_destroy();
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
fail2:
|
||||
wasm_runtime_destroy();
|
||||
fail1:
|
||||
bh_memory_destroy();
|
||||
return false;
|
||||
}
|
||||
|
||||
void
|
||||
wasm_runtime_full_destroy()
|
||||
{
|
||||
wasm_runtime_destroy();
|
||||
bh_memory_destroy();
|
||||
}
|
||||
|
||||
PackageType
|
||||
@ -723,7 +710,7 @@ wasm_runtime_init_wasi(WASMModuleInstanceCommon *module_inst,
|
||||
uint64 total_size;
|
||||
uint32 i;
|
||||
|
||||
if (!(wasi_ctx = wasm_malloc(sizeof(WASIContext)))) {
|
||||
if (!(wasi_ctx = wasm_runtime_malloc(sizeof(WASIContext)))) {
|
||||
set_error_buf(error_buf, error_buf_size,
|
||||
"Init wasi environment failed: allocate memory failed.");
|
||||
return false;
|
||||
@ -952,7 +939,7 @@ wasm_runtime_destroy_wasi(WASMModuleInstanceCommon *module_inst)
|
||||
fd_table_destroy(wasi_ctx->curfds);
|
||||
if (wasi_ctx->prestats)
|
||||
fd_prestats_destroy(wasi_ctx->prestats);
|
||||
bh_free(wasi_ctx);
|
||||
wasm_runtime_free(wasi_ctx);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1272,7 +1259,7 @@ wasm_application_execute_func(WASMModuleInstanceCommon *module_inst,
|
||||
|
||||
total_size = sizeof(uint32) * (uint64)(argc1 > 2 ? argc1 : 2);
|
||||
if (total_size >= UINT32_MAX
|
||||
|| (!(argv1 = wasm_malloc((uint32)total_size)))) {
|
||||
|| (!(argv1 = wasm_runtime_malloc((uint32)total_size)))) {
|
||||
wasm_runtime_set_exception(module_inst, "allocate memory failed.");
|
||||
goto fail;
|
||||
}
|
||||
@ -1417,12 +1404,12 @@ wasm_application_execute_func(WASMModuleInstanceCommon *module_inst,
|
||||
}
|
||||
bh_printf("\n");
|
||||
|
||||
wasm_free(argv1);
|
||||
wasm_runtime_free(argv1);
|
||||
return true;
|
||||
|
||||
fail:
|
||||
if (argv1)
|
||||
wasm_free(argv1);
|
||||
wasm_runtime_free(argv1);
|
||||
|
||||
exception = wasm_runtime_get_exception(module_inst);
|
||||
bh_assert(exception);
|
||||
@ -1551,7 +1538,7 @@ wasm_runtime_invoke_native(WASMExecEnv *exec_env, void *func_ptr,
|
||||
if (argc1 > sizeof(argv_buf) / sizeof(uint32)) {
|
||||
size = sizeof(uint32) * (uint32)argc1;
|
||||
if (size >= UINT32_MAX
|
||||
|| !(argv1 = wasm_malloc((uint32)size))) {
|
||||
|| !(argv1 = wasm_runtime_malloc((uint32)size))) {
|
||||
wasm_runtime_set_exception(exec_env->module_inst,
|
||||
"allocate memory failed.");
|
||||
return false;
|
||||
@ -1679,7 +1666,7 @@ wasm_runtime_invoke_native(WASMExecEnv *exec_env, void *func_ptr,
|
||||
|
||||
fail:
|
||||
if (argv1 != argv_buf)
|
||||
wasm_free(argv1);
|
||||
wasm_runtime_free(argv1);
|
||||
return ret;
|
||||
}
|
||||
#endif /* end of defined(BUILD_TARGET_ARM_VFP) || defined(BUILD_TARGET_THUMB_VFP) */
|
||||
@ -1726,7 +1713,7 @@ wasm_runtime_invoke_native(WASMExecEnv *exec_env, void *func_ptr,
|
||||
if (argc1 > sizeof(argv_buf) / sizeof(uint32)) {
|
||||
size = sizeof(uint32) * (uint64)argc1;
|
||||
if (size >= UINT_MAX
|
||||
|| !(argv1 = wasm_malloc((uint32)size))) {
|
||||
|| !(argv1 = wasm_runtime_malloc((uint32)size))) {
|
||||
wasm_runtime_set_exception(exec_env->module_inst,
|
||||
"allocate memory failed.");
|
||||
return false;
|
||||
@ -1819,7 +1806,7 @@ wasm_runtime_invoke_native(WASMExecEnv *exec_env, void *func_ptr,
|
||||
|
||||
fail:
|
||||
if (argv1 != argv_buf)
|
||||
wasm_free(argv1);
|
||||
wasm_runtime_free(argv1);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -1874,7 +1861,7 @@ wasm_runtime_invoke_native(WASMExecEnv *exec_env, void *func_ptr,
|
||||
if (argc1 > sizeof(argv_buf) / sizeof(uint64)) {
|
||||
size = sizeof(uint64) * (uint64)argc1;
|
||||
if (size >= UINT32_MAX
|
||||
|| !(argv1 = wasm_malloc((uint32)size))) {
|
||||
|| !(argv1 = wasm_runtime_malloc((uint32)size))) {
|
||||
wasm_runtime_set_exception(exec_env->module_inst,
|
||||
"allocate memory failed.");
|
||||
return false;
|
||||
@ -1976,7 +1963,7 @@ wasm_runtime_invoke_native(WASMExecEnv *exec_env, void *func_ptr,
|
||||
ret = true;
|
||||
fail:
|
||||
if (argv1 != argv_buf)
|
||||
wasm_free(argv1);
|
||||
wasm_runtime_free(argv1);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user