diff options
author | Jakub Kicinski <kuba@kernel.org> | 2024-05-15 07:29:56 -0700 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2024-05-15 07:30:49 -0700 |
commit | 621cde16e49b3ecf7d59a8106a20aaebfb4a59a9 (patch) | |
tree | bb4b8e255e276950c8d9502998f83a7f4f5bf5e9 /arch/openrisc/kernel/module.c | |
parent | 317a215d493230da361028ea8a4675de334bfa1a (diff) | |
parent | 1b294a1f35616977caddaddf3e9d28e576a1adbc (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next
Cross merge.
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'arch/openrisc/kernel/module.c')
-rw-r--r-- | arch/openrisc/kernel/module.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/arch/openrisc/kernel/module.c b/arch/openrisc/kernel/module.c index 532013f523ac..c9ff4c4a0b29 100644 --- a/arch/openrisc/kernel/module.c +++ b/arch/openrisc/kernel/module.c @@ -39,22 +39,32 @@ int apply_relocate_add(Elf32_Shdr *sechdrs, value = sym->st_value + rel[i].r_addend; switch (ELF32_R_TYPE(rel[i].r_info)) { - case R_OR32_32: + case R_OR1K_32: *location = value; break; - case R_OR32_CONST: + case R_OR1K_LO_16_IN_INSN: *((uint16_t *)location + 1) = value; break; - case R_OR32_CONSTH: + case R_OR1K_HI_16_IN_INSN: *((uint16_t *)location + 1) = value >> 16; break; - case R_OR32_JUMPTARG: + case R_OR1K_INSN_REL_26: value -= (uint32_t)location; value >>= 2; value &= 0x03ffffff; value |= *location & 0xfc000000; *location = value; break; + case R_OR1K_AHI16: + /* Adjust the operand to match with a signed LO16. */ + value += 0x8000; + *((uint16_t *)location + 1) = value >> 16; + break; + case R_OR1K_SLO16: + /* Split value lower 16-bits. */ + value = ((value & 0xf800) << 10) | (value & 0x7ff); + *location = (*location & ~0x3e007ff) | value; + break; default: pr_err("module %s: Unknown relocation: %u\n", me->name, ELF32_R_TYPE(rel[i].r_info)); |