Browse Source

[PATCH 023/188] update writing linking section

From 61a89468b36d53f92702d86d88aef58f1a9fbef5 Mon Sep 17 00:00:00 2001
From: Dmitry Boyarintsev <[email protected]>
Date: Fri, 27 Sep 2019 16:44:09 -0400

git-svn-id: branches/wasm@46019 -
nickysn 5 years ago
parent
commit
1a80e89ccf
1 changed files with 27 additions and 1 deletions
  1. 27 1
      utils/wasmbin/wasmlink.pas

+ 27 - 1
utils/wasmbin/wasmlink.pas

@@ -152,6 +152,7 @@ type
 // the stream should be set at the beggining of the section
 // the stream should be set at the beggining of the section
 // after name and size values
 // after name and size values
 procedure ReadLinkingSection(st: TStream; size: integer; var sc: TLinkingSection);
 procedure ReadLinkingSection(st: TStream; size: integer; var sc: TLinkingSection);
+procedure WriteLinkingSection(st: TStream; const sc: TLinkingSection);
 
 
 implementation
 implementation
 
 
@@ -165,7 +166,7 @@ end;
 function ReadLinkSubSect(st: TStream; out m: TLinkingSubSection): Boolean;
 function ReadLinkSubSect(st: TStream; out m: TLinkingSubSection): Boolean;
 begin
 begin
   FillChar(m, sizeof(m), 0);
   FillChar(m, sizeof(m), 0);
-  m.sectype := ReadU(st);
+  m.sectype := st.ReadByte; //ReadU(st);
   m.length := ReadU(st);
   m.length := ReadU(st);
   Result := true;
   Result := true;
 end;
 end;
@@ -304,4 +305,29 @@ begin
   end;
   end;
 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.
 end.