kbuild: link symbol CRCs at final link, removing CONFIG_MODULE_REL_CRCS
include/{linux,asm-generic}/export.h defines a weak symbol, __crc_* as a placeholder. Genksyms writes the version CRCs into the linker script, which will be used for filling the __crc_* symbols. The linker script format depends on CONFIG_MODULE_REL_CRCS. If it is enabled, __crc_* holds the offset to the reference of CRC. It is time to get rid of this complexity. Now that modpost parses text files (.*.cmd) to collect all the CRCs, it can generate C code that will be linked to the vmlinux or modules. Generate a new C file, .vmlinux.export.c, which contains the CRCs of symbols exported by vmlinux. It is compiled and linked to vmlinux in scripts/link-vmlinux.sh. Put the CRCs of symbols exported by modules into the existing *.mod.c files. No additional build step is needed for modules. As before, *.mod.c are compiled and linked to *.ko in scripts/Makefile.modfinal. No linker magic is used here. The new C implementation works in the same way, whether CONFIG_RELOCATABLE is enabled or not. CONFIG_MODULE_REL_CRCS is no longer needed. Previously, Kbuild invoked additional $(LD) to update the CRCs in objects, but this step is unneeded too. Signed-off-by:Masahiro Yamada <masahiroy@kernel.org> Tested-by:
Nathan Chancellor <nathan@kernel.org> Tested-by:
Nicolas Schier <nicolas@fjasle.eu> Reviewed-by:
Nicolas Schier <nicolas@fjasle.eu> Tested-by: Sedat Dilek <sedat.dilek@gmail.com> # LLVM-14 (x86-64)
Showing
- arch/m68k/include/asm/Kbuild 1 addition, 0 deletionsarch/m68k/include/asm/Kbuild
- arch/m68k/include/asm/export.h 0 additions, 2 deletionsarch/m68k/include/asm/export.h
- arch/powerpc/Kconfig 0 additions, 1 deletionarch/powerpc/Kconfig
- arch/s390/Kconfig 0 additions, 1 deletionarch/s390/Kconfig
- arch/um/Kconfig 0 additions, 1 deletionarch/um/Kconfig
- include/asm-generic/export.h 8 additions, 14 deletionsinclude/asm-generic/export.h
- include/linux/export-internal.h 17 additions, 0 deletionsinclude/linux/export-internal.h
- include/linux/export.h 8 additions, 22 deletionsinclude/linux/export.h
- init/Kconfig 0 additions, 4 deletionsinit/Kconfig
- kernel/module.c 1 addition, 9 deletionskernel/module.c
- scripts/Makefile.build 4 additions, 23 deletionsscripts/Makefile.build
- scripts/Makefile.vmlinux 32 additions, 0 deletionsscripts/Makefile.vmlinux
- scripts/genksyms/genksyms.c 4 additions, 14 deletionsscripts/genksyms/genksyms.c
- scripts/link-vmlinux.sh 9 additions, 1 deletionscripts/link-vmlinux.sh
- scripts/mod/modpost.c 24 additions, 4 deletionsscripts/mod/modpost.c
Loading
Please register or sign in to comment