From e85d1d65cd8a9083040e280d172eba762875f8f1 Mon Sep 17 00:00:00 2001 From: Masahiro Yamada Date: Wed, 22 Aug 2018 22:51:09 +0900 Subject: [PATCH] kbuild: test dead code/data elimination support in Kconfig This config option should be enabled only when both the compiler and the linker support necessary flags. Add proper dependencies to Kconfig. Signed-off-by: Masahiro Yamada --- Makefile | 8 ++------ init/Kconfig | 2 ++ 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index c4d7b4befac6..1623b8b6e8f5 100644 --- a/Makefile +++ b/Makefile @@ -790,8 +790,8 @@ KBUILD_CFLAGS += $(call cc-option, -fno-inline-functions-called-once) endif ifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION -KBUILD_CFLAGS_KERNEL += $(call cc-option,-ffunction-sections,) -KBUILD_CFLAGS_KERNEL += $(call cc-option,-fdata-sections,) +KBUILD_CFLAGS_KERNEL += -ffunction-sections -fdata-sections +LDFLAGS_vmlinux += --gc-sections endif # arch Makefile may override CC so keep this after arch Makefile is included @@ -857,10 +857,6 @@ LDFLAGS_BUILD_ID := $(call ld-option, --build-id) KBUILD_LDFLAGS_MODULE += $(LDFLAGS_BUILD_ID) LDFLAGS_vmlinux += $(LDFLAGS_BUILD_ID) -ifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION -LDFLAGS_vmlinux += $(call ld-option, --gc-sections,) -endif - ifeq ($(CONFIG_STRIP_ASM_SYMS),y) LDFLAGS_vmlinux += $(call ld-option, -X,) endif diff --git a/init/Kconfig b/init/Kconfig index 9bd50ba8253f..21b855921eaf 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -1085,6 +1085,8 @@ config LD_DEAD_CODE_DATA_ELIMINATION bool "Dead code and data elimination (EXPERIMENTAL)" depends on HAVE_LD_DEAD_CODE_DATA_ELIMINATION depends on EXPERT + depends on $(cc-option,-ffunction-sections -fdata-sections) + depends on $(ld-option,--gc-sections) help Enable this if you want to do dead code and data elimination with the linker by compiling with -ffunction-sections -fdata-sections,