Messages in this thread | | | From | Huacai Chen <> | Date | Thu, 28 Jul 2022 20:30:15 +0800 | Subject | Re: [PATCH 2/4] LoongArch: Support R_LARCH_SOP_PUSH_GPREL relocation type in kernel module |
| |
Hi, Ruoyao,
Missing V2 in the title?
Huacai
On Thu, Jul 28, 2022 at 7:59 PM Xi Ruoyao <xry111@xry111.site> wrote: > > This relocation type pushes the offset of the GOT entry for a symbol > from the beginning of GOT into the relocation stack. Our linker script > has initialized an empty GOT, so we need to create a new GOT entry if > there is no exist one for a symbol. > > Signed-off-by: Xi Ruoyao <xry111@xry111.site> > --- > arch/loongarch/kernel/module.c | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/arch/loongarch/kernel/module.c b/arch/loongarch/kernel/module.c > index 638427ff0d51..3ac4fbb5f109 100644 > --- a/arch/loongarch/kernel/module.c > +++ b/arch/loongarch/kernel/module.c > @@ -122,6 +122,16 @@ static int apply_r_larch_sop_push_plt_pcrel(struct module *mod, u32 *location, E > return apply_r_larch_sop_push_pcrel(mod, location, v, rela_stack, rela_stack_top, type); > } > > +static int apply_r_larch_sop_push_gprel(struct module *mod, u32 *location, > + Elf_Addr v, s64 *rela_stack, size_t *rela_stack_top, > + unsigned int type) > +{ > + Elf_Addr got = module_emit_got_entry(mod, v); > + ptrdiff_t offset = (void *)got - (void *)mod->arch.got.shdr->sh_addr; > + > + return rela_stack_push(offset, rela_stack, rela_stack_top); > +} > + > static int apply_r_larch_sop(struct module *mod, u32 *location, Elf_Addr v, > s64 *rela_stack, size_t *rela_stack_top, unsigned int type) > { > @@ -306,6 +316,7 @@ static reloc_rela_handler reloc_rela_handlers[] = { > [R_LARCH_SOP_PUSH_PCREL] = apply_r_larch_sop_push_pcrel, > [R_LARCH_SOP_PUSH_ABSOLUTE] = apply_r_larch_sop_push_absolute, > [R_LARCH_SOP_PUSH_DUP] = apply_r_larch_sop_push_dup, > + [R_LARCH_SOP_PUSH_GPREL] = apply_r_larch_sop_push_gprel, > [R_LARCH_SOP_PUSH_PLT_PCREL] = apply_r_larch_sop_push_plt_pcrel, > [R_LARCH_SOP_SUB ... R_LARCH_SOP_IF_ELSE] = apply_r_larch_sop, > [R_LARCH_SOP_POP_32_S_10_5 ... R_LARCH_SOP_POP_32_U] = apply_r_larch_sop_imm_field, > -- > 2.37.0 > > >
| |