Messages in this thread | | | From | Huacai Chen <> | Date | Tue, 30 Aug 2022 21:05:56 +0800 | Subject | Re: [PATCH v7 0/5] LoongArch: Support toolchain with new relocation types |
| |
Hi, Ruoyao,
Thank you for your contribution, this whole series will be queued for 6.1. Though lkp reported some warnings, I will fix them myself.
Huacai
On Tue, Aug 30, 2022 at 6:48 PM Xi Ruoyao <xry111@xry111.site> 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. > > 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. But, the combination of > "new" Binutils and "old" GCC is not supported. > > Tested by building the kernel with the following combinations: > > - GCC 12 and Binutils 2.39 > - GCC trunk and Binutils trunk > > and running the builds with 35 in-tree modules loaded, and loading one > module with 20 GOT loads and a per-CPU variable (loaded addresses > verified by comparing with /proc/kallsyms). > > Changes from v6 to v7: > > - Simplify apply_r_larch_pcala. > - Remove a build check only for excluding early GCC 13 dev snapshots. > - Squash model attribute addition into the previous patch. > - Retain "-fplt". > > Changes from v5 to v6: > > - Restore version number. > - Rename CONFIG_CC_HAS_EXPLICIT_RELOCS to CONFIG_AS_HAS_EXPLICIT_RELOCS. > It now only checks assembler. > - No longer support "old GCC with new Binutils", so R_LARCH_ABS* is > dropped. > - "Old GCC with old Binutils" is still supported until Arnd ack. > - "New GCC with old Binutils" is still supported as it does not > require additional code. > - Remove "cc-option" around "-mexplicit-relocs". For unsupported > "old GCC with new Binutils" combination, forcing -mexplicit-relocs > makes assembling fail, instead of silently producing unloadable > modules. > - Move the error report for "lacking model attribute" into Makefile. > - Squash the two patches for R_LARCH_B26 and R_LARCH_PCALA* into one. > > Changes from v4 to v5 ("v5" missed in the subject): > > - Change subject. > - Introduce CONFIG_CC_HAS_EXPLICIT_RELOCS. > - Retain -Wa,-mla-* options for old toolchains > (!CONFIG_CC_HAS_EXPLICIT_RELOCS). > - Use __attribute__((model("extreme"))) in PER_CPU_ATTRIBUTES, to fix > a breakage with per-CPU variables defined in modules. > - Handle R_LARCH_PCALA64_{HI12,LO12} for extreme model. > - Handle R_LARCH_ABS* for "old GCC with new Binutils". > - Separate the last patch into more small patches. > - Avoid BUG_ON() for the handling of GOT. > > Changes from v3 to v4: > > - No code change. Reword the commit message of the 3rd patch again > based on suggestion from Huacai. > > 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. > > Changes from v1 to v2: > > - Fix a stupid programming error (confusion between the number of PLT > entries and the number of GOT entries). (Bug spotted by Youling). > - Synthesize the _GLOBAL_OFFSET_TABLE_ symbol with module.lds, instead > of faking it at runtime. The 3rd patch from V1 is now merged into > the 1st patch because it would be a one-line change. (Suggested by > Jinyang). > - Keep reloc_rela_handlers[] ordered by the relocation type ID. > (Suggested by Youling). > - Remove -fplt along with -Wa,-mla-* options because it's the default. > (Suggested by Youling). > > Xi Ruoyao (5): > LoongArch: Add CONFIG_AS_HAS_EXPLICIT_RELOCS > LoongArch: Adjust symbol addressing for CONFIG_AS_HAS_EXPLICIT_RELOCS > LoongArch: Define ELF relocation types added in v2.00 ABI > LoongArch: Support PC-relative relocations in modules > LoongArch: Support R_LARCH_GOT_PC* in modules > > arch/loongarch/Kconfig | 3 + > arch/loongarch/Makefile | 17 +++++ > arch/loongarch/include/asm/elf.h | 37 ++++++++++ > arch/loongarch/include/asm/module.h | 23 ++++++ > arch/loongarch/include/asm/module.lds.h | 1 + > arch/loongarch/include/asm/percpu.h | 8 +++ > arch/loongarch/kernel/head.S | 10 +-- > arch/loongarch/kernel/module-sections.c | 56 +++++++++++++-- > arch/loongarch/kernel/module.c | 93 ++++++++++++++++++++++++- > 9 files changed, 238 insertions(+), 10 deletions(-) > > -- > 2.37.0 >
| |