mbox series

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

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

Message

Masahiro Yamada May 13, 2022, 11:39 a.m. UTC
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/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

Comments

Masahiro Yamada May 13, 2022, 12:20 p.m. UTC | #1
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
>
Masahiro Yamada May 22, 2022, 6:49 a.m. UTC | #2
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...
Sedat Dilek May 22, 2022, 9:45 a.m. UTC | #3
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-
Sedat Dilek May 22, 2022, 2:15 p.m. UTC | #4
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 -
Masahiro Yamada May 22, 2022, 4:09 p.m. UTC | #5
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 -
Sedat Dilek May 22, 2022, 4:18 p.m. UTC | #6
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
Sedat Dilek May 22, 2022, 10:34 p.m. UTC | #7
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
Sedat Dilek Aug. 6, 2022, 7:23 a.m. UTC | #8
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
> >
>
matoro Aug. 6, 2022, 1:12 p.m. UTC | #9
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
> >
>
Masahiro Yamada Aug. 8, 2022, 5:54 a.m. UTC | #10
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
> >
>
matoro Aug. 8, 2022, 1:26 p.m. UTC | #11
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
> >
>
Masahiro Yamada Aug. 8, 2022, 5:36 p.m. UTC | #12
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" : "");
matoro Aug. 8, 2022, 6:42 p.m. UTC | #13
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" : "");
Masahiro Yamada Aug. 9, 2022, 3:20 p.m. UTC | #14
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.