Browse Source

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

git-svn-id: trunk@42620 -
nickysn 6 years ago
parent
commit
262cecf528
1 changed files with 31 additions and 0 deletions
  1. 31 0
      compiler/ogomf.pas

+ 31 - 0
compiler/ogomf.pas

@@ -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;