2022-05-14 01:28:46

by Masahiro Yamada

[permalink] [raw]
Subject: [PATCH v6 00/10] kbuild: yet another series of cleanups (modpost, LTO, MODULE_REL_CRCS, export.h)


This is the third batch of cleanups in this development cycle.



Changes in v6:
- Fix false-positive warnings when CONFIG_TRIM_UNUSED_KSYMS=y

Changes in v5:
- Fix the build error when CONFIG_DEBUG_INFO_BTF=y (reported by Nathan)
- Clean up arch/m68k/include/asm/export.h (Nick)
- Keep gen_symversions (and will be removed by a later patch)
- Add more comments in the script

Changes in v4:
- Rename .vmlinux-symver.c to .vmlinux.export.c
because I notice this approach is useful for further cleanups,
not only for modversioning but also for overall EXPORT_SYMBOL.
- New patch
- New.
Resent of my previous submission.
https://lore.kernel.org/all/[email protected]/
- New
Resent of my previous submission
https://lore.kernel.org/linux-kbuild/[email protected]/

Changes in v3:
- New patch

Changes in v2:
- Simplify the implementation (parse .cmd files after ELF)
- New patch
- replace the chain of $(if ...) with $(and )
- New patch
- New patch

Masahiro Yamada (10):
modpost: extract symbol versions from *.cmd files
kbuild: link symbol CRCs at final link, removing
CONFIG_MODULE_REL_CRCS
kbuild: stop merging *.symversions
genksyms: adjust the output format to modpost
kbuild: do not create *.prelink.o for Clang LTO or IBT
kbuild: check static EXPORT_SYMBOL* by script instead of modpost
kbuild: make built-in.a rule robust against too long argument error
kbuild: make *.mod rule robust against too long argument error
kbuild: add cmd_and_savecmd macro
kbuild: rebuild multi-object modules when objtool is updated

arch/m68k/include/asm/Kbuild | 1 +
arch/m68k/include/asm/export.h | 2 -
arch/powerpc/Kconfig | 1 -
arch/s390/Kconfig | 1 -
arch/um/Kconfig | 1 -
include/asm-generic/export.h | 22 ++-
include/linux/export-internal.h | 16 +++
include/linux/export.h | 30 ++--
init/Kconfig | 4 -
kernel/module.c | 10 +-
scripts/Kbuild.include | 10 +-
scripts/Makefile.build | 134 ++++++------------
scripts/Makefile.lib | 7 -
scripts/Makefile.modfinal | 5 +-
scripts/Makefile.modpost | 9 +-
scripts/check-local-export | 64 +++++++++
scripts/genksyms/genksyms.c | 18 +--
scripts/link-vmlinux.sh | 33 ++---
scripts/mod/modpost.c | 236 +++++++++++++++++++++-----------
19 files changed, 320 insertions(+), 284 deletions(-)
delete mode 100644 arch/m68k/include/asm/export.h
create mode 100644 include/linux/export-internal.h
create mode 100755 scripts/check-local-export

--
2.32.0



2022-05-14 01:48:28

by Masahiro Yamada

[permalink] [raw]
Subject: [PATCH v6 10/10] kbuild: rebuild multi-object modules when objtool is updated

When CONFIG_LTO_CLANG or CONFIG_X86_KERNEL_IBT is enabled, objtool for
multi-object modules is postponed until the objects are linked together.

Make sure to re-run objtool and re-link multi-object modules when
objtool is updated.

Signed-off-by: Masahiro Yamada <[email protected]>
Reviewed-by: Kees Cook <[email protected]>
Acked-by: Josh Poimboeuf <[email protected]>
Tested-by: Nathan Chancellor <[email protected]>
---

(no changes since v4)

Changes in v4:
- New
Resent of my previous submission
https://lore.kernel.org/linux-kbuild/[email protected]/

scripts/Makefile.build | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index f546b5f1f33f..4e6902e099e8 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -404,13 +404,18 @@ $(obj)/modules.order: $(obj-m) FORCE
$(obj)/lib.a: $(lib-y) FORCE
$(call if_changed,ar)

-quiet_cmd_link_multi-m = LD [M] $@
- cmd_link_multi-m = $(LD) $(ld_flags) -r -o $@ @$(patsubst %.o,%.mod,$@) $(cmd_objtool)
+quiet_cmd_ld_multi_m = LD [M] $@
+ cmd_ld_multi_m = $(LD) $(ld_flags) -r -o $@ @$(patsubst %.o,%.mod,$@) $(cmd_objtool)
+
+define rule_ld_multi_m
+ $(call cmd_and_savecmd,ld_multi_m)
+ $(call cmd,gen_objtooldep)
+endef

$(multi-obj-m): objtool-enabled := $(delay-objtool)
$(multi-obj-m): part-of-module := y
$(multi-obj-m): %.o: %.mod FORCE
- $(call if_changed,link_multi-m)
+ $(call if_changed_rule,ld_multi_m)
$(call multi_depend, $(multi-obj-m), .o, -objs -y -m)

targets := $(filter-out $(PHONY), $(targets))
--
2.32.0


2022-05-14 02:11:00

by Masahiro Yamada

[permalink] [raw]
Subject: Re: [PATCH v6 00/10] kbuild: yet another series of cleanups (modpost, LTO, MODULE_REL_CRCS, export.h)

On Fri, May 13, 2022 at 8:42 PM Masahiro Yamada <[email protected]> wrote:
>
>
> This is the third batch of cleanups in this development cycle.
>


This series is available at
git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild.git
lto-cleanup-v6


>
> Changes in v6:
> - Fix false-positive warnings when CONFIG_TRIM_UNUSED_KSYMS=y
>
> Changes in v5:
> - Fix the build error when CONFIG_DEBUG_INFO_BTF=y (reported by Nathan)
> - Clean up arch/m68k/include/asm/export.h (Nick)
> - Keep gen_symversions (and will be removed by a later patch)
> - Add more comments in the script
>
> Changes in v4:
> - Rename .vmlinux-symver.c to .vmlinux.export.c
> because I notice this approach is useful for further cleanups,
> not only for modversioning but also for overall EXPORT_SYMBOL.
> - New patch
> - New.
> Resent of my previous submission.
> https://lore.kernel.org/all/[email protected]/
> - New
> Resent of my previous submission
> https://lore.kernel.org/linux-kbuild/[email protected]/
>
> Changes in v3:
> - New patch
>
> Changes in v2:
> - Simplify the implementation (parse .cmd files after ELF)
> - New patch
> - replace the chain of $(if ...) with $(and )
> - New patch
> - New patch
>
> Masahiro Yamada (10):
> modpost: extract symbol versions from *.cmd files
> kbuild: link symbol CRCs at final link, removing
> CONFIG_MODULE_REL_CRCS
> kbuild: stop merging *.symversions
> genksyms: adjust the output format to modpost
> kbuild: do not create *.prelink.o for Clang LTO or IBT
> kbuild: check static EXPORT_SYMBOL* by script instead of modpost
> kbuild: make built-in.a rule robust against too long argument error
> kbuild: make *.mod rule robust against too long argument error
> kbuild: add cmd_and_savecmd macro
> kbuild: rebuild multi-object modules when objtool is updated
>
> arch/m68k/include/asm/Kbuild | 1 +
> arch/m68k/include/asm/export.h | 2 -
> arch/powerpc/Kconfig | 1 -
> arch/s390/Kconfig | 1 -
> arch/um/Kconfig | 1 -
> include/asm-generic/export.h | 22 ++-
> include/linux/export-internal.h | 16 +++
> include/linux/export.h | 30 ++--
> init/Kconfig | 4 -
> kernel/module.c | 10 +-
> scripts/Kbuild.include | 10 +-
> scripts/Makefile.build | 134 ++++++------------
> scripts/Makefile.lib | 7 -
> scripts/Makefile.modfinal | 5 +-
> scripts/Makefile.modpost | 9 +-
> scripts/check-local-export | 64 +++++++++
> scripts/genksyms/genksyms.c | 18 +--
> scripts/link-vmlinux.sh | 33 ++---
> scripts/mod/modpost.c | 236 +++++++++++++++++++++-----------
> 19 files changed, 320 insertions(+), 284 deletions(-)
> delete mode 100644 arch/m68k/include/asm/export.h
> create mode 100644 include/linux/export-internal.h
> create mode 100755 scripts/check-local-export
>
> --
> 2.32.0
>


--
Best Regards
Masahiro Yamada

2022-05-14 03:17:09

by Masahiro Yamada

[permalink] [raw]
Subject: [PATCH v6 04/10] genksyms: adjust the output format to modpost

Make genksyms output symbol versions in the format modpost expects,
so the 'sed' is unneeded.

This commit makes *.symversions completely unneeded.

I will keep *.symversions in .gitignore and 'make clean' for a while.
Otherwise, 'git status' might be surprising.

Signed-off-by: Masahiro Yamada <[email protected]>
Reviewed-by: Nicolas Schier <[email protected]>
Tested-by: Nathan Chancellor <[email protected]>
---

(no changes since v2)

Changes in v2:
- New patch

scripts/Makefile.build | 6 ------
scripts/genksyms/genksyms.c | 2 +-
2 files changed, 1 insertion(+), 7 deletions(-)

diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index dff9220135c4..461998a2ad2b 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -165,16 +165,10 @@ ifdef CONFIG_MODVERSIONS
# o modpost will extract versions from that file and create *.c files that will
# be compiled and linked to the kernel and/or modules.

-genksyms_format := __crc_\(.*\) = \(.*\);
-
gen_symversions = \
if $(NM) $@ 2>/dev/null | grep -q __ksymtab; then \
$(call cmd_gensymtypes_$(1),$(KBUILD_SYMTYPES),$(@:.o=.symtypes)) \
- > [email protected]; \
- sed -n 's/$(genksyms_format)/$(pound)SYMVER \1 \2/p' [email protected] \
>> $(dot-target).cmd; \
- else \
- rm -f [email protected]; \
fi

cmd_gen_symversions_c = $(call gen_symversions,c)
diff --git a/scripts/genksyms/genksyms.c b/scripts/genksyms/genksyms.c
index 67b23cc0df0f..f5dfdb9d80e9 100644
--- a/scripts/genksyms/genksyms.c
+++ b/scripts/genksyms/genksyms.c
@@ -680,7 +680,7 @@ void export_symbol(const char *name)
if (flag_dump_defs)
fputs(">\n", debugfile);

- printf("__crc_%s = 0x%08lx;\n", name, crc);
+ printf("#SYMVER %s 0x%08lx\n", name, crc);
}
}

--
2.32.0


2022-05-14 03:27:57

by Masahiro Yamada

[permalink] [raw]
Subject: [PATCH v6 03/10] kbuild: stop merging *.symversions

Now modpost reads symbol versions from .*.cmd files.

The merged *.symversions are no longer needed.

Signed-off-by: Masahiro Yamada <[email protected]>
Reviewed-by: Nicolas Schier <[email protected]>
Tested-by: Nathan Chancellor <[email protected]>
---

(no changes since v1)

scripts/Makefile.build | 21 ++-------------------
scripts/link-vmlinux.sh | 19 -------------------
2 files changed, 2 insertions(+), 38 deletions(-)

diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index ddd9080fc028..dff9220135c4 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -390,17 +390,6 @@ $(obj)/%.asn1.c $(obj)/%.asn1.h: $(src)/%.asn1 $(objtree)/scripts/asn1_compiler
$(subdir-builtin): $(obj)/%/built-in.a: $(obj)/% ;
$(subdir-modorder): $(obj)/%/modules.order: $(obj)/% ;

-# combine symversions for later processing
-ifeq ($(CONFIG_LTO_CLANG) $(CONFIG_MODVERSIONS),y y)
- cmd_update_lto_symversions = \
- rm -f [email protected] \
- $(foreach n, $(filter-out FORCE,$^), \
- $(if $(shell test -s $(n).symversions && echo y), \
- ; cat $(n).symversions >> [email protected]))
-else
- cmd_update_lto_symversions = echo >/dev/null
-endif
-
#
# Rule to compile a set of .o files into one .a file (without symbol table)
#
@@ -408,11 +397,8 @@ endif
quiet_cmd_ar_builtin = AR $@
cmd_ar_builtin = rm -f $@; $(AR) cDPrST $@ $(real-prereqs)

-quiet_cmd_ar_and_symver = AR $@
- cmd_ar_and_symver = $(cmd_update_lto_symversions); $(cmd_ar_builtin)
-
$(obj)/built-in.a: $(real-obj-y) FORCE
- $(call if_changed,ar_and_symver)
+ $(call if_changed,ar_builtin)

#
# Rule to create modules.order file
@@ -432,16 +418,13 @@ $(obj)/modules.order: $(obj-m) FORCE
#
# Rule to compile a set of .o files into one .a file (with symbol table)
#
-quiet_cmd_ar_lib = AR $@
- cmd_ar_lib = $(cmd_update_lto_symversions); $(cmd_ar)

$(obj)/lib.a: $(lib-y) FORCE
- $(call if_changed,ar_lib)
+ $(call if_changed,ar)

ifneq ($(CONFIG_LTO_CLANG)$(CONFIG_X86_KERNEL_IBT),)
quiet_cmd_link_multi-m = AR [M] $@
cmd_link_multi-m = \
- $(cmd_update_lto_symversions); \
rm -f $@; \
$(AR) cDPrsT $@ @$(patsubst %.o,%.mod,$@)
else
diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh
index 7313cbd755df..47e5336d0c75 100755
--- a/scripts/link-vmlinux.sh
+++ b/scripts/link-vmlinux.sh
@@ -56,20 +56,6 @@ gen_initcalls()
> .tmp_initcalls.lds
}

-# If CONFIG_LTO_CLANG is selected, collect generated symbol versions into
-# .tmp_symversions.lds
-gen_symversions()
-{
- info GEN .tmp_symversions.lds
- rm -f .tmp_symversions.lds
-
- for o in ${KBUILD_VMLINUX_OBJS} ${KBUILD_VMLINUX_LIBS}; do
- if [ -f ${o}.symversions ]; then
- cat ${o}.symversions >> .tmp_symversions.lds
- fi
- done
-}
-
# Link of vmlinux.o used for section mismatch analysis
# ${1} output file
modpost_link()
@@ -88,10 +74,6 @@ modpost_link()
gen_initcalls
lds="-T .tmp_initcalls.lds"

- if is_enabled CONFIG_MODVERSIONS; then
- gen_symversions
- fi
-
# This might take a while, so indicate that we're doing
# an LTO link
info LTO ${1}
@@ -307,7 +289,6 @@ cleanup()
rm -f .btf.*
rm -f .tmp_System.map
rm -f .tmp_initcalls.lds
- rm -f .tmp_symversions.lds
rm -f .tmp_vmlinux*
rm -f System.map
rm -f vmlinux
--
2.32.0


2022-05-14 04:10:15

by Masahiro Yamada

[permalink] [raw]
Subject: [PATCH v6 06/10] kbuild: check static EXPORT_SYMBOL* by script instead of modpost

The 'static' specifier and EXPORT_SYMBOL() are an odd combination.

Commit 15bfc2348d54 ("modpost: check for static EXPORT_SYMBOL*
functions") tried to detect it, but this check has false negatives.

Here is the sample code.

Makefile:

obj-y += foo1.o foo2.o

foo1.c:

#include <linux/export.h>
static void foo(void) {}
EXPORT_SYMBOL(foo);

foo2.c:

void foo(void) {}

foo1.c exports the static symbol 'foo', but modpost cannot catch it
because it is fooled by foo2.c, which has a global symbol with the
same name.

s->is_static is cleared if a global symbol with the same name is found
somewhere, but EXPORT_SYMBOL() and the global symbol do not necessarily
belong to the same compilation unit.

This check should be done per compilation unit, but I do not know how
to do it in modpost. modpost runs against vmlinux.o or modules, which
merges multiple objects, then forgets their origin.

It is true modpost gets access to the lists of all the member objects
(.vmlinux.objs and *.mod), but modpost cannot parse individual objects
because they may not be ELF but LLVM IR when CONFIG_LTO_CLANG=y.

Add a simple bash script to parse the output from ${NM}. This works for
CONFIG_LTO_CLANG=y because llvm-nm can dump symbols of LLVM IR files.

Revert 15bfc2348d54.

Signed-off-by: Masahiro Yamada <[email protected]>
Reviewed-by: Nick Desaulniers <[email protected]>
Tested-by: Nathan Chancellor <[email protected]>
---

(no changes since v5)

Changes in v5:
- Add more comments in the script

Changes in v4:
- New patch

scripts/Makefile.build | 4 +++
scripts/check-local-export | 64 ++++++++++++++++++++++++++++++++++++++
scripts/mod/modpost.c | 28 +----------------
3 files changed, 69 insertions(+), 27 deletions(-)
create mode 100755 scripts/check-local-export

diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index 838ea5e83174..c2a173b3fd60 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -244,9 +244,12 @@ cmd_gen_ksymdeps = \
$(CONFIG_SHELL) $(srctree)/scripts/gen_ksymdeps.sh $@ >> $(dot-target).cmd
endif

+cmd_check_local_export = $(srctree)/scripts/check-local-export $@
+
define rule_cc_o_c
$(call cmd_and_fixdep,cc_o_c)
$(call cmd,gen_ksymdeps)
+ $(call cmd,check_local_export)
$(call cmd,checksrc)
$(call cmd,checkdoc)
$(call cmd,gen_objtooldep)
@@ -257,6 +260,7 @@ endef
define rule_as_o_S
$(call cmd_and_fixdep,as_o_S)
$(call cmd,gen_ksymdeps)
+ $(call cmd,check_local_export)
$(call cmd,gen_objtooldep)
$(call cmd,gen_symversions_S)
endef
diff --git a/scripts/check-local-export b/scripts/check-local-export
new file mode 100755
index 000000000000..829e0591c0be
--- /dev/null
+++ b/scripts/check-local-export
@@ -0,0 +1,64 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Copyright (C) 2022 Masahiro Yamada <[email protected]>
+#
+# Exit with error if a local exported symbol is found.
+# EXPORT_SYMBOL should be used for global symbols.
+
+set -e
+
+declare -A symbol_types
+declare -a export_symbols
+
+exit_code=0
+
+while read value type name
+do
+ # Exceptional case for Clang LTO.
+ # llvm-nm outputs this:
+ # "---------------- t"
+ # Skip this line because the name is empty.
+ if [[ ${value} = -* && -z ${name} ]]; then
+ continue
+ fi
+
+ # For undefined symbols, the first field (value) is empty.
+ # The outout looks like this:
+ # " U _printk"
+ # Shift the fields.
+ if [[ -z ${name} ]]; then
+ name=${type}
+ type=${value}
+ fi
+
+ # save (name, type) in the associative array
+ symbol_types[${name}]=${type}
+
+ # append the exported symbol to the array
+ if [[ ${name} == __ksymtab_* ]]; then
+ export_symbols+=(${name#__ksymtab_})
+ fi
+
+ # If there is no symbol in the object, ${NM} (both GNU nm and llvm-nm)
+ # shows 'no symbols' diagnostic (but exits with 0). It is harmless and
+ # hidden by '2>/dev/null'. However, it suppresses real error messages
+ # as well. Add a hand-crafted error message here.
+ #
+ # Use -q instead of 2>/dev/null when we upgrade the minimum version of
+ # binutils to 2.37, llvm to 13.0.0.
+done < <(${NM} ${1} 2>/dev/null || { echo "${0}: ${NM} failed" >&2; false; } )
+
+# Catch error in the process substitution
+wait $!
+
+for name in "${export_symbols[@]}"
+do
+ # nm(3) says "If lowercase, the symbol is usually local"
+ if [[ ${symbol_types[$name]} =~ [a-z] ]]; then
+ echo "$@: error: local symbol '${name}' was exported" >&2
+ exit_code=1
+ fi
+done
+
+exit ${exit_code}
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 27c45427d989..2328522f8a78 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -212,7 +212,6 @@ struct symbol {
unsigned int crc;
bool crc_valid;
bool weak;
- bool is_static; /* true if symbol is not global */
bool is_gpl_only; /* exported by EXPORT_SYMBOL_GPL */
char name[];
};
@@ -242,7 +241,7 @@ static struct symbol *alloc_symbol(const char *name)

memset(s, 0, sizeof(*s));
strcpy(s->name, name);
- s->is_static = true;
+
return s;
}

@@ -877,20 +876,6 @@ static void read_symbols(const char *modname)
sym_get_data(&info, sym));
}

- // check for static EXPORT_SYMBOL_* functions && global vars
- for (sym = info.symtab_start; sym < info.symtab_stop; sym++) {
- unsigned char bind = ELF_ST_BIND(sym->st_info);
-
- if (bind == STB_GLOBAL || bind == STB_WEAK) {
- struct symbol *s =
- find_symbol(remove_dot(info.strtab +
- sym->st_name));
-
- if (s)
- s->is_static = false;
- }
- }
-
check_sec_ref(mod, modname, &info);

if (!mod->is_vmlinux) {
@@ -1320,7 +1305,6 @@ static void read_dump(const char *fname)
mod->from_dump = true;
}
s = sym_add_exported(symname, mod, gpl_only);
- s->is_static = false;
sym_set_crc(s, crc);
sym_update_namespace(symname, namespace);
}
@@ -1385,7 +1369,6 @@ int main(int argc, char **argv)
char *missing_namespace_deps = NULL;
char *dump_write = NULL, *files_source = NULL;
int opt;
- int n;
LIST_HEAD(dump_lists);
struct dump_list *dl, *dl2;

@@ -1461,15 +1444,6 @@ int main(int argc, char **argv)
if (sec_mismatch_count && !sec_mismatch_warn_only)
error("Section mismatches detected.\n"
"Set CONFIG_SECTION_MISMATCH_WARN_ONLY=y to allow them.\n");
- for (n = 0; n < SYMBOL_HASH_SIZE; n++) {
- struct symbol *s;
-
- for (s = symbolhash[n]; s; s = s->next) {
- if (s->is_static)
- error("\"%s\" [%s] is a static EXPORT_SYMBOL\n",
- s->name, s->module->name);
- }
- }

if (nr_unresolved > MAX_UNRESOLVED_REPORTS)
warn("suppressed %u unresolved symbol warnings because there were too many)\n",
--
2.32.0


2022-05-23 03:15:29

by Masahiro Yamada

[permalink] [raw]
Subject: Re: [PATCH v6 00/10] kbuild: yet another series of cleanups (modpost, LTO, MODULE_REL_CRCS, export.h)

On Sun, May 22, 2022 at 10:45 AM Sedat Dilek <[email protected]> wrote:
>
> On Fri, May 13, 2022 at 4:31 PM Masahiro Yamada <[email protected]> wrote:
> >
> > On Fri, May 13, 2022 at 8:42 PM Masahiro Yamada <[email protected]> wrote:
> > >
> > >
> > > This is the third batch of cleanups in this development cycle.
> > >
> >
> >
> > This series is available at
> > git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild.git
> > lto-cleanup-v6
> >
>
> Hi Masahiro,
>
> I cloned the repository on top of latest Linus Git.
>
> Not able to boot in Quemu - Not able to boot on bare metal.
>
> $ grep module_layout log_quemu-5.18.0-rc7-2-amd64-clang14-lto.txt
> 366:[ 2.173265] floppy: disagrees about version of symbol module_layout
> 367:[ 2.198746] scsi_common: disagrees about version of symbol module_layout
> 368:[ 2.205573] i2c_piix4: disagrees about version of symbol module_layout
> 369:[ 2.210610] psmouse: disagrees about version of symbol module_layout
> 370:[ 2.225138] scsi_common: disagrees about version of symbol module_layout
> 371:[ 2.235536] scsi_common: disagrees about version of symbol module_layout
> 375:Begin: Running /scripts/local-premount ... [ 2.298555]
> crc32c_intel: disagrees about version of symbol module_layout
> 376:[ 2.303335] crc32c_generic: disagrees about version of symbol
> module_layout
> 377:[ 2.306667] libcrc32c: disagrees about version of symbol module_layout
>
> Infos: LLVM-14 + CONFIG_LTO_CLANG_THIN=y
>
> My linux-config and qemu-log are attached.
>


Thanks for your testing.

I was also able to reproduce this issue.


The problematic parts are:

[ 2.298555] crc32c_intel: disagrees about version of symbol module_layout
[ 2.303335] crc32c_generic: disagrees about version of symbol module_layout
[ 2.306667] libcrc32c: disagrees about version of symbol module_layout



When CONFIG_LTO_CLANG_THIN=y,
I cannot see any __crc_* symbols in "nm vmlinux".

Perhaps, LTO might have discarded all the __crc_* symbols
from vmlinux, but I am still checking the details...



--
Best Regards
Masahiro Yamada

2022-05-23 06:32:46

by Sedat Dilek

[permalink] [raw]
Subject: Re: [PATCH v6 00/10] kbuild: yet another series of cleanups (modpost, LTO, MODULE_REL_CRCS, export.h)

On Sun, May 22, 2022 at 11:45 AM Sedat Dilek <[email protected]> wrote:
>
> On Sun, May 22, 2022 at 8:50 AM Masahiro Yamada <[email protected]> wrote:
> >
> > On Sun, May 22, 2022 at 10:45 AM Sedat Dilek <[email protected]> wrote:
> > >
> > > On Fri, May 13, 2022 at 4:31 PM Masahiro Yamada <[email protected]> wrote:
> > > >
> > > > On Fri, May 13, 2022 at 8:42 PM Masahiro Yamada <[email protected]> wrote:
> > > > >
> > > > >
> > > > > This is the third batch of cleanups in this development cycle.
> > > > >
> > > >
> > > >
> > > > This series is available at
> > > > git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild.git
> > > > lto-cleanup-v6
> > > >
> > >
> > > Hi Masahiro,
> > >
> > > I cloned the repository on top of latest Linus Git.
> > >
> > > Not able to boot in Quemu - Not able to boot on bare metal.
> > >
> > > $ grep module_layout log_quemu-5.18.0-rc7-2-amd64-clang14-lto.txt
> > > 366:[ 2.173265] floppy: disagrees about version of symbol module_layout
> > > 367:[ 2.198746] scsi_common: disagrees about version of symbol module_layout
> > > 368:[ 2.205573] i2c_piix4: disagrees about version of symbol module_layout
> > > 369:[ 2.210610] psmouse: disagrees about version of symbol module_layout
> > > 370:[ 2.225138] scsi_common: disagrees about version of symbol module_layout
> > > 371:[ 2.235536] scsi_common: disagrees about version of symbol module_layout
> > > 375:Begin: Running /scripts/local-premount ... [ 2.298555]
> > > crc32c_intel: disagrees about version of symbol module_layout
> > > 376:[ 2.303335] crc32c_generic: disagrees about version of symbol
> > > module_layout
> > > 377:[ 2.306667] libcrc32c: disagrees about version of symbol module_layout
> > >
> > > Infos: LLVM-14 + CONFIG_LTO_CLANG_THIN=y
> > >
> > > My linux-config and qemu-log are attached.
> > >
> >
> >
> > Thanks for your testing.
> >
> > I was also able to reproduce this issue.
> >
> >
> > The problematic parts are:
> >
> > [ 2.298555] crc32c_intel: disagrees about version of symbol module_layout
> > [ 2.303335] crc32c_generic: disagrees about version of symbol module_layout
> > [ 2.306667] libcrc32c: disagrees about version of symbol module_layout
> >
> >
> >
> > When CONFIG_LTO_CLANG_THIN=y,
> > I cannot see any __crc_* symbols in "nm vmlinux".
> >
> > Perhaps, LTO might have discarded all the __crc_* symbols
> > from vmlinux, but I am still checking the details...
> >
>
> Thanks for taking care.
>
> Just for the records:
>
> $ grep CONFIG_MODVERSIONS /boot/config-5.18.0-rc7-2-amd64-clang14-lto
> CONFIG_MODVERSIONS=y
>

Did not try CONFIG_MODVERSIONS=n.

We have a new file:

[ include/linux/export-internal.h ]
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Please do not include this explicitly.
* This is used by C files generated by modpost.
*/

#ifndef __LINUX_EXPORT_INTERNAL_H__
#define __LINUX_EXPORT_INTERNAL_H__

#include <linux/compiler.h>
#include <linux/types.h>

#define SYMBOL_CRC(sym, crc, sec) \
u32 __section("___kcrctab" sec "+" #sym) __crc_##sym = crc

#endif /* __LINUX_EXPORT_INTERNAL_H__ */

But we discard __kcrctab in scripts/module.lds.S file.

Maybe we need:

$ git diff scripts/module.lds.S
diff --git a/scripts/module.lds.S b/scripts/module.lds.S
index 1d0e1e4dc3d2..c04b596c364b 100644
--- a/scripts/module.lds.S
+++ b/scripts/module.lds.S
@@ -21,8 +21,6 @@ SECTIONS {

__ksymtab 0 : { *(SORT(___ksymtab+*)) }
__ksymtab_gpl 0 : { *(SORT(___ksymtab_gpl+*)) }
- __kcrctab 0 : { *(SORT(___kcrctab+*)) }
- __kcrctab_gpl 0 : { *(SORT(___kcrctab_gpl+*)) }

.ctors 0 : ALIGN(8) { *(SORT(.ctors.*)) *(.ctors) }
.init_array 0 : ALIGN(8) { *(SORT(.init_array.*))
*(.init_array) }

Or even?

$ git diff scripts/kallsyms.c
diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c
index 8caabddf817c..fb3601fe8aa3 100644
--- a/scripts/kallsyms.c
+++ b/scripts/kallsyms.c
@@ -109,7 +109,6 @@ static bool is_ignored_symbol(const char *name, char type)
static const char * const ignored_prefixes[] = {
"$", /* local symbols for ARM, MIPS, etc. */
".L", /* local labels,
.LBB,.Ltmpxxx,.L__unnamed_xx,.LASANPC, etc. */
- "__crc_", /* modversions */
"__efistub_", /* arm64 EFI stub namespace */
"__kvm_nvhe_", /* arm64 non-VHE KVM namespace */
"__AArch64ADRPThunk_", /* arm64 lld */

- Sedat -

2022-05-23 06:41:24

by Sedat Dilek

[permalink] [raw]
Subject: Re: [PATCH v6 00/10] kbuild: yet another series of cleanups (modpost, LTO, MODULE_REL_CRCS, export.h)

On Fri, May 13, 2022 at 4:31 PM Masahiro Yamada <[email protected]> wrote:
>
> On Fri, May 13, 2022 at 8:42 PM Masahiro Yamada <[email protected]> wrote:
> >
> >
> > This is the third batch of cleanups in this development cycle.
> >
>
>
> This series is available at
> git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild.git
> lto-cleanup-v6
>

Hi Masahiro,

I cloned the repository on top of latest Linus Git.

Not able to boot in Quemu - Not able to boot on bare metal.

$ grep module_layout log_quemu-5.18.0-rc7-2-amd64-clang14-lto.txt
366:[ 2.173265] floppy: disagrees about version of symbol module_layout
367:[ 2.198746] scsi_common: disagrees about version of symbol module_layout
368:[ 2.205573] i2c_piix4: disagrees about version of symbol module_layout
369:[ 2.210610] psmouse: disagrees about version of symbol module_layout
370:[ 2.225138] scsi_common: disagrees about version of symbol module_layout
371:[ 2.235536] scsi_common: disagrees about version of symbol module_layout
375:Begin: Running /scripts/local-premount ... [ 2.298555]
crc32c_intel: disagrees about version of symbol module_layout
376:[ 2.303335] crc32c_generic: disagrees about version of symbol
module_layout
377:[ 2.306667] libcrc32c: disagrees about version of symbol module_layout

Infos: LLVM-14 + CONFIG_LTO_CLANG_THIN=y

My linux-config and qemu-log are attached.

Regards,
-Sedat-

>
> >
> > Changes in v6:
> > - Fix false-positive warnings when CONFIG_TRIM_UNUSED_KSYMS=y
> >
> > Changes in v5:
> > - Fix the build error when CONFIG_DEBUG_INFO_BTF=y (reported by Nathan)
> > - Clean up arch/m68k/include/asm/export.h (Nick)
> > - Keep gen_symversions (and will be removed by a later patch)
> > - Add more comments in the script
> >
> > Changes in v4:
> > - Rename .vmlinux-symver.c to .vmlinux.export.c
> > because I notice this approach is useful for further cleanups,
> > not only for modversioning but also for overall EXPORT_SYMBOL.
> > - New patch
> > - New.
> > Resent of my previous submission.
> > https://lore.kernel.org/all/[email protected]/
> > - New
> > Resent of my previous submission
> > https://lore.kernel.org/linux-kbuild/[email protected]/
> >
> > Changes in v3:
> > - New patch
> >
> > Changes in v2:
> > - Simplify the implementation (parse .cmd files after ELF)
> > - New patch
> > - replace the chain of $(if ...) with $(and )
> > - New patch
> > - New patch
> >
> > Masahiro Yamada (10):
> > modpost: extract symbol versions from *.cmd files
> > kbuild: link symbol CRCs at final link, removing
> > CONFIG_MODULE_REL_CRCS
> > kbuild: stop merging *.symversions
> > genksyms: adjust the output format to modpost
> > kbuild: do not create *.prelink.o for Clang LTO or IBT
> > kbuild: check static EXPORT_SYMBOL* by script instead of modpost
> > kbuild: make built-in.a rule robust against too long argument error
> > kbuild: make *.mod rule robust against too long argument error
> > kbuild: add cmd_and_savecmd macro
> > kbuild: rebuild multi-object modules when objtool is updated
> >
> > arch/m68k/include/asm/Kbuild | 1 +
> > arch/m68k/include/asm/export.h | 2 -
> > arch/powerpc/Kconfig | 1 -
> > arch/s390/Kconfig | 1 -
> > arch/um/Kconfig | 1 -
> > include/asm-generic/export.h | 22 ++-
> > include/linux/export-internal.h | 16 +++
> > include/linux/export.h | 30 ++--
> > init/Kconfig | 4 -
> > kernel/module.c | 10 +-
> > scripts/Kbuild.include | 10 +-
> > scripts/Makefile.build | 134 ++++++------------
> > scripts/Makefile.lib | 7 -
> > scripts/Makefile.modfinal | 5 +-
> > scripts/Makefile.modpost | 9 +-
> > scripts/check-local-export | 64 +++++++++
> > scripts/genksyms/genksyms.c | 18 +--
> > scripts/link-vmlinux.sh | 33 ++---
> > scripts/mod/modpost.c | 236 +++++++++++++++++++++-----------
> > 19 files changed, 320 insertions(+), 284 deletions(-)
> > delete mode 100644 arch/m68k/include/asm/export.h
> > create mode 100644 include/linux/export-internal.h
> > create mode 100755 scripts/check-local-export
> >
> > --
> > 2.32.0
> >
>
>
> --
> Best Regards
> Masahiro Yamada


Attachments:
log_quemu-5.18.0-rc7-2-amd64-clang14-lto.txt (23.94 kB)
config-5.18.0-rc7-2-amd64-clang14-lto (247.80 kB)
Download all attachments

2022-05-23 06:52:49

by Sedat Dilek

[permalink] [raw]
Subject: Re: [PATCH v6 00/10] kbuild: yet another series of cleanups (modpost, LTO, MODULE_REL_CRCS, export.h)

On Sun, May 22, 2022 at 6:18 PM Sedat Dilek <[email protected]> wrote:
>
> On Sun, May 22, 2022 at 6:10 PM Masahiro Yamada <[email protected]> wrote:
> >
> > On Sun, May 22, 2022 at 11:16 PM Sedat Dilek <[email protected]> wrote:
> > >
> > > On Sun, May 22, 2022 at 11:45 AM Sedat Dilek <[email protected]> wrote:
> > > >
> > > > On Sun, May 22, 2022 at 8:50 AM Masahiro Yamada <[email protected]> wrote:
> > > > >
> > > > > On Sun, May 22, 2022 at 10:45 AM Sedat Dilek <[email protected]> wrote:
> > > > > >
> > > > > > On Fri, May 13, 2022 at 4:31 PM Masahiro Yamada <[email protected]> wrote:
> > > > > > >
> > > > > > > On Fri, May 13, 2022 at 8:42 PM Masahiro Yamada <[email protected]> wrote:
> > > > > > > >
> > > > > > > >
> > > > > > > > This is the third batch of cleanups in this development cycle.
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > This series is available at
> > > > > > > git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild.git
> > > > > > > lto-cleanup-v6
> > > > > > >
> > > > > >
> > > > > > Hi Masahiro,
> > > > > >
> > > > > > I cloned the repository on top of latest Linus Git.
> > > > > >
> > > > > > Not able to boot in Quemu - Not able to boot on bare metal.
> > > > > >
> > > > > > $ grep module_layout log_quemu-5.18.0-rc7-2-amd64-clang14-lto.txt
> > > > > > 366:[ 2.173265] floppy: disagrees about version of symbol module_layout
> > > > > > 367:[ 2.198746] scsi_common: disagrees about version of symbol module_layout
> > > > > > 368:[ 2.205573] i2c_piix4: disagrees about version of symbol module_layout
> > > > > > 369:[ 2.210610] psmouse: disagrees about version of symbol module_layout
> > > > > > 370:[ 2.225138] scsi_common: disagrees about version of symbol module_layout
> > > > > > 371:[ 2.235536] scsi_common: disagrees about version of symbol module_layout
> > > > > > 375:Begin: Running /scripts/local-premount ... [ 2.298555]
> > > > > > crc32c_intel: disagrees about version of symbol module_layout
> > > > > > 376:[ 2.303335] crc32c_generic: disagrees about version of symbol
> > > > > > module_layout
> > > > > > 377:[ 2.306667] libcrc32c: disagrees about version of symbol module_layout
> > > > > >
> > > > > > Infos: LLVM-14 + CONFIG_LTO_CLANG_THIN=y
> > > > > >
> > > > > > My linux-config and qemu-log are attached.
> > > > > >
> > > > >
> > > > >
> > > > > Thanks for your testing.
> > > > >
> > > > > I was also able to reproduce this issue.
> > > > >
> > > > >
> > > > > The problematic parts are:
> > > > >
> > > > > [ 2.298555] crc32c_intel: disagrees about version of symbol module_layout
> > > > > [ 2.303335] crc32c_generic: disagrees about version of symbol module_layout
> > > > > [ 2.306667] libcrc32c: disagrees about version of symbol module_layout
> > > > >
> > > > >
> > > > >
> > > > > When CONFIG_LTO_CLANG_THIN=y,
> > > > > I cannot see any __crc_* symbols in "nm vmlinux".
> > > > >
> > > > > Perhaps, LTO might have discarded all the __crc_* symbols
> > > > > from vmlinux, but I am still checking the details...
> > > > >
> > > >
> > > > Thanks for taking care.
> > > >
> > > > Just for the records:
> > > >
> > > > $ grep CONFIG_MODVERSIONS /boot/config-5.18.0-rc7-2-amd64-clang14-lto
> > > > CONFIG_MODVERSIONS=y
> > > >
> > >
> > > Did not try CONFIG_MODVERSIONS=n.
> > >
> > > We have a new file:
> > >
> > > [ include/linux/export-internal.h ]
> > > /* SPDX-License-Identifier: GPL-2.0-only */
> > > /*
> > > * Please do not include this explicitly.
> > > * This is used by C files generated by modpost.
> > > */
> > >
> > > #ifndef __LINUX_EXPORT_INTERNAL_H__
> > > #define __LINUX_EXPORT_INTERNAL_H__
> > >
> > > #include <linux/compiler.h>
> > > #include <linux/types.h>
> > >
> > > #define SYMBOL_CRC(sym, crc, sec) \
> > > u32 __section("___kcrctab" sec "+" #sym) __crc_##sym = crc
> > >
> > > #endif /* __LINUX_EXPORT_INTERNAL_H__ */
> > >
> > > But we discard __kcrctab in scripts/module.lds.S file.
> >
> >
> > No.
> > scripts/module.lds.S keeps __kcrctab.
> >
> >
> > The discarded sections are specified a few lines above:
> >
> > /DISCARD/ : {
> > *(.discard)
> > *(.discard.*)
> > SANITIZER_DISCARDS
> > }
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > > Maybe we need:
> >
> >
> > No.
> >
> > The problem is __crc_* symbols are dropped from vmlinux
> > when CONFIG_LTO_CLANG=y.
> >
> >
> > Please try this fixup:
> > https://lore.kernel.org/linux-kbuild/[email protected]/T/#u
> >
>
> Thanks!
>
> Will give it a try - will report in a few hours.
>
> -Sedat-

I was able to build and boot on bare metal.

Feel free to add my...

Reported-by: Sedat Dilek <[email protected]>
Tested-by: Sedat Dilek <[email protected]> # LLVM-14 (x86-64)

-Sedat-

>
> >
> >
> >
> >
> >
> > >
> > > $ git diff scripts/module.lds.S
> > > diff --git a/scripts/module.lds.S b/scripts/module.lds.S
> > > index 1d0e1e4dc3d2..c04b596c364b 100644
> > > --- a/scripts/module.lds.S
> > > +++ b/scripts/module.lds.S
> > > @@ -21,8 +21,6 @@ SECTIONS {
> > >
> > > __ksymtab 0 : { *(SORT(___ksymtab+*)) }
> > > __ksymtab_gpl 0 : { *(SORT(___ksymtab_gpl+*)) }
> > > - __kcrctab 0 : { *(SORT(___kcrctab+*)) }
> > > - __kcrctab_gpl 0 : { *(SORT(___kcrctab_gpl+*)) }
> > >
> > > .ctors 0 : ALIGN(8) { *(SORT(.ctors.*)) *(.ctors) }
> > > .init_array 0 : ALIGN(8) { *(SORT(.init_array.*))
> > > *(.init_array) }
> > >
> > > Or even?
> > >
> > > $ git diff scripts/kallsyms.c
> > > diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c
> > > index 8caabddf817c..fb3601fe8aa3 100644
> > > --- a/scripts/kallsyms.c
> > > +++ b/scripts/kallsyms.c
> > > @@ -109,7 +109,6 @@ static bool is_ignored_symbol(const char *name, char type)
> > > static const char * const ignored_prefixes[] = {
> > > "$", /* local symbols for ARM, MIPS, etc. */
> > > ".L", /* local labels,
> > > .LBB,.Ltmpxxx,.L__unnamed_xx,.LASANPC, etc. */
> > > - "__crc_", /* modversions */
> > > "__efistub_", /* arm64 EFI stub namespace */
> > > "__kvm_nvhe_", /* arm64 non-VHE KVM namespace */
> > > "__AArch64ADRPThunk_", /* arm64 lld */
> > >
> > > - Sedat -
> >
> >
> >
> > --
> > Best Regards
> > Masahiro Yamada

2022-05-23 07:28:28

by Sedat Dilek

[permalink] [raw]
Subject: Re: [PATCH v6 00/10] kbuild: yet another series of cleanups (modpost, LTO, MODULE_REL_CRCS, export.h)

On Sun, May 22, 2022 at 8:50 AM Masahiro Yamada <[email protected]> wrote:
>
> On Sun, May 22, 2022 at 10:45 AM Sedat Dilek <[email protected]> wrote:
> >
> > On Fri, May 13, 2022 at 4:31 PM Masahiro Yamada <[email protected]> wrote:
> > >
> > > On Fri, May 13, 2022 at 8:42 PM Masahiro Yamada <[email protected]> wrote:
> > > >
> > > >
> > > > This is the third batch of cleanups in this development cycle.
> > > >
> > >
> > >
> > > This series is available at
> > > git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild.git
> > > lto-cleanup-v6
> > >
> >
> > Hi Masahiro,
> >
> > I cloned the repository on top of latest Linus Git.
> >
> > Not able to boot in Quemu - Not able to boot on bare metal.
> >
> > $ grep module_layout log_quemu-5.18.0-rc7-2-amd64-clang14-lto.txt
> > 366:[ 2.173265] floppy: disagrees about version of symbol module_layout
> > 367:[ 2.198746] scsi_common: disagrees about version of symbol module_layout
> > 368:[ 2.205573] i2c_piix4: disagrees about version of symbol module_layout
> > 369:[ 2.210610] psmouse: disagrees about version of symbol module_layout
> > 370:[ 2.225138] scsi_common: disagrees about version of symbol module_layout
> > 371:[ 2.235536] scsi_common: disagrees about version of symbol module_layout
> > 375:Begin: Running /scripts/local-premount ... [ 2.298555]
> > crc32c_intel: disagrees about version of symbol module_layout
> > 376:[ 2.303335] crc32c_generic: disagrees about version of symbol
> > module_layout
> > 377:[ 2.306667] libcrc32c: disagrees about version of symbol module_layout
> >
> > Infos: LLVM-14 + CONFIG_LTO_CLANG_THIN=y
> >
> > My linux-config and qemu-log are attached.
> >
>
>
> Thanks for your testing.
>
> I was also able to reproduce this issue.
>
>
> The problematic parts are:
>
> [ 2.298555] crc32c_intel: disagrees about version of symbol module_layout
> [ 2.303335] crc32c_generic: disagrees about version of symbol module_layout
> [ 2.306667] libcrc32c: disagrees about version of symbol module_layout
>
>
>
> When CONFIG_LTO_CLANG_THIN=y,
> I cannot see any __crc_* symbols in "nm vmlinux".
>
> Perhaps, LTO might have discarded all the __crc_* symbols
> from vmlinux, but I am still checking the details...
>

Thanks for taking care.

Just for the records:

$ grep CONFIG_MODVERSIONS /boot/config-5.18.0-rc7-2-amd64-clang14-lto
CONFIG_MODVERSIONS=y

-Sedat-

2022-05-23 07:32:37

by Masahiro Yamada

[permalink] [raw]
Subject: Re: [PATCH v6 00/10] kbuild: yet another series of cleanups (modpost, LTO, MODULE_REL_CRCS, export.h)

On Sun, May 22, 2022 at 11:16 PM Sedat Dilek <[email protected]> wrote:
>
> On Sun, May 22, 2022 at 11:45 AM Sedat Dilek <[email protected]> wrote:
> >
> > On Sun, May 22, 2022 at 8:50 AM Masahiro Yamada <[email protected]> wrote:
> > >
> > > On Sun, May 22, 2022 at 10:45 AM Sedat Dilek <[email protected]> wrote:
> > > >
> > > > On Fri, May 13, 2022 at 4:31 PM Masahiro Yamada <[email protected]> wrote:
> > > > >
> > > > > On Fri, May 13, 2022 at 8:42 PM Masahiro Yamada <[email protected]> wrote:
> > > > > >
> > > > > >
> > > > > > This is the third batch of cleanups in this development cycle.
> > > > > >
> > > > >
> > > > >
> > > > > This series is available at
> > > > > git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild.git
> > > > > lto-cleanup-v6
> > > > >
> > > >
> > > > Hi Masahiro,
> > > >
> > > > I cloned the repository on top of latest Linus Git.
> > > >
> > > > Not able to boot in Quemu - Not able to boot on bare metal.
> > > >
> > > > $ grep module_layout log_quemu-5.18.0-rc7-2-amd64-clang14-lto.txt
> > > > 366:[ 2.173265] floppy: disagrees about version of symbol module_layout
> > > > 367:[ 2.198746] scsi_common: disagrees about version of symbol module_layout
> > > > 368:[ 2.205573] i2c_piix4: disagrees about version of symbol module_layout
> > > > 369:[ 2.210610] psmouse: disagrees about version of symbol module_layout
> > > > 370:[ 2.225138] scsi_common: disagrees about version of symbol module_layout
> > > > 371:[ 2.235536] scsi_common: disagrees about version of symbol module_layout
> > > > 375:Begin: Running /scripts/local-premount ... [ 2.298555]
> > > > crc32c_intel: disagrees about version of symbol module_layout
> > > > 376:[ 2.303335] crc32c_generic: disagrees about version of symbol
> > > > module_layout
> > > > 377:[ 2.306667] libcrc32c: disagrees about version of symbol module_layout
> > > >
> > > > Infos: LLVM-14 + CONFIG_LTO_CLANG_THIN=y
> > > >
> > > > My linux-config and qemu-log are attached.
> > > >
> > >
> > >
> > > Thanks for your testing.
> > >
> > > I was also able to reproduce this issue.
> > >
> > >
> > > The problematic parts are:
> > >
> > > [ 2.298555] crc32c_intel: disagrees about version of symbol module_layout
> > > [ 2.303335] crc32c_generic: disagrees about version of symbol module_layout
> > > [ 2.306667] libcrc32c: disagrees about version of symbol module_layout
> > >
> > >
> > >
> > > When CONFIG_LTO_CLANG_THIN=y,
> > > I cannot see any __crc_* symbols in "nm vmlinux".
> > >
> > > Perhaps, LTO might have discarded all the __crc_* symbols
> > > from vmlinux, but I am still checking the details...
> > >
> >
> > Thanks for taking care.
> >
> > Just for the records:
> >
> > $ grep CONFIG_MODVERSIONS /boot/config-5.18.0-rc7-2-amd64-clang14-lto
> > CONFIG_MODVERSIONS=y
> >
>
> Did not try CONFIG_MODVERSIONS=n.
>
> We have a new file:
>
> [ include/linux/export-internal.h ]
> /* SPDX-License-Identifier: GPL-2.0-only */
> /*
> * Please do not include this explicitly.
> * This is used by C files generated by modpost.
> */
>
> #ifndef __LINUX_EXPORT_INTERNAL_H__
> #define __LINUX_EXPORT_INTERNAL_H__
>
> #include <linux/compiler.h>
> #include <linux/types.h>
>
> #define SYMBOL_CRC(sym, crc, sec) \
> u32 __section("___kcrctab" sec "+" #sym) __crc_##sym = crc
>
> #endif /* __LINUX_EXPORT_INTERNAL_H__ */
>
> But we discard __kcrctab in scripts/module.lds.S file.


No.
scripts/module.lds.S keeps __kcrctab.


The discarded sections are specified a few lines above:

/DISCARD/ : {
*(.discard)
*(.discard.*)
SANITIZER_DISCARDS
}









> Maybe we need:


No.

The problem is __crc_* symbols are dropped from vmlinux
when CONFIG_LTO_CLANG=y.


Please try this fixup:
https://lore.kernel.org/linux-kbuild/[email protected]/T/#u






>
> $ git diff scripts/module.lds.S
> diff --git a/scripts/module.lds.S b/scripts/module.lds.S
> index 1d0e1e4dc3d2..c04b596c364b 100644
> --- a/scripts/module.lds.S
> +++ b/scripts/module.lds.S
> @@ -21,8 +21,6 @@ SECTIONS {
>
> __ksymtab 0 : { *(SORT(___ksymtab+*)) }
> __ksymtab_gpl 0 : { *(SORT(___ksymtab_gpl+*)) }
> - __kcrctab 0 : { *(SORT(___kcrctab+*)) }
> - __kcrctab_gpl 0 : { *(SORT(___kcrctab_gpl+*)) }
>
> .ctors 0 : ALIGN(8) { *(SORT(.ctors.*)) *(.ctors) }
> .init_array 0 : ALIGN(8) { *(SORT(.init_array.*))
> *(.init_array) }
>
> Or even?
>
> $ git diff scripts/kallsyms.c
> diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c
> index 8caabddf817c..fb3601fe8aa3 100644
> --- a/scripts/kallsyms.c
> +++ b/scripts/kallsyms.c
> @@ -109,7 +109,6 @@ static bool is_ignored_symbol(const char *name, char type)
> static const char * const ignored_prefixes[] = {
> "$", /* local symbols for ARM, MIPS, etc. */
> ".L", /* local labels,
> .LBB,.Ltmpxxx,.L__unnamed_xx,.LASANPC, etc. */
> - "__crc_", /* modversions */
> "__efistub_", /* arm64 EFI stub namespace */
> "__kvm_nvhe_", /* arm64 non-VHE KVM namespace */
> "__AArch64ADRPThunk_", /* arm64 lld */
>
> - Sedat -



--
Best Regards
Masahiro Yamada

2022-05-23 08:12:54

by Sedat Dilek

[permalink] [raw]
Subject: Re: [PATCH v6 00/10] kbuild: yet another series of cleanups (modpost, LTO, MODULE_REL_CRCS, export.h)

On Sun, May 22, 2022 at 6:10 PM Masahiro Yamada <[email protected]> wrote:
>
> On Sun, May 22, 2022 at 11:16 PM Sedat Dilek <[email protected]> wrote:
> >
> > On Sun, May 22, 2022 at 11:45 AM Sedat Dilek <[email protected]> wrote:
> > >
> > > On Sun, May 22, 2022 at 8:50 AM Masahiro Yamada <[email protected]> wrote:
> > > >
> > > > On Sun, May 22, 2022 at 10:45 AM Sedat Dilek <[email protected]> wrote:
> > > > >
> > > > > On Fri, May 13, 2022 at 4:31 PM Masahiro Yamada <[email protected]> wrote:
> > > > > >
> > > > > > On Fri, May 13, 2022 at 8:42 PM Masahiro Yamada <[email protected]> wrote:
> > > > > > >
> > > > > > >
> > > > > > > This is the third batch of cleanups in this development cycle.
> > > > > > >
> > > > > >
> > > > > >
> > > > > > This series is available at
> > > > > > git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild.git
> > > > > > lto-cleanup-v6
> > > > > >
> > > > >
> > > > > Hi Masahiro,
> > > > >
> > > > > I cloned the repository on top of latest Linus Git.
> > > > >
> > > > > Not able to boot in Quemu - Not able to boot on bare metal.
> > > > >
> > > > > $ grep module_layout log_quemu-5.18.0-rc7-2-amd64-clang14-lto.txt
> > > > > 366:[ 2.173265] floppy: disagrees about version of symbol module_layout
> > > > > 367:[ 2.198746] scsi_common: disagrees about version of symbol module_layout
> > > > > 368:[ 2.205573] i2c_piix4: disagrees about version of symbol module_layout
> > > > > 369:[ 2.210610] psmouse: disagrees about version of symbol module_layout
> > > > > 370:[ 2.225138] scsi_common: disagrees about version of symbol module_layout
> > > > > 371:[ 2.235536] scsi_common: disagrees about version of symbol module_layout
> > > > > 375:Begin: Running /scripts/local-premount ... [ 2.298555]
> > > > > crc32c_intel: disagrees about version of symbol module_layout
> > > > > 376:[ 2.303335] crc32c_generic: disagrees about version of symbol
> > > > > module_layout
> > > > > 377:[ 2.306667] libcrc32c: disagrees about version of symbol module_layout
> > > > >
> > > > > Infos: LLVM-14 + CONFIG_LTO_CLANG_THIN=y
> > > > >
> > > > > My linux-config and qemu-log are attached.
> > > > >
> > > >
> > > >
> > > > Thanks for your testing.
> > > >
> > > > I was also able to reproduce this issue.
> > > >
> > > >
> > > > The problematic parts are:
> > > >
> > > > [ 2.298555] crc32c_intel: disagrees about version of symbol module_layout
> > > > [ 2.303335] crc32c_generic: disagrees about version of symbol module_layout
> > > > [ 2.306667] libcrc32c: disagrees about version of symbol module_layout
> > > >
> > > >
> > > >
> > > > When CONFIG_LTO_CLANG_THIN=y,
> > > > I cannot see any __crc_* symbols in "nm vmlinux".
> > > >
> > > > Perhaps, LTO might have discarded all the __crc_* symbols
> > > > from vmlinux, but I am still checking the details...
> > > >
> > >
> > > Thanks for taking care.
> > >
> > > Just for the records:
> > >
> > > $ grep CONFIG_MODVERSIONS /boot/config-5.18.0-rc7-2-amd64-clang14-lto
> > > CONFIG_MODVERSIONS=y
> > >
> >
> > Did not try CONFIG_MODVERSIONS=n.
> >
> > We have a new file:
> >
> > [ include/linux/export-internal.h ]
> > /* SPDX-License-Identifier: GPL-2.0-only */
> > /*
> > * Please do not include this explicitly.
> > * This is used by C files generated by modpost.
> > */
> >
> > #ifndef __LINUX_EXPORT_INTERNAL_H__
> > #define __LINUX_EXPORT_INTERNAL_H__
> >
> > #include <linux/compiler.h>
> > #include <linux/types.h>
> >
> > #define SYMBOL_CRC(sym, crc, sec) \
> > u32 __section("___kcrctab" sec "+" #sym) __crc_##sym = crc
> >
> > #endif /* __LINUX_EXPORT_INTERNAL_H__ */
> >
> > But we discard __kcrctab in scripts/module.lds.S file.
>
>
> No.
> scripts/module.lds.S keeps __kcrctab.
>
>
> The discarded sections are specified a few lines above:
>
> /DISCARD/ : {
> *(.discard)
> *(.discard.*)
> SANITIZER_DISCARDS
> }
>
>
>
>
>
>
>
>
>
> > Maybe we need:
>
>
> No.
>
> The problem is __crc_* symbols are dropped from vmlinux
> when CONFIG_LTO_CLANG=y.
>
>
> Please try this fixup:
> https://lore.kernel.org/linux-kbuild/[email protected]/T/#u
>

Thanks!

Will give it a try - will report in a few hours.

-Sedat-

>
>
>
>
>
> >
> > $ git diff scripts/module.lds.S
> > diff --git a/scripts/module.lds.S b/scripts/module.lds.S
> > index 1d0e1e4dc3d2..c04b596c364b 100644
> > --- a/scripts/module.lds.S
> > +++ b/scripts/module.lds.S
> > @@ -21,8 +21,6 @@ SECTIONS {
> >
> > __ksymtab 0 : { *(SORT(___ksymtab+*)) }
> > __ksymtab_gpl 0 : { *(SORT(___ksymtab_gpl+*)) }
> > - __kcrctab 0 : { *(SORT(___kcrctab+*)) }
> > - __kcrctab_gpl 0 : { *(SORT(___kcrctab_gpl+*)) }
> >
> > .ctors 0 : ALIGN(8) { *(SORT(.ctors.*)) *(.ctors) }
> > .init_array 0 : ALIGN(8) { *(SORT(.init_array.*))
> > *(.init_array) }
> >
> > Or even?
> >
> > $ git diff scripts/kallsyms.c
> > diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c
> > index 8caabddf817c..fb3601fe8aa3 100644
> > --- a/scripts/kallsyms.c
> > +++ b/scripts/kallsyms.c
> > @@ -109,7 +109,6 @@ static bool is_ignored_symbol(const char *name, char type)
> > static const char * const ignored_prefixes[] = {
> > "$", /* local symbols for ARM, MIPS, etc. */
> > ".L", /* local labels,
> > .LBB,.Ltmpxxx,.L__unnamed_xx,.LASANPC, etc. */
> > - "__crc_", /* modversions */
> > "__efistub_", /* arm64 EFI stub namespace */
> > "__kvm_nvhe_", /* arm64 non-VHE KVM namespace */
> > "__AArch64ADRPThunk_", /* arm64 lld */
> >
> > - Sedat -
>
>
>
> --
> Best Regards
> Masahiro Yamada

2022-05-25 09:04:11

by Guenter Roeck

[permalink] [raw]
Subject: Re: [PATCH v6 06/10] kbuild: check static EXPORT_SYMBOL* by script instead of modpost

On Fri, May 13, 2022 at 08:39:26PM +0900, Masahiro Yamada wrote:
> The 'static' specifier and EXPORT_SYMBOL() are an odd combination.
>
> Commit 15bfc2348d54 ("modpost: check for static EXPORT_SYMBOL*
> functions") tried to detect it, but this check has false negatives.
>
> Here is the sample code.
>
> Makefile:
>
> obj-y += foo1.o foo2.o
>
> foo1.c:
>
> #include <linux/export.h>
> static void foo(void) {}
> EXPORT_SYMBOL(foo);
>
> foo2.c:
>
> void foo(void) {}
>
> foo1.c exports the static symbol 'foo', but modpost cannot catch it
> because it is fooled by foo2.c, which has a global symbol with the
> same name.
>
> s->is_static is cleared if a global symbol with the same name is found
> somewhere, but EXPORT_SYMBOL() and the global symbol do not necessarily
> belong to the same compilation unit.
>
> This check should be done per compilation unit, but I do not know how
> to do it in modpost. modpost runs against vmlinux.o or modules, which
> merges multiple objects, then forgets their origin.
>
> It is true modpost gets access to the lists of all the member objects
> (.vmlinux.objs and *.mod), but modpost cannot parse individual objects
> because they may not be ELF but LLVM IR when CONFIG_LTO_CLANG=y.
>
> Add a simple bash script to parse the output from ${NM}. This works for
> CONFIG_LTO_CLANG=y because llvm-nm can dump symbols of LLVM IR files.
>

On parisc builds, this patch results in:

Building parisc:allnoconfig ... failed
--------------
Error log:
scripts/check-local-export: sh /opt/buildbot/slave/next-next/build/arch/parisc/nm failed

Guenter

2022-05-26 20:54:44

by Masahiro Yamada

[permalink] [raw]
Subject: Re: [PATCH v6 06/10] kbuild: check static EXPORT_SYMBOL* by script instead of modpost

On Wed, May 25, 2022 at 5:31 PM Guenter Roeck <[email protected]> wrote:
>
> On Fri, May 13, 2022 at 08:39:26PM +0900, Masahiro Yamada wrote:
> > The 'static' specifier and EXPORT_SYMBOL() are an odd combination.
> >
> > Commit 15bfc2348d54 ("modpost: check for static EXPORT_SYMBOL*
> > functions") tried to detect it, but this check has false negatives.
> >
> > Here is the sample code.
> >
> > Makefile:
> >
> > obj-y += foo1.o foo2.o
> >
> > foo1.c:
> >
> > #include <linux/export.h>
> > static void foo(void) {}
> > EXPORT_SYMBOL(foo);
> >
> > foo2.c:
> >
> > void foo(void) {}
> >
> > foo1.c exports the static symbol 'foo', but modpost cannot catch it
> > because it is fooled by foo2.c, which has a global symbol with the
> > same name.
> >
> > s->is_static is cleared if a global symbol with the same name is found
> > somewhere, but EXPORT_SYMBOL() and the global symbol do not necessarily
> > belong to the same compilation unit.
> >
> > This check should be done per compilation unit, but I do not know how
> > to do it in modpost. modpost runs against vmlinux.o or modules, which
> > merges multiple objects, then forgets their origin.
> >
> > It is true modpost gets access to the lists of all the member objects
> > (.vmlinux.objs and *.mod), but modpost cannot parse individual objects
> > because they may not be ELF but LLVM IR when CONFIG_LTO_CLANG=y.
> >
> > Add a simple bash script to parse the output from ${NM}. This works for
> > CONFIG_LTO_CLANG=y because llvm-nm can dump symbols of LLVM IR files.
> >
>
> On parisc builds, this patch results in:
>
> Building parisc:allnoconfig ... failed
> --------------
> Error log:
> scripts/check-local-export: sh /opt/buildbot/slave/next-next/build/arch/parisc/nm failed
>
> Guenter

Thanks for the report.

parisc overrides NM:

NM = sh $(srctree)/arch/parisc/nm


I will fix the script to return the correct exit code.



--
Best Regards
Masahiro Yamada

2022-06-08 01:31:12

by Nathan Chancellor

[permalink] [raw]
Subject: Re: [PATCH v6 06/10] kbuild: check static EXPORT_SYMBOL* by script instead of modpost

On Tue, Jun 07, 2022 at 03:22:21PM +0100, Jon Hunter wrote:
>
> On 13/05/2022 12:39, Masahiro Yamada wrote:
> > The 'static' specifier and EXPORT_SYMBOL() are an odd combination.
> >
> > Commit 15bfc2348d54 ("modpost: check for static EXPORT_SYMBOL*
> > functions") tried to detect it, but this check has false negatives.
> >
> > Here is the sample code.
> >
> > Makefile:
> >
> > obj-y += foo1.o foo2.o
> >
> > foo1.c:
> >
> > #include <linux/export.h>
> > static void foo(void) {}
> > EXPORT_SYMBOL(foo);
> >
> > foo2.c:
> >
> > void foo(void) {}
> >
> > foo1.c exports the static symbol 'foo', but modpost cannot catch it
> > because it is fooled by foo2.c, which has a global symbol with the
> > same name.
> >
> > s->is_static is cleared if a global symbol with the same name is found
> > somewhere, but EXPORT_SYMBOL() and the global symbol do not necessarily
> > belong to the same compilation unit.
> >
> > This check should be done per compilation unit, but I do not know how
> > to do it in modpost. modpost runs against vmlinux.o or modules, which
> > merges multiple objects, then forgets their origin.
> >
> > It is true modpost gets access to the lists of all the member objects
> > (.vmlinux.objs and *.mod), but modpost cannot parse individual objects
> > because they may not be ELF but LLVM IR when CONFIG_LTO_CLANG=y.
> >
> > Add a simple bash script to parse the output from ${NM}. This works for
> > CONFIG_LTO_CLANG=y because llvm-nm can dump symbols of LLVM IR files.
> >
> > Revert 15bfc2348d54.
> >
> > Signed-off-by: Masahiro Yamada <[email protected]>
> > Reviewed-by: Nick Desaulniers <[email protected]>
> > Tested-by: Nathan Chancellor <[email protected]>
>
>
> One some older build machines this is causing some builds (ARM/ARM64)
> to fail ...
>
> /dvs/git/dirty/git-master_l4t-upstream/kernel/scripts/check-local-export: line 54: wait: pid 48433 is not a child of this shell
> /dvs/git/dirty/git-master_l4t-upstream/kernel/scripts/Makefile.build:250: recipe for target 'scripts/mod/empty.o' failed
> make[2]: *** [scripts/mod/empty.o] Error 127
> make[2]: *** Deleting file 'scripts/mod/empty.o'
> make[2]: *** Waiting for unfinished jobs....
> /dvs/git/dirty/git-master_l4t-upstream/kernel/Makefile:1285: recipe for target 'prepare0' failed
> make[1]: *** [prepare0] Error 2
> make[1]: Leaving directory '/dvs/git/dirty/git-master_l4t-upstream/artifacts/linux/arm64-defconfig-jetson'
> Makefile:228: recipe for target '__sub-make' failed
> make: *** [__sub-make] Error 2
>
> Any ideas?

https://lore.kernel.org/[email protected]/
should resolve it if you wanted to give it a test.

Cheers,
Nathan

2022-06-08 02:44:37

by Jon Hunter

[permalink] [raw]
Subject: Re: [PATCH v6 06/10] kbuild: check static EXPORT_SYMBOL* by script instead of modpost


On 13/05/2022 12:39, Masahiro Yamada wrote:
> The 'static' specifier and EXPORT_SYMBOL() are an odd combination.
>
> Commit 15bfc2348d54 ("modpost: check for static EXPORT_SYMBOL*
> functions") tried to detect it, but this check has false negatives.
>
> Here is the sample code.
>
> Makefile:
>
> obj-y += foo1.o foo2.o
>
> foo1.c:
>
> #include <linux/export.h>
> static void foo(void) {}
> EXPORT_SYMBOL(foo);
>
> foo2.c:
>
> void foo(void) {}
>
> foo1.c exports the static symbol 'foo', but modpost cannot catch it
> because it is fooled by foo2.c, which has a global symbol with the
> same name.
>
> s->is_static is cleared if a global symbol with the same name is found
> somewhere, but EXPORT_SYMBOL() and the global symbol do not necessarily
> belong to the same compilation unit.
>
> This check should be done per compilation unit, but I do not know how
> to do it in modpost. modpost runs against vmlinux.o or modules, which
> merges multiple objects, then forgets their origin.
>
> It is true modpost gets access to the lists of all the member objects
> (.vmlinux.objs and *.mod), but modpost cannot parse individual objects
> because they may not be ELF but LLVM IR when CONFIG_LTO_CLANG=y.
>
> Add a simple bash script to parse the output from ${NM}. This works for
> CONFIG_LTO_CLANG=y because llvm-nm can dump symbols of LLVM IR files.
>
> Revert 15bfc2348d54.
>
> Signed-off-by: Masahiro Yamada <[email protected]>
> Reviewed-by: Nick Desaulniers <[email protected]>
> Tested-by: Nathan Chancellor <[email protected]>


One some older build machines this is causing some builds (ARM/ARM64)
to fail ...

/dvs/git/dirty/git-master_l4t-upstream/kernel/scripts/check-local-export: line 54: wait: pid 48433 is not a child of this shell
/dvs/git/dirty/git-master_l4t-upstream/kernel/scripts/Makefile.build:250: recipe for target 'scripts/mod/empty.o' failed
make[2]: *** [scripts/mod/empty.o] Error 127
make[2]: *** Deleting file 'scripts/mod/empty.o'
make[2]: *** Waiting for unfinished jobs....
/dvs/git/dirty/git-master_l4t-upstream/kernel/Makefile:1285: recipe for target 'prepare0' failed
make[1]: *** [prepare0] Error 2
make[1]: Leaving directory '/dvs/git/dirty/git-master_l4t-upstream/artifacts/linux/arm64-defconfig-jetson'
Makefile:228: recipe for target '__sub-make' failed
make: *** [__sub-make] Error 2

Any ideas?

Thanks
Jon

--
nvpublic

2022-06-08 04:26:44

by Jon Hunter

[permalink] [raw]
Subject: Re: [PATCH v6 06/10] kbuild: check static EXPORT_SYMBOL* by script instead of modpost


On 07/06/2022 15:25, Nathan Chancellor wrote:
> On Tue, Jun 07, 2022 at 03:22:21PM +0100, Jon Hunter wrote:
>>
>> On 13/05/2022 12:39, Masahiro Yamada wrote:
>>> The 'static' specifier and EXPORT_SYMBOL() are an odd combination.
>>>
>>> Commit 15bfc2348d54 ("modpost: check for static EXPORT_SYMBOL*
>>> functions") tried to detect it, but this check has false negatives.
>>>
>>> Here is the sample code.
>>>
>>> Makefile:
>>>
>>> obj-y += foo1.o foo2.o
>>>
>>> foo1.c:
>>>
>>> #include <linux/export.h>
>>> static void foo(void) {}
>>> EXPORT_SYMBOL(foo);
>>>
>>> foo2.c:
>>>
>>> void foo(void) {}
>>>
>>> foo1.c exports the static symbol 'foo', but modpost cannot catch it
>>> because it is fooled by foo2.c, which has a global symbol with the
>>> same name.
>>>
>>> s->is_static is cleared if a global symbol with the same name is found
>>> somewhere, but EXPORT_SYMBOL() and the global symbol do not necessarily
>>> belong to the same compilation unit.
>>>
>>> This check should be done per compilation unit, but I do not know how
>>> to do it in modpost. modpost runs against vmlinux.o or modules, which
>>> merges multiple objects, then forgets their origin.
>>>
>>> It is true modpost gets access to the lists of all the member objects
>>> (.vmlinux.objs and *.mod), but modpost cannot parse individual objects
>>> because they may not be ELF but LLVM IR when CONFIG_LTO_CLANG=y.
>>>
>>> Add a simple bash script to parse the output from ${NM}. This works for
>>> CONFIG_LTO_CLANG=y because llvm-nm can dump symbols of LLVM IR files.
>>>
>>> Revert 15bfc2348d54.
>>>
>>> Signed-off-by: Masahiro Yamada <[email protected]>
>>> Reviewed-by: Nick Desaulniers <[email protected]>
>>> Tested-by: Nathan Chancellor <[email protected]>
>>
>>
>> One some older build machines this is causing some builds (ARM/ARM64)
>> to fail ...
>>
>> /dvs/git/dirty/git-master_l4t-upstream/kernel/scripts/check-local-export: line 54: wait: pid 48433 is not a child of this shell
>> /dvs/git/dirty/git-master_l4t-upstream/kernel/scripts/Makefile.build:250: recipe for target 'scripts/mod/empty.o' failed
>> make[2]: *** [scripts/mod/empty.o] Error 127
>> make[2]: *** Deleting file 'scripts/mod/empty.o'
>> make[2]: *** Waiting for unfinished jobs....
>> /dvs/git/dirty/git-master_l4t-upstream/kernel/Makefile:1285: recipe for target 'prepare0' failed
>> make[1]: *** [prepare0] Error 2
>> make[1]: Leaving directory '/dvs/git/dirty/git-master_l4t-upstream/artifacts/linux/arm64-defconfig-jetson'
>> Makefile:228: recipe for target '__sub-make' failed
>> make: *** [__sub-make] Error 2
>>
>> Any ideas?
>
> https://lore.kernel.org/[email protected]/
> should resolve it if you wanted to give it a test.

Thanks! Works for me.

Tested-by: Jon Hunter <[email protected]>

Cheers
Jon

--
nvpublic

2022-08-06 00:11:12

by matoro

[permalink] [raw]
Subject: Re: [PATCH v6 00/10] kbuild: yet another series of cleanups (modpost, LTO, MODULE_REL_CRCS, export.h)

Hi Masahiro, I'm sorry to raise this after release but this seems to be
broken on SOME architectures. So far I have tested:

Affected - sparc, alpha
Unaffected - riscv, ia64

The affected systems are unable to load modules, similar to the
previously reported issue. All module loading fails with "disagrees
about version of symbol module_layout".

Bisect blames 7b4537199a4a8480b8c3ba37a2d44765ce76cd9b, but this does
not revert cleanly. Presumably CONFIG_MODVERSIONS=n would fix, but this
is a pretty core feature.

Unlike the issue Sedat reported, this is on a GNU toolchain, no clang
involved.

Here are the configs I am using (with make olddefconfig on upgrade to
5.19):

Broken - sparc - https://dpaste.com/5A8F2JD6U
Broken - alpha - https://dpaste.com/FYKK23L9X
Working - riscv - https://dpaste.com/HV6Y4V6NT
Working - ia64 - https://dpaste.com/HDLDNEAK4

Please let me know if there's anything I can do to help track down this
regression.


-------- Original Message --------
Subject: Re: [PATCH v6 00/10] kbuild: yet another series of cleanups
(modpost, LTO, MODULE_REL_CRCS, export.h)
Date: 2022-05-13 08:20
From: Masahiro Yamada <[email protected]>
To: Linux Kbuild mailing list <[email protected]>

On Fri, May 13, 2022 at 8:42 PM Masahiro Yamada <[email protected]>
wrote:
>
>
> This is the third batch of cleanups in this development cycle.
>


This series is available at
git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild.git
lto-cleanup-v6


>
> Changes in v6:
> - Fix false-positive warnings when CONFIG_TRIM_UNUSED_KSYMS=y
>
> Changes in v5:
> - Fix the build error when CONFIG_DEBUG_INFO_BTF=y (reported by
> Nathan)
> - Clean up arch/m68k/include/asm/export.h (Nick)
> - Keep gen_symversions (and will be removed by a later patch)
> - Add more comments in the script
>
> Changes in v4:
> - Rename .vmlinux-symver.c to .vmlinux.export.c
> because I notice this approach is useful for further cleanups,
> not only for modversioning but also for overall EXPORT_SYMBOL.
> - New patch
> - New.
> Resent of my previous submission.
>
> https://lore.kernel.org/all/[email protected]/
> - New
> Resent of my previous submission
>
> https://lore.kernel.org/linux-kbuild/[email protected]/
>
> Changes in v3:
> - New patch
>
> Changes in v2:
> - Simplify the implementation (parse .cmd files after ELF)
> - New patch
> - replace the chain of $(if ...) with $(and )
> - New patch
> - New patch
>
> Masahiro Yamada (10):
> modpost: extract symbol versions from *.cmd files
> kbuild: link symbol CRCs at final link, removing
> CONFIG_MODULE_REL_CRCS
> kbuild: stop merging *.symversions
> genksyms: adjust the output format to modpost
> kbuild: do not create *.prelink.o for Clang LTO or IBT
> kbuild: check static EXPORT_SYMBOL* by script instead of modpost
> kbuild: make built-in.a rule robust against too long argument error
> kbuild: make *.mod rule robust against too long argument error
> kbuild: add cmd_and_savecmd macro
> kbuild: rebuild multi-object modules when objtool is updated
>
> arch/m68k/include/asm/Kbuild | 1 +
> arch/m68k/include/asm/export.h | 2 -
> arch/powerpc/Kconfig | 1 -
> arch/s390/Kconfig | 1 -
> arch/um/Kconfig | 1 -
> include/asm-generic/export.h | 22 ++-
> include/linux/export-internal.h | 16 +++
> include/linux/export.h | 30 ++--
> init/Kconfig | 4 -
> kernel/module.c | 10 +-
> scripts/Kbuild.include | 10 +-
> scripts/Makefile.build | 134 ++++++------------
> scripts/Makefile.lib | 7 -
> scripts/Makefile.modfinal | 5 +-
> scripts/Makefile.modpost | 9 +-
> scripts/check-local-export | 64 +++++++++
> scripts/genksyms/genksyms.c | 18 +--
> scripts/link-vmlinux.sh | 33 ++---
> scripts/mod/modpost.c | 236 +++++++++++++++++++++-----------
> 19 files changed, 320 insertions(+), 284 deletions(-)
> delete mode 100644 arch/m68k/include/asm/export.h
> create mode 100644 include/linux/export-internal.h
> create mode 100755 scripts/check-local-export
>
> --
> 2.32.0
>

2022-08-06 07:28:33

by Sedat Dilek

[permalink] [raw]
Subject: Re: [PATCH v6 00/10] kbuild: yet another series of cleanups (modpost, LTO, MODULE_REL_CRCS, export.h)

On Sat, Aug 6, 2022 at 1:40 AM matoro
<[email protected]> wrote:
>
> Hi Masahiro, I'm sorry to raise this after release but this seems to be
> broken on SOME architectures. So far I have tested:
>
> Affected - sparc, alpha
> Unaffected - riscv, ia64
>

What do you mean by "release"?

Checking the kernel-version from your paste-URLs:

# Automatically generated file; DO NOT EDIT.
# Linux/sparc64 5.18.16-gentoo Kernel Configuration

# Automatically generated file; DO NOT EDIT.
# Linux/alpha 5.18.15-gentoo Kernel Configuration

# Automatically generated file; DO NOT EDIT.
# Linux/riscv 5.19.0-gentoo Kernel Configuration

# Automatically generated file; DO NOT EDIT.
# Linux/ia64 5.19.0-gentoo Kernel Configuration

Maybe you should try "Affected - sparc, alpha" with Linux v5.19.0
instead of 5.18.x :-)?

-Sedat-

> The affected systems are unable to load modules, similar to the
> previously reported issue. All module loading fails with "disagrees
> about version of symbol module_layout".
>
> Bisect blames 7b4537199a4a8480b8c3ba37a2d44765ce76cd9b, but this does
> not revert cleanly. Presumably CONFIG_MODVERSIONS=n would fix, but this
> is a pretty core feature.
>
> Unlike the issue Sedat reported, this is on a GNU toolchain, no clang
> involved.
>
> Here are the configs I am using (with make olddefconfig on upgrade to
> 5.19):
>
> Broken - sparc - https://dpaste.com/5A8F2JD6U
> Broken - alpha - https://dpaste.com/FYKK23L9X
> Working - riscv - https://dpaste.com/HV6Y4V6NT
> Working - ia64 - https://dpaste.com/HDLDNEAK4
>
> Please let me know if there's anything I can do to help track down this
> regression.
>
>
> -------- Original Message --------
> Subject: Re: [PATCH v6 00/10] kbuild: yet another series of cleanups
> (modpost, LTO, MODULE_REL_CRCS, export.h)
> Date: 2022-05-13 08:20
> From: Masahiro Yamada <[email protected]>
> To: Linux Kbuild mailing list <[email protected]>
>
> On Fri, May 13, 2022 at 8:42 PM Masahiro Yamada <[email protected]>
> wrote:
> >
> >
> > This is the third batch of cleanups in this development cycle.
> >
>
>
> This series is available at
> git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild.git
> lto-cleanup-v6
>
>
> >
> > Changes in v6:
> > - Fix false-positive warnings when CONFIG_TRIM_UNUSED_KSYMS=y
> >
> > Changes in v5:
> > - Fix the build error when CONFIG_DEBUG_INFO_BTF=y (reported by
> > Nathan)
> > - Clean up arch/m68k/include/asm/export.h (Nick)
> > - Keep gen_symversions (and will be removed by a later patch)
> > - Add more comments in the script
> >
> > Changes in v4:
> > - Rename .vmlinux-symver.c to .vmlinux.export.c
> > because I notice this approach is useful for further cleanups,
> > not only for modversioning but also for overall EXPORT_SYMBOL.
> > - New patch
> > - New.
> > Resent of my previous submission.
> >
> > https://lore.kernel.org/all/[email protected]/
> > - New
> > Resent of my previous submission
> >
> > https://lore.kernel.org/linux-kbuild/[email protected]/
> >
> > Changes in v3:
> > - New patch
> >
> > Changes in v2:
> > - Simplify the implementation (parse .cmd files after ELF)
> > - New patch
> > - replace the chain of $(if ...) with $(and )
> > - New patch
> > - New patch
> >
> > Masahiro Yamada (10):
> > modpost: extract symbol versions from *.cmd files
> > kbuild: link symbol CRCs at final link, removing
> > CONFIG_MODULE_REL_CRCS
> > kbuild: stop merging *.symversions
> > genksyms: adjust the output format to modpost
> > kbuild: do not create *.prelink.o for Clang LTO or IBT
> > kbuild: check static EXPORT_SYMBOL* by script instead of modpost
> > kbuild: make built-in.a rule robust against too long argument error
> > kbuild: make *.mod rule robust against too long argument error
> > kbuild: add cmd_and_savecmd macro
> > kbuild: rebuild multi-object modules when objtool is updated
> >
> > arch/m68k/include/asm/Kbuild | 1 +
> > arch/m68k/include/asm/export.h | 2 -
> > arch/powerpc/Kconfig | 1 -
> > arch/s390/Kconfig | 1 -
> > arch/um/Kconfig | 1 -
> > include/asm-generic/export.h | 22 ++-
> > include/linux/export-internal.h | 16 +++
> > include/linux/export.h | 30 ++--
> > init/Kconfig | 4 -
> > kernel/module.c | 10 +-
> > scripts/Kbuild.include | 10 +-
> > scripts/Makefile.build | 134 ++++++------------
> > scripts/Makefile.lib | 7 -
> > scripts/Makefile.modfinal | 5 +-
> > scripts/Makefile.modpost | 9 +-
> > scripts/check-local-export | 64 +++++++++
> > scripts/genksyms/genksyms.c | 18 +--
> > scripts/link-vmlinux.sh | 33 ++---
> > scripts/mod/modpost.c | 236 +++++++++++++++++++++-----------
> > 19 files changed, 320 insertions(+), 284 deletions(-)
> > delete mode 100644 arch/m68k/include/asm/export.h
> > create mode 100644 include/linux/export-internal.h
> > create mode 100755 scripts/check-local-export
> >
> > --
> > 2.32.0
> >
>

2022-08-06 13:43:24

by matoro

[permalink] [raw]
Subject: Re: [PATCH v6 00/10] kbuild: yet another series of cleanups (modpost, LTO, MODULE_REL_CRCS, export.h)

Hi Sedat - I pulled these configs from the running systems, but I used
"make olddefconfig" on these working 5.18 configs to generate the
corresponding 5.19 configs that failed to boot. I'll see if I can go
back in and repeat this process to regen the 5.19 configs (I deleted it
all after 5.19 failed to boot).

-------- Original Message --------
Subject: Re: [PATCH v6 00/10] kbuild: yet another series of cleanups
(modpost, LTO, MODULE_REL_CRCS, export.h)
Date: 2022-08-06 03:23
From: Sedat Dilek <[email protected]>
To: matoro <[email protected]>

On Sat, Aug 6, 2022 at 1:40 AM matoro
<[email protected]> wrote:
>
> Hi Masahiro, I'm sorry to raise this after release but this seems to be
> broken on SOME architectures. So far I have tested:
>
> Affected - sparc, alpha
> Unaffected - riscv, ia64
>

What do you mean by "release"?

Checking the kernel-version from your paste-URLs:

# Automatically generated file; DO NOT EDIT.
# Linux/sparc64 5.18.16-gentoo Kernel Configuration

# Automatically generated file; DO NOT EDIT.
# Linux/alpha 5.18.15-gentoo Kernel Configuration

# Automatically generated file; DO NOT EDIT.
# Linux/riscv 5.19.0-gentoo Kernel Configuration

# Automatically generated file; DO NOT EDIT.
# Linux/ia64 5.19.0-gentoo Kernel Configuration

Maybe you should try "Affected - sparc, alpha" with Linux v5.19.0
instead of 5.18.x :-)?

-Sedat-

> The affected systems are unable to load modules, similar to the
> previously reported issue. All module loading fails with "disagrees
> about version of symbol module_layout".
>
> Bisect blames 7b4537199a4a8480b8c3ba37a2d44765ce76cd9b, but this does
> not revert cleanly. Presumably CONFIG_MODVERSIONS=n would fix, but
> this
> is a pretty core feature.
>
> Unlike the issue Sedat reported, this is on a GNU toolchain, no clang
> involved.
>
> Here are the configs I am using (with make olddefconfig on upgrade to
> 5.19):
>
> Broken - sparc - https://dpaste.com/5A8F2JD6U
> Broken - alpha - https://dpaste.com/FYKK23L9X
> Working - riscv - https://dpaste.com/HV6Y4V6NT
> Working - ia64 - https://dpaste.com/HDLDNEAK4
>
> Please let me know if there's anything I can do to help track down this
> regression.
>
>
> -------- Original Message --------
> Subject: Re: [PATCH v6 00/10] kbuild: yet another series of cleanups
> (modpost, LTO, MODULE_REL_CRCS, export.h)
> Date: 2022-05-13 08:20
> From: Masahiro Yamada <[email protected]>
> To: Linux Kbuild mailing list <[email protected]>
>
> On Fri, May 13, 2022 at 8:42 PM Masahiro Yamada <[email protected]>
> wrote:
> >
> >
> > This is the third batch of cleanups in this development cycle.
> >
>
>
> This series is available at
> git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild.git
> lto-cleanup-v6
>
>
> >
> > Changes in v6:
> > - Fix false-positive warnings when CONFIG_TRIM_UNUSED_KSYMS=y
> >
> > Changes in v5:
> > - Fix the build error when CONFIG_DEBUG_INFO_BTF=y (reported by
> > Nathan)
> > - Clean up arch/m68k/include/asm/export.h (Nick)
> > - Keep gen_symversions (and will be removed by a later patch)
> > - Add more comments in the script
> >
> > Changes in v4:
> > - Rename .vmlinux-symver.c to .vmlinux.export.c
> > because I notice this approach is useful for further cleanups,
> > not only for modversioning but also for overall EXPORT_SYMBOL.
> > - New patch
> > - New.
> > Resent of my previous submission.
> >
> > https://lore.kernel.org/all/[email protected]/
> > - New
> > Resent of my previous submission
> >
> > https://lore.kernel.org/linux-kbuild/[email protected]/
> >
> > Changes in v3:
> > - New patch
> >
> > Changes in v2:
> > - Simplify the implementation (parse .cmd files after ELF)
> > - New patch
> > - replace the chain of $(if ...) with $(and )
> > - New patch
> > - New patch
> >
> > Masahiro Yamada (10):
> > modpost: extract symbol versions from *.cmd files
> > kbuild: link symbol CRCs at final link, removing
> > CONFIG_MODULE_REL_CRCS
> > kbuild: stop merging *.symversions
> > genksyms: adjust the output format to modpost
> > kbuild: do not create *.prelink.o for Clang LTO or IBT
> > kbuild: check static EXPORT_SYMBOL* by script instead of modpost
> > kbuild: make built-in.a rule robust against too long argument error
> > kbuild: make *.mod rule robust against too long argument error
> > kbuild: add cmd_and_savecmd macro
> > kbuild: rebuild multi-object modules when objtool is updated
> >
> > arch/m68k/include/asm/Kbuild | 1 +
> > arch/m68k/include/asm/export.h | 2 -
> > arch/powerpc/Kconfig | 1 -
> > arch/s390/Kconfig | 1 -
> > arch/um/Kconfig | 1 -
> > include/asm-generic/export.h | 22 ++-
> > include/linux/export-internal.h | 16 +++
> > include/linux/export.h | 30 ++--
> > init/Kconfig | 4 -
> > kernel/module.c | 10 +-
> > scripts/Kbuild.include | 10 +-
> > scripts/Makefile.build | 134 ++++++------------
> > scripts/Makefile.lib | 7 -
> > scripts/Makefile.modfinal | 5 +-
> > scripts/Makefile.modpost | 9 +-
> > scripts/check-local-export | 64 +++++++++
> > scripts/genksyms/genksyms.c | 18 +--
> > scripts/link-vmlinux.sh | 33 ++---
> > scripts/mod/modpost.c | 236 +++++++++++++++++++++-----------
> > 19 files changed, 320 insertions(+), 284 deletions(-)
> > delete mode 100644 arch/m68k/include/asm/export.h
> > create mode 100644 include/linux/export-internal.h
> > create mode 100755 scripts/check-local-export
> >
> > --
> > 2.32.0
> >
>

2022-08-08 06:12:48

by Masahiro Yamada

[permalink] [raw]
Subject: Re: [PATCH v6 00/10] kbuild: yet another series of cleanups (modpost, LTO, MODULE_REL_CRCS, export.h)

Hi Matoro,

Thanks for the report.


I have qemu-system-sparc installed on my Ubuntu machine,
so I think I will be able to test it on sparc, at least.

How did you test these 4 architectures (sparc, alpha, riscv, ia64)?
QEMU?

Thanks




On Sat, Aug 6, 2022 at 8:39 AM matoro
<[email protected]> wrote:
>
> Hi Masahiro, I'm sorry to raise this after release but this seems to be
> broken on SOME architectures. So far I have tested:
>
> Affected - sparc, alpha
> Unaffected - riscv, ia64
>
> The affected systems are unable to load modules, similar to the
> previously reported issue. All module loading fails with "disagrees
> about version of symbol module_layout".
>
> Bisect blames 7b4537199a4a8480b8c3ba37a2d44765ce76cd9b, but this does
> not revert cleanly. Presumably CONFIG_MODVERSIONS=n would fix, but this
> is a pretty core feature.
>
> Unlike the issue Sedat reported, this is on a GNU toolchain, no clang
> involved.
>
> Here are the configs I am using (with make olddefconfig on upgrade to
> 5.19):
>
> Broken - sparc - https://dpaste.com/5A8F2JD6U
> Broken - alpha - https://dpaste.com/FYKK23L9X
> Working - riscv - https://dpaste.com/HV6Y4V6NT
> Working - ia64 - https://dpaste.com/HDLDNEAK4
>
> Please let me know if there's anything I can do to help track down this
> regression.
>
>
> -------- Original Message --------
> Subject: Re: [PATCH v6 00/10] kbuild: yet another series of cleanups
> (modpost, LTO, MODULE_REL_CRCS, export.h)
> Date: 2022-05-13 08:20
> From: Masahiro Yamada <[email protected]>
> To: Linux Kbuild mailing list <[email protected]>
>
> On Fri, May 13, 2022 at 8:42 PM Masahiro Yamada <[email protected]>
> wrote:
> >
> >
> > This is the third batch of cleanups in this development cycle.
> >
>
>
> This series is available at
> git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild.git
> lto-cleanup-v6
>
>
> >
> > Changes in v6:
> > - Fix false-positive warnings when CONFIG_TRIM_UNUSED_KSYMS=y
> >
> > Changes in v5:
> > - Fix the build error when CONFIG_DEBUG_INFO_BTF=y (reported by
> > Nathan)
> > - Clean up arch/m68k/include/asm/export.h (Nick)
> > - Keep gen_symversions (and will be removed by a later patch)
> > - Add more comments in the script
> >
> > Changes in v4:
> > - Rename .vmlinux-symver.c to .vmlinux.export.c
> > because I notice this approach is useful for further cleanups,
> > not only for modversioning but also for overall EXPORT_SYMBOL.
> > - New patch
> > - New.
> > Resent of my previous submission.
> >
> > https://lore.kernel.org/all/[email protected]/
> > - New
> > Resent of my previous submission
> >
> > https://lore.kernel.org/linux-kbuild/[email protected]/
> >
> > Changes in v3:
> > - New patch
> >
> > Changes in v2:
> > - Simplify the implementation (parse .cmd files after ELF)
> > - New patch
> > - replace the chain of $(if ...) with $(and )
> > - New patch
> > - New patch
> >
> > Masahiro Yamada (10):
> > modpost: extract symbol versions from *.cmd files
> > kbuild: link symbol CRCs at final link, removing
> > CONFIG_MODULE_REL_CRCS
> > kbuild: stop merging *.symversions
> > genksyms: adjust the output format to modpost
> > kbuild: do not create *.prelink.o for Clang LTO or IBT
> > kbuild: check static EXPORT_SYMBOL* by script instead of modpost
> > kbuild: make built-in.a rule robust against too long argument error
> > kbuild: make *.mod rule robust against too long argument error
> > kbuild: add cmd_and_savecmd macro
> > kbuild: rebuild multi-object modules when objtool is updated
> >
> > arch/m68k/include/asm/Kbuild | 1 +
> > arch/m68k/include/asm/export.h | 2 -
> > arch/powerpc/Kconfig | 1 -
> > arch/s390/Kconfig | 1 -
> > arch/um/Kconfig | 1 -
> > include/asm-generic/export.h | 22 ++-
> > include/linux/export-internal.h | 16 +++
> > include/linux/export.h | 30 ++--
> > init/Kconfig | 4 -
> > kernel/module.c | 10 +-
> > scripts/Kbuild.include | 10 +-
> > scripts/Makefile.build | 134 ++++++------------
> > scripts/Makefile.lib | 7 -
> > scripts/Makefile.modfinal | 5 +-
> > scripts/Makefile.modpost | 9 +-
> > scripts/check-local-export | 64 +++++++++
> > scripts/genksyms/genksyms.c | 18 +--
> > scripts/link-vmlinux.sh | 33 ++---
> > scripts/mod/modpost.c | 236 +++++++++++++++++++++-----------
> > 19 files changed, 320 insertions(+), 284 deletions(-)
> > delete mode 100644 arch/m68k/include/asm/export.h
> > create mode 100644 include/linux/export-internal.h
> > create mode 100755 scripts/check-local-export
> >
> > --
> > 2.32.0
> >
>


--
Best Regards
Masahiro Yamada

2022-08-08 17:59:18

by Masahiro Yamada

[permalink] [raw]
Subject: Re: [PATCH v6 00/10] kbuild: yet another series of cleanups (modpost, LTO, MODULE_REL_CRCS, export.h)

On Mon, Aug 8, 2022 at 10:27 PM matoro
<[email protected]> wrote:
>
> I have real hardware for all these arches in my collection. I use it
> for testing the latest kernel and toolchains on as many of the
> less-popular arches as possible, exactly to find issues like this one :)
>
> Specifically we support all of these in Gentoo. To double-check this
> wasn't a config issue, I asked another user who also runs sparc to try
> building 5.19 with his config (not copying mine), and he observed the
> same problem. You can reach us in #gentoo-sparc on Libera.
>
> As for testing, I make all this hardware available on an as-needed
> basis. So if you can't or don't want to fiddle with qemu, just let me
> know (email or IRC, same username on Libera), and I will get you direct
> access to my hardware. Thanks!!


I found the root cause.

When I build the sparc kernel, I see a warning

WARNING: modpost: EXPORT symbol "_mcount" [vmlinux] version generation
failed, symbol will not be versioned.


Then, modpost missed to write out the entry.

With the following patch, you will be able to load the module.

I will send a patch with a proper commit log tomorrow. I need some sleep now.



diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 29474cee10b1..337bd36a890a 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -2206,13 +2206,11 @@ static void add_exported_symbols(struct buffer
*buf, struct module *mod)
/* record CRCs for exported symbols */
buf_printf(buf, "\n");
list_for_each_entry(sym, &mod->exported_symbols, list) {
- if (!sym->crc_valid) {
+ if (!sym->crc_valid)
warn("EXPORT symbol \"%s\" [%s%s] version
generation failed, symbol will not be versioned.\n"
"Is \"%s\" prototyped in
<asm/asm-prototypes.h>?\n",
sym->name, mod->name, mod->is_vmlinux ? "" : ".ko",
sym->name);
- continue;
- }

buf_printf(buf, "SYMBOL_CRC(%s, 0x%08x, \"%s\");\n",
sym->name, sym->crc, sym->is_gpl_only ? "_gpl" : "");















--
Best Regards
Masahiro Yamada

2022-08-09 15:36:41

by Masahiro Yamada

[permalink] [raw]
Subject: Re: [PATCH v6 00/10] kbuild: yet another series of cleanups (modpost, LTO, MODULE_REL_CRCS, export.h)

On Tue, Aug 9, 2022 at 3:42 AM matoro
<[email protected]> wrote:
>
> That patch doesn't apply to the v5.19 stable tag, so I just manually
> edited and it worked perfect! Thank you!!
>
> Sorry I didn't mention that warning - I did see it, but it still showed
> up even on the old kernel, so I thought it was irrelevant. Much
> appreciated!
>
> -------- Original Message --------
> Subject: Re: [PATCH v6 00/10] kbuild: yet another series of cleanups
> (modpost, LTO, MODULE_REL_CRCS, export.h)
> Date: 2022-08-08 13:36
> From: Masahiro Yamada <[email protected]>
> To: matoro <[email protected]>
>
> On Mon, Aug 8, 2022 at 10:27 PM matoro
> <[email protected]> wrote:
> >
> > I have real hardware for all these arches in my collection. I use it
> > for testing the latest kernel and toolchains on as many of the
> > less-popular arches as possible, exactly to find issues like this one
> > :)
> >
> > Specifically we support all of these in Gentoo. To double-check this
> > wasn't a config issue, I asked another user who also runs sparc to try
> > building 5.19 with his config (not copying mine), and he observed the
> > same problem. You can reach us in #gentoo-sparc on Libera.
> >
> > As for testing, I make all this hardware available on an as-needed
> > basis. So if you can't or don't want to fiddle with qemu, just let me
> > know (email or IRC, same username on Libera), and I will get you direct
> > access to my hardware. Thanks!!
>
>
> I found the root cause.
>
> When I build the sparc kernel, I see a warning
>
> WARNING: modpost: EXPORT symbol "_mcount" [vmlinux] version generation
> failed, symbol will not be versioned.
>
>
> Then, modpost missed to write out the entry.
>
> With the following patch, you will be able to load the module.
>
> I will send a patch with a proper commit log tomorrow. I need some sleep
> now.



I posted a patch:


https://patchwork.kernel.org/project/linux-kbuild/patch/[email protected]/


If you want me to record your full name in Reported/Tested-by,
please let me know.





--
Best Regards
Masahiro Yamada