[RFC PATCH 0/5] Add dead syscalls elimination support

From: Zhangjin Wu
Date: Thu Feb 16 2023 - 19:50:05 EST


Hi, all

CONFIG_HAVE_LD_DEAD_CODE_DATA_ELIMINATION allows to eliminate dead code
and data, this patchset allows to further eliminate dead syscalls which
are not used in target system.

It includes 5 patches:

- syscall: Allow configure used system calls

This adds a new CONFIG_SYSCALLS_USED option to allow users or tools to
tell kernel what syscalls are used in target system. A list of
used syscalls can be passed to it.

- MIPS: Add dead syscalls elimination support

Add CONFIG_SYSCALLS_USED support for mips, it simply adds a 'used'
variant for the syscall*.tbl and accordingly updates the kernel apis
and eventually the sys_call_table. The unused ones in the table are
replaced by sys_ni_syscall and therefore if they are also not used by
kernel itself, they will be eliminated by gc-sections.

The old architectures use syscall*.tbl, so, they can use this method.

- RISC-V: Enable dead code elimination

Select HAVE_LD_DEAD_CODE_DATA_ELIMINATION for riscv.

- RISC-V: Add dead syscalls elimination support

Add CONFIG_SYSCALLS_USED support for riscv, it simply adds a 'used'
variant for the *syscall_table.c and eventually the sys_call_table.

The new architectures use generic unistd.h, they can use this method.

- nolibc: Record used syscalls in their own sections

This allows to record syscalls used by a nolibc based application. It
is possible to eliminate dead syscalls automatically while building
the monolithic kernel+nolibc software.

Testing shows, on both mips and riscv, with a small config, gc-sections
shrinks ~10% and syscalls_used shrinks another ~5%.

This patchset is only a prototype implementation, welcome your feedback
and suggestion, Thanks.

Related emails:

- Re: Re: Kernel-only deployments
https://lore.kernel.org/lkml/20230216130935.37976-1-falcon@xxxxxxxxxxx/

- Re: Re: RISC-V: Enable dead code elimination
https://lore.kernel.org/linux-riscv/Y+qSBu3YZH0JPY4I@spud/T/#t

Best Regards,
- Zhangjin Wu

---

Zhangjin Wu (5):
syscall: Allow configure used system calls
MIPS: Add dead syscalls elimination support
RISC-V: Enable dead code elimination
RISC-V: Add dead syscalls elimination support
nolibc: Record used syscalls in their own sections

arch/mips/Kconfig | 1 +
arch/mips/kernel/syscalls/Makefile | 24 ++++++++-
arch/riscv/Kconfig | 2 +
arch/riscv/kernel/Makefile | 5 +-
arch/riscv/kernel/syscalls/Makefile | 38 ++++++++++++++
arch/riscv/kernel/vmlinux.lds.S | 2 +-
init/Kconfig | 22 +++++++++
tools/include/nolibc/Makefile | 2 +-
tools/include/nolibc/arch-aarch64.h | 17 ++++---
tools/include/nolibc/arch-arm.h | 15 +++---
tools/include/nolibc/arch-i386.h | 17 ++++---
tools/include/nolibc/arch-mips.h | 15 +++---
tools/include/nolibc/arch-riscv.h | 17 ++++---
tools/include/nolibc/arch-x86_64.h | 17 ++++---
tools/include/nolibc/arch.h | 2 +
tools/include/nolibc/record.h | 77 +++++++++++++++++++++++++++++
16 files changed, 226 insertions(+), 47 deletions(-)
create mode 100644 arch/riscv/kernel/syscalls/Makefile
create mode 100644 tools/include/nolibc/record.h

--
2.25.1