From c4a712034fee683a7f5d8db2c502b14ecf634d5a Mon Sep 17 00:00:00 2001 From: Clemens Fruhwirth Date: Wed, 8 Aug 2007 14:57:00 +0000 Subject: [PATCH] Add R_X86_64_PC64 relocation support to the Linker --- rts/Linker.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/rts/Linker.c b/rts/Linker.c index 6d5a8cf..2d50280 100644 --- a/rts/Linker.c +++ b/rts/Linker.c @@ -2534,13 +2534,16 @@ ocResolve_PEi386 ( ObjectCode* oc ) #endif #if !defined(openbsd_HOST_OS) -#include +# include +# ifndef R_X86_64_PC64 /* If elf.h doesn't define it */ +# define R_X86_64_PC64 24 +# endif #else /* openbsd elf has things in different places, with diff names */ -#include -#include -#define R_386_32 RELOC_32 -#define R_386_PC32 RELOC_PC32 +# include +# include +# define R_386_32 RELOC_32 +# define R_386_PC32 RELOC_PC32 #endif /* @@ -3484,6 +3487,13 @@ do_Elf_Rela_relocations ( ObjectCode* oc, char* ehdrC, break; } + case R_X86_64_PC64: + { + StgInt64 off = value - P; + *(Elf64_Word *)P = (Elf64_Word)off; + break; + } + case R_X86_64_32: if (value >= 0x7fffffffL) { barf("R_X86_64_32 relocation out of range: %s = %p\n", -- 1.7.10.4