]> git.baikalelectronics.ru Git - kernel.git/commitdiff
RISC-V: Support ADD32 relocation type in kernel module
authorZong Li <zong@andestech.com>
Thu, 15 Mar 2018 08:50:48 +0000 (16:50 +0800)
committerPalmer Dabbelt <palmer@sifive.com>
Tue, 3 Apr 2018 03:00:55 +0000 (20:00 -0700)
Signed-off-by: Zong Li <zong@andestech.com>
Signed-off-by: Palmer Dabbelt <palmer@sifive.com>
arch/riscv/kernel/module.c

index 957933e669b160af72599bd9bbebb4efedf1e4c2..73ea36c73d3b19ef5f6937758fc54ccfaa1911e7 100644 (file)
@@ -249,6 +249,13 @@ static int apply_r_riscv_align_rela(struct module *me, u32 *location,
        return -EINVAL;
 }
 
+static int apply_r_riscv_add32_rela(struct module *me, u32 *location,
+                                   Elf_Addr v)
+{
+       *(u32 *)location += (*(u32 *)v);
+       return 0;
+}
+
 static int (*reloc_handlers_rela[]) (struct module *me, u32 *location,
                                Elf_Addr v) = {
        [R_RISCV_64]                    = apply_r_riscv_64_rela,
@@ -267,6 +274,7 @@ static int (*reloc_handlers_rela[]) (struct module *me, u32 *location,
        [R_RISCV_CALL]                  = apply_r_riscv_call_rela,
        [R_RISCV_RELAX]                 = apply_r_riscv_relax_rela,
        [R_RISCV_ALIGN]                 = apply_r_riscv_align_rela,
+       [R_RISCV_ADD32]                 = apply_r_riscv_add32_rela,
 };
 
 int apply_relocate_add(Elf_Shdr *sechdrs, const char *strtab,