Messages in this thread | | | From | Zhangjin Wu <> | Subject | [RFC PATCH 0/5] Add dead syscalls elimination support | Date | Fri, 17 Feb 2023 08:49:20 +0800 |
| |
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@tinylab.org/
- 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
| |