linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com>
To: linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org,
	acme@kernel.org, mpe@ellerman.id.au
Subject: [PATCHv2 7/8] perf probe powerpc: Use DWARF info only if necessary
Date: Mon, 15 Dec 2014 20:20:37 +0530	[thread overview]
Message-ID: <b80e76e221b925eb6206eb50e386370201087776.1418654436.git.naveen.n.rao@linux.vnet.ibm.com> (raw)
In-Reply-To: <cover.1418654435.git.naveen.n.rao@linux.vnet.ibm.com>
In-Reply-To: <cover.1418654435.git.naveen.n.rao@linux.vnet.ibm.com>

Use symbol table lookups by default if DWARF is not necessary, since
powerpc ABIv2 encodes local entry points in the symbol table and the
function entry address in DWARF may not be appropriate for kprobes, as
described here:
https://sourceware.org/bugzilla/show_bug.cgi?id=17638

"The DWARF address ranges deliberately include the *whole* function,
both global and local entry points."
...
"If you want to set probes on a local entry point, you should look up
the symbol in the main symbol table (not DWARF), and check the st_other
bits; they will indicate whether the function has a local entry point,
and what its offset from the global entry point is.  Note that GDB does
the same when setting a breakpoint on a function entry."

Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
---
Changes from previous patchset:
Generalize and introduce helper to prefer symbol table over DWARF.

 tools/perf/arch/powerpc/util/sym-handling.c | 9 +++++++++
 tools/perf/config/Makefile                  | 1 +
 tools/perf/util/probe-event.c               | 6 ++++++
 tools/perf/util/probe-event.h               | 6 ++++++
 4 files changed, 22 insertions(+)

diff --git a/tools/perf/arch/powerpc/util/sym-handling.c b/tools/perf/arch/powerpc/util/sym-handling.c
index a27bfaf..22fc2e6 100644
--- a/tools/perf/arch/powerpc/util/sym-handling.c
+++ b/tools/perf/arch/powerpc/util/sym-handling.c
@@ -36,3 +36,12 @@ inline void arch_elf_sym_decode(GElf_Sym *sym __maybe_unused)
 		sym->st_value += PPC64_LOCAL_ENTRY_OFFSET(sym->st_other);
 #endif
 }
+
+inline bool prefer_symtab(void)
+{
+#if defined(_CALL_ELF) && _CALL_ELF == 2
+	return true;
+#else
+	return false;
+#endif
+}
diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile
index 35cf934..849f686 100644
--- a/tools/perf/config/Makefile
+++ b/tools/perf/config/Makefile
@@ -384,6 +384,7 @@ ifeq ($(ARCH),powerpc)
     CFLAGS += -DHAVE_SKIP_CALLCHAIN_IDX
   endif
   CFLAGS += -DHAVE_ARCH_SYMBOL_HANDLING
+  CFLAGS += -DARCH_PREFER_SYMTAB
 endif
 
 ifndef NO_LIBUNWIND
diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index 7eb9b27..dfc3151 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -2373,6 +2373,12 @@ static int convert_to_probe_trace_events(struct perf_probe_event *pev,
 		}
 	}
 
+	if (prefer_symtab() && !perf_probe_event_need_dwarf(pev)) {
+		ret = find_probe_trace_events_from_map(pev, tevs, max_tevs, target);
+		if (ret > 0)
+			return ret; /* Found in symbol table */
+	}
+
 	/* Convert perf_probe_event with debuginfo */
 	ret = try_to_find_probe_trace_events(pev, tevs, max_tevs, target);
 	if (ret != 0)
diff --git a/tools/perf/util/probe-event.h b/tools/perf/util/probe-event.h
index 8564451..5f92906 100644
--- a/tools/perf/util/probe-event.h
+++ b/tools/perf/util/probe-event.h
@@ -141,6 +141,12 @@ extern int show_available_funcs(const char *module, struct strfilter *filter,
 extern int probe_function_filter(struct map *map __maybe_unused,
 					struct symbol *sym);
 
+#ifdef ARCH_PREFER_SYMTAB
+extern bool prefer_symtab(void);
+#else
+static inline bool prefer_symtab(void) { return false; };
+#endif
+
 /* Maximum index number of event-name postfix */
 #define MAX_EVENT_INDEX	1024
 
-- 
2.1.3

  parent reply	other threads:[~2014-12-15 14:51 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-15 14:50 [PATCHv2 0/8] Fix perf probe issues on powerpc Naveen N. Rao
2014-12-15 14:50 ` [PATCHv2 1/8] kprobes: Fix kallsyms lookup across powerpc ABIv1 and ABIv2 Naveen N. Rao
2014-12-15 14:50 ` [PATCHv2 2/8] perf probe: Improve detection of file/function name in the probe pattern Naveen N. Rao
2015-03-12 20:24   ` Arnaldo Carvalho de Melo
2015-03-12 20:25     ` Arnaldo Carvalho de Melo
2015-03-13  2:03     ` Ananth N Mavinakayanahalli
2015-03-13 11:20     ` Masami Hiramatsu
2015-04-27  5:05       ` Naveen N. Rao
2015-04-27  5:09       ` Naveen N. Rao
2014-12-15 14:50 ` [PATCHv2 3/8] perf probe powerpc: Fix symbol fixup issues due to ELF type Naveen N. Rao
2015-03-12 20:23   ` Arnaldo Carvalho de Melo
2015-04-27  5:06     ` Naveen N. Rao
2014-12-15 14:50 ` [PATCHv2 4/8] perf probe powerpc: Handle powerpc dot symbols Naveen N. Rao
2015-03-12 20:26   ` Arnaldo Carvalho de Melo
2014-12-15 14:50 ` [PATCHv2 5/8] perf probe powerpc: Allow matching against " Naveen N. Rao
2015-03-12 20:30   ` Arnaldo Carvalho de Melo
2015-04-27  5:08     ` Naveen N. Rao
2014-12-15 14:50 ` [PATCHv2 6/8] perf tools powerpc: Fix PPC64 ELF ABIv2 symbol decoding Naveen N. Rao
2015-03-12 20:35   ` Arnaldo Carvalho de Melo
2014-12-15 14:50 ` Naveen N. Rao [this message]
2014-12-15 14:50 ` [PATCHv2 8/8] perf probe powerpc: Fixup function entry if using kallsyms lookup Naveen N. Rao
2015-03-12 20:37   ` Arnaldo Carvalho de Melo
2015-01-28  5:42 ` [PATCHv2 0/8] Fix perf probe issues on powerpc Naveen N. Rao
2015-01-28  6:14   ` Michael Ellerman
2015-01-28  6:43     ` Naveen N. Rao
2015-01-30  2:19       ` Michael Ellerman

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=b80e76e221b925eb6206eb50e386370201087776.1418654436.git.naveen.n.rao@linux.vnet.ibm.com \
    --to=naveen.n.rao@linux.vnet.ibm.com \
    --cc=acme@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mpe@ellerman.id.au \
    /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).