Commit 280981d6 authored by Sathvika Vasireddy's avatar Sathvika Vasireddy Committed by Michael Ellerman
Browse files

objtool: Add --mnop as an option to --mcount



Some architectures (powerpc) may not support ftrace locations being nop'ed
out at build time. Introduce CONFIG_HAVE_OBJTOOL_NOP_MCOUNT for objtool, as
a means for architectures to enable nop'ing of ftrace locations. Add --mnop
as an option to objtool --mcount, to indicate support for the same.

Also, make sure that --mnop can be passed as an option to objtool only when
--mcount is passed.

Tested-by: default avatarNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Reviewed-by: default avatarNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Acked-by: default avatarJosh Poimboeuf <jpoimboe@kernel.org>
Reviewed-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: default avatarSathvika Vasireddy <sv@linux.ibm.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20221114175754.1131267-12-sv@linux.ibm.com
parent 86ea7f36
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -933,8 +933,10 @@ ifdef CONFIG_FTRACE_MCOUNT_USE_CC
  endif
endif
ifdef CONFIG_FTRACE_MCOUNT_USE_OBJTOOL
  ifdef CONFIG_HAVE_OBJTOOL_NOP_MCOUNT
    CC_FLAGS_USING	+= -DCC_USING_NOP_MCOUNT
  endif
endif
ifdef CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT
  ifdef CONFIG_HAVE_C_RECORDMCOUNT
    BUILD_C_RECORDMCOUNT := y
+1 −0
Original line number Diff line number Diff line
@@ -195,6 +195,7 @@ config X86
	select HAVE_CONTEXT_TRACKING_USER_OFFSTACK	if HAVE_CONTEXT_TRACKING_USER
	select HAVE_C_RECORDMCOUNT
	select HAVE_OBJTOOL_MCOUNT		if HAVE_OBJTOOL
	select HAVE_OBJTOOL_NOP_MCOUNT		if HAVE_OBJTOOL_MCOUNT
	select HAVE_BUILDTIME_MCOUNT_SORT
	select HAVE_DEBUG_KMEMLEAK
	select HAVE_DMA_CONTIGUOUS
+7 −0
Original line number Diff line number Diff line
@@ -82,6 +82,13 @@ config HAVE_OBJTOOL_MCOUNT
	help
	  Arch supports objtool --mcount

config HAVE_OBJTOOL_NOP_MCOUNT
	bool
	help
	  Arch supports the objtool options --mcount with --mnop.
	  An architecture can select this if it wants to enable nop'ing
	  of ftrace locations.

config HAVE_C_RECORDMCOUNT
	bool
	help
+3 −0
Original line number Diff line number Diff line
@@ -256,6 +256,9 @@ objtool-args-$(CONFIG_HAVE_JUMP_LABEL_HACK) += --hacks=jump_label
objtool-args-$(CONFIG_HAVE_NOINSTR_HACK)		+= --hacks=noinstr
objtool-args-$(CONFIG_X86_KERNEL_IBT)			+= --ibt
objtool-args-$(CONFIG_FTRACE_MCOUNT_USE_OBJTOOL)	+= --mcount
ifdef CONFIG_FTRACE_MCOUNT_USE_OBJTOOL
objtool-args-$(CONFIG_HAVE_OBJTOOL_NOP_MCOUNT)		+= --mnop
endif
objtool-args-$(CONFIG_UNWINDER_ORC)			+= --orc
objtool-args-$(CONFIG_RETPOLINE)			+= --retpoline
objtool-args-$(CONFIG_RETHUNK)				+= --rethunk
+14 −0
Original line number Diff line number Diff line
@@ -82,6 +82,7 @@ const struct option check_options[] = {
	OPT_BOOLEAN(0, "dry-run", &opts.dryrun, "don't write modifications"),
	OPT_BOOLEAN(0, "link", &opts.link, "object is a linked object"),
	OPT_BOOLEAN(0, "module", &opts.module, "object is part of a kernel module"),
	OPT_BOOLEAN(0, "mnop", &opts.mnop, "nop out mcount call sites"),
	OPT_BOOLEAN(0, "no-unreachable", &opts.no_unreachable, "skip 'unreachable instruction' warnings"),
	OPT_BOOLEAN(0, "sec-address", &opts.sec_address, "print section addresses in warnings"),
	OPT_BOOLEAN(0, "stats", &opts.stats, "print statistics"),
@@ -150,6 +151,16 @@ static bool opts_valid(void)
	return false;
}

static bool mnop_opts_valid(void)
{
	if (opts.mnop && !opts.mcount) {
		ERROR("--mnop requires --mcount");
		return false;
	}

	return true;
}

static bool link_opts_valid(struct objtool_file *file)
{
	if (opts.link)
@@ -198,6 +209,9 @@ int objtool_run(int argc, const char **argv)
	if (!file)
		return 1;

	if (!mnop_opts_valid())
		return 1;

	if (!link_opts_valid(file))
		return 1;

Loading