Implement GC (Garbage Collection) feature for interpreter, AOT and LLVM-JIT (#3125)
Implement the GC (Garbage Collection) feature for interpreter mode, AOT mode and LLVM-JIT mode, and support most features of the latest spec proposal, and also enable the stringref feature. Use `cmake -DWAMR_BUILD_GC=1/0` to enable/disable the feature, and `wamrc --enable-gc` to generate the AOT file with GC supported. And update the AOT file version from 2 to 3 since there are many AOT ABI breaks, including the changes of AOT file format, the changes of AOT module/memory instance layouts, the AOT runtime APIs for the AOT code to invoke and so on.
This commit is contained in:
@ -81,7 +81,17 @@ compare_type_with_signautre(uint8 type, const char signature)
|
||||
}
|
||||
|
||||
#if WASM_ENABLE_REF_TYPES != 0
|
||||
if ('r' == signature && type == VALUE_TYPE_EXTERNREF)
|
||||
if ('r' == signature
|
||||
#if WASM_ENABLE_GC != 0
|
||||
#if WASM_ENABLE_STRINGREF != 0
|
||||
&& (type >= REF_TYPE_STRINGVIEWITER && type <= REF_TYPE_FUNCREF)
|
||||
#else
|
||||
&& (type >= REF_TYPE_NULLREF && type <= REF_TYPE_FUNCREF)
|
||||
#endif
|
||||
#else
|
||||
&& type == VALUE_TYPE_EXTERNREF
|
||||
#endif
|
||||
)
|
||||
return true;
|
||||
#endif
|
||||
|
||||
@ -90,7 +100,7 @@ compare_type_with_signautre(uint8 type, const char signature)
|
||||
}
|
||||
|
||||
static bool
|
||||
check_symbol_signature(const WASMType *type, const char *signature)
|
||||
check_symbol_signature(const WASMFuncType *type, const char *signature)
|
||||
{
|
||||
const char *p = signature, *p_end;
|
||||
char sig;
|
||||
@ -189,8 +199,9 @@ lookup_symbol(NativeSymbol *native_symbols, uint32 n_native_symbols,
|
||||
*/
|
||||
void *
|
||||
wasm_native_resolve_symbol(const char *module_name, const char *field_name,
|
||||
const WASMType *func_type, const char **p_signature,
|
||||
void **p_attachment, bool *p_call_conv_raw)
|
||||
const WASMFuncType *func_type,
|
||||
const char **p_signature, void **p_attachment,
|
||||
bool *p_call_conv_raw)
|
||||
{
|
||||
NativeSymbolsNode *node, *node_next;
|
||||
const char *signature = NULL;
|
||||
@ -1442,7 +1453,7 @@ quick_aot_entry_init()
|
||||
}
|
||||
|
||||
void *
|
||||
wasm_native_lookup_quick_aot_entry(const WASMType *func_type)
|
||||
wasm_native_lookup_quick_aot_entry(const WASMFuncType *func_type)
|
||||
{
|
||||
char signature[16] = { 0 };
|
||||
uint32 param_count = func_type->param_count;
|
||||
|
||||
Reference in New Issue
Block a user