aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/arch
diff options
context:
space:
mode:
authorIngo Molnar <mingo@kernel.org>2016-06-08 03:26:46 -0400
committerIngo Molnar <mingo@kernel.org>2016-06-08 03:26:46 -0400
commit616d1c1b98ac79f30216a57a170dd7cea19b3df3 (patch)
tree6f244c2e5a7160190e73bc82b4cd7fa7bb22ee31 /tools/perf/arch
parenta4f144ebbdf6f7807c477bce8e136047ed27321f (diff)
parentc8ae067f2635be0f8c7e5db1bb74b757d623e05b (diff)
Merge branch 'linus' into perf/core, to refresh the branch
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'tools/perf/arch')
-rw-r--r--tools/perf/arch/powerpc/include/perf_regs.h69
-rw-r--r--tools/perf/arch/powerpc/util/Build2
-rw-r--r--tools/perf/arch/powerpc/util/perf_regs.c49
-rw-r--r--tools/perf/arch/powerpc/util/unwind-libunwind.c96
4 files changed, 216 insertions, 0 deletions
diff --git a/tools/perf/arch/powerpc/include/perf_regs.h b/tools/perf/arch/powerpc/include/perf_regs.h
new file mode 100644
index 000000000000..75de0e92e71e
--- /dev/null
+++ b/tools/perf/arch/powerpc/include/perf_regs.h
@@ -0,0 +1,69 @@
1#ifndef ARCH_PERF_REGS_H
2#define ARCH_PERF_REGS_H
3
4#include <stdlib.h>
5#include <linux/types.h>
6#include <asm/perf_regs.h>
7
8#define PERF_REGS_MASK ((1ULL << PERF_REG_POWERPC_MAX) - 1)
9#define PERF_REGS_MAX PERF_REG_POWERPC_MAX
10#ifdef __powerpc64__
11 #define PERF_SAMPLE_REGS_ABI PERF_SAMPLE_REGS_ABI_64
12#else
13 #define PERF_SAMPLE_REGS_ABI PERF_SAMPLE_REGS_ABI_32
14#endif
15
16#define PERF_REG_IP PERF_REG_POWERPC_NIP
17#define PERF_REG_SP PERF_REG_POWERPC_R1
18
19static const char *reg_names[] = {
20 [PERF_REG_POWERPC_R0] = "r0",
21 [PERF_REG_POWERPC_R1] = "r1",
22 [PERF_REG_POWERPC_R2] = "r2",
23 [PERF_REG_POWERPC_R3] = "r3",
24 [PERF_REG_POWERPC_R4] = "r4",
25 [PERF_REG_POWERPC_R5] = "r5",
26 [PERF_REG_POWERPC_R6] = "r6",
27 [PERF_REG_POWERPC_R7] = "r7",
28 [PERF_REG_POWERPC_R8] = "r8",
29 [PERF_REG_POWERPC_R9] = "r9",
30 [PERF_REG_POWERPC_R10] = "r10",
31 [PERF_REG_POWERPC_R11] = "r11",
32 [PERF_REG_POWERPC_R12] = "r12",
33 [PERF_REG_POWERPC_R13] = "r13",
34 [PERF_REG_POWERPC_R14] = "r14",
35 [PERF_REG_POWERPC_R15] = "r15",
36 [PERF_REG_POWERPC_R16] = "r16",
37 [PERF_REG_POWERPC_R17] = "r17",
38 [PERF_REG_POWERPC_R18] = "r18",
39 [PERF_REG_POWERPC_R19] = "r19",
40 [PERF_REG_POWERPC_R20] = "r20",
41 [PERF_REG_POWERPC_R21] = "r21",
42 [PERF_REG_POWERPC_R22] = "r22",
43 [PERF_REG_POWERPC_R23] = "r23",
44 [PERF_REG_POWERPC_R24] = "r24",
45 [PERF_REG_POWERPC_R25] = "r25",
46 [PERF_REG_POWERPC_R26] = "r26",
47 [PERF_REG_POWERPC_R27] = "r27",
48 [PERF_REG_POWERPC_R28] = "r28",
49 [PERF_REG_POWERPC_R29] = "r29",
50 [PERF_REG_POWERPC_R30] = "r30",
51 [PERF_REG_POWERPC_R31] = "r31",
52 [PERF_REG_POWERPC_NIP] = "nip",
53 [PERF_REG_POWERPC_MSR] = "msr",
54 [PERF_REG_POWERPC_ORIG_R3] = "orig_r3",
55 [PERF_REG_POWERPC_CTR] = "ctr",
56 [PERF_REG_POWERPC_LINK] = "link",
57 [PERF_REG_POWERPC_XER] = "xer",
58 [PERF_REG_POWERPC_CCR] = "ccr",
59 [PERF_REG_POWERPC_SOFTE] = "softe",
60 [PERF_REG_POWERPC_TRAP] = "trap",
61 [PERF_REG_POWERPC_DAR] = "dar",
62 [PERF_REG_POWERPC_DSISR] = "dsisr"
63};
64
65static inline const char *perf_reg_name(int id)
66{
67 return reg_names[id];
68}
69#endif /* ARCH_PERF_REGS_H */
diff --git a/tools/perf/arch/powerpc/util/Build b/tools/perf/arch/powerpc/util/Build
index c8fe2074d217..90ad64b231cd 100644
--- a/tools/perf/arch/powerpc/util/Build
+++ b/tools/perf/arch/powerpc/util/Build
@@ -1,6 +1,8 @@
1libperf-y += header.o 1libperf-y += header.o
2libperf-y += sym-handling.o 2libperf-y += sym-handling.o
3libperf-y += kvm-stat.o 3libperf-y += kvm-stat.o
4libperf-y += perf_regs.o
4 5
5libperf-$(CONFIG_DWARF) += dwarf-regs.o 6libperf-$(CONFIG_DWARF) += dwarf-regs.o
6libperf-$(CONFIG_DWARF) += skip-callchain-idx.o 7libperf-$(CONFIG_DWARF) += skip-callchain-idx.o
8libperf-$(CONFIG_LIBUNWIND) += unwind-libunwind.o
diff --git a/tools/perf/arch/powerpc/util/perf_regs.c b/tools/perf/arch/powerpc/util/perf_regs.c
new file mode 100644
index 000000000000..a3c3e1ce6807
--- /dev/null
+++ b/tools/perf/arch/powerpc/util/perf_regs.c
@@ -0,0 +1,49 @@
1#include "../../perf.h"
2#include "../../util/perf_regs.h"
3
4const struct sample_reg sample_reg_masks[] = {
5 SMPL_REG(r0, PERF_REG_POWERPC_R0),
6 SMPL_REG(r1, PERF_REG_POWERPC_R1),
7 SMPL_REG(r2, PERF_REG_POWERPC_R2),
8 SMPL_REG(r3, PERF_REG_POWERPC_R3),
9 SMPL_REG(r4, PERF_REG_POWERPC_R4),
10 SMPL_REG(r5, PERF_REG_POWERPC_R5),
11 SMPL_REG(r6, PERF_REG_POWERPC_R6),
12 SMPL_REG(r7, PERF_REG_POWERPC_R7),
13 SMPL_REG(r8, PERF_REG_POWERPC_R8),
14 SMPL_REG(r9, PERF_REG_POWERPC_R9),
15 SMPL_REG(r10, PERF_REG_POWERPC_R10),
16 SMPL_REG(r11, PERF_REG_POWERPC_R11),
17 SMPL_REG(r12, PERF_REG_POWERPC_R12),
18 SMPL_REG(r13, PERF_REG_POWERPC_R13),
19 SMPL_REG(r14, PERF_REG_POWERPC_R14),
20 SMPL_REG(r15, PERF_REG_POWERPC_R15),
21 SMPL_REG(r16, PERF_REG_POWERPC_R16),
22 SMPL_REG(r17, PERF_REG_POWERPC_R17),
23 SMPL_REG(r18, PERF_REG_POWERPC_R18),
24 SMPL_REG(r19, PERF_REG_POWERPC_R19),
25 SMPL_REG(r20, PERF_REG_POWERPC_R20),
26 SMPL_REG(r21, PERF_REG_POWERPC_R21),
27 SMPL_REG(r22, PERF_REG_POWERPC_R22),
28 SMPL_REG(r23, PERF_REG_POWERPC_R23),
29 SMPL_REG(r24, PERF_REG_POWERPC_R24),
30 SMPL_REG(r25, PERF_REG_POWERPC_R25),
31 SMPL_REG(r26, PERF_REG_POWERPC_R26),
32 SMPL_REG(r27, PERF_REG_POWERPC_R27),
33 SMPL_REG(r28, PERF_REG_POWERPC_R28),
34 SMPL_REG(r29, PERF_REG_POWERPC_R29),
35 SMPL_REG(r30, PERF_REG_POWERPC_R30),
36 SMPL_REG(r31, PERF_REG_POWERPC_R31),
37 SMPL_REG(nip, PERF_REG_POWERPC_NIP),
38 SMPL_REG(msr, PERF_REG_POWERPC_MSR),
39 SMPL_REG(orig_r3, PERF_REG_POWERPC_ORIG_R3),
40 SMPL_REG(ctr, PERF_REG_POWERPC_CTR),
41 SMPL_REG(link, PERF_REG_POWERPC_LINK),
42 SMPL_REG(xer, PERF_REG_POWERPC_XER),
43 SMPL_REG(ccr, PERF_REG_POWERPC_CCR),
44 SMPL_REG(softe, PERF_REG_POWERPC_SOFTE),
45 SMPL_REG(trap, PERF_REG_POWERPC_TRAP),
46 SMPL_REG(dar, PERF_REG_POWERPC_DAR),
47 SMPL_REG(dsisr, PERF_REG_POWERPC_DSISR),
48 SMPL_REG_END
49};
diff --git a/tools/perf/arch/powerpc/util/unwind-libunwind.c b/tools/perf/arch/powerpc/util/unwind-libunwind.c
new file mode 100644
index 000000000000..9e15f92ae49f
--- /dev/null
+++ b/tools/perf/arch/powerpc/util/unwind-libunwind.c
@@ -0,0 +1,96 @@
1/*
2 * Copyright 2016 Chandan Kumar, IBM Corporation.
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version
7 * 2 of the License, or (at your option) any later version.
8 */
9
10#include <errno.h>
11#include <libunwind.h>
12#include <asm/perf_regs.h>
13#include "../../util/unwind.h"
14#include "../../util/debug.h"
15
16int libunwind__arch_reg_id(int regnum)
17{
18 switch (regnum) {
19 case UNW_PPC64_R0:
20 return PERF_REG_POWERPC_R0;
21 case UNW_PPC64_R1:
22 return PERF_REG_POWERPC_R1;
23 case UNW_PPC64_R2:
24 return PERF_REG_POWERPC_R2;
25 case UNW_PPC64_R3:
26 return PERF_REG_POWERPC_R3;
27 case UNW_PPC64_R4:
28 return PERF_REG_POWERPC_R4;
29 case UNW_PPC64_R5:
30 return PERF_REG_POWERPC_R5;
31 case UNW_PPC64_R6:
32 return PERF_REG_POWERPC_R6;
33 case UNW_PPC64_R7:
34 return PERF_REG_POWERPC_R7;
35 case UNW_PPC64_R8:
36 return PERF_REG_POWERPC_R8;
37 case UNW_PPC64_R9:
38 return PERF_REG_POWERPC_R9;
39 case UNW_PPC64_R10:
40 return PERF_REG_POWERPC_R10;
41 case UNW_PPC64_R11:
42 return PERF_REG_POWERPC_R11;
43 case UNW_PPC64_R12:
44 return PERF_REG_POWERPC_R12;
45 case UNW_PPC64_R13:
46 return PERF_REG_POWERPC_R13;
47 case UNW_PPC64_R14:
48 return PERF_REG_POWERPC_R14;
49 case UNW_PPC64_R15:
50 return PERF_REG_POWERPC_R15;
51 case UNW_PPC64_R16:
52 return PERF_REG_POWERPC_R16;
53 case UNW_PPC64_R17:
54 return PERF_REG_POWERPC_R17;
55 case UNW_PPC64_R18:
56 return PERF_REG_POWERPC_R18;
57 case UNW_PPC64_R19:
58 return PERF_REG_POWERPC_R19;
59 case UNW_PPC64_R20:
60 return PERF_REG_POWERPC_R20;
61 case UNW_PPC64_R21:
62 return PERF_REG_POWERPC_R21;
63 case UNW_PPC64_R22:
64 return PERF_REG_POWERPC_R22;
65 case UNW_PPC64_R23:
66 return PERF_REG_POWERPC_R23;
67 case UNW_PPC64_R24:
68 return PERF_REG_POWERPC_R24;
69 case UNW_PPC64_R25:
70 return PERF_REG_POWERPC_R25;
71 case UNW_PPC64_R26:
72 return PERF_REG_POWERPC_R26;
73 case UNW_PPC64_R27:
74 return PERF_REG_POWERPC_R27;
75 case UNW_PPC64_R28:
76 return PERF_REG_POWERPC_R28;
77 case UNW_PPC64_R29:
78 return PERF_REG_POWERPC_R29;
79 case UNW_PPC64_R30:
80 return PERF_REG_POWERPC_R30;
81 case UNW_PPC64_R31:
82 return PERF_REG_POWERPC_R31;
83 case UNW_PPC64_LR:
84 return PERF_REG_POWERPC_LINK;
85 case UNW_PPC64_CTR:
86 return PERF_REG_POWERPC_CTR;
87 case UNW_PPC64_XER:
88 return PERF_REG_POWERPC_XER;
89 case UNW_PPC64_NIP:
90 return PERF_REG_POWERPC_NIP;
91 default:
92 pr_err("unwind: invalid reg id %d\n", regnum);
93 return -EINVAL;
94 }
95 return -EINVAL;
96}