[U-Boot] [PATCH 04/48] elf: Add a few definitions for 64-bit relocation
Bin Meng
bmeng.cn at gmail.com
Thu Jul 23 04:59:36 CEST 2015
Hi Simon,
On Wed, Jul 22, 2015 at 11:48 PM, Simon Glass <sjg at chromium.org> wrote:
> Provide the types necessary to relocate 64-bit images.
>
> Signed-off-by: Simon Glass <sjg at 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
More information about the U-Boot
mailing list