On Wed, Feb 24, 2021 at 11:13 PM Jessica Yu <j...@kernel.org> wrote:
>
> +++ Christoph Hellwig [24/02/21 08:52 +0100]:
> >On Tue, Feb 23, 2021 at 12:07:39PM -0800, Linus Torvalds wrote:
> >> On Tue, Feb 23, 2021 at 12:03 PM Linus Torvalds
> >> <torva...@linux-foundation.org> wrote:
> >> >
> >> > This is unacceptably slow. If that symbol trimming takes 30% of the
> >> > whole kernel build time, it needs to be fixed or removed.
> >>
> >> I think I'm going to mark TRIM_UNUSED_KSYMS as "depends on BROKEN".
> >> There's no way I can accept that horrible overhead, and the rationale
> >> for that config option is questionable at best,
> >
> >I think it is pretty useful for embedded setups.
> >
> >BROKEN seems pretty strong for something that absolutely works as
> >intendended.  I guess to make you (and possibly others) not grumpy
> >we just need to ensure it doesn't get pulled in by allmodconfig.
> >
> >So maybe just invert the symbol, default the KEEP_UNUSED_SYMBOL, and
> >add a message to the helptext explaining the slowdown?
>
> Hm, something like this maybe? (untested)



I prefer a one-liner, 'depends on !COMPILE_TEST'.
!COMPILE_TEST is not super elegant, but
it is used in several spaces.



Inverting the CONFIG option is just a workaround.
A patch with many changes is not worth it.








> ---
>  From 08bc08229fc3801b1a580a07ce7ff3e806b3fe90 Mon Sep 17 00:00:00 2001
> From: Jessica Yu <j...@kernel.org>
> Date: Wed, 24 Feb 2021 14:54:09 +0100
> Subject: [PATCH] Kconfig: invert TRIM_UNUSED_SYMBOLS option and rename it to
>   KEEP_UNUSED_SYMBOLS
>
> Removing CONFIG_UNUSED_SYMBOLS (commit 367948220fce "module: remove
> EXPORT_UNUSED_SYMBOL*") unhid the CONFIG_TRIM_UNUSED_SYMBOLS option and
> therefore it now gets automatically enabled with allyesconfig.
>
> To prevent allyesconfig from enabling TRIM_UNUSED_SYMBOLS (which is known
> to slow build times), invert the config option and name it
> KEEP_UNUSED_SYMBOLS, which does the same thing as TRIM_UNUSED_SYMBOLS=n.
> That way, allyesconfig will keep the previous behavior of not trimming
> symbols.
>
> Signed-off-by: Jessica Yu <j...@kernel.org>
> ---
>   Makefile                            |  4 ++--
>   arch/mips/configs/generic_defconfig |  2 +-
>   include/asm-generic/export.h        |  2 +-
>   include/linux/export.h              |  2 +-
>   init/Kconfig                        | 21 +++++++++++----------
>   kernel/livepatch/Kconfig            |  2 +-
>   scripts/Makefile.build              |  2 +-
>   7 files changed, 18 insertions(+), 17 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index b18dbc634690..23f50521e97f 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1164,7 +1164,7 @@ vmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_OBJS) 
> $(KBUILD_VMLINUX_LIBS)
>
>   # Recurse until adjust_autoksyms.sh is satisfied
>   PHONY += autoksyms_recursive
> -ifdef CONFIG_TRIM_UNUSED_KSYMS
> +ifndef CONFIG_KEEP_UNUSED_KSYMS
>   # For the kernel to actually contain only the needed exported symbols,
>   # we have to build modules as well to determine what those symbols are.
>   # (this can be evaluated only once include/config/auto.conf has been 
> included)
> @@ -1175,7 +1175,7 @@ autoksyms_recursive: descend modules.order
>           "$(MAKE) -f $(srctree)/Makefile vmlinux"
>   endif
>
> -autoksyms_h := $(if $(CONFIG_TRIM_UNUSED_KSYMS), 
> include/generated/autoksyms.h)
> +autoksyms_h := $(if 
> $(CONFIG_KEEP_UNUSED_KSYMS),,include/generated/autoksyms.h)
>
>   quiet_cmd_autoksyms_h = GEN     $@
>         cmd_autoksyms_h = mkdir -p $(dir $@); \
> diff --git a/arch/mips/configs/generic_defconfig 
> b/arch/mips/configs/generic_defconfig
> index 714169e411cf..d46da28ea032 100644
> --- a/arch/mips/configs/generic_defconfig
> +++ b/arch/mips/configs/generic_defconfig
> @@ -29,7 +29,7 @@ CONFIG_MIPS_O32_FP64_SUPPORT=y
>   CONFIG_JUMP_LABEL=y
>   CONFIG_MODULES=y
>   CONFIG_MODULE_UNLOAD=y
> -CONFIG_TRIM_UNUSED_KSYMS=y
> +CONFIG_KEEP_UNUSED_KSYMS=n
>   CONFIG_NET=y
>   CONFIG_PACKET=y
>   CONFIG_UNIX=y
> diff --git a/include/asm-generic/export.h b/include/asm-generic/export.h
> index 07a36a874dca..06d401464195 100644
> --- a/include/asm-generic/export.h
> +++ b/include/asm-generic/export.h
> @@ -57,7 +57,7 @@ __kstrtab_\name:
>   #endif
>   .endm
>
> -#if defined(CONFIG_TRIM_UNUSED_KSYMS)
> +#if !defined(CONFIG_KEEP_UNUSED_KSYMS)
>
>   #include <linux/kconfig.h>
>   #include <generated/autoksyms.h>
> diff --git a/include/linux/export.h b/include/linux/export.h
> index 6271a5d9c988..449f7d15e580 100644
> --- a/include/linux/export.h
> +++ b/include/linux/export.h
> @@ -118,7 +118,7 @@ struct kernel_symbol {
>    */
>   #define __EXPORT_SYMBOL(sym, sec, ns)
>
> -#elif defined(CONFIG_TRIM_UNUSED_KSYMS)
> +#elif !defined(CONFIG_KEEP_UNUSED_KSYMS)
>
>   #include <generated/autoksyms.h>
>
> diff --git a/init/Kconfig b/init/Kconfig
> index ba8bd5256980..db5d00bfc239 100644
> --- a/init/Kconfig
> +++ b/init/Kconfig
> @@ -2272,29 +2272,30 @@ config MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS
>
>           If unsure, say N.
>
> -config TRIM_UNUSED_KSYMS
> -       bool "Trim unused exported kernel symbols"
> -       depends on BROKEN
> +config KEEP_UNUSED_KSYMS
> +       bool "Keep unused exported kernel symbols"
> +       default y
>         help
>           The kernel and some modules make many symbols available for
>           other modules to use via EXPORT_SYMBOL() and variants. Depending
>           on the set of modules being selected in your kernel configuration,
>           many of those exported symbols might never be used.
>
> -         This option allows for unused exported symbols to be dropped from
> -         the build. In turn, this provides the compiler more opportunities
> -         (especially when using LTO) for optimizing the code and reducing
> -         binary size.  This might have some security advantages as well.
> +         This option allows for unused exported symbols to be kept in the
> +         build. Say N when you want to trim unused symbols from the build,
> +         which provides the compiler more opportunities (especially when 
> using LTO)
> +         for optimizing the code and reducing binary size. This might have 
> some
> +         security advantages as well.
>
> -         If unsure, or if you need to build out-of-tree modules, say N.
> +         If unsure, or if you need to build out-of-tree modules, say Y.
>
>   config UNUSED_KSYMS_WHITELIST
>         string "Whitelist of symbols to keep in ksymtab"
> -       depends on TRIM_UNUSED_KSYMS
> +       depends on !KEEP_UNUSED_KSYMS
>         default "scripts/lto-used-symbollist.txt" if LTO_CLANG
>         help
>           By default, all unused exported symbols will be un-exported from the
> -         build when TRIM_UNUSED_KSYMS is selected.
> +         build when KEEP_UNUSED_KSYMS is not selected.
>
>           UNUSED_KSYMS_WHITELIST allows to whitelist symbols that must be kept
>           exported at all times, even in absence of in-tree users. The value 
> to
> diff --git a/kernel/livepatch/Kconfig b/kernel/livepatch/Kconfig
> index 53d51ed619a3..df8ebb7984e1 100644
> --- a/kernel/livepatch/Kconfig
> +++ b/kernel/livepatch/Kconfig
> @@ -11,7 +11,7 @@ config LIVEPATCH
>         depends on SYSFS
>         depends on KALLSYMS_ALL
>         depends on HAVE_LIVEPATCH
> -       depends on !TRIM_UNUSED_KSYMS
> +       depends on KEEP_UNUSED_KSYMS
>         help
>           Say Y here if you want to support kernel live patching.
>           This option has no runtime impact until a kernel "patch"
> diff --git a/scripts/Makefile.build b/scripts/Makefile.build
> index 3f6bf0ea7c0e..e5e95a6948a7 100644
> --- a/scripts/Makefile.build
> +++ b/scripts/Makefile.build
> @@ -242,7 +242,7 @@ objtool_dep = $(objtool_obj)                              
>           \
>               $(wildcard include/config/orc/unwinder.h          \
>                          include/config/stack/validation.h)
>
> -ifdef CONFIG_TRIM_UNUSED_KSYMS
> +ifndef CONFIG_KEEP_UNUSED_KSYMS
>   cmd_gen_ksymdeps = \
>         $(CONFIG_SHELL) $(srctree)/scripts/gen_ksymdeps.sh $@ >> 
> $(dot-target).cmd
>


--
Best Regards
Masahiro Yamada

Reply via email to