[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