From: chenmiao <[email protected]>

To ensure the proper functioning of the jump_label test module, this patch
adds support for the R_OR1K_32_PCREL relocation type for any modules. The
implementation calculates the PC-relative offset by subtracting the
instruction location from the target value and stores the result at the
specified location.

Signed-off-by: chenmiao <[email protected]>
---
 arch/openrisc/kernel/module.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/arch/openrisc/kernel/module.c b/arch/openrisc/kernel/module.c
index c9ff4c4a0b29..4ac4fbaa827c 100644
--- a/arch/openrisc/kernel/module.c
+++ b/arch/openrisc/kernel/module.c
@@ -55,6 +55,10 @@ int apply_relocate_add(Elf32_Shdr *sechdrs,
                        value |= *location & 0xfc000000;
                        *location = value;
                        break;
+               case R_OR1K_32_PCREL:
+                       value -= (uint32_t)location;
+                       *location = value;
+                       break;
                case R_OR1K_AHI16:
                        /* Adjust the operand to match with a signed LO16.  */
                        value += 0x8000;
-- 
2.45.2


Reply via email to