From 1a80e89ccf03eaea40d59cc269d672b4928a4af2 Mon Sep 17 00:00:00 2001 From: nickysn Date: Mon, 3 Aug 2020 12:59:08 +0000 Subject: [PATCH] [PATCH 023/188] update writing linking section From 61a89468b36d53f92702d86d88aef58f1a9fbef5 Mon Sep 17 00:00:00 2001 From: Dmitry Boyarintsev Date: Fri, 27 Sep 2019 16:44:09 -0400 git-svn-id: branches/wasm@46019 - --- utils/wasmbin/wasmlink.pas | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/utils/wasmbin/wasmlink.pas b/utils/wasmbin/wasmlink.pas index 6bc27f3a46..354726175e 100644 --- a/utils/wasmbin/wasmlink.pas +++ b/utils/wasmbin/wasmlink.pas @@ -152,6 +152,7 @@ type // the stream should be set at the beggining of the section // after name and size values procedure ReadLinkingSection(st: TStream; size: integer; var sc: TLinkingSection); +procedure WriteLinkingSection(st: TStream; const sc: TLinkingSection); implementation @@ -165,7 +166,7 @@ end; function ReadLinkSubSect(st: TStream; out m: TLinkingSubSection): Boolean; begin FillChar(m, sizeof(m), 0); - m.sectype := ReadU(st); + m.sectype := st.ReadByte; //ReadU(st); m.length := ReadU(st); Result := true; end; @@ -304,4 +305,29 @@ begin end; end; +procedure WriteLinkingSection(st: TStream; const sc: TLinkingSection); +var + mem : TMemoryStream; + i : integer; +begin + st.WriteByte(sc.metadata.version); + + mem:=TMemoryStream.Create; + try + WriteU32(mem, length(sc.symbols)); + for i:=0 to length(sc.symbols)-1 do + WriteSymInfo(mem, sc.symbols[i]); + + st.WriteByte(WASM_SYMBOL_TABLE); + WriteU32(st, mem.Size); + + mem.Position:=0; + st.CopyFrom(mem, mem.Size); + finally + mem.Free; + end; + + // todo: other sub setions are possible +end; + end.