Skip to content

Commit

Permalink
x86/relocs: Handle R_X86_64_REX_GOTPCRELX relocations
Browse files Browse the repository at this point in the history
Clang may produce R_X86_64_REX_GOTPCRELX relocations when redefining the
stack protector location.  Treat them as another type of PC-relative
relocation.

Signed-off-by: Brian Gerst <brgerst@gmail.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Link: https://lore.kernel.org/r/20250123190747.745588-6-brgerst@gmail.com
  • Loading branch information
Brian Gerst authored and Ingo Molnar committed Feb 18, 2025
1 parent f58b638 commit cb7927f
Showing 1 changed file with 7 additions and 0 deletions.
7 changes: 7 additions & 0 deletions arch/x86/tools/relocs.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@ static struct relocs relocs32;
static struct relocs relocs32neg;
static struct relocs relocs64;
# define FMT PRIu64

#ifndef R_X86_64_REX_GOTPCRELX
# define R_X86_64_REX_GOTPCRELX 42
#endif

#else
# define FMT PRIu32
#endif
Expand Down Expand Up @@ -227,6 +232,7 @@ static const char *rel_type(unsigned type)
REL_TYPE(R_X86_64_PC16),
REL_TYPE(R_X86_64_8),
REL_TYPE(R_X86_64_PC8),
REL_TYPE(R_X86_64_REX_GOTPCRELX),
#else
REL_TYPE(R_386_NONE),
REL_TYPE(R_386_32),
Expand Down Expand Up @@ -861,6 +867,7 @@ static int do_reloc64(struct section *sec, Elf_Rel *rel, ElfW(Sym) *sym,

case R_X86_64_PC32:
case R_X86_64_PLT32:
case R_X86_64_REX_GOTPCRELX:
/*
* PC relative relocations don't need to be adjusted unless
* referencing a percpu symbol.
Expand Down

0 comments on commit cb7927f

Please sign in to comment.