diff options
author | Clemens Fruhwirth <clemens@endorphin.org> | 2007-08-08 14:57:00 +0000 |
---|---|---|
committer | Clemens Fruhwirth <clemens@endorphin.org> | 2007-08-08 14:57:00 +0000 |
commit | c4a712034fee683a7f5d8db2c502b14ecf634d5a (patch) | |
tree | bbd8ec381ca4bdd903d23da54b4cfbb7ff9be569 /rts/Linker.c | |
parent | d37d720f79f3269be95f3662a11009e6834023f6 (diff) | |
download | haskell-c4a712034fee683a7f5d8db2c502b14ecf634d5a.tar.gz |
Add R_X86_64_PC64 relocation support to the Linker
Diffstat (limited to 'rts/Linker.c')
-rw-r--r-- | rts/Linker.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/rts/Linker.c b/rts/Linker.c index 6d5a8cf021..2d502808fa 100644 --- a/rts/Linker.c +++ b/rts/Linker.c @@ -2534,13 +2534,16 @@ ocResolve_PEi386 ( ObjectCode* oc ) #endif #if !defined(openbsd_HOST_OS) -#include <elf.h> +# include <elf.h> +# 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 <elf_abi.h> -#include <machine/reloc.h> -#define R_386_32 RELOC_32 -#define R_386_PC32 RELOC_PC32 +# include <elf_abi.h> +# include <machine/reloc.h> +# 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", |