RISC-V: fix R_RISCV_ADD32/R_RISCV_SUB32 relocations
authorAndreas Schwab <schwab@suse.de>
Tue, 12 Jun 2018 17:26:36 +0000 (19:26 +0200)
committerPalmer Dabbelt <palmer@sifive.com>
Wed, 4 Jul 2018 21:12:34 +0000 (14:12 -0700)
The R_RISCV_ADD32/R_RISCV_SUB32 relocations should add/subtract the
address of the symbol (without overflow check), not its contents.

Signed-off-by: Andreas Schwab <schwab@suse.de>
Signed-off-by: Palmer Dabbelt <palmer@sifive.com>
arch/riscv/kernel/module.c

index 1d5e9b934b8ca5b5b78a64af5e1c06e334b7e5f2..6bb48315c973b367a6b01a0128aee35e8a62b484 100644 (file)
@@ -263,14 +263,14 @@ static int apply_r_riscv_align_rela(struct module *me, u32 *location,
 static int apply_r_riscv_add32_rela(struct module *me, u32 *location,
                                    Elf_Addr v)
 {
-       *(u32 *)location += (*(u32 *)v);
+       *(u32 *)location += (u32)v;
        return 0;
 }
 
 static int apply_r_riscv_sub32_rela(struct module *me, u32 *location,
                                    Elf_Addr v)
 {
-       *(u32 *)location -= (*(u32 *)v);
+       *(u32 *)location -= (u32)v;
        return 0;
 }