public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Steven Rostedt <rostedt@goodmis.org>
To: linux-kernel@vger.kernel.org
Cc: Ingo Molnar <mingo@elte.hu>,
	Andrew Morton <akpm@linux-foundation.org>,
	Frederic Weisbecker <fweisbec@gmail.com>,
	John Reiser <jreiser@bitwagon.com>
Subject: [PATCH 11/15] ftrace/recordmcount: Remove duplicate code to find mcount symbol
Date: Wed, 18 May 2011 12:08:20 -0400	[thread overview]
Message-ID: <20110518160908.909643800@goodmis.org> (raw)
In-Reply-To: 20110518160809.724215604@goodmis.org

[-- Attachment #1: 0011-ftrace-recordmcount-Remove-duplicate-code-to-find-mc.patch --]
[-- Type: text/plain, Size: 3587 bytes --]

From: Steven Rostedt <srostedt@redhat.com>

The code in sift_rel_mcount() and nop_mcount() to get the mcount symbol
number is identical. Replace the two locations with a call to a function
that does the work.

Cc: John Reiser <jreiser@bitwagon.com>
Link: http://lkml.kernel.org/r/20110421023739.488093407@goodmis.org
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
 scripts/recordmcount.h |   51 +++++++++++++++++++++++++----------------------
 1 files changed, 27 insertions(+), 24 deletions(-)

diff --git a/scripts/recordmcount.h b/scripts/recordmcount.h
index 22033d5..deb6a51 100644
--- a/scripts/recordmcount.h
+++ b/scripts/recordmcount.h
@@ -28,6 +28,7 @@
 #undef __has_rel_mcount
 #undef has_rel_mcount
 #undef tot_relsize
+#undef get_mcountsym
 #undef do_func
 #undef Elf_Addr
 #undef Elf_Ehdr
@@ -56,6 +57,7 @@
 # define has_rel_mcount		has64_rel_mcount
 # define tot_relsize		tot64_relsize
 # define do_func		do64
+# define get_mcountsym		get_mcountsym_64
 # define is_fake_mcount		is_fake_mcount64
 # define fn_is_fake_mcount	fn_is_fake_mcount64
 # define MIPS_is_fake_mcount	MIPS64_is_fake_mcount
@@ -85,6 +87,7 @@
 # define has_rel_mcount		has32_rel_mcount
 # define tot_relsize		tot32_relsize
 # define do_func		do32
+# define get_mcountsym		get_mcountsym_32
 # define is_fake_mcount		is_fake_mcount32
 # define fn_is_fake_mcount	fn_is_fake_mcount32
 # define MIPS_is_fake_mcount	MIPS32_is_fake_mcount
@@ -237,6 +240,26 @@ static void append_func(Elf_Ehdr *const ehdr,
 	uwrite(fd_map, ehdr, sizeof(*ehdr));
 }
 
+static unsigned get_mcountsym(Elf_Sym const *const sym0,
+			      Elf_Rel const *relp,
+			      char const *const str0)
+{
+	unsigned mcountsym = 0;
+
+	Elf_Sym const *const symp =
+		&sym0[Elf_r_sym(relp)];
+	char const *symname = &str0[w(symp->st_name)];
+	char const *mcount = gpfx == '_' ? "_mcount" : "mcount";
+
+	if (symname[0] == '.')
+		++symname;  /* ppc64 hack */
+	if (strcmp(mcount, symname) == 0 ||
+	    (altmcount && strcmp(altmcount, symname) == 0))
+		mcountsym = Elf_r_sym(relp);
+
+	return mcountsym;
+}
+
 /*
  * Look at the relocations in order to find the calls to mcount.
  * Accumulate the section offsets that are found, and their relocation info,
@@ -274,18 +297,8 @@ static uint_t *sift_rel_mcount(uint_t *mlocp,
 	unsigned t;
 
 	for (t = nrel; t; --t) {
-		if (!mcountsym) {
-			Elf_Sym const *const symp =
-				&sym0[Elf_r_sym(relp)];
-			char const *symname = &str0[w(symp->st_name)];
-			char const *mcount = gpfx == '_' ? "_mcount" : "mcount";
-
-			if (symname[0] == '.')
-				++symname;  /* ppc64 hack */
-			if (strcmp(mcount, symname) == 0 ||
-			    (altmcount && strcmp(altmcount, symname) == 0))
-				mcountsym = Elf_r_sym(relp);
-		}
+		if (!mcountsym)
+			mcountsym = get_mcountsym(sym0, relp, str0);
 
 		if (mcountsym == Elf_r_sym(relp) && !is_fake_mcount(relp)) {
 			uint_t const addend = _w(_w(relp->r_offset) - recval);
@@ -342,18 +355,8 @@ static void nop_mcount(Elf_Shdr const *const relhdr,
 	for (t = nrel; t; --t) {
 		int ret = -1;
 
-		if (!mcountsym) {
-			Elf_Sym const *const symp =
-				&sym0[Elf_r_sym(relp)];
-			char const *symname = &str0[w(symp->st_name)];
-			char const *mcount = gpfx == '_' ? "_mcount" : "mcount";
-
-			if (symname[0] == '.')
-				++symname;  /* ppc64 hack */
-			if (strcmp(mcount, symname) == 0 ||
-			    (altmcount && strcmp(altmcount, symname) == 0))
-				mcountsym = Elf_r_sym(relp);
-		}
+		if (!mcountsym)
+			mcountsym = get_mcountsym(sym0, relp, str0);
 
 		if (mcountsym == Elf_r_sym(relp) && !is_fake_mcount(relp)) {
 			if (make_nop)
-- 
1.7.4.4



  parent reply	other threads:[~2011-05-18 16:10 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-05-18 16:08 [PATCH 00/15] [GIT PULL] ftrace/recordmcount: cleanups and updates for recordmcount processing Steven Rostedt
2011-05-18 16:08 ` [PATCH 01/15] ftrace/kbuild: Add recordmcount files to force full build Steven Rostedt
2011-05-18 16:08 ` [PATCH 02/15] ftrace/trivial: Clean up recordmcount.c to use Linux style Steven Rostedt
2011-05-18 16:08 ` [PATCH 03/15] ftrace/trivial: Clean up record mcount to use Linux switch style Steven Rostedt
2011-05-18 16:08 ` [PATCH 04/15] ftrace: Add .kprobe.text section to whitelist for recordmcount.c Steven Rostedt
2011-05-18 16:08 ` [PATCH 05/15] ftrace/recordmcount: Modify only executable sections Steven Rostedt
2011-05-18 16:08 ` [PATCH 06/15] ftrace/recordmcount: Make ignored mcount calls into nops at compile Steven Rostedt
2011-05-18 16:08 ` [PATCH 07/15] ftrace/recordmcount: Add warning logic to warn on mcount not Steven Rostedt
2011-05-18 16:08 ` [PATCH 08/15] kbuild/recordmcount: Add RECORDMCOUNT_WARN to warn about mcount Steven Rostedt
2011-05-18 16:08 ` [PATCH 09/15] ftrace: Avoid recording mcount on .init sections directly Steven Rostedt
2011-05-18 16:08 ` [PATCH 10/15] ftrace/x86: Do not trace .discard.text section Steven Rostedt
2011-05-18 16:08 ` Steven Rostedt [this message]
2011-05-18 16:08 ` [PATCH 12/15] ftrace/recordmcount: Add helper function get_sym_str_and_relp() Steven Rostedt
2011-05-18 16:08 ` [PATCH 13/15] ftrace/recordmcount: mcount address adjustment Steven Rostedt
2011-05-18 16:08 ` [PATCH 14/15] ftrace/x86: mcount offset calculation Steven Rostedt
2011-05-18 16:08 ` [PATCH 15/15] ftrace/s390: " Steven Rostedt
2011-05-18 16:28 ` [PATCH 00/15] [GIT PULL] ftrace/recordmcount: cleanups and updates for recordmcount processing Steven Rostedt
2011-05-18 18:13   ` Ingo Molnar
2011-05-18 18:52     ` Steven Rostedt
2011-05-18 18:02 ` Ingo Molnar

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=20110518160908.909643800@goodmis.org \
    --to=rostedt@goodmis.org \
    --cc=akpm@linux-foundation.org \
    --cc=fweisbec@gmail.com \
    --cc=jreiser@bitwagon.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    /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