Re: [PATCH v1 2/7] DCE/DSE: add unused syscalls elimination configure support

From: Yuan Tan
Date: Sat Oct 07 2023 - 06:02:18 EST


Hi Zhangjin,

> A minimal embedded Linux system may only has a very few of functions and
> only uses a minimal subset of the posix syscalls, the unused syscalls
> will never be used and eventually in a dead status, that also means disk
> storage and memory footprint waste.
>
> Based on dead code elimination support, it is able to further eliminate
> the above dead or unused syscalls.
>
> Firstly, both a new common CONFIG_TRIM_UNUSED_SYSCALLS option and a new
> architecture specific HAVE_TRIM_UNUSED_SYSCALLS are added to enable or
> disable such feature.
>
> Secondly, a new CONFIG_USED_SYSCALLS option is added to allow configure
> the syscalls used in a target system. CONFIG_USED_SYSCALLS can be a list
> of the used syscalls or a file to store such a list.
>
> Based on the above options, it is able to only reserve the used syscalls
> and let CONFIG_LD_DEAD_CODE_DATA_ELIMINATION trim the unused ones for us
> automatically.
>
> Signed-off-by: Zhangjin Wu <falcon@xxxxxxxxxxx>
> ---
> init/Kconfig | 42 ++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 42 insertions(+)
>
> diff --git a/init/Kconfig b/init/Kconfig
> index 4350d8ba7db4..aa648ce8bca1 100644
> --- a/init/Kconfig
> +++ b/init/Kconfig
> @@ -1457,6 +1457,11 @@ config BPF
> bool
> select CRYPTO_LIB_SHA1
>
> +config HAVE_TRIM_UNUSED_SYSCALLS
> + bool
> + depends on HAVE_LD_DEAD_CODE_DATA_ELIMINATION
> + default n
> +
> menuconfig EXPERT
> bool "Configure standard kernel features (expert users)"
> # Unhide debug options, to make the on-by-default options visible
> @@ -1683,6 +1688,43 @@ config MEMBARRIER
>
> If unsure, say Y.
>
> +config TRIM_UNUSED_SYSCALLS
> + bool "Trim unused syscalls (EXPERIMENTAL)" if EXPERT
> + default n
> + depends on HAVE_TRIM_UNUSED_SYSCALLS
> + depends on HAVE_LD_DEAD_CODE_DATA_ELIMINATION
> + select LD_DEAD_CODE_DATA_ELIMINATION
> + help
> + Say Y here to trim all of the unused syscalls for a target system.

I think changing this sentence to "Say Y here to trim all of the unused
syscalls, excluding those defined in USED_SYSCALLS." would be clearer.

By the way, consider adding the three files syscall_table_used.c,
compat_syscall_table_used.c, and traps_used.c to the .gitignore file.

> +
> + Note, this is only for minimal embedded systems, please don't use it
> + for generic Linux distributions.
> +
> + If unsure, say N.
> +
> +config USED_SYSCALLS
> + string "Configure used syscalls (EXPERIMENTAL)" if EXPERT
> + depends on TRIM_UNUSED_SYSCALLS
> + default ""
> + help
> + This option allows to configure the syscalls used in a target system,
> + the unused ones will be disabled and trimmed by TRIM_UNUSED_SYSCALLS.
> +
> + The used syscalls should be listed one by one like this:
> +
> + write exit reboot
> +
> + Or put them into a file specified by this option, one syscall per
> + line is recommended for such a config file:
> +
> + write
> + exit
> + reboot
> +
> + Note, If keep this empty, all of the syscalls will be trimmed.
> +
> + If unsure, please disable TRIM_UNUSED_SYSCALLS.
> +
> config KALLSYMS
> bool "Load all symbols for debugging/ksymoops" if EXPERT
> default y
> --