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