Browse Source

[PATCH 012/188] updating tools function names

From 6d73e3c99bc0cd1b8057c5e715e75b01166cf4ce Mon Sep 17 00:00:00 2001
From: Dmitry Boyarintsev <[email protected]>
Date: Thu, 26 Sep 2019 09:49:31 -0400

git-svn-id: branches/wasm@46008 -
nickysn 5 years ago
parent
commit
c5350b7655
2 changed files with 47 additions and 111 deletions
  1. 30 10
      utils/wasmbin/wasmtool.lpr
  2. 17 101
      utils/wasmbin/wasmtoolutils.pas

+ 30 - 10
utils/wasmbin/wasmtool.lpr

@@ -11,13 +11,17 @@ uses
   wasmbindebug, wasmlink, wasmlinkchange,
   wasmtoolutils;
 
+const
+  ACT_EXPORTRENAME = 'exprotrename';
+  ACT_SYMBOLFLAG   = 'symbolflag';
+
 procedure PrintHelp;
 begin
   writeln('wasmtool [options] .wasm file...');
   writeln();
   writeln('options:');
   writeln('  --exportrename @inputfile');
-  writeln('  --symbolflag @inputfile');
+  writeln('  --symbolflag   @inputfile');
 end;
 
 type
@@ -26,13 +30,22 @@ type
 
   TToolActions = class(TObject)
     action   : string; // action to take place
-    inputFn  : string; // input file name
+    paramsFn : string; // input file name
     constructor Create(const aaction, afilename: string);
   end;
 
 procedure ProcessParams(acts: TList; const inputFn: string);
+var
+  i  : integer;
+  ta : TToolActions;
 begin
-
+  for i:=0 to acts.Count-1 do begin
+    ta := TToolActions(acts[i]);
+    if ta.action = ACT_EXPORTRENAME then begin
+      ExportRename(inputFn, ta.paramsFn);
+    end else if ta.action = ACT_SYMBOLFLAG then begin
+    end;
+  end;
 end;
 
 var
@@ -82,15 +95,22 @@ begin
     Exit;
   end;
 
-  ParseParams;
-  acts := TList.Create;
   try
     ParseParams;
-    ProcessParams(acts, inputFn);
-  finally
-    for i:=0 to acts.Count-1 do
-      TObject(acts[i]).Free;
-    acts.Free;
+    acts := TList.Create;
+    try
+      ParseParams;
+      ProcessParams(acts, inputFn);
+    finally
+      for i:=0 to acts.Count-1 do
+        TObject(acts[i]).Free;
+      acts.Free;
+    end;
+  except
+    on e:exception do begin
+      writeln('error: ', e.Message);
+      ExitCode:=1;
+    end;
   end;
 end.
 

+ 17 - 101
utils/wasmbin/wasmtoolutils.pas

@@ -7,17 +7,16 @@ uses
   //wasmbindebug,
   wasmlink, wasmlinkchange;
 
-function ReadStream(st: TStream): Boolean;
-procedure ReadWasmFile(const fn: string);
-function WriteStream(st: TStream; syms: TStrings): Boolean;
-procedure ProcessWasmFile(const fn, symfn: string);
-procedure RenameExport(var x: TExportSection; syms: TStrings);
-function ProcessSections(st, dst: TStream; syms: TStrings): Boolean;
-procedure ProcessWasmSection(const fn, {%H-}symfn: string);
+function ChangeSymbolFlagStream(st: TStream; syms: TStrings): Boolean;
+procedure ChangeSymbolFlag(const fn, symfn: string);
+
+procedure ExportRenameSym(var x: TExportSection; syms: TStrings);
+function ExportRenameProcesss(st, dst: TStream; syms: TStrings): Boolean;
+procedure ExportRename(const fn, symfn: string);
 
 implementation
 
-function ReadStream(st: TStream): Boolean;
+function ChangeSymbolFlagStream(st: TStream; syms: TStrings): Boolean;
 var
   dw  : LongWord;
   ofs : int64;
@@ -27,78 +26,18 @@ var
 begin
   dw := st.ReadDWord;
   Result := dw = WasmId_Int;
-  if not Result then begin
-    writeln('not a wasm file');
-    Exit;
-  end;
-  dw := st.ReadDWord;
-  writeln('version: ', dw);
-  while st.Position<st.Size do begin
-    ofs := st.Position;
-    sc.id := st.ReadByte;
-    sc.Size := ReadU(st);
-    writeln(ofs,': id=', sc.id,'(', SectionIdToStr(sc.id),') sz=', sc.size);
-
-    ps := st.Position+sc.size;
-    if sc.id=0 then begin
-      nm := GetName(st);
-      writeln(nm);
-      if nm = SectionName_Linking then
-        DumpLinking(st, sc.size - (st.Position - ofs));
-    end;
-    //if sc.id= 1 then DumpTypes(st);
-
-    if st.Position <> ps then
-    begin
-      //writeln('adjust stream targ=',ps,' actual: ', st.position);
-      st.Position := ps;
-    end;
-  end;
-end;
-
-
-procedure ReadWasmFile(const fn: string);
-var
-  fs :TFileStream;
-begin
-  fs := TFileStream.Create(fn, fmOpenRead or fmShareDenyNone);
-  try
-    ReadStream(fs);
-  finally
-    fs.Free;
-  end;
-end;
+  if not Result then Exit;
 
-function WriteStream(st: TStream; syms: TStrings): Boolean;
-var
-  dw  : LongWord;
-  ofs : int64;
-  sc  : TSection;
-  ps  : int64;
-  nm  : string;
-begin
-  writeln('read: ');
   dw := st.ReadDWord;
-  writeln('dw: ' ,dw);
-  Result := dw = WasmId_Int;
-  if not Result then begin
-    writeln('not a wasm file');
-    Exit;
-  end;
-  dw := st.ReadDWord;
-  writeln('version: ', dw);
   while st.Position<st.Size do begin
     ofs := st.Position;
     sc.id := st.ReadByte;
     sc.Size := ReadU(st);
-    writeln(ofs,': id=', sc.id,'(', SectionIdToStr(sc.id),') sz=', sc.size);
 
     ps := st.Position+sc.size;
     if sc.id=0 then begin
       nm := GetName(st);
-      writeln(nm);
       if nm = SectionName_Linking then begin
-        writeln('rewriting linking...');
         ProcessLinkingSection(st, syms);
         break;
       end;
@@ -114,26 +53,24 @@ begin
   end;
 end;
 
-procedure ProcessWasmFile(const fn, symfn: string);
+procedure ChangeSymbolFlag(const fn, symfn: string);
 var
   fs :TFileStream;
   syms:  TStringList;
 begin
-  writeln('proc: ', fn);
   syms:=TStringList.Create;
   fs := TFileStream.Create(fn, fmOpenReadWrite or fmShareDenyNone);
   try
     if (symfn<>'') then
       ReadSymbolsConf(symfn, syms);
-    writeln('size: ', fs.size);
-    WriteStream(fs, syms);
+    ChangeSymbolFlagStream(fs, syms);
   finally
     fs.Free;
     syms.Free;
   end;
 end;
 
-procedure RenameExport(var x: TExportSection; syms: TStrings);
+procedure ExportRenameSym(var x: TExportSection; syms: TStrings);
 var
   i : integer;
   v : string;
@@ -145,14 +82,13 @@ begin
   end;
 end;
 
-function ProcessSections(st, dst: TStream; syms: TStrings): Boolean;
+function ExportRenameProcesss(st, dst: TStream; syms: TStrings): Boolean;
 var
   dw  : LongWord;
   ofs : int64;
   sc  : TSection;
   ps  : int64;
   x   : TExportSection;
-  i   : integer;
   mem : TMemoryStream;
 begin
   dw := st.ReadDWord;
@@ -165,13 +101,12 @@ begin
     ofs := st.Position;
     sc.id := st.ReadByte;
     sc.Size := ReadU(st);
-    writeln(ofs,': id=', sc.id,'(', SectionIdToStr(sc.id),') sz=', sc.size);
 
     ps := st.Position+sc.size;
 
     if sc.id = SECT_EXPORT then begin
       ReadExport(st, x);
-      RenameExport(x, syms);
+      ExportRenameSym(x, syms);
 
       st.Position:=0;
       dst.CopyFrom(st, ofs);
@@ -185,41 +120,21 @@ begin
       WriteU32(dst, mem.Size);
       dst.CopyFrom(mem, mem.Size);
 
-      writeln('entries = ', length(x.entries));
-      for i:=0 to length(x.entries)-1 do begin
-        writeln(x.entries[i].desc,' ', x.entries[i].name)
-      end;
-
       dst.CopyFrom(st, st.Size-st.Position);
-      break; // done
+      break;
     end;
-    {if sc.id=0 then begin
-      nm := GetName(st);
-      writeln(nm);
-      if nm = SectionName_Linking then begin
-        writeln('rewriting linking...');
-        ProcessLinkingSection(st, syms);
-        break;
-      end;
-        //DumpLinking(st, sc.size - (st.Position - ofs));
-    end;}
-    //if sc.id= 1 then DumpTypes(st);
 
     if st.Position <> ps then
-    begin
-      //writeln('adjust stream targ=',ps,' actual: ', st.position);
       st.Position := ps;
-    end;
   end;
 end;
 
-procedure ProcessWasmSection(const fn, {%H-}symfn: string);
+procedure ExportRename(const fn, symfn: string);
 var
   fs    : TFileStream;
   syms  : TStringList;
   dst   : TMemoryStream;
 begin
-  writeln('proc: ', fn);
   syms:=TStringList.Create;
   fs := TFileStream.Create(fn, fmOpenReadWrite or fmShareDenyNone);
   dst := TMemoryStream.Create;
@@ -227,7 +142,8 @@ begin
     if (symfn <> '') and fileExists(symfn) then
       syms.LoadFromFile(symfn);
 
-    ProcessSections(fs, dst, syms);
+    ExportRenameProcesss(fs, dst, syms);
+
     fs.Position:=0;
     dst.Position:=0;
     fs.CopyFrom(dst, dst.Size);