Commit 7b453719 authored by Masahiro Yamada's avatar Masahiro Yamada
Browse files

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: default avatarMasahiro Yamada <masahiroy@kernel.org>
Tested-by: default avatarNathan Chancellor <nathan@kernel.org>
Tested-by: default avatarNicolas Schier <nicolas@fjasle.eu>
Reviewed-by: default avatarNicolas Schier <nicolas@fjasle.eu>
Tested-by: Sedat Dilek <sedat.dilek@gmail.com> # LLVM-14 (x86-64)
parent f292d875
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0
generated-y += syscall_table.h
generic-y += export.h
generic-y += extable.h
generic-y += kvm_para.h
generic-y += mcs_spinlock.h

arch/m68k/include/asm/export.h

deleted100644 → 0
+0 −2
Original line number Diff line number Diff line
#define KCRC_ALIGN 2
#include <asm-generic/export.h>
+0 −1
Original line number Diff line number Diff line
@@ -566,7 +566,6 @@ config RELOCATABLE
	bool "Build a relocatable kernel"
	depends on PPC64 || (FLATMEM && (44x || FSL_BOOKE))
	select NONSTATIC_KERNEL
	select MODULE_REL_CRCS if MODVERSIONS
	help
	  This builds a kernel image that is capable of running at the
	  location the kernel is loaded at. For ppc32, there is no any
+0 −1
Original line number Diff line number Diff line
@@ -567,7 +567,6 @@ endchoice

config RELOCATABLE
	bool "Build a relocatable kernel"
	select MODULE_REL_CRCS if MODVERSIONS
	default y
	help
	  This builds a kernel image that retains relocation information
+0 −1
Original line number Diff line number Diff line
@@ -106,7 +106,6 @@ config LD_SCRIPT_DYN
	bool
	default y
	depends on !LD_SCRIPT_STATIC
	select MODULE_REL_CRCS if MODVERSIONS

config LD_SCRIPT_DYN_RPATH
	bool "set rpath in the binary" if EXPERT
Loading