Message ID | 20220513113930.10488-1-masahiroy@kernel.org (mailing list archive) |
---|---|
Headers | show |
Series | kbuild: yet another series of cleanups (modpost, LTO, MODULE_REL_CRCS, export.h) | expand |
On Fri, May 13, 2022 at 8:42 PM Masahiro Yamada <masahiroy@kernel.org> 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/20210831074004.3195284-10-masahiroy@kernel.org/ > - New > Resent of my previous submission > https://lore.kernel.org/linux-kbuild/20210831074004.3195284-11-masahiroy@kernel.org/ > > 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 >
On Sun, May 22, 2022 at 10:45 AM Sedat Dilek <sedat.dilek@gmail.com> wrote: > > On Fri, May 13, 2022 at 4:31 PM Masahiro Yamada <masahiroy@kernel.org> wrote: > > > > On Fri, May 13, 2022 at 8:42 PM Masahiro Yamada <masahiroy@kernel.org> 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...
On Sun, May 22, 2022 at 8:50 AM Masahiro Yamada <masahiroy@kernel.org> wrote: > > On Sun, May 22, 2022 at 10:45 AM Sedat Dilek <sedat.dilek@gmail.com> wrote: > > > > On Fri, May 13, 2022 at 4:31 PM Masahiro Yamada <masahiroy@kernel.org> wrote: > > > > > > On Fri, May 13, 2022 at 8:42 PM Masahiro Yamada <masahiroy@kernel.org> 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-
On Sun, May 22, 2022 at 11:45 AM Sedat Dilek <sedat.dilek@gmail.com> wrote: > > On Sun, May 22, 2022 at 8:50 AM Masahiro Yamada <masahiroy@kernel.org> wrote: > > > > On Sun, May 22, 2022 at 10:45 AM Sedat Dilek <sedat.dilek@gmail.com> wrote: > > > > > > On Fri, May 13, 2022 at 4:31 PM Masahiro Yamada <masahiroy@kernel.org> wrote: > > > > > > > > On Fri, May 13, 2022 at 8:42 PM Masahiro Yamada <masahiroy@kernel.org> 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 -
On Sun, May 22, 2022 at 11:16 PM Sedat Dilek <sedat.dilek@gmail.com> wrote: > > On Sun, May 22, 2022 at 11:45 AM Sedat Dilek <sedat.dilek@gmail.com> wrote: > > > > On Sun, May 22, 2022 at 8:50 AM Masahiro Yamada <masahiroy@kernel.org> wrote: > > > > > > On Sun, May 22, 2022 at 10:45 AM Sedat Dilek <sedat.dilek@gmail.com> wrote: > > > > > > > > On Fri, May 13, 2022 at 4:31 PM Masahiro Yamada <masahiroy@kernel.org> wrote: > > > > > > > > > > On Fri, May 13, 2022 at 8:42 PM Masahiro Yamada <masahiroy@kernel.org> 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/20220522160117.599023-1-masahiroy@kernel.org/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 -
On Sun, May 22, 2022 at 6:10 PM Masahiro Yamada <masahiroy@kernel.org> wrote: > > On Sun, May 22, 2022 at 11:16 PM Sedat Dilek <sedat.dilek@gmail.com> wrote: > > > > On Sun, May 22, 2022 at 11:45 AM Sedat Dilek <sedat.dilek@gmail.com> wrote: > > > > > > On Sun, May 22, 2022 at 8:50 AM Masahiro Yamada <masahiroy@kernel.org> wrote: > > > > > > > > On Sun, May 22, 2022 at 10:45 AM Sedat Dilek <sedat.dilek@gmail.com> wrote: > > > > > > > > > > On Fri, May 13, 2022 at 4:31 PM Masahiro Yamada <masahiroy@kernel.org> wrote: > > > > > > > > > > > > On Fri, May 13, 2022 at 8:42 PM Masahiro Yamada <masahiroy@kernel.org> 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/20220522160117.599023-1-masahiroy@kernel.org/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
On Sun, May 22, 2022 at 6:18 PM Sedat Dilek <sedat.dilek@gmail.com> wrote: > > On Sun, May 22, 2022 at 6:10 PM Masahiro Yamada <masahiroy@kernel.org> wrote: > > > > On Sun, May 22, 2022 at 11:16 PM Sedat Dilek <sedat.dilek@gmail.com> wrote: > > > > > > On Sun, May 22, 2022 at 11:45 AM Sedat Dilek <sedat.dilek@gmail.com> wrote: > > > > > > > > On Sun, May 22, 2022 at 8:50 AM Masahiro Yamada <masahiroy@kernel.org> wrote: > > > > > > > > > > On Sun, May 22, 2022 at 10:45 AM Sedat Dilek <sedat.dilek@gmail.com> wrote: > > > > > > > > > > > > On Fri, May 13, 2022 at 4:31 PM Masahiro Yamada <masahiroy@kernel.org> wrote: > > > > > > > > > > > > > > On Fri, May 13, 2022 at 8:42 PM Masahiro Yamada <masahiroy@kernel.org> 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/20220522160117.599023-1-masahiroy@kernel.org/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 <sedat.dilek@gmail.com> Tested-by: Sedat Dilek <sedat.dilek@gmail.com> # 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
On Sat, Aug 6, 2022 at 1:40 AM matoro <matoro_mailinglist_kernel@matoro.tk> 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 <masahiroy@kernel.org> > To: Linux Kbuild mailing list <linux-kbuild@vger.kernel.org> > > On Fri, May 13, 2022 at 8:42 PM Masahiro Yamada <masahiroy@kernel.org> > 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/20210831074004.3195284-10-masahiroy@kernel.org/ > > - New > > Resent of my previous submission > > > > https://lore.kernel.org/linux-kbuild/20210831074004.3195284-11-masahiroy@kernel.org/ > > > > 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 > > >
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 <sedat.dilek@gmail.com> To: matoro <matoro_mailinglist_kernel@matoro.tk> On Sat, Aug 6, 2022 at 1:40 AM matoro <matoro_mailinglist_kernel@matoro.tk> 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 <masahiroy@kernel.org> > To: Linux Kbuild mailing list <linux-kbuild@vger.kernel.org> > > On Fri, May 13, 2022 at 8:42 PM Masahiro Yamada <masahiroy@kernel.org> > 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/20210831074004.3195284-10-masahiroy@kernel.org/ > > - New > > Resent of my previous submission > > > > https://lore.kernel.org/linux-kbuild/20210831074004.3195284-11-masahiroy@kernel.org/ > > > > 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 > > >
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 <matoro_mailinglist_kernel@matoro.tk> 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 <masahiroy@kernel.org> > To: Linux Kbuild mailing list <linux-kbuild@vger.kernel.org> > > On Fri, May 13, 2022 at 8:42 PM Masahiro Yamada <masahiroy@kernel.org> > 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/20210831074004.3195284-10-masahiroy@kernel.org/ > > - New > > Resent of my previous submission > > > > https://lore.kernel.org/linux-kbuild/20210831074004.3195284-11-masahiroy@kernel.org/ > > > > 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 > > >
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!! -------- 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 01:54 From: Masahiro Yamada <masahiroy@kernel.org> To: matoro <matoro_mailinglist_kernel@matoro.tk> 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 <matoro_mailinglist_kernel@matoro.tk> 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 <masahiroy@kernel.org> > To: Linux Kbuild mailing list <linux-kbuild@vger.kernel.org> > > On Fri, May 13, 2022 at 8:42 PM Masahiro Yamada <masahiroy@kernel.org> > 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/20210831074004.3195284-10-masahiroy@kernel.org/ > > - New > > Resent of my previous submission > > > > https://lore.kernel.org/linux-kbuild/20210831074004.3195284-11-masahiroy@kernel.org/ > > > > 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 > > >
On Mon, Aug 8, 2022 at 10:27 PM matoro <matoro_mailinglist_kernel@matoro.tk> 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" : "");
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 <masahiroy@kernel.org> To: matoro <matoro_mailinglist_kernel@matoro.tk> On Mon, Aug 8, 2022 at 10:27 PM matoro <matoro_mailinglist_kernel@matoro.tk> 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" : "");
On Tue, Aug 9, 2022 at 3:42 AM matoro <matoro_mailinglist_kernel@matoro.tk> 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 <masahiroy@kernel.org> > To: matoro <matoro_mailinglist_kernel@matoro.tk> > > On Mon, Aug 8, 2022 at 10:27 PM matoro > <matoro_mailinglist_kernel@matoro.tk> 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/20220809141117.641543-1-masahiroy@kernel.org/ If you want me to record your full name in Reported/Tested-by, please let me know.