From 16fe007e6175c783444613bda07cc416a2da8263 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 24 Jun 2020 08:54:38 +0200 Subject: [PATCH] Revert "ANDROID: kbuild: fix dynamic ftrace with clang LTO" This reverts commit c4fa71e25126d32473493b648af0767e4492a85b as the LTO feature causes merge issues with 5.8-rc1. So remove it for now and allow the developer to add the latest version of the patches later on. Cc: Sami Tolvanen Signed-off-by: Greg Kroah-Hartman Change-Id: Id688d5e1e8b69b13aeb49da2716bfe45415e7c39 --- arch/Kconfig | 2 +- include/asm-generic/vmlinux.lds.h | 1 - include/linux/compiler-clang.h | 8 -------- include/linux/compiler_types.h | 4 ---- kernel/trace/ftrace.c | 6 +++--- scripts/Makefile.build | 11 ----------- scripts/Makefile.modfinal | 4 ---- scripts/link-vmlinux.sh | 18 ------------------ scripts/recordmcount.c | 4 +--- 9 files changed, 5 insertions(+), 53 deletions(-) diff --git a/arch/Kconfig b/arch/Kconfig index eba51fc8144d..cef469ba55d2 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -594,7 +594,7 @@ config LTO_CLANG bool "Use Clang's Link Time Optimization (LTO) (EXPERIMENTAL)" depends on ARCH_SUPPORTS_LTO_CLANG depends on !KASAN - depends on !FTRACE_MCOUNT_RECORD || HAVE_C_RECORDMCOUNT + depends on !FTRACE_MCOUNT_RECORD depends on CC_IS_CLANG && CLANG_VERSION >= 100000 && LD_IS_LLD select LTO help diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index 39b4010b024d..c48d656e4344 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -568,7 +568,6 @@ NOINSTR_TEXT \ *(TEXT_CFI_MAIN) \ *(.text..refcount) \ - *(.text..ftrace) \ *(.ref.text) \ MEM_KEEP(init.text*) \ MEM_KEEP(exit.text*) \ diff --git a/include/linux/compiler-clang.h b/include/linux/compiler-clang.h index ba456a20387a..51bdf5fe7b50 100644 --- a/include/linux/compiler-clang.h +++ b/include/linux/compiler-clang.h @@ -47,12 +47,4 @@ # define __noscs __attribute__((__no_sanitize__("shadow-call-stack"))) #endif - -#ifdef CONFIG_LTO_CLANG -#ifdef CONFIG_FTRACE_MCOUNT_RECORD -#define __norecordmcount \ - __attribute__((__section__(".text..ftrace"))) -#endif - #define __nocfi __attribute__((__no_sanitize__("cfi"))) -#endif diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h index 7782985e4b4e..60965fc83019 100644 --- a/include/linux/compiler_types.h +++ b/include/linux/compiler_types.h @@ -197,10 +197,6 @@ struct ftrace_likely_data { # define randomized_struct_fields_end #endif -#ifndef __norecordmcount -# define __norecordmcount -#endif - #ifndef __nocfi # define __nocfi #endif diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c index cc38d5b4cef2..b5765aeea698 100644 --- a/kernel/trace/ftrace.c +++ b/kernel/trace/ftrace.c @@ -6062,9 +6062,9 @@ static int ftrace_cmp_ips(const void *a, const void *b) return 0; } -static int __norecordmcount ftrace_process_locs(struct module *mod, - unsigned long *start, - unsigned long *end) +static int ftrace_process_locs(struct module *mod, + unsigned long *start, + unsigned long *end) { struct ftrace_page *start_pg; struct ftrace_page *pg; diff --git a/scripts/Makefile.build b/scripts/Makefile.build index 6453784ff55f..3fb2f5d27267 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -178,12 +178,6 @@ ifdef BUILD_C_RECORDMCOUNT ifeq ("$(origin RECORDMCOUNT_WARN)", "command line") RECORDMCOUNT_FLAGS = -w endif - -ifdef CONFIG_LTO_CLANG -# With LTO, we postpone running recordmcount until after the LTO link step, so -# let's export the parameters for the link script. -export RECORDMCOUNT_FLAGS -else # Due to recursion, we must skip empty.o. # The empty.o file is created in the make process in order to determine # the target endianness and word size. It is made before all other C @@ -192,8 +186,6 @@ sub_cmd_record_mcount = \ if [ $(@) != "scripts/mod/empty.o" ]; then \ $(objtree)/scripts/recordmcount $(RECORDMCOUNT_FLAGS) "$(@)"; \ fi; -endif - recordmcount_source := $(srctree)/scripts/recordmcount.c \ $(srctree)/scripts/recordmcount.h else @@ -203,13 +195,10 @@ sub_cmd_record_mcount = perl $(srctree)/scripts/recordmcount.pl "$(ARCH)" \ "$(OBJDUMP)" "$(OBJCOPY)" "$(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS)" \ "$(LD) $(KBUILD_LDFLAGS)" "$(NM)" "$(RM)" "$(MV)" \ "$(if $(part-of-module),1,0)" "$(@)"; - recordmcount_source := $(srctree)/scripts/recordmcount.pl endif # BUILD_C_RECORDMCOUNT -ifndef CONFIG_LTO_CLANG cmd_record_mcount = $(if $(findstring $(strip $(CC_FLAGS_FTRACE)),$(_c_flags)), \ $(sub_cmd_record_mcount)) -endif # CONFIG_LTO_CLANG endif # CC_USING_RECORD_MCOUNT endif # CONFIG_FTRACE_MCOUNT_RECORD diff --git a/scripts/Makefile.modfinal b/scripts/Makefile.modfinal index 6eb343ed0cad..147ed6c243ef 100644 --- a/scripts/Makefile.modfinal +++ b/scripts/Makefile.modfinal @@ -41,10 +41,6 @@ ifdef CONFIG_LTO_CLANG -o $@ --whole-archive \ $(filter-out FORCE,$(^:$(modpost-ext).o=.o)); \ $(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true) - - ifdef CONFIG_FTRACE_MCOUNT_RECORD - cmd_ld_ko_o += ; $(objtree)/scripts/recordmcount $(RECORDMCOUNT_FLAGS) $@ - endif else cmd_ld_ko_o = \ $(LD) -r $(KBUILD_LDFLAGS) \ diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh index e89d9aa962c3..4d5d76a713e6 100755 --- a/scripts/link-vmlinux.sh +++ b/scripts/link-vmlinux.sh @@ -87,19 +87,6 @@ modpost_link() ${LD} ${KBUILD_LDFLAGS} -r -o ${1} $(modversions) ${objects} } -# If CONFIG_LTO_CLANG is selected, we postpone running recordmcount until -# we have compiled LLVM IR to an object file. -recordmcount() -{ - if [ -z "${CONFIG_LTO_CLANG}" ]; then - return - fi - - if [ -n "${CONFIG_FTRACE_MCOUNT_RECORD}" ]; then - scripts/recordmcount ${RECORDMCOUNT_FLAGS} $* - fi -} - objtool_link() { local objtoolopt; @@ -334,11 +321,6 @@ objtool_link vmlinux.o # modpost vmlinux.o to check for section mismatches ${MAKE} -f "${srctree}/scripts/Makefile.modpost" MODPOST_VMLINUX=1 -if [ -n "${CONFIG_LTO_CLANG}" ]; then - # Call recordmcount if needed - recordmcount vmlinux.o -fi - info MODINFO modules.builtin.modinfo ${OBJCOPY} -j .modinfo -O binary vmlinux.o modules.builtin.modinfo info GEN modules.builtin diff --git a/scripts/recordmcount.c b/scripts/recordmcount.c index 00f2c3efa87e..7225107a9aaf 100644 --- a/scripts/recordmcount.c +++ b/scripts/recordmcount.c @@ -412,9 +412,7 @@ static int is_mcounted_section_name(char const *const txtname) strcmp(".irqentry.text", txtname) == 0 || strcmp(".softirqentry.text", txtname) == 0 || strcmp(".kprobes.text", txtname) == 0 || - strcmp(".cpuidle.text", txtname) == 0 || - (strncmp(".text.", txtname, 6) == 0 && - strcmp(".text..ftrace", txtname) != 0); + strcmp(".cpuidle.text", txtname) == 0; } static char const *already_has_rel_mcount = "success"; /* our work here is done! */