diff options
author | Simon Glass <sjg@chromium.org> | 2016-11-07 08:47:09 -0700 |
---|---|---|
committer | Alexander Graf <agraf@suse.de> | 2016-11-14 23:24:03 +0100 |
commit | c70f74a081c2005b0a4749cf8762fc14b7369ddb (patch) | |
tree | 6edbba17396a181e6ef05ca4c5e6696b88017949 | |
parent | c7ae3dfdccc171543804d6577ee41ab03e7a09bc (diff) | |
download | u-boot-c70f74a081c2005b0a4749cf8762fc14b7369ddb.tar.gz u-boot-c70f74a081c2005b0a4749cf8762fc14b7369ddb.tar.bz2 u-boot-c70f74a081c2005b0a4749cf8762fc14b7369ddb.zip |
elf: arm: Add a few ARM relocation types
Rather than hard-coding the relocation type, add it to the ELF header file
and use it from there.
Signed-off-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
-rw-r--r-- | arch/arm/lib/relocate.S | 3 | ||||
-rw-r--r-- | arch/arm/lib/relocate_64.S | 3 | ||||
-rw-r--r-- | include/elf.h | 13 |
3 files changed, 17 insertions, 2 deletions
diff --git a/arch/arm/lib/relocate.S b/arch/arm/lib/relocate.S index 475d503dd9..a6fb07c401 100644 --- a/arch/arm/lib/relocate.S +++ b/arch/arm/lib/relocate.S @@ -8,6 +8,7 @@ #include <asm-offsets.h> #include <config.h> +#include <elf.h> #include <linux/linkage.h> #ifdef CONFIG_CPU_V7M #include <asm/armv7m.h> @@ -96,7 +97,7 @@ copy_loop: fixloop: ldmia r2!, {r0-r1} /* (r0,r1) <- (SRC location,fixup) */ and r1, r1, #0xff - cmp r1, #23 /* relative fixup? */ + cmp r1, #R_ARM_RELATIVE bne fixnext /* relative fix: increase location by offset */ diff --git a/arch/arm/lib/relocate_64.S b/arch/arm/lib/relocate_64.S index 5c51cae8ab..242e56e960 100644 --- a/arch/arm/lib/relocate_64.S +++ b/arch/arm/lib/relocate_64.S @@ -10,6 +10,7 @@ #include <asm-offsets.h> #include <config.h> +#include <elf.h> #include <linux/linkage.h> #include <asm/macro.h> @@ -47,7 +48,7 @@ fixloop: ldp x0, x1, [x2], #16 /* (x0,x1) <- (SRC location, fixup) */ ldr x4, [x2], #8 /* x4 <- addend */ and x1, x1, #0xffffffff - cmp x1, #1027 /* relative fixup? */ + cmp x1, #R_AARCH64_RELATIVE bne fixnext /* relative fix: store addend plus offset at dest location */ diff --git a/include/elf.h b/include/elf.h index bcc5eb7b07..aaecac799e 100644 --- a/include/elf.h +++ b/include/elf.h @@ -13,6 +13,7 @@ #ifndef _ELF_H #define _ELF_H +#ifndef __ASSEMBLER__ #include "compiler.h" /* @@ -517,6 +518,8 @@ unsigned long elf_hash(const unsigned char *name); #define ELF_TARG_VER 1 /* The ver for which this code is intended */ +#endif /* __ASSEMBLER */ + /* * XXX - PowerPC defines really don't belong in here, * but we'll put them in for simplicity. @@ -602,6 +605,16 @@ unsigned long elf_hash(const unsigned char *name); that may still be in object files. */ #define R_PPC_TOC16 255 + /* ARM relocs */ +#define R_ARM_NONE 0 /* No reloc */ +#define R_ARM_RELATIVE 23 /* Adjust by program base */ + +/* AArch64 relocs */ +#define R_AARCH64_NONE 0 /* No relocation. */ +#define R_AARCH64_RELATIVE 1027 /* Adjust by program base. */ + +#ifndef __ASSEMBLER__ int valid_elf_image(unsigned long addr); +#endif #endif /* _ELF_H */ |