@@ -2242,6 +2242,46 @@ 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
+ WriteInitExpr (data_segment->offset );
2266
+ Write (" , // data_segment_data_" ,
2267
+ GlobalName (ModuleFieldType::DataSegment, data_segment->name ),
2268
+ Newline ());
2269
+ }
2270
+ Write (CloseBrace (), " ;" , Newline ());
2271
+
2272
+ Write (Newline (),
2273
+ " static const size_t active_data_segment_sizes[] = " , OpenBrace ());
2274
+ for (const DataSegment* data_segment : module_->data_segments ) {
2275
+ if (data_segment->kind != SegmentKind::Active ||
2276
+ data_segment->data .empty ()) {
2277
+ continue ;
2278
+ }
2279
+ Write (data_segment->data .size (), " , // data_segment_data_" ,
2280
+ GlobalName (ModuleFieldType::DataSegment, data_segment->name ),
2281
+ Newline ());
2282
+ }
2283
+ Write (CloseBrace (), " ;" , Newline ());
2284
+
2245
2285
Write (Newline (), " static void init_memories(" , ModuleInstanceTypeName (),
2246
2286
" * instance) " , OpenBrace ());
2247
2287
if (module_->memories .size () > module_->num_memory_imports ) {
@@ -2262,24 +2302,17 @@ void CWriter::WriteDataInitializers() {
2262
2302
}
2263
2303
}
2264
2304
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
- }
2305
+ Write (
2306
+ " for (int i = 0; i < sizeof(active_data_segment_data_ptrs) / "
2307
+ " sizeof(active_data_segment_data_ptrs[0]); i++) " ,
2308
+ OpenBrace (), Newline ());
2309
+
2310
+ const Memory* memory = module_->memories [0 ];
2311
+
2312
+ Write (" LOAD_DATA(" ,
2313
+ ExternalInstanceRef (ModuleFieldType::Memory, memory->name ), " , " );
2314
+ WriteInitExpr (data_segment->offset );
2315
+ Write (CloseBrace (), Newline ());
2283
2316
2284
2317
Write (CloseBrace (), Newline ());
2285
2318
0 commit comments