Commit 22102f45 authored by Josh Poimboeuf's avatar Josh Poimboeuf Committed by Peter Zijlstra
Browse files

objtool: Make noinstr hacks optional



Objtool has some hacks in place to workaround toolchain limitations
which otherwise would break no-instrumentation rules.  Make the hacks
explicit (and optional for other arches) by turning it into a cmdline
option and kernel config option.

Signed-off-by: default avatarJosh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: default avatarMiroslav Benes <mbenes@suse.cz>
Link: https://lkml.kernel.org/r/b326eeb9c33231b9dfbb925f194ed7ee40edcd7c.1650300597.git.jpoimboe@redhat.com
parent 4ab7674f
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -1035,6 +1035,9 @@ config HAVE_OBJTOOL
config HAVE_JUMP_LABEL_HACK
	bool

config HAVE_NOINSTR_HACK
	bool

config HAVE_STACK_VALIDATION
	bool
	help
+1 −0
Original line number Diff line number Diff line
@@ -231,6 +231,7 @@ config X86
	select HAVE_MOD_ARCH_SPECIFIC
	select HAVE_MOVE_PMD
	select HAVE_MOVE_PUD
	select HAVE_NOINSTR_HACK		if HAVE_OBJTOOL
	select HAVE_NMI
	select HAVE_OBJTOOL			if X86_64
	select HAVE_OPTPROBES
+2 −2
Original line number Diff line number Diff line
@@ -2036,11 +2036,11 @@ config KCOV
	bool "Code coverage for fuzzing"
	depends on ARCH_HAS_KCOV
	depends on CC_HAS_SANCOV_TRACE_PC || GCC_PLUGINS
	depends on !ARCH_WANTS_NO_INSTR || HAVE_OBJTOOL || \
	depends on !ARCH_WANTS_NO_INSTR || HAVE_NOINSTR_HACK || \
		   GCC_VERSION >= 120000 || CLANG_VERSION >= 130000
	select DEBUG_FS
	select GCC_PLUGIN_SANCOV if !CC_HAS_SANCOV_TRACE_PC
	select OBJTOOL if HAVE_OBJTOOL
	select OBJTOOL if HAVE_NOINSTR_HACK
	help
	  KCOV exposes kernel code coverage information in a form suitable
	  for coverage-guided fuzzing (randomized testing).
+3 −2
Original line number Diff line number Diff line
@@ -187,8 +187,9 @@ config KCSAN_WEAK_MEMORY
	# We can either let objtool nop __tsan_func_{entry,exit}() and builtin
	# atomics instrumentation in .noinstr.text, or use a compiler that can
	# implement __no_kcsan to really remove all instrumentation.
	depends on HAVE_OBJTOOL || CC_IS_GCC || CLANG_VERSION >= 140000
	select OBJTOOL if HAVE_OBJTOOL
	depends on !ARCH_WANTS_NO_INSTR || HAVE_NOINSTR_HACK || \
		   CC_IS_GCC || CLANG_VERSION >= 140000
	select OBJTOOL if HAVE_NOINSTR_HACK
	help
	  Enable support for modeling a subset of weak memory, which allows
	  detecting a subset of data races due to missing memory barriers.
+1 −0
Original line number Diff line number Diff line
@@ -228,6 +228,7 @@ objtool := $(objtree)/tools/objtool/objtool

objtool_args =								\
	$(if $(CONFIG_HAVE_JUMP_LABEL_HACK), --hacks=jump_label)	\
	$(if $(CONFIG_HAVE_NOINSTR_HACK), --hacks=noinstr)		\
	$(if $(CONFIG_X86_KERNEL_IBT), --lto --ibt)			\
	$(if $(CONFIG_FTRACE_MCOUNT_USE_OBJTOOL), --mcount)		\
	$(if $(CONFIG_UNWINDER_ORC), --orc)				\
Loading