On Fri, Jun 12, 2026 at 6:31 AM Petr Pavlu <[email protected]> wrote: > > Specific code, such as outlined KASAN checks, may be placed in > COMDAT-deduplicated sections. When linking modules as relocatable files, > the linker by default preserves such groups, potentially leaving multiple > copies in the resulting modules and unnecessary group metadata. > > Use --force-group-allocation to have the linker resolve the COMDAT groups > and place their members as regular sections. The option is available from > ld.bfd 2.29 and ld.lld 19.1.0. > > Remove the workaround in arch/arm64/include/asm/module.lds.h that was added > for the same problem but limited to CONFIG_KASAN_SW_TAGS and .text.hot. > Note that this code currently has no effect anyway because all .text.hot > sections are placed in the .text output section by scripts/module.lds.S, > since commit 1ba9f8979426 ("vmlinux.lds: Unify TEXT_MAIN, DATA_MAIN, and > related macros"). > > Signed-off-by: Petr Pavlu <[email protected]>
Reviewed-by: Peter Collingbourne <[email protected]> > --- > Makefile | 6 ++++++ > arch/arm64/include/asm/module.lds.h | 13 ------------- > 2 files changed, 6 insertions(+), 13 deletions(-) > > diff --git a/Makefile b/Makefile > index e156e2696efe..1729af0690b3 100644 > --- a/Makefile > +++ b/Makefile > @@ -1189,6 +1189,12 @@ KBUILD_RUSTFLAGS += $(KRUSTFLAGS) > KBUILD_LDFLAGS_MODULE += --build-id=sha1 > LDFLAGS_vmlinux += --build-id=sha1 > > +# Specific code, such as outlined KASAN checks, may be placed in > +# COMDAT-deduplicated sections. Use --force-group-allocation to resolve these > +# groups when linking modules. The option is available from ld.bfd 2.29 and > +# ld.lld 19.1.0. > +KBUILD_LDFLAGS_MODULE += $(call ld-option,--force-group-allocation) > + > KBUILD_LDFLAGS += -z noexecstack > ifeq ($(CONFIG_LD_IS_BFD),y) > KBUILD_LDFLAGS += $(call ld-option,--no-warn-rwx-segments) > diff --git a/arch/arm64/include/asm/module.lds.h > b/arch/arm64/include/asm/module.lds.h > index fb944b46846d..792a0820757a 100644 > --- a/arch/arm64/include/asm/module.lds.h > +++ b/arch/arm64/include/asm/module.lds.h > @@ -4,19 +4,6 @@ SECTIONS { > .text.ftrace_trampoline 0 : { BYTE(0) } > .init.text.ftrace_trampoline 0 : { BYTE(0) } > > -#ifdef CONFIG_KASAN_SW_TAGS > - /* > - * Outlined checks go into comdat-deduplicated sections named > .text.hot. > - * Because they are in comdats they are not combined by the linker and > - * we otherwise end up with multiple sections with the same .text.hot > - * name in the .ko file. The kernel module loader warns if it sees > - * multiple sections with the same name so we use this sections > - * directive to force them into a single section and silence the > - * warning. > - */ > - .text.hot : { *(.text.hot) } > -#endif > - > #ifdef CONFIG_UNWIND_TABLES > /* > * Currently, we only use unwind info at module load time, so we can > > base-commit: 4549871118cf616eecdd2d939f78e3b9e1dddc48 > -- > 2.54.0 >

