@@ -2242,6 +2242,45 @@ void CWriter::WriteDataInitializers() {
2242
2242
Write (CloseBrace (), " ;" , Newline ());
2243
2243
}
2244
2244
2245
+ Write (Newline (),
2246
+ " static const u8* active_data_segment_data_ptrs[] = " , OpenBrace ());
2247
+ for (const DataSegment* data_segment : module_->data_segments ) {
2248
+ if (data_segment->kind != SegmentKind::Active ||
2249
+ data_segment->data .empty ()) {
2250
+ continue ;
2251
+ }
2252
+ Write (" data_segment_data_" ,
2253
+ GlobalName (ModuleFieldType::DataSegment, data_segment->name ), " ," ,
2254
+ Newline ());
2255
+ }
2256
+ Write (CloseBrace (), " ;" , Newline ());
2257
+
2258
+ Write (Newline (),
2259
+ " static const u32 active_data_segment_offsets[] = " , OpenBrace ());
2260
+ for (const DataSegment* data_segment : module_->data_segments ) {
2261
+ if (data_segment->kind != SegmentKind::Active ||
2262
+ data_segment->data .empty ()) {
2263
+ continue ;
2264
+ }
2265
+ Write (" , // data_segment_data_" ,
2266
+ GlobalName (ModuleFieldType::DataSegment, data_segment->name ),
2267
+ Newline ());
2268
+ }
2269
+ Write (CloseBrace (), " ;" , Newline ());
2270
+
2271
+ Write (Newline (),
2272
+ " static const size_t active_data_segment_sizes[] = " , OpenBrace ());
2273
+ for (const DataSegment* data_segment : module_->data_segments ) {
2274
+ if (data_segment->kind != SegmentKind::Active ||
2275
+ data_segment->data .empty ()) {
2276
+ continue ;
2277
+ }
2278
+ Write (data_segment->data .size (), " , // data_segment_data_" ,
2279
+ GlobalName (ModuleFieldType::DataSegment, data_segment->name ),
2280
+ Newline ());
2281
+ }
2282
+ Write (CloseBrace (), " ;" , Newline ());
2283
+
2245
2284
Write (Newline (), " static void init_memories(" , ModuleInstanceTypeName (),
2246
2285
" * instance) " , OpenBrace ());
2247
2286
if (module_->memories .size () > module_->num_memory_imports ) {
@@ -2262,24 +2301,17 @@ void CWriter::WriteDataInitializers() {
2262
2301
}
2263
2302
}
2264
2303
2265
- for (const DataSegment* data_segment : module_->data_segments ) {
2266
- if (data_segment->kind != SegmentKind::Active) {
2267
- continue ;
2268
- }
2269
- const Memory* memory =
2270
- module_->memories [module_->GetMemoryIndex (data_segment->memory_var )];
2271
- Write (" LOAD_DATA(" ,
2272
- ExternalInstanceRef (ModuleFieldType::Memory, memory->name ), " , " );
2273
- WriteInitExpr (data_segment->offset );
2274
- if (data_segment->data .empty ()) {
2275
- Write (" , NULL, 0" );
2276
- } else {
2277
- Write (" , data_segment_data_" ,
2278
- GlobalName (ModuleFieldType::DataSegment, data_segment->name ), " , " ,
2279
- data_segment->data .size ());
2280
- }
2281
- Write (" );" , Newline ());
2282
- }
2304
+ Write (
2305
+ " for (int i = 0; i < sizeof(active_data_segment_data_ptrs) / "
2306
+ " sizeof(active_data_segment_data_ptrs[0]); i++) " ,
2307
+ OpenBrace (), Newline ());
2308
+
2309
+ const Memory* memory = module_->memories [0 ];
2310
+
2311
+ Write (" LOAD_DATA(" ,
2312
+ ExternalInstanceRef (ModuleFieldType::Memory, memory->name ), " , " );
2313
+ WriteInitExpr (data_segment->offset );
2314
+ Write (CloseBrace (), Newline ());
2283
2315
2284
2316
Write (CloseBrace (), Newline ());
2285
2317
0 commit comments