Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Naveen N. Rao and committed by
Arnaldo Carvalho de Melo
4679bcca 03548ebf

+29 -12
+1
tools/perf/arch/powerpc/Makefile
··· 3 3 endif 4 4 5 5 HAVE_KVM_STAT_SUPPORT := 1 6 + PERF_HAVE_ARCH_REGS_QUERY_REGISTER_OFFSET := 1 6 7 PERF_HAVE_JITDUMP := 1
+28 -12
tools/perf/arch/powerpc/util/dwarf-regs.c
··· 10 10 */ 11 11 12 12 #include <stddef.h> 13 + #include <errno.h> 14 + #include <string.h> 13 15 #include <dwarf-regs.h> 14 - 16 + #include <linux/ptrace.h> 17 + #include <linux/kernel.h> 18 + #include "util.h" 15 19 16 20 struct pt_regs_dwarfnum { 17 21 const char *name; 18 22 unsigned int dwarfnum; 23 + unsigned int ptregs_offset; 19 24 }; 20 25 21 - #define STR(s) #s 22 - #define REG_DWARFNUM_NAME(r, num) {.name = r, .dwarfnum = num} 23 - #define GPR_DWARFNUM_NAME(num) \ 24 - {.name = STR(%gpr##num), .dwarfnum = num} 25 - #define REG_DWARFNUM_END {.name = NULL, .dwarfnum = 0} 26 + #define REG_DWARFNUM_NAME(r, num) \ 27 + {.name = STR(%)STR(r), .dwarfnum = num, \ 28 + .ptregs_offset = offsetof(struct pt_regs, r)} 29 + #define GPR_DWARFNUM_NAME(num) \ 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 35 * Reference: ··· 68 61 GPR_DWARFNUM_NAME(29), 69 62 GPR_DWARFNUM_NAME(30), 70 63 GPR_DWARFNUM_NAME(31), 71 - REG_DWARFNUM_NAME("%msr", 66), 72 - REG_DWARFNUM_NAME("%ctr", 109), 73 - REG_DWARFNUM_NAME("%link", 108), 74 - REG_DWARFNUM_NAME("%xer", 101), 75 - REG_DWARFNUM_NAME("%dar", 119), 76 - REG_DWARFNUM_NAME("%dsisr", 118), 64 + REG_DWARFNUM_NAME(msr, 66), 65 + REG_DWARFNUM_NAME(ctr, 109), 66 + REG_DWARFNUM_NAME(link, 108), 67 + REG_DWARFNUM_NAME(xer, 101), 68 + REG_DWARFNUM_NAME(dar, 119), 69 + REG_DWARFNUM_NAME(dsisr, 118), 77 70 REG_DWARFNUM_END, 78 71 }; 79 72 ··· 92 85 if (roff->dwarfnum == n) 93 86 return roff->name; 94 87 return NULL; 88 + } 89 + 90 + int regs_query_register_offset(const char *name) 91 + { 92 + const struct pt_regs_dwarfnum *roff; 93 + for (roff = regdwarfnum_table; roff->name != NULL; roff++) 94 + if (!strcmp(roff->name, name)) 95 + return roff->ptregs_offset; 96 + return -EINVAL; 95 97 }