[PATCH 0/5] LoongArch: Support new relocation types

Xi Ruoyao posted 5 patches 3 years, 8 months ago
There is a newer version of this series
arch/loongarch/Makefile                 |  5 +-
arch/loongarch/include/asm/elf.h        | 37 ++++++++++
arch/loongarch/include/asm/module.h     | 23 ++++++
arch/loongarch/include/asm/module.lds.h |  1 +
arch/loongarch/kernel/head.S            | 10 +--
arch/loongarch/kernel/module-sections.c | 72 +++++++++++++++++--
arch/loongarch/kernel/module.c          | 94 +++++++++++++++++++++++++
7 files changed, 229 insertions(+), 13 deletions(-)
[PATCH 0/5] LoongArch: Support new relocation types
Posted by Xi Ruoyao 3 years, 8 months ago
The version 2.00 of LoongArch ELF ABI specification introduced new
relocation types, and the development tree of Binutils and GCC has
started to use them.  If the kernel is built with the latest snapshot of
Binutils or GCC, it will fail to load the modules because of unrecognized
relocation types in modules.

Add support for GOT and new relocation types for the module loader, so
the kernel (with modules) can be built with the "normal" code model and
function properly.

Tested by building the kernel with Binutils & GCC master branch, and
running the kernel with 35 in-tree modules loaded.

Link: https://github.com/loongson/LoongArch-Documentation/pull/57
Link: https://gcc.gnu.org/r13-1834
Link: https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=f09482a

Xi Ruoyao (5):
  LoongArch: Add section of GOT for kernel module
  LoongArch: Support R_LARCH_SOP_PUSH_GPREL relocation type in kernel
    module
  LoongArch: Support relocation against _GLOBAL_OFFSET_TABLE_
  LoongArch: Stop using undocumented assembler options
  LoongArch: Support modules with new relocation types

 arch/loongarch/Makefile                 |  5 +-
 arch/loongarch/include/asm/elf.h        | 37 ++++++++++
 arch/loongarch/include/asm/module.h     | 23 ++++++
 arch/loongarch/include/asm/module.lds.h |  1 +
 arch/loongarch/kernel/head.S            | 10 +--
 arch/loongarch/kernel/module-sections.c | 72 +++++++++++++++++--
 arch/loongarch/kernel/module.c          | 94 +++++++++++++++++++++++++
 7 files changed, 229 insertions(+), 13 deletions(-)

-- 
2.37.0
Re: [PATCH 0/5] LoongArch: Support new relocation types
Posted by Xi Ruoyao 3 years, 8 months ago
Self notes:

With "-mla-global-with-pcrel" in KBUILD_CFLAGS_KERNEL gone (even if I
don't remove it, it will be ineffective with binutils-2.40/gcc-13), the
kernel will use GOT to access the objects in other translation units. 
It may cause a performance regression.

*If* such a performance regression is really observed, we need to change
GCC to use PC relative addressing (instead of GOT) for loading external
objects when -fno-PIC.  Such a change will benefit userspace apps as
well, *if* PC relative addressing is really faster than GOT access.

(Emphasize "if" here: I've not run any benchmarks yet.)

I'll be mostly AFK in the following one or two weeks, apologize for
possible slow respond.

On Thu, 2022-07-28 at 00:24 +0800, Xi Ruoyao wrote:
> The version 2.00 of LoongArch ELF ABI specification introduced new
> relocation types, and the development tree of Binutils and GCC has
> started to use them.  If the kernel is built with the latest snapshot of
> Binutils or GCC, it will fail to load the modules because of unrecognized
> relocation types in modules.
> 
> Add support for GOT and new relocation types for the module loader, so
> the kernel (with modules) can be built with the "normal" code model and
> function properly.
> 
> Tested by building the kernel with Binutils & GCC master branch, and
> running the kernel with 35 in-tree modules loaded.
> 
> Link: https://github.com/loongson/LoongArch-Documentation/pull/57
> Link: https://gcc.gnu.org/r13-1834
> Link: https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=f09482a
> 
> Xi Ruoyao (5):
>   LoongArch: Add section of GOT for kernel module
>   LoongArch: Support R_LARCH_SOP_PUSH_GPREL relocation type in kernel
>     module
>   LoongArch: Support relocation against _GLOBAL_OFFSET_TABLE_
>   LoongArch: Stop using undocumented assembler options
>   LoongArch: Support modules with new relocation types
> 
>  arch/loongarch/Makefile                 |  5 +-
>  arch/loongarch/include/asm/elf.h        | 37 ++++++++++
>  arch/loongarch/include/asm/module.h     | 23 ++++++
>  arch/loongarch/include/asm/module.lds.h |  1 +
>  arch/loongarch/kernel/head.S            | 10 +--
>  arch/loongarch/kernel/module-sections.c | 72 +++++++++++++++++--
>  arch/loongarch/kernel/module.c          | 94 +++++++++++++++++++++++++
>  7 files changed, 229 insertions(+), 13 deletions(-)
> 

-- 
Xi Ruoyao <xry111@xry111.site>
School of Aerospace Science and Technology, Xidian University