Browse Source

+ added property that determines the resident name table size in bytes and use
it to fill the offset to the start of the module reference table in NewExe
files

git-svn-id: trunk@42607 -

nickysn 6 years ago
parent
commit
1736950d58
1 changed files with 14 additions and 0 deletions
  1. 14 0
      compiler/ogomf.pas

+ 14 - 0
compiler/ogomf.pas

@@ -501,8 +501,10 @@ interface
 
 
       TNewExeResidentNameTable = class(TFPHashObjectList)
       TNewExeResidentNameTable = class(TFPHashObjectList)
       private
       private
+        function GetSize: QWord;
       public
       public
         procedure WriteTo(aWriter: TObjectWriter);
         procedure WriteTo(aWriter: TObjectWriter);
+        property Size: QWord read GetSize;
       end;
       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
@@ -3700,6 +3702,17 @@ cleanup:
                          TNewExeResidentNameTable
                          TNewExeResidentNameTable
 ****************************************************************************}
 ****************************************************************************}
 
 
+    function TNewExeResidentNameTable.GetSize: QWord;
+      var
+        i: Integer;
+      begin
+        { the end of table mark is 1 byte }
+        Result:=1;
+        { each entry is 3 bytes, plus the length of the name }
+        for i:=0 to Count-1 do
+          Inc(Result,3+Length(TNewExeResidentNameTableEntry(Items[i]).Name));
+      end;
+
     procedure TNewExeResidentNameTable.WriteTo(aWriter: TObjectWriter);
     procedure TNewExeResidentNameTable.WriteTo(aWriter: TObjectWriter);
       var
       var
         i: Integer;
         i: Integer;
@@ -3885,6 +3898,7 @@ cleanup:
         Header.SegmentTableEntriesCount:=ExeSectionList.Count;
         Header.SegmentTableEntriesCount:=ExeSectionList.Count;
         Header.ResourceTableStart:=Header.SegmentTableStart+NewExeSegmentHeaderSize*Header.SegmentTableEntriesCount;
         Header.ResourceTableStart:=Header.SegmentTableStart+NewExeSegmentHeaderSize*Header.SegmentTableEntriesCount;
         Header.ResidentNameTableStart:=Header.ResourceTableStart+ResourceTable.Size;
         Header.ResidentNameTableStart:=Header.ResourceTableStart+ResourceTable.Size;
+        Header.ModuleReferenceTableStart:=Header.ResidentNameTableStart+ResidentNameTable.Size;
 
 
         Header.WriteTo(FWriter);
         Header.WriteTo(FWriter);