Skip to content

Commit 5d48cfd

Browse files
authored
introduce wasm_runtime_instantiate_ex2 (#4444)
* introduce wasm_runtime_instantiate_ex2 at this point, just a slightly inefficiant functionality equivalent of wasm_runtime_instantiate_ex. however, unlike wasm_runtime_instantiate_ex, this one is designed to be extendable without breaking the user-visible ABI. because the definition of InstantiationArgs2 is not exposed to users, we can safely add new members to it. this commit also makes wasm_runtime_instantiate_ex a wrapper of wasm_runtime_instantiate_ex2. if this goes well, maybe it's a good idea to apply a similar pattern to RuntimeInitArgs, LoadArgs, SharedHeapInitArgs, etc. i started with InstantiationArgs just because i happen to have a need to extend it for wasi-nn. cf. #4364 #4331 * product-mini/platforms/posix: use wasm_runtime_instantiate_ex2
1 parent 65d3ffa commit 5d48cfd

File tree

4 files changed

+152
-5
lines changed

4 files changed

+152
-5
lines changed

core/iwasm/common/wasm_runtime_common.c

Lines changed: 58 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1654,14 +1654,70 @@ wasm_runtime_instantiate(WASMModuleCommon *module, uint32 stack_size,
16541654
error_buf_size);
16551655
}
16561656

1657+
static void
1658+
instantiation_args_set_defaults(struct InstantiationArgs2 *args)
1659+
{
1660+
memset(args, 0, sizeof(*args));
1661+
}
1662+
16571663
WASMModuleInstanceCommon *
16581664
wasm_runtime_instantiate_ex(WASMModuleCommon *module,
16591665
const InstantiationArgs *args, char *error_buf,
16601666
uint32 error_buf_size)
1667+
{
1668+
struct InstantiationArgs2 v2;
1669+
instantiation_args_set_defaults(&v2);
1670+
v2.v1 = *args;
1671+
return wasm_runtime_instantiate_ex2(module, &v2, error_buf, error_buf_size);
1672+
}
1673+
1674+
bool
1675+
wasm_runtime_instantiation_args_create(struct InstantiationArgs2 **p)
1676+
{
1677+
struct InstantiationArgs2 *args = wasm_runtime_malloc(sizeof(*args));
1678+
if (args == NULL) {
1679+
return false;
1680+
}
1681+
instantiation_args_set_defaults(args);
1682+
*p = args;
1683+
return true;
1684+
}
1685+
1686+
void
1687+
wasm_runtime_instantiation_args_destroy(struct InstantiationArgs2 *p)
1688+
{
1689+
wasm_runtime_free(p);
1690+
}
1691+
1692+
void
1693+
wasm_runtime_instantiation_args_set_default_stack_size(
1694+
struct InstantiationArgs2 *p, uint32 v)
1695+
{
1696+
p->v1.default_stack_size = v;
1697+
}
1698+
1699+
void
1700+
wasm_runtime_instantiation_args_set_host_managed_heap_size(
1701+
struct InstantiationArgs2 *p, uint32 v)
1702+
{
1703+
p->v1.host_managed_heap_size = v;
1704+
}
1705+
1706+
void
1707+
wasm_runtime_instantiation_args_set_max_memory_pages(
1708+
struct InstantiationArgs2 *p, uint32 v)
1709+
{
1710+
p->v1.max_memory_pages = v;
1711+
}
1712+
1713+
WASMModuleInstanceCommon *
1714+
wasm_runtime_instantiate_ex2(WASMModuleCommon *module,
1715+
const struct InstantiationArgs2 *args,
1716+
char *error_buf, uint32 error_buf_size)
16611717
{
16621718
return wasm_runtime_instantiate_internal(
1663-
module, NULL, NULL, args->default_stack_size,
1664-
args->host_managed_heap_size, args->max_memory_pages, error_buf,
1719+
module, NULL, NULL, args->v1.default_stack_size,
1720+
args->v1.host_managed_heap_size, args->v1.max_memory_pages, error_buf,
16651721
error_buf_size);
16661722
}
16671723

core/iwasm/common/wasm_runtime_common.h

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -612,6 +612,10 @@ WASMExecEnv *
612612
wasm_runtime_get_exec_env_tls(void);
613613
#endif
614614

615+
struct InstantiationArgs2 {
616+
InstantiationArgs v1;
617+
};
618+
615619
/* See wasm_export.h for description */
616620
WASM_RUNTIME_API_EXTERN bool
617621
wasm_runtime_init(void);
@@ -700,6 +704,40 @@ wasm_runtime_instantiate_ex(WASMModuleCommon *module,
700704
const InstantiationArgs *args, char *error_buf,
701705
uint32 error_buf_size);
702706

707+
/* See wasm_export.h for description */
708+
WASM_RUNTIME_API_EXTERN
709+
bool
710+
wasm_runtime_instantiation_args_create(struct InstantiationArgs2 **p);
711+
712+
/* See wasm_export.h for description */
713+
WASM_RUNTIME_API_EXTERN
714+
void
715+
wasm_runtime_instantiation_args_destroy(struct InstantiationArgs2 *p);
716+
717+
/* See wasm_export.h for description */
718+
WASM_RUNTIME_API_EXTERN
719+
void
720+
wasm_runtime_instantiation_args_set_default_stack_size(
721+
struct InstantiationArgs2 *p, uint32 v);
722+
723+
/* See wasm_export.h for description */
724+
WASM_RUNTIME_API_EXTERN
725+
void
726+
wasm_runtime_instantiation_args_set_host_managed_heap_size(
727+
struct InstantiationArgs2 *p, uint32 v);
728+
729+
/* See wasm_export.h for description */
730+
WASM_RUNTIME_API_EXTERN
731+
void
732+
wasm_runtime_instantiation_args_set_max_memory_pages(
733+
struct InstantiationArgs2 *p, uint32 v);
734+
735+
/* See wasm_export.h for description */
736+
WASM_RUNTIME_API_EXTERN WASMModuleInstanceCommon *
737+
wasm_runtime_instantiate_ex2(WASMModuleCommon *module,
738+
const struct InstantiationArgs2 *args,
739+
char *error_buf, uint32 error_buf_size);
740+
703741
/* See wasm_export.h for description */
704742
WASM_RUNTIME_API_EXTERN bool
705743
wasm_runtime_set_running_mode(wasm_module_inst_t module_inst,

core/iwasm/include/wasm_export.h

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,8 @@ typedef struct InstantiationArgs {
289289
} InstantiationArgs;
290290
#endif /* INSTANTIATION_ARGS_OPTION_DEFINED */
291291

292+
struct InstantiationArgs2;
293+
292294
#ifndef WASM_VALKIND_T_DEFINED
293295
#define WASM_VALKIND_T_DEFINED
294296
typedef uint8_t wasm_valkind_t;
@@ -733,6 +735,46 @@ wasm_runtime_instantiate_ex(const wasm_module_t module,
733735
const InstantiationArgs *args, char *error_buf,
734736
uint32_t error_buf_size);
735737

738+
/**
739+
* Create an InstantiationArgs2 object with default parameters.
740+
*
741+
* @return true if success, false otherwise
742+
*/
743+
WASM_RUNTIME_API_EXTERN bool
744+
wasm_runtime_instantiation_args_create(struct InstantiationArgs2 **p);
745+
746+
/**
747+
* Dispose an InstantiationArgs2 object.
748+
*/
749+
WASM_RUNTIME_API_EXTERN void
750+
wasm_runtime_instantiation_args_destroy(struct InstantiationArgs2 *p);
751+
752+
/**
753+
* Setter functions for the InstantiationArgs2 object.
754+
*/
755+
WASM_RUNTIME_API_EXTERN void
756+
wasm_runtime_instantiation_args_set_default_stack_size(
757+
struct InstantiationArgs2 *p, uint32_t v);
758+
759+
WASM_RUNTIME_API_EXTERN void
760+
wasm_runtime_instantiation_args_set_host_managed_heap_size(
761+
struct InstantiationArgs2 *p, uint32_t v);
762+
763+
WASM_RUNTIME_API_EXTERN void
764+
wasm_runtime_instantiation_args_set_max_memory_pages(
765+
struct InstantiationArgs2 *p, uint32_t v);
766+
767+
/**
768+
* Instantiate a WASM module, with specified instantiation arguments
769+
*
770+
* Same as wasm_runtime_instantiate_ex, but this version takes
771+
* InstantiationArgs2, which can be extended without breaking the ABI.
772+
*/
773+
WASM_RUNTIME_API_EXTERN wasm_module_inst_t
774+
wasm_runtime_instantiate_ex2(const wasm_module_t module,
775+
const struct InstantiationArgs2 *args,
776+
char *error_buf, uint32_t error_buf_size);
777+
736778
/**
737779
* Set the running mode of a WASM module instance, override the
738780
* default running mode of the runtime. Note that it only makes sense when

product-mini/platforms/posix/main.c

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -596,6 +596,7 @@ main(int argc, char *argv[])
596596
wasm_module_inst_t wasm_module_inst = NULL;
597597
RunningMode running_mode = 0;
598598
RuntimeInitArgs init_args;
599+
struct InstantiationArgs2 *inst_args;
599600
char error_buf[128] = { 0 };
600601
#if WASM_ENABLE_LOG != 0
601602
int log_verbose_level = 2;
@@ -949,10 +950,20 @@ main(int argc, char *argv[])
949950
libc_wasi_init(wasm_module, argc, argv, &wasi_parse_ctx);
950951
#endif
951952

953+
if (!wasm_runtime_instantiation_args_create(&inst_args)) {
954+
printf("failed to create instantiate args\n");
955+
goto fail3;
956+
}
957+
wasm_runtime_instantiation_args_set_default_stack_size(inst_args,
958+
stack_size);
959+
wasm_runtime_instantiation_args_set_host_managed_heap_size(inst_args,
960+
heap_size);
961+
952962
/* instantiate the module */
953-
if (!(wasm_module_inst =
954-
wasm_runtime_instantiate(wasm_module, stack_size, heap_size,
955-
error_buf, sizeof(error_buf)))) {
963+
wasm_module_inst = wasm_runtime_instantiate_ex2(
964+
wasm_module, inst_args, error_buf, sizeof(error_buf));
965+
wasm_runtime_instantiation_args_destroy(inst_args);
966+
if (!wasm_module_inst) {
956967
printf("%s\n", error_buf);
957968
goto fail3;
958969
}

0 commit comments

Comments
 (0)