Commit 4ed308c4 authored by Steven Rostedt (Google)'s avatar Steven Rostedt (Google)
Browse files

ftrace: Have architectures opt-in for mcount build time sorting

First S390 complained that the sorting of the mcount sections at build
time caused the kernel to crash on their architecture. Now PowerPC is
complaining about it too. And also ARM64 appears to be having issues.

It may be necessary to also update the relocation table for the values
in the mcount table. Not only do we have to sort the table, but also
update the relocations that may be applied to the items in the table.

If the system is not relocatable, then it is fine to sort, but if it is,
some architectures may have issues (although x86 does not as it shifts all
addresses the same).

Add a HAVE_BUILDTIME_MCOUNT_SORT that an architecture can set to say it is
safe to do the sorting at build time.

Also update the config to compile in build time sorting in the sorttable
code in scripts/ to depend on CONFIG_BUILDTIME_MCOUNT_SORT.

Link: https://lore.kernel.org/all/944D10DA-8200-4BA9-8D0A-3BED9AA99F82@linux.ibm.com/
Link: https://lkml.kernel.org/r/20220127153821.3bc1ac6e@gandalf.local.home



Cc: Ingo Molnar <mingo@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Russell King <linux@armlinux.org.uk>
Cc: Yinan Liu <yinan@linux.alibaba.com>
Cc: Ard Biesheuvel <ardb@kernel.org>
Cc: Kees Cook <keescook@chromium.org>
Reported-by: default avatarSachin Sant <sachinp@linux.ibm.com>
Reviewed-by: default avatarMark Rutland <mark.rutland@arm.com>
Tested-by: Mark Rutland <mark.rutland@arm.com> [arm64]
Tested-by: default avatarSachin Sant <sachinp@linux.ibm.com>
Fixes: 72b3942a ("scripts: ftrace - move the sort-processing in ftrace_init")
Signed-off-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
parent e783362e
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -83,6 +83,7 @@ config ARM
	select HAVE_EBPF_JIT if !CPU_ENDIAN_BE32
	select HAVE_CONTEXT_TRACKING
	select HAVE_C_RECORDMCOUNT
	select HAVE_BUILDTIME_MCOUNT_SORT
	select HAVE_DEBUG_KMEMLEAK if !XIP_KERNEL
	select HAVE_DMA_CONTIGUOUS if MMU
	select HAVE_DYNAMIC_FTRACE if !XIP_KERNEL && !CPU_ENDIAN_BE32 && MMU
+1 −0
Original line number Diff line number Diff line
@@ -186,6 +186,7 @@ config X86
	select HAVE_CONTEXT_TRACKING_OFFSTACK	if HAVE_CONTEXT_TRACKING
	select HAVE_C_RECORDMCOUNT
	select HAVE_OBJTOOL_MCOUNT		if STACK_VALIDATION
	select HAVE_BUILDTIME_MCOUNT_SORT
	select HAVE_DEBUG_KMEMLEAK
	select HAVE_DMA_CONTIGUOUS
	select HAVE_DYNAMIC_FTRACE
+7 −1
Original line number Diff line number Diff line
@@ -70,10 +70,16 @@ config HAVE_C_RECORDMCOUNT
	help
	  C version of recordmcount available?

config HAVE_BUILDTIME_MCOUNT_SORT
       bool
       help
         An architecture selects this if it sorts the mcount_loc section
	 at build time.

config BUILDTIME_MCOUNT_SORT
       bool
       default y
       depends on BUILDTIME_TABLE_SORT && !S390
       depends on HAVE_BUILDTIME_MCOUNT_SORT && DYNAMIC_FTRACE
       help
         Sort the mcount_loc section at build time.

+1 −1
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@ HOSTCFLAGS_sorttable.o += -I$(srctree)/tools/arch/x86/include
HOSTCFLAGS_sorttable.o += -DUNWINDER_ORC_ENABLED
endif

ifdef CONFIG_DYNAMIC_FTRACE
ifdef CONFIG_BUILDTIME_MCOUNT_SORT
HOSTCFLAGS_sorttable.o += -DMCOUNT_SORT_ENABLED
endif