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/arch/powerpc | |
| 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/arch/powerpc')
| -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 | } | ||
