elf/elf.h: Add new 386 and X86_64 relocations from binutils.

Message ID 1453985706-30030-1-git-send-email-mjw@redhat.com
State New, archived
Headers

Commit Message

Mark Wielaard Jan. 28, 2016, 12:55 p.m. UTC
  The following new 386 and X86_64 were added to binutils. They are
non-dynamic relocations, so don't need direct handling in glibc.
But other programs, like elfutils, use the glibc elf.h definitions
for the names and numbers when inspecting ET_REL files.

R_386_GOT32X was proposed in
https://groups.google.com/forum/#!topic/ia32-abi/GbJJskkid4I

X86_64_GOTPCRELX and R_X86_64_REX_GOTPCRELX were proposed in
https://groups.google.com/forum/#!topic/x86-64-abi/n9AWHogmVY0

There also used to be R_X86_64_PC32_BND (39) and R_X86_64_PLT32_BND (40)
but those already got deprecated and now the numbers are simply reserved.
See https://groups.google.com/d/msg/x86-64-abi/-hdQyMixt8Y/XFDOvioG85cJ
They are still in current binutils master, but given that they should
not be used I didn't add them to elf.h.

	* elf/elf.h (R_386_GOT32X): New.
	(R_386_NUM): Update.
	(R_X86_64_GOTPCRELX: New.
	(R_X86_64_REX_GOTPCRELX): New.
	(R_X86_64_NUM): Update.

OK to commit?

---
  

Comments

H.J. Lu Jan. 28, 2016, 1:03 p.m. UTC | #1
On Thu, Jan 28, 2016 at 4:55 AM, Mark Wielaard <mjw@redhat.com> wrote:
> The following new 386 and X86_64 were added to binutils. They are
> non-dynamic relocations, so don't need direct handling in glibc.
> But other programs, like elfutils, use the glibc elf.h definitions
> for the names and numbers when inspecting ET_REL files.
>
> R_386_GOT32X was proposed in
> https://groups.google.com/forum/#!topic/ia32-abi/GbJJskkid4I
>
> X86_64_GOTPCRELX and R_X86_64_REX_GOTPCRELX were proposed in
> https://groups.google.com/forum/#!topic/x86-64-abi/n9AWHogmVY0
>
> There also used to be R_X86_64_PC32_BND (39) and R_X86_64_PLT32_BND (40)
> but those already got deprecated and now the numbers are simply reserved.

We can't use them for anything else and linker still supports them,  But
assembler won't generate them.

> See https://groups.google.com/d/msg/x86-64-abi/-hdQyMixt8Y/XFDOvioG85cJ
> They are still in current binutils master, but given that they should
> not be used I didn't add them to elf.h.
>
>         * elf/elf.h (R_386_GOT32X): New.
>         (R_386_NUM): Update.
>         (R_X86_64_GOTPCRELX: New.
>         (R_X86_64_REX_GOTPCRELX): New.
>         (R_X86_64_NUM): Update.
>
> OK to commit?
>
> ---
>
> diff --git a/elf/elf.h b/elf/elf.h
> index 15f5a75..1a7000b 100644
> --- a/elf/elf.h
> +++ b/elf/elf.h
> @@ -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.  */
>
> @@ -3144,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.  */
> --
> 1.8.3.1
>
Looks good to me.

Thanks.
  

Patch

diff --git a/elf/elf.h b/elf/elf.h
index 15f5a75..1a7000b 100644
--- a/elf/elf.h
+++ b/elf/elf.h
@@ -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.  */
 
@@ -3144,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.  */