grub2/risc-v-fix-computation-of-pc-relative-relocation-offset.patch
Michael Chang 5c5a86e543 Accepting request 741725 from home:Andreas_Schwab:Factory
- Enable support for riscv64
- Backports from upstream:
  * risc-v-fix-computation-of-pc-relative-relocation-offset.patch
  * risc-v-add-clzdi2-symbol.patch
  * grub-install-define-default-platform-for-risc-v.patch

OBS-URL: https://build.opensuse.org/request/show/741725
OBS-URL: https://build.opensuse.org/package/show/Base:System/grub2?expand=0&rev=341
2019-10-23 06:00:37 +00:00

40 lines
1.3 KiB
Diff

From 2bf40e9e5be9808b17852e688eead87acff14420 Mon Sep 17 00:00:00 2001
From: Andreas Schwab <schwab@suse.de>
Date: Wed, 26 Jun 2019 16:50:03 +0200
Subject: [PATCH] RISC-V: Fix computation of pc-relative relocation offset
The offset calculation was missing the relocation addend.
Signed-off-by: Andreas Schwab <schwab@suse.de>
Tested-by: Chester Lin <clin@suse.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
---
util/grub-mkimagexx.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/util/grub-mkimagexx.c b/util/grub-mkimagexx.c
index bc087c2b5..d16ec63a1 100644
--- a/util/grub-mkimagexx.c
+++ b/util/grub-mkimagexx.c
@@ -1232,8 +1232,7 @@ SUFFIX (relocate_addrs) (Elf_Ehdr *e, struct section_metadata *smd,
grub_uint32_t *t32 = (grub_uint32_t *) target;
grub_uint16_t *t16 = (grub_uint16_t *) target;
grub_uint8_t *t8 = (grub_uint8_t *) target;
- grub_int64_t off = (long)sym_addr - target_section_addr - offset
- - image_target->vaddr_offset;
+ grub_int64_t off;
/*
* Instructions and instruction encoding are documented in the RISC-V
@@ -1243,6 +1242,7 @@ SUFFIX (relocate_addrs) (Elf_Ehdr *e, struct section_metadata *smd,
*/
sym_addr += addend;
+ off = sym_addr - target_section_addr - offset - image_target->vaddr_offset;
switch (ELF_R_TYPE (info))
{
--
2.23.0