summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPingfan Liu <piliu@redhat.com>2022-03-31 14:03:31 +0800
committerSimon Horman <horms@verge.net.au>2022-04-01 15:55:19 +0200
commitc1ae085bd211d6b35aa8040914e6402b7dd5170f (patch)
treeedb10700055a264caeafd159d588ee2296f2e73f
parent2b78a27a64f097dd5d6e051c9a4b8a1b286c9ed0 (diff)
downloadkexec-tools-c1ae085bd211d6b35aa8040914e6402b7dd5170f.tar.gz
arm64: fix static data relocations in machine_apply_elf_rel()
As for 'static data relocations', instead of patching an instruction (OR ops), it should be assigned to value directly. Signed-off-by: Pingfan Liu <piliu@redhat.com> Signed-off-by: Simon Horman <horms@verge.net.au>
-rw-r--r--kexec/arch/arm64/kexec-arm64.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/kexec/arch/arm64/kexec-arm64.c b/kexec/arch/arm64/kexec-arm64.c
index 311731d..ec6df4b 100644
--- a/kexec/arch/arm64/kexec-arm64.c
+++ b/kexec/arch/arm64/kexec-arm64.c
@@ -1249,13 +1249,12 @@ void machine_apply_elf_rel(struct mem_ehdr *ehdr, struct mem_sym *UNUSED(sym),
case R_AARCH64_ABS64:
type = "ABS64";
loc64 = ptr;
- *loc64 = cpu_to_elf64(ehdr, elf64_to_cpu(ehdr, *loc64) + value);
+ *loc64 = cpu_to_elf64(ehdr, value);
break;
case R_AARCH64_PREL32:
type = "PREL32";
loc32 = ptr;
- *loc32 = cpu_to_elf32(ehdr,
- elf32_to_cpu(ehdr, *loc32) + value - address);
+ *loc32 = cpu_to_elf32(ehdr, value - address);
break;
/* Set a MOV[KZ] immediate field to bits [15:0] of X. No overflow check */