提交 44ca9341 编写于 作者: N Naveen N. Rao 提交者: Arnaldo Carvalho de Melo

perf powerpc: Choose local entry point with kretprobes

perf now uses an offset from _text/_stext for kretprobes if the kernel
supports it, rather than the actual function name. As such, let's choose
the LEP for powerpc ABIv2 so as to ensure the probe gets hit. Do it only
if the kernel supports specifying offsets with kretprobes.
Signed-off-by: NNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Acked-by: NMasami Hiramatsu <mhiramat@kernel.org>
Cc: Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: linuxppc-dev@lists.ozlabs.org
Link: http://lkml.kernel.org/r/7445b5334673ef5404ac1d12609bad4d73d2b567.1488961018.git.naveen.n.rao@linux.vnet.ibm.comSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
上级 7ab31d94
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "symbol.h" #include "symbol.h"
#include "map.h" #include "map.h"
#include "probe-event.h" #include "probe-event.h"
#include "probe-file.h"
#ifdef HAVE_LIBELF_SUPPORT #ifdef HAVE_LIBELF_SUPPORT
bool elf__needs_adjust_symbols(GElf_Ehdr ehdr) bool elf__needs_adjust_symbols(GElf_Ehdr ehdr)
...@@ -79,13 +80,18 @@ void arch__fix_tev_from_maps(struct perf_probe_event *pev, ...@@ -79,13 +80,18 @@ void arch__fix_tev_from_maps(struct perf_probe_event *pev,
* However, if the user specifies an offset, we fall back to using the * However, if the user specifies an offset, we fall back to using the
* GEP since all userspace applications (objdump/readelf) show function * GEP since all userspace applications (objdump/readelf) show function
* disassembly with offsets from the GEP. * disassembly with offsets from the GEP.
*
* In addition, we shouldn't specify an offset for kretprobes.
*/ */
if (pev->point.offset || (!pev->uprobes && pev->point.retprobe) || if (pev->point.offset || !map || !sym)
!map || !sym)
return; return;
/* For kretprobes, add an offset only if the kernel supports it */
if (!pev->uprobes && pev->point.retprobe) {
#ifdef HAVE_LIBELF_SUPPORT
if (!kretprobe_offset_is_supported())
#endif
return;
}
lep_offset = PPC64_LOCAL_ENTRY_OFFSET(sym->arch_sym); lep_offset = PPC64_LOCAL_ENTRY_OFFSET(sym->arch_sym);
if (map->dso->symtab_type == DSO_BINARY_TYPE__KALLSYMS) if (map->dso->symtab_type == DSO_BINARY_TYPE__KALLSYMS)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册