elf: Add a few definitions for 64-bit relocation
authorSimon Glass <sjg@chromium.org>
Fri, 31 Jul 2015 15:31:21 +0000 (09:31 -0600)
committerSimon Glass <sjg@chromium.org>
Wed, 5 Aug 2015 14:42:40 +0000 (08:42 -0600)
Provide the types necessary to relocate 64-bit images.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
include/elf.h

index 63d93416a3e1246975bd390b8990b6067c350f97..a35e085d82a3beade121accaa44b2d54268f7915 100644 (file)
@@ -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 uint64_t       Elf64_Addr;
+typedef uint16_t       Elf64_Half;
+typedef int16_t                Elf64_SHalf;
+typedef uint64_t       Elf64_Off;
+typedef int32_t                Elf64_Sword;
+typedef uint32_t       Elf64_Word;
+typedef uint64_t       Elf64_Xword;
+typedef int64_t                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;
 
+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 */