2021-07-01 09:30:08

by Lecopzer Chen

[permalink] [raw]
Subject: [RESEND PATCH v2 0/2] Kbuild: lto: add make version checking for MODVERSIONS

Resend becasue subject is incorrect.

LTO with MODVERSIONS will fail in generating correct CRC because
the makefile rule doesn't work for make with version 3.8X.

Refer to [1]:
> When building modules(CONFIG_...=m), I found some of module versions
> are incorrect and set to 0.
> This can be found in build log for first clean build which shows

> WARNING: EXPORT symbol "XXXX" [drivers/XXX/XXX.ko] version generation failed,
> symbol will not be versioned.

> But in second build(incremental build), the WARNING disappeared and the
> module version becomes valid CRC and make someone who want to change
> modules without updating kernel image can't insert their modules.

> The problematic code is
> + $(foreach n, $(filter-out FORCE,$^), \
> + $(if $(wildcard $(n).symversions), \
> + ; cat $(n).symversions >> [email protected]))

The issue is fixed when make version upgrading to 4.2.

Thus we need to check make version during selecting on LTO Kconfig.
Add CONFIG_MAKE_VERSION which means MAKE_VERSION in canonical digits
for arithmetic comparisons.

[1] https://lore.kernel.org/lkml/[email protected]/
Signed-off-by: Lecopzer Chen <[email protected]>


----
v2:
- change MAKE_VERSION_INT to MAKE_VERSION
- remove $(make-version)
- tweak commit message

v1:
https://lore.kernel.org/lkml/[email protected]/
----

Lecopzer Chen (2):
Kbuild: lto: add CONFIG_MAKE_VERSION
Kbuild: lto: add make version checking

Makefile | 2 +-
arch/Kconfig | 1 +
init/Kconfig | 4 ++++
scripts/make-version.sh | 13 +++++++++++++
4 files changed, 19 insertions(+), 1 deletion(-)
create mode 100755 scripts/make-version.sh

--
2.18.0


2021-07-01 09:31:41

by Lecopzer Chen

[permalink] [raw]
Subject: [RESEND PATCH v2 2/2] Kbuild: lto: add make version checking

LTO with MODVERSIONS will fail in generating correct CRC because
the makefile rule doesn't work for make with version 3.8X.[1]

Thus we need to check make version during selecting on LTO Kconfig.
and the suitable version should be 4.2(40200) which released in 2016[2].

[1] https://lore.kernel.org/lkml/[email protected]/
[2] https://ftp.gnu.org/gnu/make/
Signed-off-by: Lecopzer Chen <[email protected]>
---
arch/Kconfig | 1 +
1 file changed, 1 insertion(+)

diff --git a/arch/Kconfig b/arch/Kconfig
index 129df498a8e1..beee68149da8 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -639,6 +639,7 @@ config HAS_LTO_CLANG
def_bool y
# Clang >= 11: https://github.com/ClangBuiltLinux/linux/issues/510
depends on CC_IS_CLANG && CLANG_VERSION >= 110000 && LD_IS_LLD && AS_IS_LLVM
+ depends on !MODVERSIONS || MAKE_VERSION >= 40200
depends on $(success,$(NM) --help | head -n 1 | grep -qi llvm)
depends on $(success,$(AR) --help | head -n 1 | grep -qi llvm)
depends on ARCH_SUPPORTS_LTO_CLANG
--
2.18.0