diff options
author | Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> | 2016-05-05 11:23:19 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2016-05-05 20:03:58 -0400 |
commit | 4679bccaa30893ccc5be35c5c5d44f5ab60c0a08 (patch) | |
tree | f0b536e3d1b874c223ba2ea17dec261f04d77a21 /tools/perf | |
parent | 03548ebf6d8cc8a3a782121cf3e54ea41230e227 (diff) |
perf tools powerpc: Add support for generating bpf prologue
Generalize existing macros to serve the purpose.
Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Cc: Ian Munsie <imunsie@au1.ibm.com>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Wang Nan <wangnan0@huawei.com>
Cc: linuxppc-dev@lists.ozlabs.org
Link: http://lkml.kernel.org/r/1462461799-17518-1-git-send-email-naveen.n.rao@linux.vnet.ibm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf')
-rw-r--r-- | tools/perf/arch/powerpc/Makefile | 1 | ||||
-rw-r--r-- | tools/perf/arch/powerpc/util/dwarf-regs.c | 40 |
2 files changed, 29 insertions, 12 deletions
diff --git a/tools/perf/arch/powerpc/Makefile b/tools/perf/arch/powerpc/Makefile index 56e05f126ad8..cc3930904d68 100644 --- a/tools/perf/arch/powerpc/Makefile +++ b/tools/perf/arch/powerpc/Makefile | |||
@@ -3,4 +3,5 @@ PERF_HAVE_DWARF_REGS := 1 | |||
3 | endif | 3 | endif |
4 | 4 | ||
5 | HAVE_KVM_STAT_SUPPORT := 1 | 5 | HAVE_KVM_STAT_SUPPORT := 1 |
6 | PERF_HAVE_ARCH_REGS_QUERY_REGISTER_OFFSET := 1 | ||
6 | PERF_HAVE_JITDUMP := 1 | 7 | PERF_HAVE_JITDUMP := 1 |
diff --git a/tools/perf/arch/powerpc/util/dwarf-regs.c b/tools/perf/arch/powerpc/util/dwarf-regs.c index 733151cdf46e..41bdf9530d82 100644 --- a/tools/perf/arch/powerpc/util/dwarf-regs.c +++ b/tools/perf/arch/powerpc/util/dwarf-regs.c | |||
@@ -10,19 +10,26 @@ | |||
10 | */ | 10 | */ |
11 | 11 | ||
12 | #include <stddef.h> | 12 | #include <stddef.h> |
13 | #include <errno.h> | ||
14 | #include <string.h> | ||
13 | #include <dwarf-regs.h> | 15 | #include <dwarf-regs.h> |
14 | 16 | #include <linux/ptrace.h> | |
17 | #include <linux/kernel.h> | ||
18 | #include "util.h" | ||
15 | 19 | ||
16 | struct pt_regs_dwarfnum { | 20 | struct pt_regs_dwarfnum { |
17 | const char *name; | 21 | const char *name; |
18 | unsigned int dwarfnum; | 22 | unsigned int dwarfnum; |
23 | unsigned int ptregs_offset; | ||
19 | }; | 24 | }; |
20 | 25 | ||
21 | #define STR(s) #s | 26 | #define REG_DWARFNUM_NAME(r, num) \ |
22 | #define REG_DWARFNUM_NAME(r, num) {.name = r, .dwarfnum = num} | 27 | {.name = STR(%)STR(r), .dwarfnum = num, \ |
23 | #define GPR_DWARFNUM_NAME(num) \ | 28 | .ptregs_offset = offsetof(struct pt_regs, r)} |
24 | {.name = STR(%gpr##num), .dwarfnum = num} | 29 | #define GPR_DWARFNUM_NAME(num) \ |
25 | #define REG_DWARFNUM_END {.name = NULL, .dwarfnum = 0} | 30 | {.name = STR(%gpr##num), .dwarfnum = num, \ |
31 | .ptregs_offset = offsetof(struct pt_regs, gpr[num])} | ||
32 | #define REG_DWARFNUM_END {.name = NULL, .dwarfnum = 0, .ptregs_offset = 0} | ||
26 | 33 | ||
27 | /* | 34 | /* |
28 | * Reference: | 35 | * Reference: |
@@ -61,12 +68,12 @@ static const struct pt_regs_dwarfnum regdwarfnum_table[] = { | |||
61 | GPR_DWARFNUM_NAME(29), | 68 | GPR_DWARFNUM_NAME(29), |
62 | GPR_DWARFNUM_NAME(30), | 69 | GPR_DWARFNUM_NAME(30), |
63 | GPR_DWARFNUM_NAME(31), | 70 | GPR_DWARFNUM_NAME(31), |
64 | REG_DWARFNUM_NAME("%msr", 66), | 71 | REG_DWARFNUM_NAME(msr, 66), |
65 | REG_DWARFNUM_NAME("%ctr", 109), | 72 | REG_DWARFNUM_NAME(ctr, 109), |
66 | REG_DWARFNUM_NAME("%link", 108), | 73 | REG_DWARFNUM_NAME(link, 108), |
67 | REG_DWARFNUM_NAME("%xer", 101), | 74 | REG_DWARFNUM_NAME(xer, 101), |
68 | REG_DWARFNUM_NAME("%dar", 119), | 75 | REG_DWARFNUM_NAME(dar, 119), |
69 | REG_DWARFNUM_NAME("%dsisr", 118), | 76 | REG_DWARFNUM_NAME(dsisr, 118), |
70 | REG_DWARFNUM_END, | 77 | REG_DWARFNUM_END, |
71 | }; | 78 | }; |
72 | 79 | ||
@@ -86,3 +93,12 @@ const char *get_arch_regstr(unsigned int n) | |||
86 | return roff->name; | 93 | return roff->name; |
87 | return NULL; | 94 | return NULL; |
88 | } | 95 | } |
96 | |||
97 | int regs_query_register_offset(const char *name) | ||
98 | { | ||
99 | const struct pt_regs_dwarfnum *roff; | ||
100 | for (roff = regdwarfnum_table; roff->name != NULL; roff++) | ||
101 | if (!strcmp(roff->name, name)) | ||
102 | return roff->ptregs_offset; | ||
103 | return -EINVAL; | ||
104 | } | ||