Re: [PATCH] openrisc: Add support for more module relocations
On Thu, Apr 11, 2024 at 02:12:59PM +0200, Geert Uytterhoeven wrote: > Hi Stafford, > > On Wed, Apr 10, 2024 at 10:52 PM Stafford Horne wrote: > > This patch adds the relocations. Note, we use the old naming R_OR32_* > > instead or the new naming R_OR1K_* to avoid change as this header is > > exported as a user api. > > > --- a/arch/openrisc/include/uapi/asm/elf.h > > +++ b/arch/openrisc/include/uapi/asm/elf.h > > @@ -43,6 +43,8 @@ > > #define R_OR32_JUMPTARG6 > > #define R_OR32_VTINHERIT 7 > > #define R_OR32_VTENTRY 8 > > +#define R_OR32_AHI16 35 > > +#define R_OR32_SLO16 39 > > Would it make sense to switch to the new names, e.g. > > #define R_OR1K_NONE0 > > and add definitions for backwards compatibility? > > #define R_OR32_NONER_OR1K_NONE > Hi Geert, Actually I had a patch doing this and added all 38 or so relocation definitions. But I dropped it at the last moment in favor of simplicity. Let me rework it and add it back. -Stafford
Re: [PATCH] openrisc: Add support for more module relocations
Hi Stafford, On Wed, Apr 10, 2024 at 10:52 PM Stafford Horne wrote: > This patch adds the relocations. Note, we use the old naming R_OR32_* > instead or the new naming R_OR1K_* to avoid change as this header is > exported as a user api. > --- a/arch/openrisc/include/uapi/asm/elf.h > +++ b/arch/openrisc/include/uapi/asm/elf.h > @@ -43,6 +43,8 @@ > #define R_OR32_JUMPTARG6 > #define R_OR32_VTINHERIT 7 > #define R_OR32_VTENTRY 8 > +#define R_OR32_AHI16 35 > +#define R_OR32_SLO16 39 Would it make sense to switch to the new names, e.g. #define R_OR1K_NONE0 and add definitions for backwards compatibility? #define R_OR32_NONER_OR1K_NONE Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- ge...@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds
[PATCH] openrisc: Add support for more module relocations
When testing modules in OpenRISC I found R_OR32_AHI16 (signed adjusted high 16-bit) and R_OR32_SLO16 (split low 16-bit) relocations are used in modules but not implemented yet. This patch adds the relocations. Note, we use the old naming R_OR32_* instead or the new naming R_OR1K_* to avoid change as this header is exported as a user api. Signed-off-by: Stafford Horne --- arch/openrisc/include/uapi/asm/elf.h | 2 ++ arch/openrisc/kernel/module.c| 10 ++ 2 files changed, 12 insertions(+) diff --git a/arch/openrisc/include/uapi/asm/elf.h b/arch/openrisc/include/uapi/asm/elf.h index 6868f81c281e..0c882a388524 100644 --- a/arch/openrisc/include/uapi/asm/elf.h +++ b/arch/openrisc/include/uapi/asm/elf.h @@ -43,6 +43,8 @@ #define R_OR32_JUMPTARG6 #define R_OR32_VTINHERIT 7 #define R_OR32_VTENTRY 8 +#define R_OR32_AHI16 35 +#define R_OR32_SLO16 39 typedef unsigned long elf_greg_t; diff --git a/arch/openrisc/kernel/module.c b/arch/openrisc/kernel/module.c index 532013f523ac..01bda5616114 100644 --- a/arch/openrisc/kernel/module.c +++ b/arch/openrisc/kernel/module.c @@ -55,6 +55,16 @@ int apply_relocate_add(Elf32_Shdr *sechdrs, value |= *location & 0xfc00; *location = value; break; + case R_OR32_AHI16: + /* Adjust the operand to match with a signed LO16. */ + value += 0x8000; + *((uint16_t *)location + 1) = value >> 16; + break; + case R_OR32_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)); -- 2.44.0