Messages in this thread | | | Subject | Re: [PATCH 3/5] LoongArch: Support relocation against _GLOBAL_OFFSET_TABLE_ | From | Jinyang He <> | Date | Thu, 28 Jul 2022 17:14:55 +0800 |
| |
On 07/28/2022 02:41 PM, Xi Ruoyao wrote:
> On Thu, 2022-07-28 at 09:02 +0800, Jinyang He wrote: > >> Hi, Ruoyao, >> >> It is possible to create a symbol when linking, which means >> maybe we can add _GLOBAL_OFFSET_TABLE_ in 'module.lds.h'. >> What do you think about it? > Hi Jinyang, > > I think you are right, this patch can be replaced with the following, > which is much simpler. > > -- >8 -- > > With the stack-based relocations, the assembler emits three relocations > to push the PC-relative offset of a GOT entry: > > R_LARCH_SOP_PUSH_PCREL _GLOBAL_OFFSET_TABLE_ > R_LARCH_SOP_PUSH_GPREL foo > R_LARCH_SOP_ADD > > In normal relocatable ELF object files, "_GLOBAL_OFFSET_TABLE_" is > undefined in the symtab and the BFD linker generates it on final link. > Define it for kernel modules so we will be able to really use > R_LARCH_SOP_PUSH_GPREL relocation. > > Note that we need to use "HIDDEN" to make it a local symbol because each > kernel module has its own GOT and the reference to it should not be > resolved to the GOT in the main kernel image. > > Suggested-by: Jinyang He <hejinyang@loongson.cn> > Signed-off-by: Xi Ruoyao <xry111@xry111.site> > --- > arch/loongarch/include/asm/module.lds.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/loongarch/include/asm/module.lds.h b/arch/loongarch/include/asm/module.lds.h > index 57bbd0cedd26..42b7cca0b947 100644 > --- a/arch/loongarch/include/asm/module.lds.h > +++ b/arch/loongarch/include/asm/module.lds.h > @@ -4,5 +4,5 @@ SECTIONS { > . = ALIGN(4); > .plt : { BYTE(0) } > .plt.idx : { BYTE(0) } > - .got : { BYTE(0) } > + .got : { HIDDEN(_GLOBAL_OFFSET_TABLE_ = .); BYTE(0) } Not sure but maybe re-align is needed here. Since '{BYTE(0)}' actually use 1byte. _GLOABL_OFFSET_TABLE_ may have difference with really GOT table entry. Have no machine and without test... :-(
Thanks, Jinyang > }
| |