]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
RISC-V: Handle R_RISCV_CALL_PLT reloc
authorKhem Raj <raj.khem@gmail.com>
Thu, 23 Feb 2023 21:15:08 +0000 (13:15 -0800)
committerDaniel Kiper <daniel.kiper@oracle.com>
Tue, 28 Feb 2023 13:04:11 +0000 (14:04 +0100)
GNU assembler starting 2.40 release always generates R_RISCV_CALL_PLT
reloc for call in assembler [1], similarly LLVM does not make
distinction between R_RISCV_CALL_PLT and R_RISCV_CALL [2].

Fixes "grub-mkimage: error: relocation 0x13 is not implemented yet.".

[1] https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=70f35d72ef04cd23771875c1661c9975044a749c
[2] https://reviews.llvm.org/D132530

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
grub-core/kern/riscv/dl.c
util/grub-mkimagexx.c

index f26b12aaa4c67898a21bd494946ce80d994a662d..896653bb41c58e7f1f30509ae9934bf66df13c45 100644 (file)
@@ -188,6 +188,7 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr,
          break;
 
        case R_RISCV_CALL:
+       case R_RISCV_CALL_PLT:
          {
            grub_uint32_t *abs_place = place;
            grub_ssize_t off = sym_addr - (grub_addr_t) place;
index a1927e786928fad775dd106675693e8264434b1d..c5fb336e9758481726af807648eaa21c03ddca7f 100644 (file)
@@ -1294,6 +1294,7 @@ SUFFIX (relocate_addrs) (Elf_Ehdr *e, struct section_metadata *smd,
                     }
                     break;
                   case R_RISCV_CALL:
+                  case R_RISCV_CALL_PLT:
                     {
                       grub_uint32_t hi20, lo12;
 
@@ -1726,6 +1727,7 @@ translate_relocation_pe (struct translate_context *ctx,
        case R_RISCV_BRANCH:
        case R_RISCV_JAL:
        case R_RISCV_CALL:
+       case R_RISCV_CALL_PLT:
        case R_RISCV_PCREL_HI20:
        case R_RISCV_PCREL_LO12_I:
        case R_RISCV_PCREL_LO12_S: