@@ -2242,6 +2242,45 @@ void CWriter::WriteDataInitializers() {
22422242 Write (CloseBrace (), " ;" , Newline ());
22432243 }
22442244
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+
22452284 Write (Newline (), " static void init_memories(" , ModuleInstanceTypeName (),
22462285 " * instance) " , OpenBrace ());
22472286 if (module_->memories .size () > module_->num_memory_imports ) {
@@ -2262,24 +2301,17 @@ void CWriter::WriteDataInitializers() {
22622301 }
22632302 }
22642303
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 ());
22832315
22842316 Write (CloseBrace (), Newline ());
22852317
0 commit comments