From cae35add516bca29b6a614f9637913e056191ee9 Mon Sep 17 00:00:00 2001 From: florian Date: Sat, 6 May 2006 07:59:37 +0000 Subject: [PATCH] + reading of winx64 coff object files generated by MS-VC git-svn-id: trunk@3426 - --- compiler/ogbase.pas | 6 ++++++ compiler/ogcoff.pas | 29 +++++++++++++++++++++++++---- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/compiler/ogbase.pas b/compiler/ogbase.pas index 8648537411..f784c95df0 100644 --- a/compiler/ogbase.pas +++ b/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, diff --git a/compiler/ogcoff.pas b/compiler/ogcoff.pas index 8193327713..b49cfd4568 100644 --- a/compiler/ogcoff.pas +++ b/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