[PATCH v7 3/8] kbuild: keep .modinfo section in vmlinux.unstripped

Alexey Gladkov posted 8 patches 1 month, 1 week ago
There is a newer version of this series
[PATCH v7 3/8] kbuild: keep .modinfo section in vmlinux.unstripped
Posted by Alexey Gladkov 1 month, 1 week ago
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
Re: [PATCH v7 3/8] kbuild: keep .modinfo section in vmlinux.unstripped
Posted by Nicolas Schier 1 week, 5 days ago
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/
Re: [PATCH v7 3/8] kbuild: keep .modinfo section in vmlinux.unstripped
Posted by Alexey Gladkov 1 week, 4 days ago
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
Re: [PATCH v7 3/8] kbuild: keep .modinfo section in vmlinux.unstripped
Posted by Nicolas Schier 1 week, 4 days ago
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
Re: [PATCH v7 3/8] kbuild: keep .modinfo section in vmlinux.unstripped
Posted by Alexey Gladkov 1 week, 4 days ago
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
Re: [PATCH v7 3/8] kbuild: keep .modinfo section in vmlinux.unstripped
Posted by Nicolas Schier 1 week, 4 days ago
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
Re: [PATCH v7 3/8] kbuild: keep .modinfo section in vmlinux.unstripped
Posted by Nicolas Schier 1 week, 3 days ago
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
Re: [PATCH v7 3/8] kbuild: keep .modinfo section in vmlinux.unstripped
Posted by Alexey Gladkov 1 week, 3 days ago
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

Re: [PATCH v7 3/8] kbuild: keep .modinfo section in vmlinux.unstripped
Posted by Nicolas Schier 1 week, 2 days ago
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
Re: [PATCH v7 3/8] kbuild: keep .modinfo section in vmlinux.unstripped
Posted by Alexey Gladkov 1 week, 4 days ago
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
Re: [PATCH v7 3/8] kbuild: keep .modinfo section in vmlinux.unstripped
Posted by Nicolas Schier 1 week, 4 days ago
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
Re: [PATCH v7 3/8] kbuild: keep .modinfo section in vmlinux.unstripped
Posted by Nathan Chancellor 1 week, 3 days ago
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
Re: [PATCH v7 3/8] kbuild: keep .modinfo section in vmlinux.unstripped
Posted by Alexey Gladkov 1 week, 3 days ago
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