+ added class for writing the NewExe entry table - not fully implemented yet

git-svn-id: trunk@42620 -
This commit is contained in:
nickysn 2019-08-09 16:47:37 +00:00
parent bd168fc552
commit 262cecf528

View File

@ -546,6 +546,16 @@ interface
property Size: QWord read GetSize; property Size: QWord read GetSize;
end; end;
{ TNewExeEntryTable }
TNewExeEntryTable = class
private
function GetSize: QWord;
public
procedure WriteTo(aWriter: TObjectWriter);
property Size: QWord read GetSize;
end;
{ These are fake "meta sections" used by the linker script. The actual { These are fake "meta sections" used by the linker script. The actual
NewExe sections are segments, limited to 64kb, which means there can be NewExe sections are segments, limited to 64kb, which means there can be
multiple code segments, etc. These are created manually as object multiple code segments, etc. These are created manually as object
@ -604,6 +614,7 @@ interface
FResidentNameTable: TNewExeResidentNameTable; FResidentNameTable: TNewExeResidentNameTable;
FModuleReferenceTable: TNewExeModuleReferenceTable; FModuleReferenceTable: TNewExeModuleReferenceTable;
FImportedNameTable: TNewExeImportedNameTable; FImportedNameTable: TNewExeImportedNameTable;
FEntryTable: TNewExeEntryTable;
procedure AddImportSymbol(const libname,symname,symmangledname:TCmdStr;OrdNr: longint;isvar:boolean); procedure AddImportSymbol(const libname,symname,symmangledname:TCmdStr;OrdNr: longint;isvar:boolean);
procedure AddImportLibrariesExtractedFromObjectModules; procedure AddImportLibrariesExtractedFromObjectModules;
procedure AddNewExeSection; procedure AddNewExeSection;
@ -615,6 +626,7 @@ interface
property ResidentNameTable: TNewExeResidentNameTable read FResidentNameTable; property ResidentNameTable: TNewExeResidentNameTable read FResidentNameTable;
property ModuleReferenceTable: TNewExeModuleReferenceTable read FModuleReferenceTable; property ModuleReferenceTable: TNewExeModuleReferenceTable read FModuleReferenceTable;
property ImportedNameTable: TNewExeImportedNameTable read FImportedNameTable; property ImportedNameTable: TNewExeImportedNameTable read FImportedNameTable;
property EntryTable: TNewExeEntryTable read FEntryTable;
protected protected
procedure DoRelocationFixup(objsec:TObjSection);override; procedure DoRelocationFixup(objsec:TObjSection);override;
procedure Order_ObjSectionList(ObjSectionList : TFPObjectList;const aPattern:string);override; procedure Order_ObjSectionList(ObjSectionList : TFPObjectList;const aPattern:string);override;
@ -3877,6 +3889,21 @@ cleanup:
end; end;
end; end;
{****************************************************************************
TNewExeEntryTable
****************************************************************************}
function TNewExeEntryTable.GetSize: QWord;
begin
{ todo: implement }
Result:=0;
end;
procedure TNewExeEntryTable.WriteTo(aWriter: TObjectWriter);
begin
{ todo: implement }
end;
{**************************************************************************** {****************************************************************************
TNewExeSection TNewExeSection
****************************************************************************} ****************************************************************************}
@ -4045,6 +4072,7 @@ cleanup:
Header.ModuleReferenceTableEntriesCount:=ModuleReferenceTable.Count; Header.ModuleReferenceTableEntriesCount:=ModuleReferenceTable.Count;
Header.ImportedNameTableStart:=Header.ModuleReferenceTableStart+ModuleReferenceTable.Size; Header.ImportedNameTableStart:=Header.ModuleReferenceTableStart+ModuleReferenceTable.Size;
Header.EntryTableOffset:=Header.ImportedNameTableStart+ImportedNameTable.Size; Header.EntryTableOffset:=Header.ImportedNameTableStart+ImportedNameTable.Size;
Header.EntryTableLength:=EntryTable.Size;
Header.WriteTo(FWriter); Header.WriteTo(FWriter);
@ -4055,6 +4083,7 @@ cleanup:
ResidentNameTable.WriteTo(FWriter); ResidentNameTable.WriteTo(FWriter);
ModuleReferenceTable.WriteTo(FWriter,ImportedNameTable); ModuleReferenceTable.WriteTo(FWriter,ImportedNameTable);
ImportedNameTable.WriteTo(FWriter); ImportedNameTable.WriteTo(FWriter);
EntryTable.WriteTo(FWriter);
{ todo: write the rest of the file as well } { todo: write the rest of the file as well }
@ -4134,10 +4163,12 @@ cleanup:
FResidentNameTable:=TNewExeResidentNameTable.Create; FResidentNameTable:=TNewExeResidentNameTable.Create;
FModuleReferenceTable:=TNewExeModuleReferenceTable.Create; FModuleReferenceTable:=TNewExeModuleReferenceTable.Create;
FImportedNameTable:=TNewExeImportedNameTable.Create; FImportedNameTable:=TNewExeImportedNameTable.Create;
FEntryTable:=TNewExeEntryTable.Create;
end; end;
destructor TNewExeOutput.destroy; destructor TNewExeOutput.destroy;
begin begin
FEntryTable.Free;
FImportedNameTable.Free; FImportedNameTable.Free;
FModuleReferenceTable.Free; FModuleReferenceTable.Free;
FResidentNameTable.Free; FResidentNameTable.Free;