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