For HAVE_TRIM_UNUSED_SYSCALLS, the syscall tables are hacked with the inputing unused_syscalls. Firstly, the intermediate preprocessed .i files are generated from the original C version of syscall tables respectively, and named with a 'used' suffix: syscall_table_used.i, compat_syscall_table_used.i. Secondly, all of the unused syscalls are commented. At last, two new objective files sufixed with 'used' are generated from the hacked .i files and they are linked into the eventual kernel image. Signed-off-by: Zhangjin Wu <falcon@xxxxxxxxxxx> --- arch/riscv/Kconfig | 1 + arch/riscv/kernel/syscalls/Makefile | 37 +++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig index d607ab0f7c6d..b5e726b49a6f 100644 --- a/arch/riscv/Kconfig +++ b/arch/riscv/Kconfig @@ -140,6 +140,7 @@ config RISCV select HAVE_RSEQ select HAVE_STACKPROTECTOR select HAVE_SYSCALL_TRACEPOINTS + select HAVE_TRIM_UNUSED_SYSCALLS if HAVE_LD_DEAD_CODE_DATA_ELIMINATION select HOTPLUG_CORE_SYNC_DEAD if HOTPLUG_CPU select IRQ_DOMAIN select IRQ_FORCED_THREADING diff --git a/arch/riscv/kernel/syscalls/Makefile b/arch/riscv/kernel/syscalls/Makefile index 65abd0871ee5..3b5969aaa9e8 100644 --- a/arch/riscv/kernel/syscalls/Makefile +++ b/arch/riscv/kernel/syscalls/Makefile @@ -3,8 +3,45 @@ # Makefile for the RISC-V syscall tables # +ifndef CONFIG_TRIM_UNUSED_SYSCALLS + CFLAGS_syscall_table.o += $(call cc-option,-Wno-override-init,) CFLAGS_compat_syscall_table.o += $(call cc-option,-Wno-override-init,) obj-y += syscall_table.o obj-$(CONFIG_COMPAT) += compat_syscall_table.o +else # CONFIG_TRIM_UNUSED_SYSCALLS + +include $(srctree)/scripts/Makefile.syscalls + +CFLAGS_syscall_table_used.o += $(call cc-option,-Wno-override-init,) +CFLAGS_compat_syscall_table_used.o += $(call cc-option,-Wno-override-init,) + +obj-y += syscall_table_used.o +obj-$(CONFIG_COMPAT) += compat_syscall_table_used.o + +# comment the unused syscalls +quiet_cmd_used = USED $@ + cmd_used = sed -E -e '/^\[([0-9]+|\([0-9]+ \+ [0-9]+\))\] = /{/= *__riscv_(__sys_|sys_|compat_)*($(used_syscalls)),/!{s%^%/* %g;s%$$% */%g}}' -i $@; + +$(obj)/syscall_table_used.c: $(src)/syscall_table.c + $(Q)cp $< $@ + +$(obj)/syscall_table_used.i: $(src)/syscall_table_used.c $(used_syscalls_deps) FORCE + $(call if_changed_dep,cpp_i_c) + $(call cmd,used) + +$(obj)/syscall_table_used.o: $(obj)/syscall_table_used.i FORCE + $(call if_changed,cc_o_c) + +$(obj)/compat_syscall_table_used.c: $(src)/compat_syscall_table.c + $(Q)cp $< $@ + +$(obj)/compat_syscall_table_used.i: $(src)/compat_syscall_table_used.c $(used_syscalls_deps) FORCE + $(call if_changed_dep,cpp_i_c) + $(call cmd,used) + +$(obj)/compat_syscall_table_used.o: $(obj)/compat_syscall_table_used.i FORCE + $(call if_changed,cc_o_c) + +endif # CONFIG_TRIM_UNUSED_SYSCALLS -- 2.25.1