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

From b8fd1fcc5b7ef204139d2d4f8fd538f2e4301245 Mon Sep 17 00:00:00 2001
From: Dmitry Boyarintsev <skalogryz.lists@gmail.com>
Date: Thu, 26 Sep 2019 10:18:34 -0400

git-svn-id: branches/wasm@46010 -
This commit is contained in:
nickysn 2020-08-03 12:58:58 +00:00
parent 102f894c4e
commit cbc18282b1
2 changed files with 58 additions and 30 deletions

View File

@ -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;

View File

@ -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;