Commit 9440155c authored by Peter Zijlstra (Intel)'s avatar Peter Zijlstra (Intel) Committed by Daniel Borkmann
Browse files

ftrace: Add HAVE_DYNAMIC_FTRACE_NO_PATCHABLE



x86 will shortly start using -fpatchable-function-entry for purposes
other than ftrace, make sure the __patchable_function_entry section
isn't merged in the mcount_loc section.

Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20220903131154.420467-2-jolsa@kernel.org
parent bfeb7e39
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -154,6 +154,14 @@
#define MEM_DISCARD(sec) *(.mem##sec)
#endif

#ifndef CONFIG_HAVE_DYNAMIC_FTRACE_NO_PATCHABLE
#define KEEP_PATCHABLE		KEEP(*(__patchable_function_entries))
#define PATCHABLE_DISCARDS
#else
#define KEEP_PATCHABLE
#define PATCHABLE_DISCARDS	*(__patchable_function_entries)
#endif

#ifdef CONFIG_FTRACE_MCOUNT_RECORD
/*
 * The ftrace call sites are logged to a section whose name depends on the
@@ -172,7 +180,7 @@
#define MCOUNT_REC()	. = ALIGN(8);				\
			__start_mcount_loc = .;			\
			KEEP(*(__mcount_loc))			\
			KEEP(*(__patchable_function_entries))	\
			KEEP_PATCHABLE				\
			__stop_mcount_loc = .;			\
			ftrace_stub_graph = ftrace_stub;	\
			ftrace_ops_list_func = arch_ftrace_ops_list_func;
@@ -1024,6 +1032,7 @@

#define COMMON_DISCARDS							\
	SANITIZER_DISCARDS						\
	PATCHABLE_DISCARDS						\
	*(.discard)							\
	*(.discard.*)							\
	*(.modinfo)							\
+6 −0
Original line number Diff line number Diff line
@@ -51,6 +51,12 @@ config HAVE_DYNAMIC_FTRACE_WITH_ARGS
	 This allows for use of regs_get_kernel_argument() and
	 kernel_stack_pointer().

config HAVE_DYNAMIC_FTRACE_NO_PATCHABLE
	bool
	help
	  If the architecture generates __patchable_function_entries sections
	  but does not want them included in the ftrace locations.

config HAVE_FTRACE_MCOUNT_RECORD
	bool
	help
+2 −1
Original line number Diff line number Diff line
@@ -4113,7 +4113,8 @@ static int validate_ibt(struct objtool_file *file)
		    !strcmp(sec->name, "__bug_table")			||
		    !strcmp(sec->name, "__ex_table")			||
		    !strcmp(sec->name, "__jump_table")			||
		    !strcmp(sec->name, "__mcount_loc"))
		    !strcmp(sec->name, "__mcount_loc")			||
		    strstr(sec->name, "__patchable_function_entries"))
			continue;

		list_for_each_entry(reloc, &sec->reloc->reloc_list, list)