Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 18 additions & 10 deletions core/iwasm/aot/aot_runtime.c
Original file line number Diff line number Diff line change
Expand Up @@ -2081,17 +2081,25 @@ aot_instantiate(AOTModule *module, AOTModuleInstance *parent,

#if WASM_ENABLE_LIBC_WASI != 0
if (!is_sub_inst) {
const WASIArguments *wasi_args = &args->wasi;
if (module->wasi_args.set_by_user) {
if (wasi_args->set_by_user) {
set_error_buf(error_buf, error_buf_size,
"WASI configuration was given via both of module "
"and InstantiationArgs2");
goto fail;
}
wasi_args = &module->wasi_args;
}
if (!wasm_runtime_init_wasi(
(WASMModuleInstanceCommon *)module_inst,
module->wasi_args.dir_list, module->wasi_args.dir_count,
module->wasi_args.map_dir_list, module->wasi_args.map_dir_count,
module->wasi_args.env, module->wasi_args.env_count,
module->wasi_args.addr_pool, module->wasi_args.addr_count,
module->wasi_args.ns_lookup_pool,
module->wasi_args.ns_lookup_count, module->wasi_args.argv,
module->wasi_args.argc, module->wasi_args.stdio[0],
module->wasi_args.stdio[1], module->wasi_args.stdio[2],
error_buf, error_buf_size))
(WASMModuleInstanceCommon *)module_inst, wasi_args->dir_list,
wasi_args->dir_count, wasi_args->map_dir_list,
wasi_args->map_dir_count, wasi_args->env, wasi_args->env_count,
wasi_args->addr_pool, wasi_args->addr_count,
wasi_args->ns_lookup_pool, wasi_args->ns_lookup_count,
wasi_args->argv, wasi_args->argc, wasi_args->stdio[0],
wasi_args->stdio[1], wasi_args->stdio[2], error_buf,
error_buf_size))
goto fail;
}
#endif
Expand Down
84 changes: 84 additions & 0 deletions core/iwasm/common/wasm_runtime_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -1648,6 +1648,9 @@ void
wasm_runtime_instantiation_args_set_defaults(struct InstantiationArgs2 *args)
{
memset(args, 0, sizeof(*args));
#if WASM_ENABLE_LIBC_WASI != 0
wasi_args_set_defaults(&args->wasi);
#endif
}

WASMModuleInstanceCommon *
Expand Down Expand Up @@ -1714,6 +1717,84 @@ wasm_runtime_instantiation_args_set_max_memory_pages(
p->v1.max_memory_pages = v;
}

#if WASM_ENABLE_LIBC_WASI != 0
void
wasm_runtime_instantiation_args_set_wasi_arg(struct InstantiationArgs2 *p,
char *argv[], int argc)
{
WASIArguments *wasi_args = &p->wasi;

wasi_args->argv = argv;
wasi_args->argc = (uint32)argc;
wasi_args->set_by_user = true;
}

void
wasm_runtime_instantiation_args_set_wasi_env(struct InstantiationArgs2 *p,
const char *env[],
uint32 env_count)
{
WASIArguments *wasi_args = &p->wasi;

wasi_args->env = env;
wasi_args->env_count = env_count;
wasi_args->set_by_user = true;
}

void
wasm_runtime_instantiation_args_set_wasi_dir(struct InstantiationArgs2 *p,
const char *dir_list[],
uint32 dir_count,
const char *map_dir_list[],
uint32 map_dir_count)
{
WASIArguments *wasi_args = &p->wasi;

wasi_args->dir_list = dir_list;
wasi_args->dir_count = dir_count;
wasi_args->map_dir_list = map_dir_list;
wasi_args->map_dir_count = map_dir_count;
wasi_args->set_by_user = true;
}

void
wasm_runtime_instantiation_args_set_wasi_stdio(struct InstantiationArgs2 *p,
int64 stdinfd, int64 stdoutfd,
int64 stderrfd)
{
WASIArguments *wasi_args = &p->wasi;

wasi_args->stdio[0] = (os_raw_file_handle)stdinfd;
wasi_args->stdio[1] = (os_raw_file_handle)stdoutfd;
wasi_args->stdio[2] = (os_raw_file_handle)stderrfd;
wasi_args->set_by_user = true;
}

void
wasm_runtime_instantiation_args_set_wasi_addr_pool(struct InstantiationArgs2 *p,
const char *addr_pool[],
uint32 addr_pool_size)
{
WASIArguments *wasi_args = &p->wasi;

wasi_args->addr_pool = addr_pool;
wasi_args->addr_count = addr_pool_size;
wasi_args->set_by_user = true;
}

void
wasm_runtime_instantiation_args_set_wasi_ns_lookup_pool(
struct InstantiationArgs2 *p, const char *ns_lookup_pool[],
uint32 ns_lookup_pool_size)
{
WASIArguments *wasi_args = &p->wasi;

wasi_args->ns_lookup_pool = ns_lookup_pool;
wasi_args->ns_lookup_count = ns_lookup_pool_size;
wasi_args->set_by_user = true;
}
#endif /* WASM_ENABLE_LIBC_WASI != 0 */

WASMModuleInstanceCommon *
wasm_runtime_instantiate_ex2(WASMModuleCommon *module,
const struct InstantiationArgs2 *args,
Expand Down Expand Up @@ -3494,6 +3575,7 @@ wasm_runtime_set_wasi_args_ex(WASMModuleCommon *module, const char *dir_list[],
wasi_args->stdio[0] = (os_raw_file_handle)stdinfd;
wasi_args->stdio[1] = (os_raw_file_handle)stdoutfd;
wasi_args->stdio[2] = (os_raw_file_handle)stderrfd;
wasi_args->set_by_user = true;

#if WASM_ENABLE_MULTI_MODULE != 0
#if WASM_ENABLE_INTERP != 0
Expand Down Expand Up @@ -3524,6 +3606,7 @@ wasm_runtime_set_wasi_addr_pool(wasm_module_t module, const char *addr_pool[],
if (wasi_args) {
wasi_args->addr_pool = addr_pool;
wasi_args->addr_count = addr_pool_size;
wasi_args->set_by_user = true;
}
}

Expand All @@ -3537,6 +3620,7 @@ wasm_runtime_set_wasi_ns_lookup_pool(wasm_module_t module,
if (wasi_args) {
wasi_args->ns_lookup_pool = ns_lookup_pool;
wasi_args->ns_lookup_count = ns_lookup_pool_size;
wasi_args->set_by_user = true;
}
}

Expand Down
40 changes: 40 additions & 0 deletions core/iwasm/common/wasm_runtime_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -614,6 +614,9 @@ wasm_runtime_get_exec_env_tls(void);

struct InstantiationArgs2 {
InstantiationArgs v1;
#if WASM_ENABLE_LIBC_WASI != 0
WASIArguments wasi;
#endif
};

void
Expand Down Expand Up @@ -735,6 +738,43 @@ void
wasm_runtime_instantiation_args_set_max_memory_pages(
struct InstantiationArgs2 *p, uint32 v);

/* See wasm_export.h for description */
WASM_RUNTIME_API_EXTERN void
wasm_runtime_instantiation_args_set_wasi_arg(struct InstantiationArgs2 *p,
char *argv[], int argc);

/* See wasm_export.h for description */
WASM_RUNTIME_API_EXTERN void
wasm_runtime_instantiation_args_set_wasi_env(struct InstantiationArgs2 *p,
const char *env[],
uint32 env_count);

/* See wasm_export.h for description */
WASM_RUNTIME_API_EXTERN void
wasm_runtime_instantiation_args_set_wasi_dir(struct InstantiationArgs2 *p,
const char *dir_list[],
uint32 dir_count,
const char *map_dir_list[],
uint32 map_dir_count);

/* See wasm_export.h for description */
WASM_RUNTIME_API_EXTERN void
wasm_runtime_instantiation_args_set_wasi_stdio(struct InstantiationArgs2 *p,
int64 stdinfd, int64 stdoutfd,
int64 stderrfd);

/* See wasm_export.h for description */
WASM_RUNTIME_API_EXTERN void
wasm_runtime_instantiation_args_set_wasi_addr_pool(struct InstantiationArgs2 *p,
const char *addr_pool[],
uint32 addr_pool_size);

/* See wasm_export.h for description */
WASM_RUNTIME_API_EXTERN void
wasm_runtime_instantiation_args_set_wasi_ns_lookup_pool(
struct InstantiationArgs2 *p, const char *ns_lookup_pool[],
uint32 ns_lookup_pool_size);

/* See wasm_export.h for description */
WASM_RUNTIME_API_EXTERN WASMModuleInstanceCommon *
wasm_runtime_instantiate_ex2(WASMModuleCommon *module,
Expand Down
32 changes: 32 additions & 0 deletions core/iwasm/include/wasm_export.h
Original file line number Diff line number Diff line change
Expand Up @@ -764,6 +764,38 @@ WASM_RUNTIME_API_EXTERN void
wasm_runtime_instantiation_args_set_max_memory_pages(
struct InstantiationArgs2 *p, uint32_t v);

WASM_RUNTIME_API_EXTERN void
wasm_runtime_instantiation_args_set_wasi_arg(struct InstantiationArgs2 *p,
char *argv[], int argc);

WASM_RUNTIME_API_EXTERN void
wasm_runtime_instantiation_args_set_wasi_env(struct InstantiationArgs2 *p,
const char *env[],
uint32_t env_count);

WASM_RUNTIME_API_EXTERN void
wasm_runtime_instantiation_args_set_wasi_dir(struct InstantiationArgs2 *p,
const char *dir_list[],
uint32_t dir_count,
const char *map_dir_list[],
uint32_t map_dir_count);

WASM_RUNTIME_API_EXTERN void
wasm_runtime_instantiation_args_set_wasi_stdio(struct InstantiationArgs2 *p,
int64_t stdinfd,
int64_t stdoutfd,
int64_t stderrfd);

WASM_RUNTIME_API_EXTERN void
wasm_runtime_instantiation_args_set_wasi_addr_pool(struct InstantiationArgs2 *p,
const char *addr_pool[],
uint32_t addr_pool_size);

WASM_RUNTIME_API_EXTERN void
wasm_runtime_instantiation_args_set_wasi_ns_lookup_pool(
struct InstantiationArgs2 *p, const char *ns_lookup_pool[],
uint32_t ns_lookup_pool_size);

/**
* Instantiate a WASM module, with specified instantiation arguments
*
Expand Down
1 change: 1 addition & 0 deletions core/iwasm/interpreter/wasm.h
Original file line number Diff line number Diff line change
Expand Up @@ -848,6 +848,7 @@ typedef struct WASIArguments {
char **argv;
uint32 argc;
os_raw_file_handle stdio[3];
bool set_by_user;
} WASIArguments;
#endif

Expand Down
28 changes: 18 additions & 10 deletions core/iwasm/interpreter/wasm_runtime.c
Original file line number Diff line number Diff line change
Expand Up @@ -3276,17 +3276,25 @@ wasm_instantiate(WASMModule *module, WASMModuleInstance *parent,
#if WASM_ENABLE_LIBC_WASI != 0
/* The sub-instance will get the wasi_ctx from main-instance */
if (!is_sub_inst) {
const WASIArguments *wasi_args = &args->wasi;
if (module->wasi_args.set_by_user) {
if (wasi_args->set_by_user) {
set_error_buf(error_buf, error_buf_size,
"WASI configuration was given via both of module "
"and InstantiationArgs2");
goto fail;
}
wasi_args = &module->wasi_args;
}
if (!wasm_runtime_init_wasi(
(WASMModuleInstanceCommon *)module_inst,
module->wasi_args.dir_list, module->wasi_args.dir_count,
module->wasi_args.map_dir_list, module->wasi_args.map_dir_count,
module->wasi_args.env, module->wasi_args.env_count,
module->wasi_args.addr_pool, module->wasi_args.addr_count,
module->wasi_args.ns_lookup_pool,
module->wasi_args.ns_lookup_count, module->wasi_args.argv,
module->wasi_args.argc, module->wasi_args.stdio[0],
module->wasi_args.stdio[1], module->wasi_args.stdio[2],
error_buf, error_buf_size)) {
(WASMModuleInstanceCommon *)module_inst, wasi_args->dir_list,
wasi_args->dir_count, wasi_args->map_dir_list,
wasi_args->map_dir_count, wasi_args->env, wasi_args->env_count,
wasi_args->addr_pool, wasi_args->addr_count,
wasi_args->ns_lookup_pool, wasi_args->ns_lookup_count,
wasi_args->argv, wasi_args->argc, wasi_args->stdio[0],
wasi_args->stdio[1], wasi_args->stdio[2], error_buf,
error_buf_size)) {
goto fail;
}
}
Expand Down
24 changes: 13 additions & 11 deletions product-mini/platforms/common/libc_wasi.c
Original file line number Diff line number Diff line change
Expand Up @@ -162,16 +162,18 @@ libc_wasi_parse(char *arg, libc_wasi_parse_context_t *ctx)
return LIBC_WASI_PARSE_RESULT_OK;
}

void
libc_wasi_init(wasm_module_t wasm_module, int argc, char **argv,
libc_wasi_parse_context_t *ctx)
static void
libc_wasi_set_init_args(struct InstantiationArgs2 *args, int argc, char **argv,
libc_wasi_parse_context_t *ctx)
{
wasm_runtime_set_wasi_args(wasm_module, ctx->dir_list, ctx->dir_list_size,
ctx->map_dir_list, ctx->map_dir_list_size,
ctx->env_list, ctx->env_list_size, argv, argc);

wasm_runtime_set_wasi_addr_pool(wasm_module, ctx->addr_pool,
ctx->addr_pool_size);
wasm_runtime_set_wasi_ns_lookup_pool(wasm_module, ctx->ns_lookup_pool,
ctx->ns_lookup_pool_size);
wasm_runtime_instantiation_args_set_wasi_arg(args, argv, argc);
wasm_runtime_instantiation_args_set_wasi_env(args, ctx->env_list,
ctx->env_list_size);
wasm_runtime_instantiation_args_set_wasi_dir(
args, ctx->dir_list, ctx->dir_list_size, ctx->map_dir_list,
ctx->map_dir_list_size);
wasm_runtime_instantiation_args_set_wasi_addr_pool(args, ctx->addr_pool,
ctx->addr_pool_size);
wasm_runtime_instantiation_args_set_wasi_ns_lookup_pool(
args, ctx->ns_lookup_pool, ctx->ns_lookup_pool_size);
}
7 changes: 3 additions & 4 deletions product-mini/platforms/posix/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -962,10 +962,6 @@ main(int argc, char *argv[])
}
#endif

#if WASM_ENABLE_LIBC_WASI != 0
libc_wasi_init(wasm_module, argc, argv, &wasi_parse_ctx);
#endif

if (!wasm_runtime_instantiation_args_create(&inst_args)) {
printf("failed to create instantiate args\n");
goto fail3;
Expand All @@ -974,6 +970,9 @@ main(int argc, char *argv[])
stack_size);
wasm_runtime_instantiation_args_set_host_managed_heap_size(inst_args,
heap_size);
#if WASM_ENABLE_LIBC_WASI != 0
libc_wasi_set_init_args(inst_args, argc, argv, &wasi_parse_ctx);
#endif

/* instantiate the module */
wasm_module_inst = wasm_runtime_instantiate_ex2(
Expand Down
2 changes: 1 addition & 1 deletion product-mini/platforms/rt-thread/iwasm.c
Original file line number Diff line number Diff line change
Expand Up @@ -380,7 +380,7 @@ iwasm(int argc, char **argv)
wasm_runtime_instantiation_args_set_host_managed_heap_size(inst_args,
heap_size);
#if WASM_ENABLE_LIBC_WASI != 0
libc_wasi_init(wasm_module, argc, argv, &wasi_parse_ctx);
libc_wasi_set_init_args(wasm_module, argc, argv, &wasi_parse_ctx);
#endif

rt_memset(error_buf, 0x00, sizeof(error_buf));
Expand Down
7 changes: 3 additions & 4 deletions product-mini/platforms/windows/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -598,10 +598,6 @@ main(int argc, char *argv[])
goto fail2;
}

#if WASM_ENABLE_LIBC_WASI != 0
libc_wasi_init(wasm_module, argc, argv, &wasi_parse_ctx);
#endif

if (!wasm_runtime_instantiation_args_create(&inst_args)) {
printf("failed to create instantiate args\n");
goto fail3;
Expand All @@ -610,6 +606,9 @@ main(int argc, char *argv[])
stack_size);
wasm_runtime_instantiation_args_set_host_managed_heap_size(inst_args,
heap_size);
#if WASM_ENABLE_LIBC_WASI != 0
libc_wasi_set_init_args(inst_args, argc, argv, &wasi_parse_ctx);
#endif

/* instantiate the module */
wasm_module_inst = wasm_runtime_instantiate_ex2(
Expand Down
Loading