From d8ff15e27741a05f2fee1a27b913773070158436 Mon Sep 17 00:00:00 2001 From: Kalamatee Date: Tue, 25 Feb 2020 12:55:25 +0000 Subject: [PATCH] handle R_X86_64_PC64 relocations (llvm generates them) --- bootstrap/elfloader.c | 6 +++++- compiler/include/dos/elf.h | 3 ++- rom/dos/internalloadseg_elf.c | 4 ++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/bootstrap/elfloader.c b/bootstrap/elfloader.c index 3a2a381e3c..893434d6f3 100644 --- a/bootstrap/elfloader.c +++ b/bootstrap/elfloader.c @@ -1,5 +1,5 @@ /* - Copyright (C) 2006-2019 The AROS Development Team. All rights reserved. + Copyright (C) 2006-2020 The AROS Development Team. All rights reserved. $Id$ Desc: ELF loader extracted from our internal_load_seg_elf in dos.library. @@ -239,6 +239,10 @@ static int relocate(struct elfheader *eh, struct sheader *sh, long shrel_idx, el *(int32_t *)p = (int64_t)s + (int64_t)rel->addend; break; + case R_X86_64_PC64: + *(uint64_t *)p = (uint64_t)s + (uint64_t)rel->addend - (uint64_t) p; + break; + case R_X86_64_NONE: /* No reloc */ break; #else diff --git a/compiler/include/dos/elf.h b/compiler/include/dos/elf.h index 9a40879246..24acaec40d 100644 --- a/compiler/include/dos/elf.h +++ b/compiler/include/dos/elf.h @@ -2,7 +2,7 @@ #define DOS_ELF_H /* - Copyright (C) 1995-2019, The AROS Development Team. All rights reserved. + Copyright (C) 1995-2020, The AROS Development Team. All rights reserved. $Id$ Desc: Definition of ELF file structures. @@ -67,6 +67,7 @@ #define R_X86_64_PLT32 4 #define R_X86_64_32 10 #define R_X86_64_32S 11 +#define R_X86_64_PC64 24 #define R_68K_NONE 0 #define R_68K_32 1 diff --git a/rom/dos/internalloadseg_elf.c b/rom/dos/internalloadseg_elf.c index 126661fa24..766e42b650 100644 --- a/rom/dos/internalloadseg_elf.c +++ b/rom/dos/internalloadseg_elf.c @@ -419,6 +419,10 @@ static int relocate *(LONG *)p = (QUAD)s + (QUAD)rel->addend; break; + case R_X86_64_PC64: + *(UQUAD *)p = (UQUAD)s + (UQUAD)rel->addend - (IPTR) p; + break; + case R_X86_64_NONE: /* No reloc */ break;