Browse Source

[PATCH 014/188] adding verbose processing of export renaming

From b8fd1fcc5b7ef204139d2d4f8fd538f2e4301245 Mon Sep 17 00:00:00 2001
From: Dmitry Boyarintsev <[email protected]>
Date: Thu, 26 Sep 2019 10:18:34 -0400

git-svn-id: branches/wasm@46010 -
nickysn 5 years ago
parent
commit
cbc18282b1
2 changed files with 58 additions and 30 deletions
  1. 38 20
      utils/wasmbin/wasmtool.lpr
  2. 20 10
      utils/wasmbin/wasmtoolutils.pas

+ 38 - 20
utils/wasmbin/wasmtool.lpr

@@ -12,7 +12,7 @@ uses
   wasmtoolutils;
 
 const
-  ACT_EXPORTRENAME = 'exprotrename';
+  ACT_EXPORTRENAME = 'exportrename';
   ACT_SYMBOLFLAG   = 'symbolflag';
 
 procedure PrintHelp;
@@ -22,6 +22,7 @@ begin
   writeln('options:');
   writeln('  --exportrename @inputfile');
   writeln('  --symbolflag   @inputfile');
+  writeln('  --verbose - enabling verbose mode');
 end;
 
 type
@@ -34,16 +35,29 @@ type
     constructor Create(const aaction, afilename: string);
   end;
 
-procedure ProcessParams(acts: TList; const inputFn: string);
+{ TToolActions }
+
+constructor TToolActions.Create(const aaction, afilename: string);
+begin
+  inherited Create;
+  action := aaction;
+  paramsFn := afilename;
+end;
+
+procedure ProcessParams(acts: TList; const inputFn: string; doVerbose: Boolean);
 var
   i  : integer;
   ta : TToolActions;
 begin
   for i:=0 to acts.Count-1 do begin
     ta := TToolActions(acts[i]);
-    writeln('i=',i);
+    if doVerbose then writeln('action: "',ta.action,'"');
     if ta.action = ACT_EXPORTRENAME then begin
-      ExportRename(inputFn, ta.paramsFn);
+      if doVerbose then begin
+        writeln('  input:  ',inputFn);
+        writeln('  params: ',ta.paramsFn);
+      end;
+      ExportRename(inputFn, ta.paramsFn, doVerbose);
     end else if ta.action = ACT_SYMBOLFLAG then begin
       ChangeSymbolFlag(inputFn, ta.paramsFn);
     end;
@@ -53,6 +67,7 @@ end;
 var
   acts: TList = nil;
   inputFn: string = '';
+  verbose: Boolean = false;
 
 procedure ParseParams;
 var
@@ -66,14 +81,25 @@ begin
     s := ParamStr(i);
     ls := AnsiLowerCase(s);
     inc(i);
+
+    if Pos('-', ls)=1 then begin
+      if ls = '-v' then
+        ls := '--verbose';
+    end;
+
     if Pos('--',ls)=1 then begin
-      inc(i);
-      if i<=ParamCount then
-        fn:=ParamStr(i)
-      else
-        fn := '';
-      if fn <> '' then
-        acts.Add( TToolActions.Create(ls, fn));
+      ls := Copy(ls, 3, length(ls)-2);
+      if (ls = 'verbose') then
+        verbose := true
+      else begin
+        if i<=ParamCount then begin
+          fn:=ParamStr(i);
+          inc(i);
+        end else
+          fn := '';
+        if fn <> '' then
+          acts.Add( TToolActions.Create(ls, fn));
+      end;
     end else begin
       if inputFn ='' then
         inputFn:=s;
@@ -81,14 +107,6 @@ begin
   end;
 end;
 
-{ TToolActions }
-
-constructor TToolActions.Create(const aaction, afilename: string);
-begin
-  action := aaction;
-  inputFn := afilename;
-end;
-
 var
   i : integer;
 begin
@@ -101,7 +119,7 @@ begin
     acts := TList.Create;
     try
       ParseParams;
-      ProcessParams(acts, inputFn);
+      ProcessParams(acts, inputFn, verbose);
     finally
       for i:=0 to acts.Count-1 do
         TObject(acts[i]).Free;

+ 20 - 10
utils/wasmbin/wasmtoolutils.pas

@@ -10,9 +10,9 @@ uses
 function ChangeSymbolFlagStream(st: TStream; syms: TStrings): Boolean;
 procedure ChangeSymbolFlag(const fn, symfn: string);
 
-procedure ExportRenameSym(var x: TExportSection; syms: TStrings);
-function ExportRenameProcess(st, dst: TStream; syms: TStrings): Boolean;
-procedure ExportRename(const fn, symfn: string);
+function ExportRenameSym(var x: TExportSection; syms: TStrings): Integer;
+function ExportRenameProcess(st, dst: TStream; syms: TStrings; doVerbose: Boolean): Boolean;
+procedure ExportRename(const fn, symfn: string; doVerbose: Boolean);
 
 implementation
 
@@ -70,19 +70,22 @@ begin
   end;
 end;
 
-procedure ExportRenameSym(var x: TExportSection; syms: TStrings);
+function ExportRenameSym(var x: TExportSection; syms: TStrings): integer;
 var
   i : integer;
   v : string;
 begin
+  Result := 0;
   for i:=0 to length(x.entries)-1 do begin
     v := syms.Values[x.entries[i].name];
-    if v <> '' then
+    if v <> '' then begin
       x.entries[i].name := v;
+      inc(Result);
+    end;
   end;
 end;
 
-function ExportRenameProcess(st, dst: TStream; syms: TStrings): Boolean;
+function ExportRenameProcess(st, dst: TStream; syms: TStrings; doVerbose: Boolean): Boolean;
 var
   dw  : LongWord;
   ofs : int64;
@@ -90,6 +93,7 @@ var
   ps  : int64;
   x   : TExportSection;
   mem : TMemoryStream;
+  cnt : integer;
 begin
   dw := st.ReadDWord;
   Result := dw = WasmId_Int;
@@ -105,8 +109,10 @@ begin
     ps := st.Position+sc.size;
 
     if sc.id = SECT_EXPORT then begin
+      if doVerbose then writeln(' export section found');
       ReadExport(st, x);
-      ExportRenameSym(x, syms);
+      cnt := ExportRenameSym(x, syms);
+      writeln(' renamings: ', cnt);
 
       st.Position:=0;
       dst.CopyFrom(st, ofs);
@@ -129,21 +135,25 @@ begin
   end;
 end;
 
-procedure ExportRename(const fn, symfn: string);
+procedure ExportRename(const fn, symfn: string; doVerbose: Boolean);
 var
   fs    : TFileStream;
   syms  : TStringList;
   dst   : TMemoryStream;
 begin
+  if doVerbose then writeln('Export symbols renaming');
   syms:=TStringList.Create;
   fs := TFileStream.Create(fn, fmOpenReadWrite or fmShareDenyNone);
   dst := TMemoryStream.Create;
   try
     if (symfn <> '') and fileExists(symfn) then
+    begin
+      if doVerbose then writeln('reading symbols: ', symfn);
       syms.LoadFromFile(symfn);
+      if doVerbose then write(syms.Text);
+    end;
 
-    writeln('ExportRenameProcess');
-    ExportRenameProcess(fs, dst, syms);
+    ExportRenameProcess(fs, dst, syms, doVerbose);
 
     fs.Position:=0;
     dst.Position:=0;