mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-13 05:40:20 +02:00
+ added class for writing the NewExe entry table - not fully implemented yet
git-svn-id: trunk@42620 -
This commit is contained in:
parent
bd168fc552
commit
262cecf528
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user