mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-21 21:51:42 +02:00
[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:
parent
102f894c4e
commit
cbc18282b1
@ -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;
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user