Browse Source

ogcoff.pas:
- removed empty destructor and checks for nil before .Free (they are done in tobject.free itself)
+ added COMDAT definitions.

git-svn-id: trunk@21383 -

sergei 13 years ago
parent
commit
bbb08bbf66
1 changed files with 15 additions and 12 deletions
  1. 15 12
      compiler/ogcoff.pas

+ 15 - 12
compiler/ogcoff.pas

@@ -130,7 +130,6 @@ interface
 {$endif arm}
 {$endif arm}
        public
        public
          constructor createcoff(const n:string;awin32:boolean;acObjSection:TObjSectionClass);
          constructor createcoff(const n:string;awin32:boolean;acObjSection:TObjSectionClass);
-         destructor  destroy;override;
          procedure CreateDebugSections;override;
          procedure CreateDebugSections;override;
          function  sectionname(atype:TAsmSectiontype;const aname:string;aorder:TAsmSectionOrder):string;override;
          function  sectionname(atype:TAsmSectiontype;const aname:string;aorder:TAsmSectionOrder):string;override;
          procedure writereloc(data:aint;len:aword;p:TObjSymbol;reloctype:TObjRelocationType);override;
          procedure writereloc(data:aint;len:aword;p:TObjSymbol;reloctype:TObjRelocationType);override;
@@ -456,6 +455,14 @@ implementation
        IMAGE_REL_BASED_HIGHLOW     = 3;  { Applies the delta to the 32-bit field at Offset. }
        IMAGE_REL_BASED_HIGHLOW     = 3;  { Applies the delta to the 32-bit field at Offset. }
        IMAGE_REL_BASED_DIR64       = 10; { Applies the delta to the 64-bit field at Offset. }
        IMAGE_REL_BASED_DIR64       = 10; { Applies the delta to the 64-bit field at Offset. }
 
 
+       { values for coffsectionrec.select }
+       IMAGE_COMDAT_SELECT_NODUPLICATES = 1;
+       IMAGE_COMDAT_SELECT_ANY          = 2;
+       IMAGE_COMDAT_SELECT_SAME_SIZE    = 3;
+       IMAGE_COMDAT_SELECT_EXACT_MATCH  = 4;
+       IMAGE_COMDAT_SELECT_ASSOCIATIVE  = 5;
+       IMAGE_COMDAT_SELECT_LARGEST      = 6;
+
     type
     type
        coffdjoptheader=packed record
        coffdjoptheader=packed record
          magic  : word;
          magic  : word;
@@ -470,7 +477,11 @@ implementation
        coffsectionrec=packed record
        coffsectionrec=packed record
          len     : longword;
          len     : longword;
          nrelocs : word;
          nrelocs : word;
-         empty   : array[0..11] of char;
+         nlines  : word;
+         checksum: longword;
+         assoc   : word;
+         select  : byte;
+         empty   : array[0..2] of char;
        end;
        end;
        coffreloc=packed record
        coffreloc=packed record
          address  : longword;
          address  : longword;
@@ -1033,12 +1044,6 @@ const pemagic : array[0..3] of byte = (
       end;
       end;
 
 
 
 
-    destructor TCoffObjData.destroy;
-      begin
-        inherited destroy;
-      end;
-
-
     function TCoffObjData.sectionname(atype:TAsmSectiontype;const aname:string;aorder:TAsmSectionOrder):string;
     function TCoffObjData.sectionname(atype:TAsmSectiontype;const aname:string;aorder:TAsmSectionOrder):string;
       var
       var
         sep     : string[3];
         sep     : string[3];
@@ -1210,10 +1215,8 @@ const pemagic : array[0..3] of byte = (
 
 
     destructor TCoffObjOutput.destroy;
     destructor TCoffObjOutput.destroy;
       begin
       begin
-        if assigned(FCoffSyms) then
-          FCoffSyms.free;
-        if assigned(FCoffStrs) then
-          FCoffStrs.free;
+        FCoffSyms.free;
+        FCoffStrs.free;
         inherited destroy;
         inherited destroy;
       end;
       end;