summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/elf.h3
-rw-r--r--kexec/kexec-elf-exec.c6
2 files changed, 7 insertions, 2 deletions
diff --git a/include/elf.h b/include/elf.h
index 5db637b..b7677a2 100644
--- a/include/elf.h
+++ b/include/elf.h
@@ -258,7 +258,8 @@ typedef struct
#define EM_OPENRISC 92 /* OpenRISC 32-bit embedded processor */
#define EM_ARC_A5 93 /* ARC Cores Tangent-A5 */
#define EM_XTENSA 94 /* Tensilica Xtensa Architecture */
-#define EM_NUM 95
+#define EM_AARCH64 183 /* ARM AARCH64 */
+#define EM_NUM 184
/* If it is necessary to assign new unofficial EM_* values, please
pick large random numbers (0x8523, 0xa7f2, etc.) to minimize the
diff --git a/kexec/kexec-elf-exec.c b/kexec/kexec-elf-exec.c
index cb62d04..a9329ac 100644
--- a/kexec/kexec-elf-exec.c
+++ b/kexec/kexec-elf-exec.c
@@ -63,9 +63,13 @@ int elf_exec_load(struct mem_ehdr *ehdr, struct kexec_info *info)
/* If I have a dynamic executable find it's size
* and then find a location for it in memory.
+ * Note on arm64:
+ * arm64's vmlinux has virtual address in physical address
+ * field of PT_LOAD segments. So the following validity check
+ * and relocation makes no sense on arm64.
*/
base = 0;
- if (ehdr->e_type == ET_DYN) {
+ if ((ehdr->e_machine != EM_AARCH64) && (ehdr->e_type == ET_DYN)) {
unsigned long first, last, align;
first = ULONG_MAX;
last = 0;