mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-24 17:23:25 -05:00
perf tools arm64: Add support for generating bpf prologue
Since HAVE_KPROBES can be enabled in arm64, this patch introduces regs_query_register_offset() to convert register name to offset for arm64, so the BPF prologue feature is ready to use. Signed-off-by: He Kuang <hekuang@huawei.com> Reviewed-by: Will Deacon <will.deacon@arm.com> Acked-by: Masami Hiramatsu <mhiramat@kernel.org> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Bintian Wang <bintian.wang@huawei.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Wang Nan <wangnan0@huawei.com> Cc: linux-arm-kernel@lists.infradead.org Link: http://lkml.kernel.org/r/20170207073412.26983-1-hekuang@huawei.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
e06094ab67
commit
3bb53c9f12
2 changed files with 15 additions and 1 deletions
|
@ -2,3 +2,4 @@ ifndef NO_DWARF
|
||||||
PERF_HAVE_DWARF_REGS := 1
|
PERF_HAVE_DWARF_REGS := 1
|
||||||
endif
|
endif
|
||||||
PERF_HAVE_JITDUMP := 1
|
PERF_HAVE_JITDUMP := 1
|
||||||
|
PERF_HAVE_ARCH_REGS_QUERY_REGISTER_OFFSET := 1
|
||||||
|
|
|
@ -10,17 +10,20 @@
|
||||||
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <dwarf-regs.h>
|
#include <dwarf-regs.h>
|
||||||
|
#include <linux/ptrace.h> /* for struct user_pt_regs */
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
struct pt_regs_dwarfnum {
|
struct pt_regs_dwarfnum {
|
||||||
const char *name;
|
const char *name;
|
||||||
unsigned int dwarfnum;
|
unsigned int dwarfnum;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define STR(s) #s
|
|
||||||
#define REG_DWARFNUM_NAME(r, num) {.name = r, .dwarfnum = num}
|
#define REG_DWARFNUM_NAME(r, num) {.name = r, .dwarfnum = num}
|
||||||
#define GPR_DWARFNUM_NAME(num) \
|
#define GPR_DWARFNUM_NAME(num) \
|
||||||
{.name = STR(%x##num), .dwarfnum = num}
|
{.name = STR(%x##num), .dwarfnum = num}
|
||||||
#define REG_DWARFNUM_END {.name = NULL, .dwarfnum = 0}
|
#define REG_DWARFNUM_END {.name = NULL, .dwarfnum = 0}
|
||||||
|
#define DWARFNUM2OFFSET(index) \
|
||||||
|
(index * sizeof((struct user_pt_regs *)0)->regs[0])
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Reference:
|
* Reference:
|
||||||
|
@ -78,3 +81,13 @@ const char *get_arch_regstr(unsigned int n)
|
||||||
return roff->name;
|
return roff->name;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int regs_query_register_offset(const char *name)
|
||||||
|
{
|
||||||
|
const struct pt_regs_dwarfnum *roff;
|
||||||
|
|
||||||
|
for (roff = regdwarfnum_table; roff->name != NULL; roff++)
|
||||||
|
if (!strcmp(roff->name, name))
|
||||||
|
return DWARFNUM2OFFSET(roff->dwarfnum);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue