mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-20 05:09:22 +02:00
[PATCH 012/188] updating tools function names
From 6d73e3c99bc0cd1b8057c5e715e75b01166cf4ce Mon Sep 17 00:00:00 2001 From: Dmitry Boyarintsev <skalogryz.lists@gmail.com> Date: Thu, 26 Sep 2019 09:49:31 -0400 git-svn-id: branches/wasm@46008 -
This commit is contained in:
parent
24acc96458
commit
c5350b7655
@ -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.
|
||||
|
||||
|
@ -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;
|
||||
if not Result then Exit;
|
||||
|
||||
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;
|
||||
|
||||
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);
|
||||
|
Loading…
Reference in New Issue
Block a user