From: Masahiro Yamada <masahiroy@kernel.org>
Keep the .modinfo section during linking, but strip it from the final
vmlinux.
Adjust scripts/mksysmap to exclude modinfo symbols from kallsyms.
This change will allow the next commit to extract the .modinfo section
from the vmlinux.unstripped intermediate.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
---
include/asm-generic/vmlinux.lds.h | 2 +-
scripts/Makefile.vmlinux | 2 +-
scripts/mksysmap | 3 +++
3 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index ae2d2359b79e9..cfa63860dfd4c 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -831,6 +831,7 @@ defined(CONFIG_AUTOFDO_CLANG) || defined(CONFIG_PROPELLER_CLANG)
/* Required sections not related to debugging. */
#define ELF_DETAILS \
+ .modinfo : { *(.modinfo) } \
.comment 0 : { *(.comment) } \
.symtab 0 : { *(.symtab) } \
.strtab 0 : { *(.strtab) } \
@@ -1044,7 +1045,6 @@ defined(CONFIG_AUTOFDO_CLANG) || defined(CONFIG_PROPELLER_CLANG)
*(.discard.*) \
*(.export_symbol) \
*(.no_trim_symbol) \
- *(.modinfo) \
/* ld.bfd warns about .gnu.version* even when not emitted */ \
*(.gnu.version*) \
diff --git a/scripts/Makefile.vmlinux b/scripts/Makefile.vmlinux
index 4f2d4c3fb7372..e2ceeb9e168d4 100644
--- a/scripts/Makefile.vmlinux
+++ b/scripts/Makefile.vmlinux
@@ -86,7 +86,7 @@ endif
# vmlinux
# ---------------------------------------------------------------------------
-remove-section-y :=
+remove-section-y := .modinfo
remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*'
quiet_cmd_strip_relocs = OBJCOPY $@
diff --git a/scripts/mksysmap b/scripts/mksysmap
index 3accbdb269ac7..a607a0059d119 100755
--- a/scripts/mksysmap
+++ b/scripts/mksysmap
@@ -79,6 +79,9 @@
/ _SDA_BASE_$/d
/ _SDA2_BASE_$/d
+# MODULE_INFO()
+/ __UNIQUE_ID_modinfo[0-9]*$/d
+
# ---------------------------------------------------------------------------
# Ignored patterns
# (symbols that contain the pattern are ignored)
--
2.50.1
On Mon, Aug 18, 2025 at 06:54:57PM +0200, Alexey Gladkov wrote: > From: Masahiro Yamada <masahiroy@kernel.org> > > Keep the .modinfo section during linking, but strip it from the final > vmlinux. > > Adjust scripts/mksysmap to exclude modinfo symbols from kallsyms. > > This change will allow the next commit to extract the .modinfo section > from the vmlinux.unstripped intermediate. > > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> > --- > include/asm-generic/vmlinux.lds.h | 2 +- > scripts/Makefile.vmlinux | 2 +- > scripts/mksysmap | 3 +++ > 3 files changed, 5 insertions(+), 2 deletions(-) > > diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h > index ae2d2359b79e9..cfa63860dfd4c 100644 > --- a/include/asm-generic/vmlinux.lds.h > +++ b/include/asm-generic/vmlinux.lds.h > @@ -831,6 +831,7 @@ defined(CONFIG_AUTOFDO_CLANG) || defined(CONFIG_PROPELLER_CLANG) > > /* Required sections not related to debugging. */ > #define ELF_DETAILS \ > + .modinfo : { *(.modinfo) } \ > .comment 0 : { *(.comment) } \ > .symtab 0 : { *(.symtab) } \ > .strtab 0 : { *(.strtab) } \ > @@ -1044,7 +1045,6 @@ defined(CONFIG_AUTOFDO_CLANG) || defined(CONFIG_PROPELLER_CLANG) > *(.discard.*) \ > *(.export_symbol) \ > *(.no_trim_symbol) \ > - *(.modinfo) \ > /* ld.bfd warns about .gnu.version* even when not emitted */ \ > *(.gnu.version*) \ > > diff --git a/scripts/Makefile.vmlinux b/scripts/Makefile.vmlinux > index 4f2d4c3fb7372..e2ceeb9e168d4 100644 > --- a/scripts/Makefile.vmlinux > +++ b/scripts/Makefile.vmlinux > @@ -86,7 +86,7 @@ endif > # vmlinux > # --------------------------------------------------------------------------- > > -remove-section-y := > +remove-section-y := .modinfo > remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' > > quiet_cmd_strip_relocs = OBJCOPY $@ > diff --git a/scripts/mksysmap b/scripts/mksysmap > index 3accbdb269ac7..a607a0059d119 100755 > --- a/scripts/mksysmap > +++ b/scripts/mksysmap > @@ -79,6 +79,9 @@ > / _SDA_BASE_$/d > / _SDA2_BASE_$/d > > +# MODULE_INFO() > +/ __UNIQUE_ID_modinfo[0-9]*$/d > + > # --------------------------------------------------------------------------- > # Ignored patterns > # (symbols that contain the pattern are ignored) > -- > 2.50.1 > Hi Alexey, with this patch applied, I still get a warning from objcpy as Masahiro and Stephen wrote [1,2] SORTTAB vmlinux.unstripped + sorttable vmlinux.unstripped + nm -S vmlinux.unstripped + ./scripts/sorttable -s .tmp_vmlinux.nm-sort vmlinux.unstripped + is_enabled CONFIG_KALLSYMS + grep -q ^CONFIG_KALLSYMS=y include/config/auto.conf + cmp -s System.map .tmp_vmlinux2.syms + echo vmlinux.unstripped: ../scripts/link-vmlinux.sh # OBJCOPY vmlinux objcopy --remove-section=.modinfo vmlinux.unstripped vmlinux objcopy: vmlinux.unstripped: warning: empty loadable segment detected at vaddr=0xffff8000807a0000, is this intentional? (arm64, allnoconfig) Kind regards, Nicolas [1]: https://lore.kernel.org/linux-kbuild/CAK7LNAR-gD2H6Kk-rZjo0R3weTHCGTm0a=u2tRH1WWW6Sx6=RQ@mail.gmail.com/ [2]: https://lore.kernel.org/lkml/20250730164047.7c4a731a@canb.auug.org.au/
On Mon, Sep 15, 2025 at 07:56:16AM +0200, Nicolas Schier wrote: > On Mon, Aug 18, 2025 at 06:54:57PM +0200, Alexey Gladkov wrote: > > From: Masahiro Yamada <masahiroy@kernel.org> > > > > Keep the .modinfo section during linking, but strip it from the final > > vmlinux. > > > > Adjust scripts/mksysmap to exclude modinfo symbols from kallsyms. > > > > This change will allow the next commit to extract the .modinfo section > > from the vmlinux.unstripped intermediate. > > > > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> > > --- > > include/asm-generic/vmlinux.lds.h | 2 +- > > scripts/Makefile.vmlinux | 2 +- > > scripts/mksysmap | 3 +++ > > 3 files changed, 5 insertions(+), 2 deletions(-) > > > > diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h > > index ae2d2359b79e9..cfa63860dfd4c 100644 > > --- a/include/asm-generic/vmlinux.lds.h > > +++ b/include/asm-generic/vmlinux.lds.h > > @@ -831,6 +831,7 @@ defined(CONFIG_AUTOFDO_CLANG) || defined(CONFIG_PROPELLER_CLANG) > > > > /* Required sections not related to debugging. */ > > #define ELF_DETAILS \ > > + .modinfo : { *(.modinfo) } \ > > .comment 0 : { *(.comment) } \ > > .symtab 0 : { *(.symtab) } \ > > .strtab 0 : { *(.strtab) } \ > > @@ -1044,7 +1045,6 @@ defined(CONFIG_AUTOFDO_CLANG) || defined(CONFIG_PROPELLER_CLANG) > > *(.discard.*) \ > > *(.export_symbol) \ > > *(.no_trim_symbol) \ > > - *(.modinfo) \ > > /* ld.bfd warns about .gnu.version* even when not emitted */ \ > > *(.gnu.version*) \ > > > > diff --git a/scripts/Makefile.vmlinux b/scripts/Makefile.vmlinux > > index 4f2d4c3fb7372..e2ceeb9e168d4 100644 > > --- a/scripts/Makefile.vmlinux > > +++ b/scripts/Makefile.vmlinux > > @@ -86,7 +86,7 @@ endif > > # vmlinux > > # --------------------------------------------------------------------------- > > > > -remove-section-y := > > +remove-section-y := .modinfo > > remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' > > > > quiet_cmd_strip_relocs = OBJCOPY $@ > > diff --git a/scripts/mksysmap b/scripts/mksysmap > > index 3accbdb269ac7..a607a0059d119 100755 > > --- a/scripts/mksysmap > > +++ b/scripts/mksysmap > > @@ -79,6 +79,9 @@ > > / _SDA_BASE_$/d > > / _SDA2_BASE_$/d > > > > +# MODULE_INFO() > > +/ __UNIQUE_ID_modinfo[0-9]*$/d > > + > > # --------------------------------------------------------------------------- > > # Ignored patterns > > # (symbols that contain the pattern are ignored) > > -- > > 2.50.1 > > > > Hi Alexey, > > with this patch applied, I still get a warning from objcpy as Masahiro > and Stephen wrote [1,2] > > SORTTAB vmlinux.unstripped > + sorttable vmlinux.unstripped > + nm -S vmlinux.unstripped > + ./scripts/sorttable -s .tmp_vmlinux.nm-sort vmlinux.unstripped > + is_enabled CONFIG_KALLSYMS > + grep -q ^CONFIG_KALLSYMS=y include/config/auto.conf > + cmp -s System.map .tmp_vmlinux2.syms > + echo vmlinux.unstripped: ../scripts/link-vmlinux.sh > # OBJCOPY vmlinux > objcopy --remove-section=.modinfo vmlinux.unstripped vmlinux > objcopy: vmlinux.unstripped: warning: empty loadable segment detected at vaddr=0xffff8000807a0000, is this intentional? > > (arm64, allnoconfig) > > Kind regards, > Nicolas > > > [1]: https://lore.kernel.org/linux-kbuild/CAK7LNAR-gD2H6Kk-rZjo0R3weTHCGTm0a=u2tRH1WWW6Sx6=RQ@mail.gmail.com/ > [2]: https://lore.kernel.org/lkml/20250730164047.7c4a731a@canb.auug.org.au/ > Hm. I missed that. I need to investigate how to fix this. Nothing comes to mind right now. -- Rgrds, legion
On Tue, Sep 16, 2025 at 09:12:22AM +0200, Alexey Gladkov wrote: > On Mon, Sep 15, 2025 at 07:56:16AM +0200, Nicolas Schier wrote: > > On Mon, Aug 18, 2025 at 06:54:57PM +0200, Alexey Gladkov wrote: > > > From: Masahiro Yamada <masahiroy@kernel.org> > > > > > > Keep the .modinfo section during linking, but strip it from the final > > > vmlinux. > > > > > > Adjust scripts/mksysmap to exclude modinfo symbols from kallsyms. > > > > > > This change will allow the next commit to extract the .modinfo section > > > from the vmlinux.unstripped intermediate. > > > > > > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> > > > --- > > > include/asm-generic/vmlinux.lds.h | 2 +- > > > scripts/Makefile.vmlinux | 2 +- > > > scripts/mksysmap | 3 +++ > > > 3 files changed, 5 insertions(+), 2 deletions(-) > > > > > > diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h > > > index ae2d2359b79e9..cfa63860dfd4c 100644 > > > --- a/include/asm-generic/vmlinux.lds.h > > > +++ b/include/asm-generic/vmlinux.lds.h > > > @@ -831,6 +831,7 @@ defined(CONFIG_AUTOFDO_CLANG) || defined(CONFIG_PROPELLER_CLANG) > > > > > > /* Required sections not related to debugging. */ > > > #define ELF_DETAILS \ > > > + .modinfo : { *(.modinfo) } \ > > > .comment 0 : { *(.comment) } \ > > > .symtab 0 : { *(.symtab) } \ > > > .strtab 0 : { *(.strtab) } \ > > > @@ -1044,7 +1045,6 @@ defined(CONFIG_AUTOFDO_CLANG) || defined(CONFIG_PROPELLER_CLANG) > > > *(.discard.*) \ > > > *(.export_symbol) \ > > > *(.no_trim_symbol) \ > > > - *(.modinfo) \ > > > /* ld.bfd warns about .gnu.version* even when not emitted */ \ > > > *(.gnu.version*) \ > > > > > > diff --git a/scripts/Makefile.vmlinux b/scripts/Makefile.vmlinux > > > index 4f2d4c3fb7372..e2ceeb9e168d4 100644 > > > --- a/scripts/Makefile.vmlinux > > > +++ b/scripts/Makefile.vmlinux > > > @@ -86,7 +86,7 @@ endif > > > # vmlinux > > > # --------------------------------------------------------------------------- > > > > > > -remove-section-y := > > > +remove-section-y := .modinfo > > > remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' > > > > > > quiet_cmd_strip_relocs = OBJCOPY $@ > > > diff --git a/scripts/mksysmap b/scripts/mksysmap > > > index 3accbdb269ac7..a607a0059d119 100755 > > > --- a/scripts/mksysmap > > > +++ b/scripts/mksysmap > > > @@ -79,6 +79,9 @@ > > > / _SDA_BASE_$/d > > > / _SDA2_BASE_$/d > > > > > > +# MODULE_INFO() > > > +/ __UNIQUE_ID_modinfo[0-9]*$/d > > > + > > > # --------------------------------------------------------------------------- > > > # Ignored patterns > > > # (symbols that contain the pattern are ignored) > > > -- > > > 2.50.1 > > > > > > > Hi Alexey, > > > > with this patch applied, I still get a warning from objcpy as Masahiro > > and Stephen wrote [1,2] > > > > SORTTAB vmlinux.unstripped > > + sorttable vmlinux.unstripped > > + nm -S vmlinux.unstripped > > + ./scripts/sorttable -s .tmp_vmlinux.nm-sort vmlinux.unstripped > > + is_enabled CONFIG_KALLSYMS > > + grep -q ^CONFIG_KALLSYMS=y include/config/auto.conf > > + cmp -s System.map .tmp_vmlinux2.syms > > + echo vmlinux.unstripped: ../scripts/link-vmlinux.sh > > # OBJCOPY vmlinux > > objcopy --remove-section=.modinfo vmlinux.unstripped vmlinux > > objcopy: vmlinux.unstripped: warning: empty loadable segment detected at vaddr=0xffff8000807a0000, is this intentional? > > > > (arm64, allnoconfig) > > > > Kind regards, > > Nicolas > > > > > > [1]: https://lore.kernel.org/linux-kbuild/CAK7LNAR-gD2H6Kk-rZjo0R3weTHCGTm0a=u2tRH1WWW6Sx6=RQ@mail.gmail.com/ > > [2]: https://lore.kernel.org/lkml/20250730164047.7c4a731a@canb.auug.org.au/ > > > > Hm. I missed that. I need to investigate how to fix this. Nothing comes > to mind right now. Same here. Only thing I could find until now is https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/diff/scripts/link-vmlinux.sh?id=90ceddcb495008ac8ba7a3dce297841efcd7d584 where '2>/dev/null' is appended exactly to prevent this very warning. But for me, it doesn't feel good doing that when stripping to vmlinux. -- Nicolas
On Tue, Sep 16, 2025 at 11:36:54AM +0200, Nicolas Schier wrote: > On Tue, Sep 16, 2025 at 09:12:22AM +0200, Alexey Gladkov wrote: > > On Mon, Sep 15, 2025 at 07:56:16AM +0200, Nicolas Schier wrote: > > > On Mon, Aug 18, 2025 at 06:54:57PM +0200, Alexey Gladkov wrote: > > > > From: Masahiro Yamada <masahiroy@kernel.org> > > > > > > > > Keep the .modinfo section during linking, but strip it from the final > > > > vmlinux. > > > > > > > > Adjust scripts/mksysmap to exclude modinfo symbols from kallsyms. > > > > > > > > This change will allow the next commit to extract the .modinfo section > > > > from the vmlinux.unstripped intermediate. > > > > > > > > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> > > > > --- > > > > include/asm-generic/vmlinux.lds.h | 2 +- > > > > scripts/Makefile.vmlinux | 2 +- > > > > scripts/mksysmap | 3 +++ > > > > 3 files changed, 5 insertions(+), 2 deletions(-) > > > > > > > > diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h > > > > index ae2d2359b79e9..cfa63860dfd4c 100644 > > > > --- a/include/asm-generic/vmlinux.lds.h > > > > +++ b/include/asm-generic/vmlinux.lds.h > > > > @@ -831,6 +831,7 @@ defined(CONFIG_AUTOFDO_CLANG) || defined(CONFIG_PROPELLER_CLANG) > > > > > > > > /* Required sections not related to debugging. */ > > > > #define ELF_DETAILS \ > > > > + .modinfo : { *(.modinfo) } \ > > > > .comment 0 : { *(.comment) } \ > > > > .symtab 0 : { *(.symtab) } \ > > > > .strtab 0 : { *(.strtab) } \ > > > > @@ -1044,7 +1045,6 @@ defined(CONFIG_AUTOFDO_CLANG) || defined(CONFIG_PROPELLER_CLANG) > > > > *(.discard.*) \ > > > > *(.export_symbol) \ > > > > *(.no_trim_symbol) \ > > > > - *(.modinfo) \ > > > > /* ld.bfd warns about .gnu.version* even when not emitted */ \ > > > > *(.gnu.version*) \ > > > > > > > > diff --git a/scripts/Makefile.vmlinux b/scripts/Makefile.vmlinux > > > > index 4f2d4c3fb7372..e2ceeb9e168d4 100644 > > > > --- a/scripts/Makefile.vmlinux > > > > +++ b/scripts/Makefile.vmlinux > > > > @@ -86,7 +86,7 @@ endif > > > > # vmlinux > > > > # --------------------------------------------------------------------------- > > > > > > > > -remove-section-y := > > > > +remove-section-y := .modinfo > > > > remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' > > > > > > > > quiet_cmd_strip_relocs = OBJCOPY $@ > > > > diff --git a/scripts/mksysmap b/scripts/mksysmap > > > > index 3accbdb269ac7..a607a0059d119 100755 > > > > --- a/scripts/mksysmap > > > > +++ b/scripts/mksysmap > > > > @@ -79,6 +79,9 @@ > > > > / _SDA_BASE_$/d > > > > / _SDA2_BASE_$/d > > > > > > > > +# MODULE_INFO() > > > > +/ __UNIQUE_ID_modinfo[0-9]*$/d > > > > + > > > > # --------------------------------------------------------------------------- > > > > # Ignored patterns > > > > # (symbols that contain the pattern are ignored) > > > > -- > > > > 2.50.1 > > > > > > > > > > Hi Alexey, > > > > > > with this patch applied, I still get a warning from objcpy as Masahiro > > > and Stephen wrote [1,2] > > > > > > SORTTAB vmlinux.unstripped > > > + sorttable vmlinux.unstripped > > > + nm -S vmlinux.unstripped > > > + ./scripts/sorttable -s .tmp_vmlinux.nm-sort vmlinux.unstripped > > > + is_enabled CONFIG_KALLSYMS > > > + grep -q ^CONFIG_KALLSYMS=y include/config/auto.conf > > > + cmp -s System.map .tmp_vmlinux2.syms > > > + echo vmlinux.unstripped: ../scripts/link-vmlinux.sh > > > # OBJCOPY vmlinux > > > objcopy --remove-section=.modinfo vmlinux.unstripped vmlinux > > > objcopy: vmlinux.unstripped: warning: empty loadable segment detected at vaddr=0xffff8000807a0000, is this intentional? > > > > > > (arm64, allnoconfig) > > > > > > Kind regards, > > > Nicolas > > > > > > > > > [1]: https://lore.kernel.org/linux-kbuild/CAK7LNAR-gD2H6Kk-rZjo0R3weTHCGTm0a=u2tRH1WWW6Sx6=RQ@mail.gmail.com/ > > > [2]: https://lore.kernel.org/lkml/20250730164047.7c4a731a@canb.auug.org.au/ > > > > > > > Hm. I missed that. I need to investigate how to fix this. Nothing comes > > to mind right now. > > Same here. Only thing I could find until now is > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/diff/scripts/link-vmlinux.sh?id=90ceddcb495008ac8ba7a3dce297841efcd7d584 > > where '2>/dev/null' is appended exactly to prevent this very warning. > But for me, it doesn't feel good doing that when stripping to vmlinux. Yes, that's not a very good approach. It will hide other errors that will definitely need to be seen. I think the commit you mentioned is actually incorrect. I think there should be a different solution. I think in the case of .modinfo, we can change the flag in the section since we are going to delete it anyway. diff --git a/scripts/Makefile.vmlinux b/scripts/Makefile.vmlinux index dbbe3bf0cf23..9a118b31d0dc 100644 --- a/scripts/Makefile.vmlinux +++ b/scripts/Makefile.vmlinux @@ -87,7 +87,8 @@ remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' remove-symbols := -w --strip-symbol='__mod_device_table__*' quiet_cmd_strip_relocs = OBJCOPY $@ - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ + cmd_strip_relocs = $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< && \ + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ $(remove-symbols) $< $@ targets += vmlinux -- Rgrds, legion
On Tue, Sep 16, 2025 at 01:30:20PM +0200, Alexey Gladkov wrote: > On Tue, Sep 16, 2025 at 11:36:54AM +0200, Nicolas Schier wrote: > > On Tue, Sep 16, 2025 at 09:12:22AM +0200, Alexey Gladkov wrote: > > > On Mon, Sep 15, 2025 at 07:56:16AM +0200, Nicolas Schier wrote: > > > > On Mon, Aug 18, 2025 at 06:54:57PM +0200, Alexey Gladkov wrote: > > > > > From: Masahiro Yamada <masahiroy@kernel.org> > > > > > > > > > > Keep the .modinfo section during linking, but strip it from the final > > > > > vmlinux. > > > > > > > > > > Adjust scripts/mksysmap to exclude modinfo symbols from kallsyms. > > > > > > > > > > This change will allow the next commit to extract the .modinfo section > > > > > from the vmlinux.unstripped intermediate. > > > > > > > > > > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> > > > > > --- > > > > > include/asm-generic/vmlinux.lds.h | 2 +- > > > > > scripts/Makefile.vmlinux | 2 +- > > > > > scripts/mksysmap | 3 +++ > > > > > 3 files changed, 5 insertions(+), 2 deletions(-) > > > > > > > > > > diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h > > > > > index ae2d2359b79e9..cfa63860dfd4c 100644 > > > > > --- a/include/asm-generic/vmlinux.lds.h > > > > > +++ b/include/asm-generic/vmlinux.lds.h > > > > > @@ -831,6 +831,7 @@ defined(CONFIG_AUTOFDO_CLANG) || defined(CONFIG_PROPELLER_CLANG) > > > > > > > > > > /* Required sections not related to debugging. */ > > > > > #define ELF_DETAILS \ > > > > > + .modinfo : { *(.modinfo) } \ > > > > > .comment 0 : { *(.comment) } \ > > > > > .symtab 0 : { *(.symtab) } \ > > > > > .strtab 0 : { *(.strtab) } \ > > > > > @@ -1044,7 +1045,6 @@ defined(CONFIG_AUTOFDO_CLANG) || defined(CONFIG_PROPELLER_CLANG) > > > > > *(.discard.*) \ > > > > > *(.export_symbol) \ > > > > > *(.no_trim_symbol) \ > > > > > - *(.modinfo) \ > > > > > /* ld.bfd warns about .gnu.version* even when not emitted */ \ > > > > > *(.gnu.version*) \ > > > > > > > > > > diff --git a/scripts/Makefile.vmlinux b/scripts/Makefile.vmlinux > > > > > index 4f2d4c3fb7372..e2ceeb9e168d4 100644 > > > > > --- a/scripts/Makefile.vmlinux > > > > > +++ b/scripts/Makefile.vmlinux > > > > > @@ -86,7 +86,7 @@ endif > > > > > # vmlinux > > > > > # --------------------------------------------------------------------------- > > > > > > > > > > -remove-section-y := > > > > > +remove-section-y := .modinfo > > > > > remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' > > > > > > > > > > quiet_cmd_strip_relocs = OBJCOPY $@ > > > > > diff --git a/scripts/mksysmap b/scripts/mksysmap > > > > > index 3accbdb269ac7..a607a0059d119 100755 > > > > > --- a/scripts/mksysmap > > > > > +++ b/scripts/mksysmap > > > > > @@ -79,6 +79,9 @@ > > > > > / _SDA_BASE_$/d > > > > > / _SDA2_BASE_$/d > > > > > > > > > > +# MODULE_INFO() > > > > > +/ __UNIQUE_ID_modinfo[0-9]*$/d > > > > > + > > > > > # --------------------------------------------------------------------------- > > > > > # Ignored patterns > > > > > # (symbols that contain the pattern are ignored) > > > > > -- > > > > > 2.50.1 > > > > > > > > > > > > > Hi Alexey, > > > > > > > > with this patch applied, I still get a warning from objcpy as Masahiro > > > > and Stephen wrote [1,2] > > > > > > > > SORTTAB vmlinux.unstripped > > > > + sorttable vmlinux.unstripped > > > > + nm -S vmlinux.unstripped > > > > + ./scripts/sorttable -s .tmp_vmlinux.nm-sort vmlinux.unstripped > > > > + is_enabled CONFIG_KALLSYMS > > > > + grep -q ^CONFIG_KALLSYMS=y include/config/auto.conf > > > > + cmp -s System.map .tmp_vmlinux2.syms > > > > + echo vmlinux.unstripped: ../scripts/link-vmlinux.sh > > > > # OBJCOPY vmlinux > > > > objcopy --remove-section=.modinfo vmlinux.unstripped vmlinux > > > > objcopy: vmlinux.unstripped: warning: empty loadable segment detected at vaddr=0xffff8000807a0000, is this intentional? > > > > > > > > (arm64, allnoconfig) > > > > > > > > Kind regards, > > > > Nicolas > > > > > > > > > > > > [1]: https://lore.kernel.org/linux-kbuild/CAK7LNAR-gD2H6Kk-rZjo0R3weTHCGTm0a=u2tRH1WWW6Sx6=RQ@mail.gmail.com/ > > > > [2]: https://lore.kernel.org/lkml/20250730164047.7c4a731a@canb.auug.org.au/ > > > > > > > > > > Hm. I missed that. I need to investigate how to fix this. Nothing comes > > > to mind right now. > > > > Same here. Only thing I could find until now is > > > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/diff/scripts/link-vmlinux.sh?id=90ceddcb495008ac8ba7a3dce297841efcd7d584 > > > > where '2>/dev/null' is appended exactly to prevent this very warning. > > But for me, it doesn't feel good doing that when stripping to vmlinux. > > Yes, that's not a very good approach. It will hide other errors that will > definitely need to be seen. I think the commit you mentioned is actually > incorrect. I think there should be a different solution. > > I think in the case of .modinfo, we can change the flag in the section > since we are going to delete it anyway. > > diff --git a/scripts/Makefile.vmlinux b/scripts/Makefile.vmlinux > index dbbe3bf0cf23..9a118b31d0dc 100644 > --- a/scripts/Makefile.vmlinux > +++ b/scripts/Makefile.vmlinux > @@ -87,7 +87,8 @@ remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' > remove-symbols := -w --strip-symbol='__mod_device_table__*' > > quiet_cmd_strip_relocs = OBJCOPY $@ > - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ > + cmd_strip_relocs = $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< && \ > + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ > $(remove-symbols) $< $@ > > targets += vmlinux Ah, great! I thought we had to fiddle around with linker scripts et al. I needed to use an intermediate file: diff --git a/scripts/Makefile.vmlinux b/scripts/Makefile.vmlinux index e2ceeb9e168d..516d51ca634b 100644 --- a/scripts/Makefile.vmlinux +++ b/scripts/Makefile.vmlinux @@ -90,6 +90,9 @@ remove-section-y := .modinfo remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' quiet_cmd_strip_relocs = OBJCOPY $@ - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) $< $@ + cmd_strip_relocs = set -e; \ + trap 'rm $<.noload' EXIT HUP INT; \ + $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< $<.noload && \ + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) $<.noload $@ targets += vmlinux Kind regards, Nicolas
On Tue, Sep 16, 2025 at 02:42:48PM +0200, Nicolas Schier wrote: > On Tue, Sep 16, 2025 at 01:30:20PM +0200, Alexey Gladkov wrote: ... > > I think in the case of .modinfo, we can change the flag in the section > > since we are going to delete it anyway. > > > > diff --git a/scripts/Makefile.vmlinux b/scripts/Makefile.vmlinux > > index dbbe3bf0cf23..9a118b31d0dc 100644 > > --- a/scripts/Makefile.vmlinux > > +++ b/scripts/Makefile.vmlinux > > @@ -87,7 +87,8 @@ remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' > > remove-symbols := -w --strip-symbol='__mod_device_table__*' > > > > quiet_cmd_strip_relocs = OBJCOPY $@ > > - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ > > + cmd_strip_relocs = $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< && \ > > + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ > > $(remove-symbols) $< $@ > > > > targets += vmlinux > > Ah, great! I thought we had to fiddle around with linker scripts et al. > I needed to use an intermediate file: > > diff --git a/scripts/Makefile.vmlinux b/scripts/Makefile.vmlinux > index e2ceeb9e168d..516d51ca634b 100644 > --- a/scripts/Makefile.vmlinux > +++ b/scripts/Makefile.vmlinux > @@ -90,6 +90,9 @@ remove-section-y := .modinfo > remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' > > quiet_cmd_strip_relocs = OBJCOPY $@ > - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) $< $@ > + cmd_strip_relocs = set -e; \ > + trap 'rm $<.noload' EXIT HUP INT; \ > + $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< $<.noload && \ > + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) $<.noload $@ > > targets += vmlinux I'd like to suggest another version closer to yours, as mine has several flaws: diff --git a/scripts/Makefile.vmlinux b/scripts/Makefile.vmlinux index dbbe3bf0cf23..9a118b31d0dc 100644 --- a/scripts/Makefile.vmlinux +++ b/scripts/Makefile.vmlinux @@ -87,7 +87,8 @@ remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' remove-symbols := -w --strip-symbol='__mod_device_table__*' quiet_cmd_strip_relocs = OBJCOPY $@ - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ + cmd_strip_relocs = $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< $@; \ + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ $(remove-symbols) $@ targets += vmlinux Rationale (mainly for myself to not walk into that trap too often again): * Use ';' instead of '&&' as 'cmd_' is evaluated in a 'set -e' environment ('cmd') and thus '&&' may hide a possible error exit code. * Create 'vmlinux' already with the first objcopy and let the second one modify it in order to not need a temporary file; iff one or the other objcopy exists with an error exit code, the 'set -e + trap' ('delete-on-interrupt') shell will remove a possibly existing vmlinux file. Kind regards, Nicolas
On Wed, Sep 17, 2025 at 01:55:36PM +0200, Nicolas Schier wrote: > On Tue, Sep 16, 2025 at 02:42:48PM +0200, Nicolas Schier wrote: > > On Tue, Sep 16, 2025 at 01:30:20PM +0200, Alexey Gladkov wrote: > ... > > > I think in the case of .modinfo, we can change the flag in the section > > > since we are going to delete it anyway. > > > > > > diff --git a/scripts/Makefile.vmlinux b/scripts/Makefile.vmlinux > > > index dbbe3bf0cf23..9a118b31d0dc 100644 > > > --- a/scripts/Makefile.vmlinux > > > +++ b/scripts/Makefile.vmlinux > > > @@ -87,7 +87,8 @@ remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' > > > remove-symbols := -w --strip-symbol='__mod_device_table__*' > > > > > > quiet_cmd_strip_relocs = OBJCOPY $@ > > > - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ > > > + cmd_strip_relocs = $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< && \ > > > + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ > > > $(remove-symbols) $< $@ > > > > > > targets += vmlinux > > > > Ah, great! I thought we had to fiddle around with linker scripts et al. > > I needed to use an intermediate file: > > > > diff --git a/scripts/Makefile.vmlinux b/scripts/Makefile.vmlinux > > index e2ceeb9e168d..516d51ca634b 100644 > > --- a/scripts/Makefile.vmlinux > > +++ b/scripts/Makefile.vmlinux > > @@ -90,6 +90,9 @@ remove-section-y := .modinfo > > remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' > > > > quiet_cmd_strip_relocs = OBJCOPY $@ > > - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) $< $@ > > + cmd_strip_relocs = set -e; \ > > + trap 'rm $<.noload' EXIT HUP INT; \ > > + $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< $<.noload && \ > > + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) $<.noload $@ > > > > targets += vmlinux > > I'd like to suggest another version closer to yours, as mine has several flaws: > > diff --git a/scripts/Makefile.vmlinux b/scripts/Makefile.vmlinux > index dbbe3bf0cf23..9a118b31d0dc 100644 > --- a/scripts/Makefile.vmlinux > +++ b/scripts/Makefile.vmlinux > @@ -87,7 +87,8 @@ remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' > remove-symbols := -w --strip-symbol='__mod_device_table__*' > > quiet_cmd_strip_relocs = OBJCOPY $@ > - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ > + cmd_strip_relocs = $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< $@; \ > + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ > $(remove-symbols) $@ > > targets += vmlinux > > > > Rationale (mainly for myself to not walk into that trap too often again): > > * Use ';' instead of '&&' as 'cmd_' is evaluated in a 'set -e' > environment ('cmd') and thus '&&' may hide a possible error exit > code. No, it can't hide exit code. The exit code will be correct even if ‘set -e’ is not used. $ (exit 0) && (exit 2) && (exit 3); echo $? 2 Actually ‘&&’ is protection against the absence of ‘set -e’. > * Create 'vmlinux' already with the first objcopy and let the second > one modify it in order to not need a temporary file; iff one or the > other objcopy exists with an error exit code, the 'set -e + trap' > ('delete-on-interrupt') shell will remove a possibly existing > vmlinux file. That makes totally sense. This will avoid a temporary file. I will use it in the new version. -- Rgrds, legion
On Wed, Sep 17, 2025 at 02:38:06PM +0200, Alexey Gladkov wrote: > On Wed, Sep 17, 2025 at 01:55:36PM +0200, Nicolas Schier wrote: > > On Tue, Sep 16, 2025 at 02:42:48PM +0200, Nicolas Schier wrote: > > > On Tue, Sep 16, 2025 at 01:30:20PM +0200, Alexey Gladkov wrote: > > ... > > > > I think in the case of .modinfo, we can change the flag in the section > > > > since we are going to delete it anyway. > > > > > > > > diff --git a/scripts/Makefile.vmlinux b/scripts/Makefile.vmlinux > > > > index dbbe3bf0cf23..9a118b31d0dc 100644 > > > > --- a/scripts/Makefile.vmlinux > > > > +++ b/scripts/Makefile.vmlinux > > > > @@ -87,7 +87,8 @@ remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' > > > > remove-symbols := -w --strip-symbol='__mod_device_table__*' > > > > > > > > quiet_cmd_strip_relocs = OBJCOPY $@ > > > > - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ > > > > + cmd_strip_relocs = $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< && \ > > > > + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ > > > > $(remove-symbols) $< $@ > > > > > > > > targets += vmlinux > > > > > > Ah, great! I thought we had to fiddle around with linker scripts et al. > > > I needed to use an intermediate file: > > > > > > diff --git a/scripts/Makefile.vmlinux b/scripts/Makefile.vmlinux > > > index e2ceeb9e168d..516d51ca634b 100644 > > > --- a/scripts/Makefile.vmlinux > > > +++ b/scripts/Makefile.vmlinux > > > @@ -90,6 +90,9 @@ remove-section-y := .modinfo > > > remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' > > > > > > quiet_cmd_strip_relocs = OBJCOPY $@ > > > - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) $< $@ > > > + cmd_strip_relocs = set -e; \ > > > + trap 'rm $<.noload' EXIT HUP INT; \ > > > + $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< $<.noload && \ > > > + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) $<.noload $@ > > > > > > targets += vmlinux > > > > I'd like to suggest another version closer to yours, as mine has several flaws: > > > > diff --git a/scripts/Makefile.vmlinux b/scripts/Makefile.vmlinux > > index dbbe3bf0cf23..9a118b31d0dc 100644 > > --- a/scripts/Makefile.vmlinux > > +++ b/scripts/Makefile.vmlinux > > @@ -87,7 +87,8 @@ remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' > > remove-symbols := -w --strip-symbol='__mod_device_table__*' > > > > quiet_cmd_strip_relocs = OBJCOPY $@ > > - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ > > + cmd_strip_relocs = $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< $@; \ > > + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ > > $(remove-symbols) $@ > > > > targets += vmlinux > > > > > > > > Rationale (mainly for myself to not walk into that trap too often again): > > > > * Use ';' instead of '&&' as 'cmd_' is evaluated in a 'set -e' > > environment ('cmd') and thus '&&' may hide a possible error exit > > code. > > No, it can't hide exit code. The exit code will be correct even if > ‘set -e’ is not used. > > $ (exit 0) && (exit 2) && (exit 3); echo $? > 2 > > Actually ‘&&’ is protection against the absence of ‘set -e’. That is correct for such a simple command sequence. Putting a compound 'command1 && command2' sequence in a cmd_* macro leads to a mixture of non-comound and compound statements: ( set -e; (exit 0) && (exit 2) && (exit 3); printf 'bye\n' ); echo $? thus we have a case as described in [1, "-e"], so that the exit code 2 gets lost due to the following successful 'printf'. [1]: https://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#tag_19_26 > > > * Create 'vmlinux' already with the first objcopy and let the second > > one modify it in order to not need a temporary file; iff one or the > > other objcopy exists with an error exit code, the 'set -e + trap' > > ('delete-on-interrupt') shell will remove a possibly existing > > vmlinux file. > > That makes totally sense. This will avoid a temporary file. I will use it > in the new version. > > -- > Rgrds, legion > -- Nicolas
On Tue, Sep 16, 2025 at 02:42:48PM +0200, Nicolas Schier wrote: > > > > > Hi Alexey, > > > > > > > > > > with this patch applied, I still get a warning from objcpy as Masahiro > > > > > and Stephen wrote [1,2] > > > > > > > > > > SORTTAB vmlinux.unstripped > > > > > + sorttable vmlinux.unstripped > > > > > + nm -S vmlinux.unstripped > > > > > + ./scripts/sorttable -s .tmp_vmlinux.nm-sort vmlinux.unstripped > > > > > + is_enabled CONFIG_KALLSYMS > > > > > + grep -q ^CONFIG_KALLSYMS=y include/config/auto.conf > > > > > + cmp -s System.map .tmp_vmlinux2.syms > > > > > + echo vmlinux.unstripped: ../scripts/link-vmlinux.sh > > > > > # OBJCOPY vmlinux > > > > > objcopy --remove-section=.modinfo vmlinux.unstripped vmlinux > > > > > objcopy: vmlinux.unstripped: warning: empty loadable segment detected at vaddr=0xffff8000807a0000, is this intentional? > > > > > > > > > > (arm64, allnoconfig) > > > > > > > > > > Kind regards, > > > > > Nicolas > > > > > > > > > > > > > > > [1]: https://lore.kernel.org/linux-kbuild/CAK7LNAR-gD2H6Kk-rZjo0R3weTHCGTm0a=u2tRH1WWW6Sx6=RQ@mail.gmail.com/ > > > > > [2]: https://lore.kernel.org/lkml/20250730164047.7c4a731a@canb.auug.org.au/ > > > > > > > > > > > > > Hm. I missed that. I need to investigate how to fix this. Nothing comes > > > > to mind right now. > > > > > > Same here. Only thing I could find until now is > > > > > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/diff/scripts/link-vmlinux.sh?id=90ceddcb495008ac8ba7a3dce297841efcd7d584 > > > > > > where '2>/dev/null' is appended exactly to prevent this very warning. > > > But for me, it doesn't feel good doing that when stripping to vmlinux. > > > > Yes, that's not a very good approach. It will hide other errors that will > > definitely need to be seen. I think the commit you mentioned is actually > > incorrect. I think there should be a different solution. > > > > I think in the case of .modinfo, we can change the flag in the section > > since we are going to delete it anyway. > > > > diff --git a/scripts/Makefile.vmlinux b/scripts/Makefile.vmlinux > > index dbbe3bf0cf23..9a118b31d0dc 100644 > > --- a/scripts/Makefile.vmlinux > > +++ b/scripts/Makefile.vmlinux > > @@ -87,7 +87,8 @@ remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' > > remove-symbols := -w --strip-symbol='__mod_device_table__*' > > > > quiet_cmd_strip_relocs = OBJCOPY $@ > > - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ > > + cmd_strip_relocs = $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< && \ > > + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ > > $(remove-symbols) $< $@ > > > > targets += vmlinux > > Ah, great! I thought we had to fiddle around with linker scripts et al. > I needed to use an intermediate file: > > diff --git a/scripts/Makefile.vmlinux b/scripts/Makefile.vmlinux > index e2ceeb9e168d..516d51ca634b 100644 > --- a/scripts/Makefile.vmlinux > +++ b/scripts/Makefile.vmlinux > @@ -90,6 +90,9 @@ remove-section-y := .modinfo > remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' > > quiet_cmd_strip_relocs = OBJCOPY $@ > - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) $< $@ > + cmd_strip_relocs = set -e; \ > + trap 'rm $<.noload' EXIT HUP INT; \ > + $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< $<.noload && \ > + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) $<.noload $@ > > targets += vmlinux according to man-page: If you do not specify outfile, objcopy creates a temporary file and destructively renames the result with the name of infile. That is true even in freebsd: https://man.freebsd.org/cgi/man.cgi?query=objcopy Do you want to support any other objcopy implementations ? -- Rgrds, legion
On Tue, Sep 16, 2025 at 03:03:46PM +0200, Alexey Gladkov wrote: > On Tue, Sep 16, 2025 at 02:42:48PM +0200, Nicolas Schier wrote: > > > > > > Hi Alexey, > > > > > > > > > > > > with this patch applied, I still get a warning from objcpy as Masahiro > > > > > > and Stephen wrote [1,2] > > > > > > > > > > > > SORTTAB vmlinux.unstripped > > > > > > + sorttable vmlinux.unstripped > > > > > > + nm -S vmlinux.unstripped > > > > > > + ./scripts/sorttable -s .tmp_vmlinux.nm-sort vmlinux.unstripped > > > > > > + is_enabled CONFIG_KALLSYMS > > > > > > + grep -q ^CONFIG_KALLSYMS=y include/config/auto.conf > > > > > > + cmp -s System.map .tmp_vmlinux2.syms > > > > > > + echo vmlinux.unstripped: ../scripts/link-vmlinux.sh > > > > > > # OBJCOPY vmlinux > > > > > > objcopy --remove-section=.modinfo vmlinux.unstripped vmlinux > > > > > > objcopy: vmlinux.unstripped: warning: empty loadable segment detected at vaddr=0xffff8000807a0000, is this intentional? > > > > > > > > > > > > (arm64, allnoconfig) > > > > > > > > > > > > Kind regards, > > > > > > Nicolas > > > > > > > > > > > > > > > > > > [1]: https://lore.kernel.org/linux-kbuild/CAK7LNAR-gD2H6Kk-rZjo0R3weTHCGTm0a=u2tRH1WWW6Sx6=RQ@mail.gmail.com/ > > > > > > [2]: https://lore.kernel.org/lkml/20250730164047.7c4a731a@canb.auug.org.au/ > > > > > > > > > > > > > > > > Hm. I missed that. I need to investigate how to fix this. Nothing comes > > > > > to mind right now. > > > > > > > > Same here. Only thing I could find until now is > > > > > > > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/diff/scripts/link-vmlinux.sh?id=90ceddcb495008ac8ba7a3dce297841efcd7d584 > > > > > > > > where '2>/dev/null' is appended exactly to prevent this very warning. > > > > But for me, it doesn't feel good doing that when stripping to vmlinux. > > > > > > Yes, that's not a very good approach. It will hide other errors that will > > > definitely need to be seen. I think the commit you mentioned is actually > > > incorrect. I think there should be a different solution. > > > > > > I think in the case of .modinfo, we can change the flag in the section > > > since we are going to delete it anyway. > > > > > > diff --git a/scripts/Makefile.vmlinux b/scripts/Makefile.vmlinux > > > index dbbe3bf0cf23..9a118b31d0dc 100644 > > > --- a/scripts/Makefile.vmlinux > > > +++ b/scripts/Makefile.vmlinux > > > @@ -87,7 +87,8 @@ remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' > > > remove-symbols := -w --strip-symbol='__mod_device_table__*' > > > > > > quiet_cmd_strip_relocs = OBJCOPY $@ > > > - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ > > > + cmd_strip_relocs = $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< && \ > > > + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ > > > $(remove-symbols) $< $@ > > > > > > targets += vmlinux > > > > Ah, great! I thought we had to fiddle around with linker scripts et al. > > I needed to use an intermediate file: > > > > diff --git a/scripts/Makefile.vmlinux b/scripts/Makefile.vmlinux > > index e2ceeb9e168d..516d51ca634b 100644 > > --- a/scripts/Makefile.vmlinux > > +++ b/scripts/Makefile.vmlinux > > @@ -90,6 +90,9 @@ remove-section-y := .modinfo > > remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' > > > > quiet_cmd_strip_relocs = OBJCOPY $@ > > - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) $< $@ > > + cmd_strip_relocs = set -e; \ > > + trap 'rm $<.noload' EXIT HUP INT; \ > > + $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< $<.noload && \ > > + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) $<.noload $@ > > > > targets += vmlinux > > according to man-page: > > If you do not specify outfile, objcopy creates a temporary file and > destructively renames the result with the name of infile. > > That is true even in freebsd: > > https://man.freebsd.org/cgi/man.cgi?query=objcopy > > Do you want to support any other objcopy implementations ? yeah, it's actually because I dislike modifying vmlinux.unstripped in the vmlinux rule. But it may be that Nathan does not see it this way. -- Nicolas
On Tue, Sep 16, 2025 at 03:28:09PM +0200, Nicolas Schier wrote: > yeah, it's actually because I dislike modifying vmlinux.unstripped in > the vmlinux rule. > > But it may be that Nathan does not see it this way. Yeah, I would agree that it is good form to avoid modifying the inputs of a rule. This warning is pretty annoying since it is intentional but we do not have great tools to hide just this one instance it seems... This is probably worth a comment. It would be nice if this section could be marked as NOLOAD from the beginning but that will mess with extracting .modinfo via objcopy from my brief testing. Cheers, Nathan
On Tue, Sep 16, 2025 at 06:10:10PM -0700, Nathan Chancellor wrote: > On Tue, Sep 16, 2025 at 03:28:09PM +0200, Nicolas Schier wrote: > > yeah, it's actually because I dislike modifying vmlinux.unstripped in > > the vmlinux rule. > > > > But it may be that Nathan does not see it this way. > > Yeah, I would agree that it is good form to avoid modifying the inputs > of a rule. > > This warning is pretty annoying since it is intentional but we do not > have great tools to hide just this one instance it seems... This is > probably worth a comment. > > It would be nice if this section could be marked as NOLOAD from the > beginning but that will mess with extracting .modinfo via objcopy from > my brief testing. > Yeah, I was thinking about that too. Ok, I will make a new version of the patchset with fixes. -- Rgrds, legion
© 2016 - 2025 Red Hat, Inc.