linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Christophe Leroy <christophe.leroy@csgroup.eu>
To: Sathvika Vasireddy <sv@linux.ibm.com>,
	"linuxppc-dev@lists.ozlabs.org" <linuxppc-dev@lists.ozlabs.org>
Cc: "jpoimboe@redhat.com" <jpoimboe@redhat.com>,
	"peterz@infradead.org" <peterz@infradead.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"aik@ozlabs.ru" <aik@ozlabs.ru>,
	"mpe@ellerman.id.au" <mpe@ellerman.id.au>,
	"mingo@redhat.com" <mingo@redhat.com>,
	"rostedt@goodmis.org" <rostedt@goodmis.org>,
	"mbenes@suse.cz" <mbenes@suse.cz>,
	"npiggin@gmail.com" <npiggin@gmail.com>,
	"chenzhongjin@huawei.com" <chenzhongjin@huawei.com>,
	"naveen.n.rao@linux.vnet.ibm.com"
	<naveen.n.rao@linux.vnet.ibm.com>
Subject: Re: [PATCH v4 11/16] objtool: Add --mnop as an option to --mcount
Date: Sun, 2 Oct 2022 17:40:41 +0000	[thread overview]
Message-ID: <172590d6-8e46-4992-acc5-a2d01504636b@csgroup.eu> (raw)
In-Reply-To: <20221002104240.1316480-12-sv@linux.ibm.com>



Le 02/10/2022 à 12:42, Sathvika Vasireddy a écrit :
> 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.
> 
> Signed-off-by: Sathvika Vasireddy <sv@linux.ibm.com>

Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>

> ---
>   Makefile                                |  4 +++-
>   arch/x86/Kconfig                        |  1 +
>   kernel/trace/Kconfig                    |  7 +++++++
>   scripts/Makefile.lib                    |  1 +
>   tools/objtool/builtin-check.c           | 14 ++++++++++++++
>   tools/objtool/check.c                   | 19 ++++++++++---------
>   tools/objtool/include/objtool/builtin.h |  1 +
>   7 files changed, 37 insertions(+), 10 deletions(-)
> 
> diff --git a/Makefile b/Makefile
> index a5e9d9388649..b2230ad14748 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -857,7 +857,9 @@ ifdef CONFIG_FTRACE_MCOUNT_USE_CC
>     endif
>   endif
>   ifdef CONFIG_FTRACE_MCOUNT_USE_OBJTOOL
> -  CC_FLAGS_USING	+= -DCC_USING_NOP_MCOUNT
> +  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
> diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
> index f9920f1341c8..2a79a05c4402 100644
> --- a/arch/x86/Kconfig
> +++ b/arch/x86/Kconfig
> @@ -189,6 +189,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
> diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig
> index 1052126bdca2..9c696cb24756 100644
> --- a/kernel/trace/Kconfig
> +++ b/kernel/trace/Kconfig
> @@ -76,6 +76,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
> diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
> index 3fb6a99e78c4..ce14e3b8577f 100644
> --- a/scripts/Makefile.lib
> +++ b/scripts/Makefile.lib
> @@ -234,6 +234,7 @@ objtool_args =								\
>   	$(if $(CONFIG_HAVE_NOINSTR_HACK), --hacks=noinstr)		\
>   	$(if $(CONFIG_X86_KERNEL_IBT), --ibt)				\
>   	$(if $(CONFIG_FTRACE_MCOUNT_USE_OBJTOOL), --mcount)		\
> +	$(if $(CONFIG_HAVE_OBJTOOL_NOP_MCOUNT), --mnop)                 \
>   	$(if $(CONFIG_UNWINDER_ORC), --orc)				\
>   	$(if $(CONFIG_RETPOLINE), --retpoline)				\
>   	$(if $(CONFIG_RETHUNK), --rethunk)				\
> diff --git a/tools/objtool/builtin-check.c b/tools/objtool/builtin-check.c
> index 24fbe803a0d3..9bd347d3c244 100644
> --- a/tools/objtool/builtin-check.c
> +++ b/tools/objtool/builtin-check.c
> @@ -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;
>   
> diff --git a/tools/objtool/check.c b/tools/objtool/check.c
> index 738de23cb9e8..35827e6c6df9 100644
> --- a/tools/objtool/check.c
> +++ b/tools/objtool/check.c
> @@ -1233,17 +1233,18 @@ static void annotate_call_site(struct objtool_file *file,
>   	if (opts.mcount && sym->fentry) {
>   		if (sibling)
>   			WARN_FUNC("Tail call to __fentry__ !?!?", insn->sec, insn->offset);
> +		if (opts.mnop) {
> +			if (reloc) {
> +				reloc->type = R_NONE;
> +				elf_write_reloc(file->elf, reloc);
> +			}
>   
> -		if (reloc) {
> -			reloc->type = R_NONE;
> -			elf_write_reloc(file->elf, reloc);
> -		}
> -
> -		elf_write_insn(file->elf, insn->sec,
> -			       insn->offset, insn->len,
> -			       arch_nop_insn(insn->len));
> +			elf_write_insn(file->elf, insn->sec,
> +				       insn->offset, insn->len,
> +				       arch_nop_insn(insn->len));
>   
> -		insn->type = INSN_NOP;
> +			insn->type = INSN_NOP;
> +		}
>   
>   		list_add_tail(&insn->call_node, &file->mcount_loc_list);
>   		return;
> diff --git a/tools/objtool/include/objtool/builtin.h b/tools/objtool/include/objtool/builtin.h
> index 42a52f1a0add..0785707c5a92 100644
> --- a/tools/objtool/include/objtool/builtin.h
> +++ b/tools/objtool/include/objtool/builtin.h
> @@ -31,6 +31,7 @@ struct opts {
>   	bool backup;
>   	bool dryrun;
>   	bool link;
> +	bool mnop;
>   	bool module;
>   	bool no_unreachable;
>   	bool sec_address;

  reply	other threads:[~2022-10-02 17:40 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-02 10:42 [PATCH v4 00/16] objtool: Enable and implement --mcount option on powerpc Sathvika Vasireddy
2022-10-02 10:42 ` [PATCH v4 01/16] powerpc: Fix __WARN_FLAGS() for use with Objtool Sathvika Vasireddy
2022-10-02 10:42 ` [PATCH v4 02/16] powerpc: Override __ALIGN and __ALIGN_STR macros Sathvika Vasireddy
2022-10-02 17:41   ` Christophe Leroy
2022-10-02 10:42 ` [PATCH v4 03/16] powerpc: Fix objtool unannotated intra-function call warnings Sathvika Vasireddy
2022-10-10 11:34   ` Naveen N. Rao
2022-10-02 10:42 ` [PATCH v4 04/16] powerpc: Curb objtool unannotated intra-function warnings Sathvika Vasireddy
2022-10-02 10:42 ` [PATCH v4 05/16] powerpc: Skip objtool from running on drivers/crypto/vmx/aesp8-ppc.o Sathvika Vasireddy
2022-10-02 10:42 ` [PATCH v4 06/16] powerpc: Fix objtool unannotated intra-function call warnings on PPC32 Sathvika Vasireddy
2022-10-02 10:42 ` [PATCH v4 07/16] powerpc: Skip objtool from running on VDSO files Sathvika Vasireddy
2022-10-02 10:42 ` [PATCH v4 08/16] objtool: Fix SEGFAULT Sathvika Vasireddy
2022-10-02 10:42 ` [PATCH v4 09/16] objtool: Use target file endianness instead of a compiled constant Sathvika Vasireddy
2022-10-02 10:42 ` [PATCH v4 10/16] objtool: Use target file class size " Sathvika Vasireddy
2022-10-02 10:42 ` [PATCH v4 11/16] objtool: Add --mnop as an option to --mcount Sathvika Vasireddy
2022-10-02 17:40   ` Christophe Leroy [this message]
2022-10-10 11:37   ` Naveen N. Rao
2022-10-11 20:33     ` Josh Poimboeuf
2022-10-12 13:47       ` Naveen N. Rao
2022-10-02 10:42 ` [PATCH v4 12/16] objtool: Read special sections with alts only when specific options are selected Sathvika Vasireddy
2022-10-02 17:42   ` Christophe Leroy
2022-10-02 10:42 ` [PATCH v4 13/16] objtool: Use macros to define arch specific reloc types Sathvika Vasireddy
2022-10-02 10:42 ` [PATCH v4 14/16] objtool: Add arch specific function arch_ftrace_match() Sathvika Vasireddy
2022-10-02 10:42 ` [PATCH v4 15/16] objtool/powerpc: Enable objtool to be built on ppc Sathvika Vasireddy
2022-10-02 10:42 ` [PATCH v4 16/16] objtool/powerpc: Add --mcount specific implementation Sathvika Vasireddy
2022-10-02 17:42   ` Christophe Leroy
2022-10-10 11:49 ` [PATCH v4 00/16] objtool: Enable and implement --mcount option on powerpc Naveen N. Rao
     [not found]   ` <notmuch-sha1-66fb111b87471c685a53b80a0502d959f90d07a7>
2022-10-13  0:05     ` Josh Poimboeuf
2022-10-13  3:40       ` Naveen N. Rao

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=172590d6-8e46-4992-acc5-a2d01504636b@csgroup.eu \
    --to=christophe.leroy@csgroup.eu \
    --cc=aik@ozlabs.ru \
    --cc=chenzhongjin@huawei.com \
    --cc=jpoimboe@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mbenes@suse.cz \
    --cc=mingo@redhat.com \
    --cc=mpe@ellerman.id.au \
    --cc=naveen.n.rao@linux.vnet.ibm.com \
    --cc=npiggin@gmail.com \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=sv@linux.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).