From e45d8578e8d8c5ee425f5efc31439f54ffd02ceb Mon Sep 17 00:00:00 2001 From: Nikolay Nikolov Date: Sun, 19 Sep 2021 21:04:55 +0300 Subject: [PATCH] + count the number of segments and assign segment indices to the wasm sections --- compiler/ogwasm.pas | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/compiler/ogwasm.pas b/compiler/ogwasm.pas index 746f442804..a7cc5f69e4 100644 --- a/compiler/ogwasm.pas +++ b/compiler/ogwasm.pas @@ -44,6 +44,7 @@ interface TWasmObjSection = class(TObjSection) public + SegIdx: Integer; function IsCode: Boolean; function IsData: Boolean; end; @@ -265,7 +266,20 @@ implementation var i: Integer; objsec: TWasmObjSection; + segment_count: Integer = 0; begin + for i:=0 to Data.ObjSectionList.Count-1 do + begin + objsec:=TWasmObjSection(Data.ObjSectionList[i]); + if objsec.IsCode then + objsec.SegIdx:=-1 + else + begin + objsec.SegIdx:=segment_count; + Inc(segment_count); + end; + end; + Writer.write(WasmModuleMagic,SizeOf(WasmModuleMagic)); Writer.write(WasmVersion,SizeOf(WasmVersion)); @@ -273,7 +287,7 @@ implementation for i:=0 to Data.ObjSectionList.Count-1 do begin objsec:=TWasmObjSection(Data.ObjSectionList[i]); - Writeln(objsec.Name, ' IsCode=', objsec.IsCode, ' IsData=', objsec.IsData, ' Size=', objsec.Size, ' MemPos=', objsec.MemPos, ' Data.Size=', objsec.Data.size, ' DataPos=', objsec.DataPos); + Writeln(objsec.Name, ' IsCode=', objsec.IsCode, ' IsData=', objsec.IsData, ' Size=', objsec.Size, ' MemPos=', objsec.MemPos, ' Data.Size=', objsec.Data.size, ' DataPos=', objsec.DataPos, ' SegIdx=', objsec.SegIdx); end; result:=true;