[PATCH v5 03/10] kbuild: keep .modinfo section in vmlinux.unstripped

Alexey Gladkov posted 10 patches 2 months, 1 week ago
There is a newer version of this series
[PATCH v5 03/10] kbuild: keep .modinfo section in vmlinux.unstripped
Posted by Alexey Gladkov 2 months, 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 fa5f19b8d53a..1791665006f9 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 4f2d4c3fb737..e2ceeb9e168d 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 3accbdb269ac..a607a0059d11 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 v5 03/10] kbuild: keep .modinfo section in vmlinux.unstripped
Posted by Alexander Gordeev 2 months, 1 week ago
On Thu, Jul 24, 2025 at 03:49:40PM +0200, Alexey Gladkov wrote:

Hi Alexey, Masahiro,

> 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 fa5f19b8d53a..1791665006f9 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) }				\

FWIW, to me .modinfo logically does not quite belong to ELF_DETAILS,
since it is not about ELF.

I would guess, that you want to make a minimal code impact to the
linker scripts, but with that you turn .modinfo the only section
among ones that do not make it to the final image:

	STABS_DEBUG
	DWARF_DEBUG
	ELF_DETAILS

That immediately breaks s390, but also is a call for trouble in
the future, as far as I am concerned.

Would it makes sense to introduce e.g MODINFO instead?

>  		.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*)						\

Thanks!
Re: [PATCH v5 03/10] kbuild: keep .modinfo section in vmlinux.unstripped
Posted by Masahiro Yamada 2 months, 1 week ago
On Mon, Jul 28, 2025 at 10:58 PM Alexander Gordeev
<agordeev@linux.ibm.com> wrote:
>
> On Thu, Jul 24, 2025 at 03:49:40PM +0200, Alexey Gladkov wrote:
>
> Hi Alexey, Masahiro,
>
> > 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 fa5f19b8d53a..1791665006f9 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) }                              \
>
> FWIW, to me .modinfo logically does not quite belong to ELF_DETAILS,
> since it is not about ELF.
>
> I would guess, that you want to make a minimal code impact to the
> linker scripts, but with that you turn .modinfo the only section
> among ones that do not make it to the final image:
>
>         STABS_DEBUG
>         DWARF_DEBUG
>         ELF_DETAILS
>
> That immediately breaks s390, but also is a call for trouble in
> the future, as far as I am concerned.
>
> Would it makes sense to introduce e.g MODINFO instead?

I am open to MODINFO addition, if Alexey is happy about
modifying linker scripts for all arches.
Yeah, it is tedious, though...




>
> >               .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*)                                                \
>
> Thanks!



-- 
Best Regards
Masahiro Yamada
Re: [PATCH v5 03/10] kbuild: keep .modinfo section in vmlinux.unstripped
Posted by Alexey Gladkov 2 months, 1 week ago
On Mon, Jul 28, 2025 at 03:57:53PM +0200, Alexander Gordeev wrote:
> On Thu, Jul 24, 2025 at 03:49:40PM +0200, Alexey Gladkov wrote:
> 
> Hi Alexey, Masahiro,
> 
> > 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 fa5f19b8d53a..1791665006f9 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) }				\
> 
> FWIW, to me .modinfo logically does not quite belong to ELF_DETAILS,
> since it is not about ELF.

The macro name ELF_DETAILS is rather unfortunate. The description says
that these sections are not related to debugging.

> I would guess, that you want to make a minimal code impact to the
> linker scripts, but with that you turn .modinfo the only section
> among ones that do not make it to the final image:
> 
> 	STABS_DEBUG
> 	DWARF_DEBUG
> 	ELF_DETAILS
> 
> That immediately breaks s390, but also is a call for trouble in
> the future, as far as I am concerned.
> 
> Would it makes sense to introduce e.g MODINFO instead?

This will require patching all architectures to add MODINFO. This will
have a significant code impact. To avoid this, .modinfo was added to
ELF_DETAILS.

> >  		.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*)						\
> 
> Thanks!
> 

-- 
Rgrds, legion