Skip to content

Commit 54ef572

Browse files
committed
remove changed
1 parent 92fdad4 commit 54ef572

1 file changed

Lines changed: 153 additions & 83 deletions

File tree

core/iwasm/interpreter/wasm_loader.c

Lines changed: 153 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -3227,29 +3227,31 @@ cmp_export_name(const void *a, const void *b)
32273227
return strcmp(*(char **)a, *(char **)b);
32283228
}
32293229

3230-
static int
3231-
cmp_import_kind(const void *a, const void *b)
3232-
{
3233-
const WASMImport *import_a = (const WASMImport *)a;
3234-
const WASMImport *import_b = (const WASMImport *)b;
3235-
// kind: 0x00/0x01/0x02/0x03/0x04
3236-
return import_a->kind - import_b->kind;
3237-
}
3230+
// static int
3231+
// cmp_import_kind(const void *a, const void *b)
3232+
// {
3233+
// const WASMImport *import_a = (const WASMImport *)a;
3234+
// const WASMImport *import_b = (const WASMImport *)b;
3235+
// // kind: 0x00/0x01/0x02/0x03/0x04
3236+
// return import_a->kind - import_b->kind;
3237+
// }
32383238

32393239
static bool
32403240
load_import_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module,
32413241
bool is_load_from_file_buf, bool no_resolve,
32423242
char *error_buf, uint32 error_buf_size)
32433243
{
3244-
const uint8 *p = buf, *p_end = buf_end;
3245-
uint32 import_count, name_len, type_index, i, u32;
3244+
const uint8 *p = buf, *p_end = buf_end, *p_old;
3245+
uint32 import_count, name_len, type_index, i, u32, flags;
32463246
uint64 total_size;
32473247
WASMImport *import;
3248+
WASMImport *import_functions = NULL, *import_tables = NULL;
3249+
WASMImport *import_memories = NULL, *import_globals = NULL;
32483250
#if WASM_ENABLE_TAGS != 0
32493251
WASMImport *import_tags = NULL;
32503252
#endif
32513253
char *sub_module_name, *field_name;
3252-
uint8 u8, kind;
3254+
uint8 u8, kind, global_type;
32533255

32543256
read_leb_uint32(p, p_end, import_count);
32553257

@@ -3261,10 +3263,137 @@ load_import_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module,
32613263
return false;
32623264
}
32633265

3264-
import = module->imports;
3266+
p_old = p;
3267+
3268+
/* Scan firstly to get import count of each type */
3269+
for (i = 0; i < import_count; i++) {
3270+
/* module name */
3271+
read_leb_uint32(p, p_end, name_len);
3272+
CHECK_BUF(p, p_end, name_len);
3273+
p += name_len;
3274+
3275+
/* field name */
3276+
read_leb_uint32(p, p_end, name_len);
3277+
CHECK_BUF(p, p_end, name_len);
3278+
p += name_len;
3279+
3280+
CHECK_BUF(p, p_end, 1);
3281+
/* 0x00/0x01/0x02/0x03/0x04 */
3282+
kind = read_uint8(p);
3283+
3284+
switch (kind) {
3285+
case IMPORT_KIND_FUNC: /* import function */
3286+
read_leb_uint32(p, p_end, type_index);
3287+
module->import_function_count++;
3288+
break;
3289+
3290+
case IMPORT_KIND_TABLE: /* import table */
3291+
CHECK_BUF(p, p_end, 1);
3292+
/* 0x70 */
3293+
u8 = read_uint8(p);
3294+
read_leb_uint32(p, p_end, flags);
3295+
read_leb_uint32(p, p_end, u32);
3296+
if (flags & 1)
3297+
read_leb_uint32(p, p_end, u32);
3298+
module->import_table_count++;
3299+
3300+
if (module->import_table_count > 1) {
3301+
#if WASM_ENABLE_REF_TYPES == 0 && WASM_ENABLE_GC == 0
3302+
set_error_buf(error_buf, error_buf_size,
3303+
"multiple tables");
3304+
return false;
3305+
#elif WASM_ENABLE_WAMR_COMPILER != 0
3306+
module->is_ref_types_used = true;
3307+
#endif
3308+
}
3309+
break;
3310+
3311+
case IMPORT_KIND_MEMORY: /* import memory */
3312+
read_leb_uint32(p, p_end, flags);
3313+
read_leb_uint32(p, p_end, u32);
3314+
if (flags & 1)
3315+
read_leb_uint32(p, p_end, u32);
3316+
module->import_memory_count++;
3317+
#if WASM_ENABLE_MULTI_MEMORY == 0
3318+
if (module->import_memory_count > 1) {
3319+
set_error_buf(error_buf, error_buf_size,
3320+
"multiple memories");
3321+
return false;
3322+
}
3323+
#endif
3324+
break;
3325+
3326+
#if WASM_ENABLE_TAGS != 0
3327+
case IMPORT_KIND_TAG: /* import tags */
3328+
/* it only counts the number of tags to import */
3329+
module->import_tag_count++;
3330+
CHECK_BUF(p, p_end, 1);
3331+
u8 = read_uint8(p);
3332+
read_leb_uint32(p, p_end, type_index);
3333+
break;
3334+
#endif
3335+
3336+
case IMPORT_KIND_GLOBAL: /* import global */
3337+
#if WASM_ENABLE_GC != 0
3338+
/* valtype */
3339+
CHECK_BUF(p, p_end, 1);
3340+
global_type = read_uint8(p);
3341+
if (wasm_is_type_multi_byte_type(global_type)) {
3342+
int32 heap_type;
3343+
read_leb_int32(p, p_end, heap_type);
3344+
(void)heap_type;
3345+
}
3346+
3347+
/* mutability */
3348+
CHECK_BUF(p, p_end, 1);
3349+
p += 1;
3350+
#else
3351+
CHECK_BUF(p, p_end, 2);
3352+
p += 2;
3353+
#endif
3354+
3355+
(void)global_type;
3356+
module->import_global_count++;
3357+
break;
3358+
3359+
default:
3360+
set_error_buf(error_buf, error_buf_size,
3361+
"invalid import kind");
3362+
return false;
3363+
}
3364+
}
3365+
3366+
if (module->import_function_count)
3367+
import_functions = module->import_functions = module->imports;
3368+
if (module->import_table_count)
3369+
import_tables = module->import_tables =
3370+
module->imports + module->import_function_count;
3371+
if (module->import_memory_count)
3372+
import_memories = module->import_memories =
3373+
module->imports + module->import_function_count
3374+
+ module->import_table_count;
3375+
3376+
#if WASM_ENABLE_TAGS != 0
3377+
if (module->import_tag_count)
3378+
import_tags = module->import_tags =
3379+
module->imports + module->import_function_count
3380+
+ module->import_table_count + module->import_memory_count;
3381+
if (module->import_global_count)
3382+
import_globals = module->import_globals =
3383+
module->imports + module->import_function_count
3384+
+ module->import_table_count + module->import_memory_count
3385+
+ module->import_tag_count;
3386+
#else
3387+
if (module->import_global_count)
3388+
import_globals = module->import_globals =
3389+
module->imports + module->import_function_count
3390+
+ module->import_table_count + module->import_memory_count;
3391+
#endif
3392+
3393+
p = p_old;
32653394

3266-
/* Scan to resolve the data */
3267-
for (i = 0; i < import_count; i++, import++) {
3395+
/* Scan again to resolve the data */
3396+
for (i = 0; i < import_count; i++) {
32683397
/* load module name */
32693398
read_leb_uint32(p, p_end, name_len);
32703399
CHECK_BUF(p, p_end, name_len);
@@ -3291,6 +3420,8 @@ load_import_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module,
32913420

32923421
switch (kind) {
32933422
case IMPORT_KIND_FUNC: /* import function */
3423+
bh_assert(import_functions);
3424+
import = import_functions++;
32943425
if (!load_function_import(&p, p_end, module,
32953426
sub_module_name, field_name,
32963427
&import->u.function, no_resolve,
@@ -3300,6 +3431,8 @@ load_import_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module,
33003431
break;
33013432

33023433
case IMPORT_KIND_TABLE: /* import table */
3434+
bh_assert(import_tables);
3435+
import = import_tables++;
33033436
if (!load_table_import(&p, p_end, module, sub_module_name,
33043437
field_name, &import->u.table,
33053438
error_buf, error_buf_size)) {
@@ -3310,6 +3443,8 @@ load_import_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module,
33103443
break;
33113444

33123445
case IMPORT_KIND_MEMORY: /* import memory */
3446+
bh_assert(import_memories);
3447+
import = import_memories++;
33133448
if (!load_memory_import(&p, p_end, module, sub_module_name,
33143449
field_name, &import->u.memory,
33153450
error_buf, error_buf_size)) {
@@ -3319,6 +3454,8 @@ load_import_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module,
33193454

33203455
#if WASM_ENABLE_TAGS != 0
33213456
case IMPORT_KIND_TAG:
3457+
bh_assert(import_tags);
3458+
import = import_tags++;
33223459
if (!load_tag_import(&p, p_end, module, sub_module_name,
33233460
field_name, &import->u.tag, error_buf,
33243461
error_buf_size)) {
@@ -3328,6 +3465,8 @@ load_import_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module,
33283465
#endif
33293466

33303467
case IMPORT_KIND_GLOBAL: /* import global */
3468+
bh_assert(import_globals);
3469+
import = import_globals++;
33313470
if (!load_global_import(&p, p_end, module, sub_module_name,
33323471
field_name, &import->u.global,
33333472
error_buf, error_buf_size)) {
@@ -3345,75 +3484,6 @@ load_import_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module,
33453484
import->u.names.field_name = field_name;
33463485
}
33473486

3348-
// ordered by kind
3349-
qsort(module->imports, module->import_count, sizeof(WASMImport),
3350-
cmp_import_kind);
3351-
i = 0;
3352-
3353-
for (; i < module->import_count
3354-
&& module->imports[i].kind == IMPORT_KIND_FUNC;
3355-
i++, module->import_function_count++)
3356-
;
3357-
if (module->import_function_count) {
3358-
module->import_functions = module->imports;
3359-
}
3360-
3361-
for (; i < module->import_count
3362-
&& module->imports[i].kind == IMPORT_KIND_TABLE;
3363-
i++, module->import_table_count++)
3364-
;
3365-
if (module->import_table_count) {
3366-
module->import_tables =
3367-
module->imports + module->import_function_count;
3368-
}
3369-
3370-
for (; i < module->import_count
3371-
&& module->imports[i].kind == IMPORT_KIND_MEMORY;
3372-
i++, module->import_memory_count++)
3373-
;
3374-
if (module->import_memory_count) {
3375-
module->import_memories = module->imports
3376-
+ module->import_function_count
3377-
+ module->import_table_count;
3378-
}
3379-
3380-
#if WASM_ENABLE_TAGS != 0
3381-
for (; i < module->import_count
3382-
&& module->imports[i].kind == IMPORT_KIND_TAG;
3383-
i++, module->import_tag_count++)
3384-
;
3385-
if (module->import_tag_count) {
3386-
module->import_tags =
3387-
module->imports + module->import_function_count
3388-
+ module->import_table_count + module->import_memory_count;
3389-
}
3390-
3391-
for (; i < module->import_count
3392-
&& module->imports[i].kind == IMPORT_KIND_GLOBAL;
3393-
i++, module->import_global_count++)
3394-
;
3395-
if (module->import_global_count) {
3396-
module->import_globals =
3397-
module->imports + module->import_function_count
3398-
+ module->import_table_count + module->import_memory_count
3399-
+ module->import_tag_count;
3400-
}
3401-
#else
3402-
for (; i < module->import_count
3403-
&& module->imports[i].kind == IMPORT_KIND_GLOBAL;
3404-
i++, module->import_global_count++)
3405-
;
3406-
if (module->import_global_count) {
3407-
module->import_globals =
3408-
module->imports + module->import_function_count
3409-
+ module->import_table_count + module->import_memory_count;
3410-
}
3411-
#endif
3412-
if (i != module->import_count) {
3413-
set_error_buf(error_buf, error_buf_size, "section size mismatch");
3414-
return false;
3415-
}
3416-
34173487
#if WASM_ENABLE_LIBC_WASI != 0
34183488
import = module->import_functions;
34193489
for (i = 0; i < module->import_function_count; i++, import++) {

0 commit comments

Comments
 (0)