Update elf.h from glibc and recognize R_386_GOT32X, R_X86_64_GOTPCRELX and R_x86_64_REX_GOTPCRELX as non-dynamic relocations.
Signed-off-by: Mark Wielaard mjw@redhat.com --- backends/ChangeLog | 5 +++++ backends/i386_reloc.def | 1 + backends/x86_64_reloc.def | 2 ++ libelf/ChangeLog | 4 ++++ libelf/elf.h | 23 ++++++++++++++++++----- 5 files changed, 30 insertions(+), 5 deletions(-)
diff --git a/backends/ChangeLog b/backends/ChangeLog index 4b604fd..cc0dd6f 100644 --- a/backends/ChangeLog +++ b/backends/ChangeLog @@ -1,3 +1,8 @@ +2015-12-28 Mark Wielaard mjw@redhat.com + + * i386_reloc.def: Add GOT32X. + * x86_64_reloc.def: Add GOTPCRELX and REX_GOTPCRELX. + 2015-12-08 Jose E. Marchesi jose.marchesi@oracle.com
* sparc_init.c (sparc_init): Hook sparc_set_initial_registers_tid. diff --git a/backends/i386_reloc.def b/backends/i386_reloc.def index de3575d..a6a03f3 100644 --- a/backends/i386_reloc.def +++ b/backends/i386_reloc.def @@ -68,3 +68,4 @@ RELOC_TYPE (TLS_GOTDESC, REL) RELOC_TYPE (TLS_DESC_CALL, REL) RELOC_TYPE (TLS_DESC, EXEC) RELOC_TYPE (IRELATIVE, EXEC|DYN) +RELOC_TYPE (GOT32X, REL) diff --git a/backends/x86_64_reloc.def b/backends/x86_64_reloc.def index ad84efa..07a7c3d 100644 --- a/backends/x86_64_reloc.def +++ b/backends/x86_64_reloc.def @@ -61,3 +61,5 @@ RELOC_TYPE (GOTPC32_TLSDESC, REL) RELOC_TYPE (TLSDESC_CALL, REL) RELOC_TYPE (TLSDESC, REL|EXEC|DYN) RELOC_TYPE (IRELATIVE, EXEC|DYN) +RELOC_TYPE (GOTPCRELX, REL) +RELOC_TYPE (REX_GOTPCRELX, REL) diff --git a/libelf/ChangeLog b/libelf/ChangeLog index aabf6f6..9536ced 100644 --- a/libelf/ChangeLog +++ b/libelf/ChangeLog @@ -1,3 +1,7 @@ +2016-01-28 Mark Wielaard mjw@redhat.com + + * elf.h: Update from glibc. Add new i386 and x86_64 relocations. + 2016-01-13 Mark Wielaard mjw@redhat.com
* libelf.h: Check SHF_COMPRESSED is defined. If not define it and the diff --git a/libelf/elf.h b/libelf/elf.h index 12feb91..1a7000b 100644 --- a/libelf/elf.h +++ b/libelf/elf.h @@ -1,5 +1,5 @@ /* This file defines standard ELF types, structures, and macros. - Copyright (C) 1995-2015 Free Software Foundation, Inc. + Copyright (C) 1995-2016 Free Software Foundation, Inc. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or @@ -1269,8 +1269,10 @@ typedef struct argument, returning the TLS offset for the symbol. */ #define R_386_IRELATIVE 42 /* Adjust indirectly by program base */ +#define R_386_GOT32X 43 /* Load from 32 bit GOT entry, + relaxable. */ /* Keep this the last entry. */ -#define R_386_NUM 43 +#define R_386_NUM 44
/* SUN SPARC specific definitions. */
@@ -1727,7 +1729,11 @@ typedef struct PLT is writable. For a non-writable PLT, this is omitted or has a zero value. */ #define DT_MIPS_RWPLT 0x70000034 -#define DT_MIPS_NUM 0x35 +/* An alternative description of the classic MIPS RLD_MAP that is usable + in a PIE as it stores a relative offset from the address of the tag + rather than an absolute address. */ +#define DT_MIPS_RLD_MAP_REL 0x70000035 +#define DT_MIPS_NUM 0x36
/* Legal values for DT_MIPS_FLAGS Elf32_Dyn entry. */
@@ -3140,8 +3146,15 @@ enum #define R_X86_64_TLSDESC 36 /* TLS descriptor. */ #define R_X86_64_IRELATIVE 37 /* Adjust indirectly by program base */ #define R_X86_64_RELATIVE64 38 /* 64-bit adjust by program base */ - -#define R_X86_64_NUM 39 + /* 39 Reserved was R_X86_64_PC32_BND */ + /* 40 Reserved was R_X86_64_PLT32_BND */ +#define R_X86_64_GOTPCRELX 41 /* Load from 32 bit signed pc relative + offset to GOT entry without REX + prefix, relaxable. */ +#define R_X86_64_REX_GOTPCRELX 42 /* Load from 32 bit signed pc relative + offset to GOT entry with REX prefix, + relaxable. */ +#define R_X86_64_NUM 43
/* AM33 relocations. */
On Thu, Jan 28, 2016 at 02:01:39PM +0100, Mark Wielaard wrote:
Update elf.h from glibc and recognize R_386_GOT32X, R_X86_64_GOTPCRELX and R_x86_64_REX_GOTPCRELX as non-dynamic relocations.
It took a bit for glibc to pick up these changes. But now that they have I have finally added the same to elfutils.
Cheers,
Mark
elfutils-devel@lists.fedorahosted.org