handle R_X86_64_PC64 relocations (llvm generates them)

This commit is contained in:
Kalamatee 2020-02-25 12:55:25 +00:00 committed by deadwood
parent 402af82bab
commit d8ff15e277
3 changed files with 11 additions and 2 deletions

View File

@ -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

View File

@ -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

View File

@ -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;