RISC-V: Support 32_PCREL relocation type in kernel module

Message ID 20230613072644.10487-1-nylon.chen@sifive.com
State New
Headers
Series RISC-V: Support 32_PCREL relocation type in kernel module |

Commit Message

Nylon Chen June 13, 2023, 7:26 a.m. UTC
  Signed-off-by: Nylon Chen <nylon.chen@sifive.com>
---
 arch/riscv/kernel/module.c | 11 +++++++++++
 1 file changed, 11 insertions(+)
  

Comments

Conor Dooley June 13, 2023, 4:50 p.m. UTC | #1
On Tue, Jun 13, 2023 at 03:26:44PM +0800, Nylon Chen wrote:
> Signed-off-by: Nylon Chen <nylon.chen@sifive.com>

You need to write a commit message chief :/
E.g., explain wasn't this needed before and is now.

Cheers,
Conor.
  

Patch

diff --git a/arch/riscv/kernel/module.c b/arch/riscv/kernel/module.c
index 7c651d55fcbd..f52d8e3d4b63 100644
--- a/arch/riscv/kernel/module.c
+++ b/arch/riscv/kernel/module.c
@@ -310,6 +310,15 @@  static int apply_r_riscv_sub64_rela(struct module *me, u32 *location,
 	return 0;
 }
 
+static int apply_r_riscv_pcrel_32_rela(struct module *me, u32 *location,
+				       Elf_Addr v)
+{
+	ptrdiff_t offset = (void *)v - (void *)location;
+
+	*location = (*location & 0xffff0000) | (offset & 0xffff);
+	return 0;
+}
+
 static int (*reloc_handlers_rela[]) (struct module *me, u32 *location,
 				Elf_Addr v) = {
 	[R_RISCV_32]			= apply_r_riscv_32_rela,
@@ -335,6 +344,7 @@  static int (*reloc_handlers_rela[]) (struct module *me, u32 *location,
 	[R_RISCV_SUB16]			= apply_r_riscv_sub16_rela,
 	[R_RISCV_SUB32]			= apply_r_riscv_sub32_rela,
 	[R_RISCV_SUB64]			= apply_r_riscv_sub64_rela,
+	[R_RISCV_32_PCREL]		= apply_r_riscv_pcrel_32_rela,
 };
 
 int apply_relocate_add(Elf_Shdr *sechdrs, const char *strtab,