Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 293d5b43 authored by Masami Hiramatsu's avatar Masami Hiramatsu Committed by Arnaldo Carvalho de Melo
Browse files

perf probe: Support probing on offline cross-arch binary



Support probing on offline cross-architecture binary by adding getting
the target machine arch from ELF and choose correct register string for
the machine.

Here is an example:
  -----
  $ perf probe --vmlinux=./vmlinux-arm --definition 'do_sys_open $params'
  p:probe/do_sys_open do_sys_open+0 dfd=%r5:s32 filename=%r1:u32 flags=%r6:s32 mode=%r3:u16
  -----

Here, we can get probe/do_sys_open from above and append it to to the target
machine's tracing/kprobe_events file in the tracefs mountput, usually
/sys/kernel/debug/tracing/kprobe_events (or /sys/kernel/tracing/kprobe_events).

Signed-off-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/147214229717.23638.6440579792548044658.stgit@devbox


[ Add definition for EM_AARCH64 to fix the build on at least centos 6, debian 7 & ubuntu 12.04.5 ]
Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 428aff82
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
#ifdef DEFINE_DWARF_REGSTR_TABLE
/* This is included in perf/util/dwarf-regs.c */

static const char * const arm_regstr_tbl[] = {
	"%r0", "%r1", "%r2", "%r3", "%r4",
	"%r5", "%r6", "%r7", "%r8", "%r9", "%r10",
	"%fp", "%ip", "%sp", "%lr", "%pc",
};
#endif
+13 −0
Original line number Diff line number Diff line
#ifdef DEFINE_DWARF_REGSTR_TABLE
/* This is included in perf/util/dwarf-regs.c */

static const char * const aarch64_regstr_tbl[] = {
	"%r0", "%r1", "%r2", "%r3", "%r4",
	"%r5", "%r6", "%r7", "%r8", "%r9",
	"%r10", "%r11", "%r12", "%r13", "%r14",
	"%r15", "%r16", "%r17", "%r18", "%r19",
	"%r20", "%r21", "%r22", "%r23", "%r24",
	"%r25", "%r26", "%r27", "%r28", "%r29",
	"%lr", "%sp",
};
#endif
+27 −0
Original line number Diff line number Diff line
#ifdef DEFINE_DWARF_REGSTR_TABLE
/* This is included in perf/util/dwarf-regs.c */

/*
 * Reference:
 * http://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi-1.9.html
 * http://refspecs.linux-foundation.org/elf/elfspec_ppc.pdf
 */
#define REG_DWARFNUM_NAME(reg, idx)	[idx] = "%" #reg

static const char * const powerpc_regstr_tbl[] = {
	"%gpr0", "%gpr1", "%gpr2", "%gpr3", "%gpr4",
	"%gpr5", "%gpr6", "%gpr7", "%gpr8", "%gpr9",
	"%gpr10", "%gpr11", "%gpr12", "%gpr13", "%gpr14",
	"%gpr15", "%gpr16", "%gpr17", "%gpr18", "%gpr19",
	"%gpr20", "%gpr21", "%gpr22", "%gpr23", "%gpr24",
	"%gpr25", "%gpr26", "%gpr27", "%gpr28", "%gpr29",
	"%gpr30", "%gpr31",
	REG_DWARFNUM_NAME(msr,   66),
	REG_DWARFNUM_NAME(ctr,   109),
	REG_DWARFNUM_NAME(link,  108),
	REG_DWARFNUM_NAME(xer,   101),
	REG_DWARFNUM_NAME(dar,   119),
	REG_DWARFNUM_NAME(dsisr, 118),
};

#endif
+8 −0
Original line number Diff line number Diff line
#ifdef DEFINE_DWARF_REGSTR_TABLE
/* This is included in perf/util/dwarf-regs.c */

static const char * const s390_regstr_tbl[] = {
	"%r0", "%r1",  "%r2",  "%r3",  "%r4",  "%r5",  "%r6",  "%r7",
	"%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15",
};
#endif
+25 −0
Original line number Diff line number Diff line
#ifdef DEFINE_DWARF_REGSTR_TABLE
/* This is included in perf/util/dwarf-regs.c */

const char * const sh_regstr_tbl[] = {
	"r0",
	"r1",
	"r2",
	"r3",
	"r4",
	"r5",
	"r6",
	"r7",
	"r8",
	"r9",
	"r10",
	"r11",
	"r12",
	"r13",
	"r14",
	"r15",
	"pc",
	"pr",
};

#endif
Loading