Przeglądaj źródła

+ reading of winx64 coff object files generated by MS-VC

git-svn-id: trunk@3426 -
florian 19 lat temu
rodzic
commit
cae35add51
2 zmienionych plików z 31 dodań i 4 usunięć
  1. 6 0
      compiler/ogbase.pas
  2. 25 4
      compiler/ogcoff.pas

+ 6 - 0
compiler/ogbase.pas

@@ -48,6 +48,12 @@ interface
 {$ifdef x86_64}
          { 32bit Relocation to absolute address }
          RELOC_ABSOLUTE32,
+         { 64 bit coff only }
+         RELOC_RELATIVE_1,
+         RELOC_RELATIVE_2,
+         RELOC_RELATIVE_3,
+         RELOC_RELATIVE_4,
+         RELOC_RELATIVE_5,
 {$endif x86_64}
          { Relative relocation }
          RELOC_RELATIVE,

+ 25 - 4
compiler/ogcoff.pas

@@ -1197,6 +1197,16 @@ const win32stub : array[0..131] of byte=(
                 rel.reloctype:=IMAGE_REL_AMD64_ADDR64;
               RELOC_RVA :
                 rel.reloctype:=IMAGE_REL_AMD64_ADDR32NB;
+              RELOC_RELATIVE_1 :
+                rel.reloctype:=IMAGE_REL_AMD64_REL32_1;
+              RELOC_RELATIVE_2 :
+                rel.reloctype:=IMAGE_REL_AMD64_REL32_2;
+              RELOC_RELATIVE_3 :
+                rel.reloctype:=IMAGE_REL_AMD64_REL32_3;
+              RELOC_RELATIVE_4 :
+                rel.reloctype:=IMAGE_REL_AMD64_REL32_4;
+              RELOC_RELATIVE_5 :
+                rel.reloctype:=IMAGE_REL_AMD64_REL32_5;
 {$endif x86_64}
               else
                 internalerror(200603312);
@@ -1471,10 +1481,11 @@ const win32stub : array[0..131] of byte=(
 
     procedure TCoffObjInput.read_relocs(s:TCoffObjSection);
       var
-        rel      : coffreloc;
-        rel_type : TObjRelocationType;
-        i        : longint;
-        p        : TObjSymbol;
+        rel       : coffreloc;
+        rel_type  : TObjRelocationType;
+        i         : longint;
+        p         : TObjSymbol;
+        extradist : longint;
       begin
         for i:=1 to s.coffrelocs do
          begin
@@ -1501,6 +1512,16 @@ const win32stub : array[0..131] of byte=(
                rel_type:=RELOC_ABSOLUTE;
              IMAGE_REL_AMD64_ADDR32NB:
                rel_type:=RELOC_RVA;
+             IMAGE_REL_AMD64_REL32_1:
+               rel_type:=RELOC_RELATIVE_1;
+             IMAGE_REL_AMD64_REL32_2:
+               rel_type:=RELOC_RELATIVE_2;
+             IMAGE_REL_AMD64_REL32_3:
+               rel_type:=RELOC_RELATIVE_3;
+             IMAGE_REL_AMD64_REL32_4:
+               rel_type:=RELOC_RELATIVE_4;
+             IMAGE_REL_AMD64_REL32_5:
+               rel_type:=RELOC_RELATIVE_5;
 {$endif x86_64}
            else
              begin