mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 12:43:29 +02:00
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)
This commit is contained in:
@@ -2,6 +2,14 @@
|
||||
#ifndef __ASM_GENERIC_EXPORT_H
|
||||
#define __ASM_GENERIC_EXPORT_H
|
||||
|
||||
/*
|
||||
* This comment block is used by fixdep. Please do not remove.
|
||||
*
|
||||
* When CONFIG_MODVERSIONS is changed from n to y, all source files having
|
||||
* EXPORT_SYMBOL variants must be re-compiled because genksyms is run as a
|
||||
* side effect of the *.o build rule.
|
||||
*/
|
||||
|
||||
#ifndef KSYM_FUNC
|
||||
#define KSYM_FUNC(x) x
|
||||
#endif
|
||||
@@ -12,9 +20,6 @@
|
||||
#else
|
||||
#define KSYM_ALIGN 4
|
||||
#endif
|
||||
#ifndef KCRC_ALIGN
|
||||
#define KCRC_ALIGN 4
|
||||
#endif
|
||||
|
||||
.macro __put, val, name
|
||||
#ifdef CONFIG_HAVE_ARCH_PREL32_RELOCATIONS
|
||||
@@ -43,17 +48,6 @@ __ksymtab_\name:
|
||||
__kstrtab_\name:
|
||||
.asciz "\name"
|
||||
.previous
|
||||
#ifdef CONFIG_MODVERSIONS
|
||||
.section ___kcrctab\sec+\name,"a"
|
||||
.balign KCRC_ALIGN
|
||||
#if defined(CONFIG_MODULE_REL_CRCS)
|
||||
.long __crc_\name - .
|
||||
#else
|
||||
.long __crc_\name
|
||||
#endif
|
||||
.weak __crc_\name
|
||||
.previous
|
||||
#endif
|
||||
#endif
|
||||
.endm
|
||||
|
||||
|
Reference in New Issue
Block a user