public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Matt Helsley <mhelsley@vmware.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: <linux-kernel@vger.kernel.org>,
	Josh Poimboeuf <jpoimboe@redhat.com>,
	Steven Rostedt <rostedt@goodmis.org>,
	Sami Tolvanen <samitolvanen@google.com>,
	Julien Thierry <jthierry@redhat.com>,
	Kamalesh Babulal <kamalesh@linux.vnet.ibm.com>
Subject: Re: [RFC][PATCH v4 18/32] objtool: mcount: Move nop_mcount()
Date: Wed, 17 Jun 2020 10:36:20 -0700	[thread overview]
Message-ID: <20200617173620.GA89648@rlwimi.vmware.com> (raw)
In-Reply-To: <20200612160534.GD2554@hirez.programming.kicks-ass.net>

On Fri, Jun 12, 2020 at 06:05:34PM +0200, Peter Zijlstra wrote:
> On Fri, Jun 12, 2020 at 03:26:57PM +0200, Peter Zijlstra wrote:
> > On Tue, Jun 02, 2020 at 12:50:11PM -0700, Matt Helsley wrote:
> > > +static int nop_mcount(struct section * const rels,
> > > +		      const char *const txtname)
> > > +{
> > > +	struct reloc *reloc;
> > > +	struct section *txts = find_section_by_index(lf, rels->sh.sh_info);
> > > +	unsigned mcountsym = 0;
> > > +	int once = 0;
> > > +
> > > +	list_for_each_entry(reloc, &rels->reloc_list, list) {
> > > +		int ret = -1;
> > > +
> > > +		if (!mcountsym)
> > > +			mcountsym = get_mcountsym(reloc);
> > > +
> > > +		if (mcountsym == GELF_R_INFO(reloc->sym->idx, reloc->type) && !is_fake_mcount(reloc)) {
> > 
> > This makes no sense to me; why not have mcountsym be a 'struct symbol
> > *' and have get_mcountsym() return one of those.
> > 
> > 	if (reloc->sym == mcountsym && ... )
> > 
> > is much nicer, no?

(this is already incorporated in my unposted revisions but...)

> 
> On top of that, I suppose we can do something like the below.
> 
> Then you can simply write:
> 
> 	if (reloc->sym->class == SYM_MCOUNT && ..)

This looks like a good way to move towards a "single pass" through the ELF data
for mcount.

What order do you want to see this patch go in? Before this series (i.e. perhaps
just a kcov SYM_ class to start)? Early or late in this series? After?

Right now I'm thinking of putting this on the end of my series because
I'm focusing on converting recordmcount in the series and this isn't
strictly necessary but is definitely nicer.

> 
> ---
> 
> diff --git a/kernel/locking/Makefile b/kernel/locking/Makefile
> index 45452facff3b..94e4b8fcf9c1 100644
> --- a/kernel/locking/Makefile
> +++ b/kernel/locking/Makefile
> @@ -1,7 +1,7 @@
>  # SPDX-License-Identifier: GPL-2.0
>  # Any varying coverage in these files is non-deterministic
>  # and is generally not a function of system call inputs.
> -KCOV_INSTRUMENT		:= n
> +# KCOV_INSTRUMENT		:= n
>  
>  obj-y += mutex.o semaphore.o rwsem.o percpu-rwsem.o
>  
> diff --git a/tools/objtool/elf.c b/tools/objtool/elf.c
> index 432417a83902..133c0c285be6 100644
> --- a/tools/objtool/elf.c
> +++ b/tools/objtool/elf.c
> @@ -341,6 +341,24 @@ static int read_sections(struct elf *elf)
>  	return 0;
>  }
>  
> +static bool is_mcount_symbol(const char *name)
> +{
> +	if (name[0] == '.')
> +		name++;
> +
> +	if (name[0] == '_')
> +		name++;
> +
> +	return !strcmp(name, "mcount", 6) ||

Looks like you intended this to be a strncmp() but I don't see a reason to
use strncmp(). Am I missing something?

> +	       !strcmp(name, "_fentry__") ||
> +	       !strcmp(name, "_gnu_mcount_nc");
> +}

This mashes all of the arch-specific mcount name checks together. I
don't see a problem with that because I doubt there will be a collision
with other functions. Just to be careful I looked through the Clang and
GCC sources, though I only dug through the history of Clang's output --
GCC's history with respect to mcount symbol names across architectures is
much harder to trace so I only looked at the current sources.

<snip> (the rest looks good)

Cheers,
    -Matt Helsley

  reply	other threads:[~2020-06-17 17:36 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-02 19:49 [RFC][PATCH v4 00/32] objtool: Make recordmcount a subcommand Matt Helsley
2020-06-02 19:49 ` [RFC][PATCH v4 01/32] objtool: Prepare to merge recordmcount Matt Helsley
2020-06-09  8:54   ` Julien Thierry
2020-06-09 15:42     ` Matt Helsley
2020-06-09 19:31       ` Julien Thierry
2020-06-02 19:49 ` [RFC][PATCH v4 02/32] objtool: Make recordmcount into mcount subcmd Matt Helsley
2020-06-09  9:00   ` Julien Thierry
2020-06-09 18:39     ` Matt Helsley
2020-06-09 18:52       ` Steven Rostedt
2020-06-09 18:56         ` Matt Helsley
2020-06-09 19:11       ` Julien Thierry
2020-06-02 19:49 ` [RFC][PATCH v4 03/32] objtool: recordmcount: Start using objtool's elf wrapper Matt Helsley
2020-06-02 19:49 ` [RFC][PATCH v4 04/32] objtool: recordmcount: Search for __mcount_loc before walking the sections Matt Helsley
2020-06-02 19:49 ` [RFC][PATCH v4 05/32] objtool: recordmcount: Convert do_func() relhdrs Matt Helsley
2020-06-02 19:49 ` [RFC][PATCH v4 06/32] objtool: mcount: Remove unused fname parameter Matt Helsley
2020-06-02 19:50 ` [RFC][PATCH v4 07/32] objtool: mcount: Use libelf for section header names Matt Helsley
2020-06-02 19:50 ` [RFC][PATCH v4 08/32] objtool: mcount: Walk objtool Elf structs in find_secsym_ndx Matt Helsley
2020-06-02 19:50 ` [RFC][PATCH v4 09/32] objtool: mcount: Use symbol structs to find mcount relocations Matt Helsley
2020-06-02 19:50 ` [RFC][PATCH v4 10/32] objtool: mcount: Walk relocation lists Matt Helsley
2020-06-02 19:50 ` [RFC][PATCH v4 11/32] objtool: mcount: Move get_mcountsym Matt Helsley
2020-06-02 19:50 ` [RFC][PATCH v4 12/32] objtool: mcount: Replace MIPS offset types Matt Helsley
2020-06-02 19:50 ` [RFC][PATCH v4 13/32] objtool: mcount: Move is_fake_mcount() Matt Helsley
2020-06-02 19:50 ` [RFC][PATCH v4 14/32] objtool: mcount: Stop using ehdr in find_section_sym_index Matt Helsley
2020-06-02 19:50 ` [RFC][PATCH v4 15/32] objtool: mcount: Move find_section_sym_index() Matt Helsley
2020-06-02 19:50 ` [RFC][PATCH v4 16/32] objtool: mcount: Restrict using ehdr in append_func() Matt Helsley
2020-06-02 19:50 ` [RFC][PATCH v4 17/32] objtool: mcount: Use objtool ELF to write Matt Helsley
2020-06-02 19:50 ` [RFC][PATCH v4 18/32] objtool: mcount: Move nop_mcount() Matt Helsley
2020-06-12 13:26   ` Peter Zijlstra
2020-06-12 16:05     ` Peter Zijlstra
2020-06-17 17:36       ` Matt Helsley [this message]
2020-06-17 18:30         ` Peter Zijlstra
2020-06-13 19:49     ` Matt Helsley
2020-06-02 19:50 ` [RFC][PATCH v4 19/32] objtool: mcount: Move has_rel_mcount() and tot_relsize() Matt Helsley
2020-06-02 19:50 ` [RFC][PATCH v4 20/32] objtool: mcount: Move relocation entry size detection Matt Helsley
2020-06-02 19:50 ` [RFC][PATCH v4 21/32] objtool: mcount: Only keep ELF file size Matt Helsley
2020-06-02 19:50 ` [RFC][PATCH v4 22/32] objtool: mcount: Use ELF header from objtool Matt Helsley
2020-06-02 19:50 ` [RFC][PATCH v4 23/32] objtool: mcount: Remove unused file mapping Matt Helsley
2020-06-02 19:50 ` [RFC][PATCH v4 24/32] objtool: mcount: Reduce usage of _size wrapper Matt Helsley
2020-06-02 19:50 ` [RFC][PATCH v4 25/32] objtool: mcount: Move mcount_adjust out of wrapper Matt Helsley
2020-06-02 19:50 ` [RFC][PATCH v4 26/32] objtool: mcount: Pre-allocate new ELF sections Matt Helsley
2020-06-02 19:50 ` [RFC][PATCH v4 27/32] objtool: mcount: Generic location and relocation table types Matt Helsley
2020-06-09  6:41   ` Kamalesh Babulal
2020-06-09 18:12     ` Matt Helsley
2020-06-10  4:35       ` Kamalesh Babulal
2020-06-02 19:50 ` [RFC][PATCH v4 28/32] objtool: mcount: Move sift_rel_mcount out of wrapper file Matt Helsley
2020-06-02 19:50 ` [RFC][PATCH v4 29/32] objtool: mcount: Remove wrapper for ELF relocation type Matt Helsley
2020-06-02 19:50 ` [RFC][PATCH v4 30/32] objtool: mcount: Remove wrapper double-include trick Matt Helsley
2020-06-02 19:50 ` [RFC][PATCH v4 31/32] objtool: mcount: Remove endian wrappers Matt Helsley
2020-06-02 19:50 ` [RFC][PATCH v4 32/32] objtool: mcount: Rename Matt Helsley

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=20200617173620.GA89648@rlwimi.vmware.com \
    --to=mhelsley@vmware.com \
    --cc=jpoimboe@redhat.com \
    --cc=jthierry@redhat.com \
    --cc=kamalesh@linux.vnet.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=samitolvanen@google.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