@@ -968,12 +968,16 @@ destroy_import_memories(AOTImportMemory *import_memories)
968968}
969969
970970static void
971- destroy_mem_init_data_list (AOTMemInitData * * data_list , uint32 count )
971+ destroy_mem_init_data_list (AOTModule * module , AOTMemInitData * * data_list ,
972+ uint32 count )
972973{
973974 uint32 i ;
974975 for (i = 0 ; i < count ; i ++ )
975- if (data_list [i ])
976+ if (data_list [i ]) {
977+ if (module -> is_binary_freeable && data_list [i ]-> bytes )
978+ wasm_runtime_free (data_list [i ]-> bytes );
976979 wasm_runtime_free (data_list [i ]);
980+ }
977981 wasm_runtime_free (data_list );
978982}
979983
@@ -1013,8 +1017,8 @@ load_mem_init_data_list(const uint8 **p_buf, const uint8 *buf_end,
10131017 return false;
10141018 }
10151019 read_uint32 (buf , buf_end , byte_count );
1016- size = offsetof( AOTMemInitData , bytes ) + ( uint64 ) byte_count ;
1017- if (!( data_list [ i ] = loader_malloc ( size , error_buf , error_buf_size ))) {
1020+ if (!( data_list [ i ] = loader_malloc ( sizeof ( AOTMemInitData ), error_buf ,
1021+ error_buf_size ))) {
10181022 return false;
10191023 }
10201024
@@ -1026,8 +1030,22 @@ load_mem_init_data_list(const uint8 **p_buf, const uint8 *buf_end,
10261030 data_list [i ]-> offset .init_expr_type = init_value .init_expr_type ;
10271031 data_list [i ]-> offset .u = init_value .u ;
10281032 data_list [i ]-> byte_count = byte_count ;
1029- read_byte_array (buf , buf_end , data_list [i ]-> bytes ,
1030- data_list [i ]-> byte_count );
1033+ data_list [i ]-> bytes = NULL ;
1034+ if (module -> is_binary_freeable ) {
1035+ if (byte_count > 0 ) {
1036+ byte_count = align_uint (byte_count , sizeof (void * ));
1037+ if (!(data_list [i ]-> bytes = loader_malloc (byte_count , error_buf ,
1038+ error_buf_size ))) {
1039+ return false;
1040+ }
1041+ read_byte_array (buf , buf_end , data_list [i ]-> bytes ,
1042+ data_list [i ]-> byte_count );
1043+ }
1044+ }
1045+ else {
1046+ data_list [i ]-> bytes = (uint8 * )buf ;
1047+ buf += byte_count ;
1048+ }
10311049 }
10321050
10331051 * p_buf = buf ;
@@ -4356,7 +4374,7 @@ aot_unload(AOTModule *module)
43564374 wasm_runtime_free (module -> memories );
43574375
43584376 if (module -> mem_init_data_list )
4359- destroy_mem_init_data_list (module -> mem_init_data_list ,
4377+ destroy_mem_init_data_list (module , module -> mem_init_data_list ,
43604378 module -> mem_init_data_count );
43614379
43624380 if (module -> native_symbol_list )
0 commit comments