diff mbox

[U-Boot,04/48] elf: Add a few definitions for 64-bit relocation

Message ID 1437580180-6405-5-git-send-email-sjg@chromium.org
State Superseded
Delegated to: Simon Glass
Headers show

Commit Message

Simon Glass July 22, 2015, 3:48 p.m. UTC
Provide the types necessary to relocate 64-bit images.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 include/elf.h | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

Comments

Bin Meng July 23, 2015, 2:59 a.m. UTC | #1
Hi Simon,

On Wed, Jul 22, 2015 at 11:48 PM, Simon Glass <sjg@chromium.org> wrote:
> Provide the types necessary to relocate 64-bit images.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
>  include/elf.h | 26 ++++++++++++++++++++++++++
>  1 file changed, 26 insertions(+)
>
> diff --git a/include/elf.h b/include/elf.h
> index 63d9341..1936ef6 100644
> --- a/include/elf.h
> +++ b/include/elf.h
> @@ -28,6 +28,16 @@ typedef int32_t              Elf32_Sword;    /* Signed large integer */
>  typedef uint32_t       Elf32_Word;     /* Unsigned large integer */
>  typedef uint16_t       Elf32_Half;     /* Unsigned medium integer */
>
> +/* 64-bit ELF base types. */
> +typedef __u64  Elf64_Addr;
> +typedef __u16  Elf64_Half;
> +typedef __s16  Elf64_SHalf;
> +typedef __u64  Elf64_Off;
> +typedef __s32  Elf64_Sword;
> +typedef __u32  Elf64_Word;
> +typedef __u64  Elf64_Xword;
> +typedef __s64  Elf64_Sxword;
> +

Can we use uint64_t, uint32_t, uint16_t etc. to define these? To keep
consistent wit the Elf32_xxx types.

>  /* e_ident[] identification indexes */
>  #define EI_MAG0                0               /* file ID */
>  #define EI_MAG1                1               /* file ID */
> @@ -379,6 +389,11 @@ typedef struct
>         Elf32_Sword     r_addend;
>  } Elf32_Rela;
>
> +struct elf64_rel {
> +       Elf64_Addr r_offset;    /* Location at which to apply the action */
> +       Elf64_Xword r_info;     /* index and type of relocation */
> +};
> +

Again, to be consistent with the elf32 one, can we use?

typedef struct {
       Elf64_Addr r_offset;    /* Location at which to apply the action */
       Elf64_Xword r_info;     /* index and type of relocation */
} Elf64_Rel;

>  /* Extract relocation info - r_info */
>  #define ELF32_R_SYM(i)         ((i) >> 8)
>  #define ELF32_R_TYPE(i)                ((unsigned char) (i))
> @@ -431,6 +446,17 @@ typedef struct
>
>  extern Elf32_Dyn       _DYNAMIC[];
>
> +typedef struct {
> +       Elf64_Sxword d_tag;             /* entry tag value */
> +       union {
> +               Elf64_Xword d_val;
> +               Elf64_Addr d_ptr;
> +       } d_un;
> +} Elf64_Dyn;
> +
> +#define ELF64_R_SYM(i)                 ((i) >> 32)
> +#define ELF64_R_TYPE(i)                        ((i) & 0xffffffff)
> +
>  /* Dynamic Array Tags - d_tag */
>  #define DT_NULL                0               /* marks end of _DYNAMIC array */
>  #define DT_NEEDED      1               /* string table offset of needed lib */
> --

Regards,
Bin
diff mbox

Patch

diff --git a/include/elf.h b/include/elf.h
index 63d9341..1936ef6 100644
--- a/include/elf.h
+++ b/include/elf.h
@@ -28,6 +28,16 @@  typedef int32_t		Elf32_Sword;	/* Signed large integer */
 typedef uint32_t	Elf32_Word;	/* Unsigned large integer */
 typedef uint16_t	Elf32_Half;	/* Unsigned medium integer */
 
+/* 64-bit ELF base types. */
+typedef __u64	Elf64_Addr;
+typedef __u16	Elf64_Half;
+typedef __s16	Elf64_SHalf;
+typedef __u64	Elf64_Off;
+typedef __s32	Elf64_Sword;
+typedef __u32	Elf64_Word;
+typedef __u64	Elf64_Xword;
+typedef __s64	Elf64_Sxword;
+
 /* e_ident[] identification indexes */
 #define EI_MAG0		0		/* file ID */
 #define EI_MAG1		1		/* file ID */
@@ -379,6 +389,11 @@  typedef struct
 	Elf32_Sword	r_addend;
 } Elf32_Rela;
 
+struct elf64_rel {
+	Elf64_Addr r_offset;	/* Location at which to apply the action */
+	Elf64_Xword r_info;	/* index and type of relocation */
+};
+
 /* Extract relocation info - r_info */
 #define ELF32_R_SYM(i)		((i) >> 8)
 #define ELF32_R_TYPE(i)		((unsigned char) (i))
@@ -431,6 +446,17 @@  typedef struct
 
 extern Elf32_Dyn	_DYNAMIC[];
 
+typedef struct {
+	Elf64_Sxword d_tag;		/* entry tag value */
+	union {
+		Elf64_Xword d_val;
+		Elf64_Addr d_ptr;
+	} d_un;
+} Elf64_Dyn;
+
+#define ELF64_R_SYM(i)			((i) >> 32)
+#define ELF64_R_TYPE(i)			((i) & 0xffffffff)
+
 /* Dynamic Array Tags - d_tag */
 #define DT_NULL		0		/* marks end of _DYNAMIC array */
 #define DT_NEEDED	1		/* string table offset of needed lib */