Messages in this thread | | | Subject | [PATCH v3 0/4] LoongArch: Support new relocation types | From | Xi Ruoyao <> | Date | Fri, 29 Jul 2022 10:07:27 +0800 |
| |
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.
This series does not break the compatibility with old toolchain using stack-based relocation types, so with the patches applied the kernel can be be built with both old and new toolchains.
Tested by building the kernel with both Binutils & GCC master branch and my system Binutils & GCC (without new relocation type support), running both the builds with 35 in-tree modules loaded, and loading one module with 20 GOT loads (loaded addresses verified by comparing with /proc/kallsyms).
Changes from v2 to v3:
- Use `union loongarch_instruction` instead of explicit bit shifts applying the relocation. Suggested by Youling. - For R_LARCH_B26, move the alignment check before the range check to be consistent with stack pop relocations. Suggested by Youling. - Reword the commit message of the 3rd patch. Suggested by Huacai.
Xi Ruoyao (4): LoongArch: Add section of GOT for kernel module LoongArch: Support R_LARCH_SOP_PUSH_GPREL relocation type in kernel module LoongArch: Remove -fplt and -Wa,-mla-* from CFLAGS LoongArch: Support modules with new relocation types
arch/loongarch/Makefile | 4 -- 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 | 51 +++++++++++-- arch/loongarch/kernel/module.c | 96 +++++++++++++++++++++++++ 7 files changed, 209 insertions(+), 13 deletions(-)
-- 2.37.0
| |