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 12/15] ftrace/recordmcount: Add helper function get_sym_str_and_relp()
Date: Wed, 18 May 2011 12:08:21 -0400 [thread overview]
Message-ID: <20110518160909.174141521@goodmis.org> (raw)
In-Reply-To: 20110518160809.724215604@goodmis.org
[-- Attachment #1: 0012-ftrace-recordmcount-Add-helper-function-get_sym_str_.patch --]
[-- Type: text/plain, Size: 4622 bytes --]
From: Steven Rostedt <srostedt@redhat.com>
The code to get the symbol, string, and relp pointers in the two functions
sift_rel_mcount() and nop_mcount() are identical and also non-trivial.
Moving this duplicate code into a single helper function makes the code
easier to read and more maintainable.
Cc: John Reiser <jreiser@bitwagon.com>
Link: http://lkml.kernel.org/r/20110421023739.723658553@goodmis.org
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
scripts/recordmcount.h | 67 ++++++++++++++++++++++++++---------------------
1 files changed, 37 insertions(+), 30 deletions(-)
diff --git a/scripts/recordmcount.h b/scripts/recordmcount.h
index deb6a51..3c00fab 100644
--- a/scripts/recordmcount.h
+++ b/scripts/recordmcount.h
@@ -29,6 +29,7 @@
#undef has_rel_mcount
#undef tot_relsize
#undef get_mcountsym
+#undef get_sym_str_and_relp
#undef do_func
#undef Elf_Addr
#undef Elf_Ehdr
@@ -56,6 +57,7 @@
# define __has_rel_mcount __has64_rel_mcount
# define has_rel_mcount has64_rel_mcount
# define tot_relsize tot64_relsize
+# define get_sym_str_and_relp get_sym_str_and_relp_64
# define do_func do64
# define get_mcountsym get_mcountsym_64
# define is_fake_mcount is_fake_mcount64
@@ -86,6 +88,7 @@
# define __has_rel_mcount __has32_rel_mcount
# define has_rel_mcount has32_rel_mcount
# define tot_relsize tot32_relsize
+# define get_sym_str_and_relp get_sym_str_and_relp_32
# define do_func do32
# define get_mcountsym get_mcountsym_32
# define is_fake_mcount is_fake_mcount32
@@ -260,6 +263,29 @@ static unsigned get_mcountsym(Elf_Sym const *const sym0,
return mcountsym;
}
+static void get_sym_str_and_relp(Elf_Shdr const *const relhdr,
+ Elf_Ehdr const *const ehdr,
+ Elf_Sym const **sym0,
+ char const **str0,
+ Elf_Rel const **relp)
+{
+ Elf_Shdr *const shdr0 = (Elf_Shdr *)(_w(ehdr->e_shoff)
+ + (void *)ehdr);
+ unsigned const symsec_sh_link = w(relhdr->sh_link);
+ Elf_Shdr const *const symsec = &shdr0[symsec_sh_link];
+ Elf_Shdr const *const strsec = &shdr0[w(symsec->sh_link)];
+ Elf_Rel const *const rel0 = (Elf_Rel const *)(_w(relhdr->sh_offset)
+ + (void *)ehdr);
+
+ *sym0 = (Elf_Sym const *)(_w(symsec->sh_offset)
+ + (void *)ehdr);
+
+ *str0 = (char const *)(_w(strsec->sh_offset)
+ + (void *)ehdr);
+
+ *relp = rel0;
+}
+
/*
* Look at the relocations in order to find the calls to mcount.
* Accumulate the section offsets that are found, and their relocation info,
@@ -276,26 +302,16 @@ static uint_t *sift_rel_mcount(uint_t *mlocp,
{
uint_t *const mloc0 = mlocp;
Elf_Rel *mrelp = *mrelpp;
- Elf_Shdr *const shdr0 = (Elf_Shdr *)(_w(ehdr->e_shoff)
- + (void *)ehdr);
- unsigned const symsec_sh_link = w(relhdr->sh_link);
- Elf_Shdr const *const symsec = &shdr0[symsec_sh_link];
- Elf_Sym const *const sym0 = (Elf_Sym const *)(_w(symsec->sh_offset)
- + (void *)ehdr);
-
- Elf_Shdr const *const strsec = &shdr0[w(symsec->sh_link)];
- char const *const str0 = (char const *)(_w(strsec->sh_offset)
- + (void *)ehdr);
-
- Elf_Rel const *const rel0 = (Elf_Rel const *)(_w(relhdr->sh_offset)
- + (void *)ehdr);
+ Elf_Sym const *sym0;
+ char const *str0;
+ Elf_Rel const *relp;
unsigned rel_entsize = _w(relhdr->sh_entsize);
unsigned const nrel = _w(relhdr->sh_size) / rel_entsize;
- Elf_Rel const *relp = rel0;
-
unsigned mcountsym = 0;
unsigned t;
+ get_sym_str_and_relp(relhdr, ehdr, &sym0, &str0, &relp);
+
for (t = nrel; t; --t) {
if (!mcountsym)
mcountsym = get_mcountsym(sym0, relp, str0);
@@ -331,27 +347,18 @@ static void nop_mcount(Elf_Shdr const *const relhdr,
{
Elf_Shdr *const shdr0 = (Elf_Shdr *)(_w(ehdr->e_shoff)
+ (void *)ehdr);
- unsigned const symsec_sh_link = w(relhdr->sh_link);
- Elf_Shdr const *const symsec = &shdr0[symsec_sh_link];
- Elf_Sym const *const sym0 = (Elf_Sym const *)(_w(symsec->sh_offset)
- + (void *)ehdr);
-
- Elf_Shdr const *const strsec = &shdr0[w(symsec->sh_link)];
- char const *const str0 = (char const *)(_w(strsec->sh_offset)
- + (void *)ehdr);
-
- Elf_Rel const *const rel0 = (Elf_Rel const *)(_w(relhdr->sh_offset)
- + (void *)ehdr);
+ Elf_Sym const *sym0;
+ char const *str0;
+ Elf_Rel const *relp;
+ Elf_Shdr const *const shdr = &shdr0[w(relhdr->sh_info)];
unsigned rel_entsize = _w(relhdr->sh_entsize);
unsigned const nrel = _w(relhdr->sh_size) / rel_entsize;
- Elf_Rel const *relp = rel0;
-
- Elf_Shdr const *const shdr = &shdr0[w(relhdr->sh_info)];
-
unsigned mcountsym = 0;
unsigned t;
int once = 0;
+ get_sym_str_and_relp(relhdr, ehdr, &sym0, &str0, &relp);
+
for (t = nrel; t; --t) {
int ret = -1;
--
1.7.4.4
next prev 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 ` [PATCH 11/15] ftrace/recordmcount: Remove duplicate code to find mcount symbol Steven Rostedt
2011-05-18 16:08 ` Steven Rostedt [this message]
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=20110518160909.174141521@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