summaryrefslogtreecommitdiffstats
path: root/meta-beagleboard-extras/recipes/linux/linux-mainline/ARM-perf-wire-up-perf_regs-and-unwind-support-for-AR.patch
diff options
context:
space:
mode:
authorSamuli Piippo <samuli.piippo@theqtcompany.com>2015-02-12 14:44:25 +0200
committerSamuli Piippo <samuli.piippo@theqtcompany.com>2015-02-26 08:55:46 +0200
commitb2397a823399be9ae901d02f0073df5001b75c55 (patch)
tree9f12adaad26c1c29237e70e9a6d25bacc9b4927c /meta-beagleboard-extras/recipes/linux/linux-mainline/ARM-perf-wire-up-perf_regs-and-unwind-support-for-AR.patch
parentd025004a0d1a78ed67131d30f4251e1faf2d4083 (diff)
downloadmeta-boot2qt-b2397a823399be9ae901d02f0073df5001b75c55.tar.gz
Performance analysis tools for Linux
Build perf with DWARF unwinding support. Kernels older then 3.14 need to be patched to add ARM support. Kernels for tibidabo (3.0) and imx53 (2.6) are too old and would require more patches to be backported, so they are left without unwinding support. RPi needed extra layer to modify the kernel recipe, and linux-imx recipe was renamed so that it doesn't conflict with older tibidabo kernel recipe. Change-Id: Ic8331f8feeace67b32a5ce99ffd3fda517d595d1 Reviewed-by: Andy Nichols <andy.nichols@theqtcompany.com> Reviewed-by: Ulf Hermann <ulf.hermann@theqtcompany.com>
Diffstat (limited to 'meta-beagleboard-extras/recipes/linux/linux-mainline/ARM-perf-wire-up-perf_regs-and-unwind-support-for-AR.patch')
-rw-r--r--meta-beagleboard-extras/recipes/linux/linux-mainline/ARM-perf-wire-up-perf_regs-and-unwind-support-for-AR.patch163
1 files changed, 163 insertions, 0 deletions
diff --git a/meta-beagleboard-extras/recipes/linux/linux-mainline/ARM-perf-wire-up-perf_regs-and-unwind-support-for-AR.patch b/meta-beagleboard-extras/recipes/linux/linux-mainline/ARM-perf-wire-up-perf_regs-and-unwind-support-for-AR.patch
new file mode 100644
index 0000000..e3e8d21
--- /dev/null
+++ b/meta-beagleboard-extras/recipes/linux/linux-mainline/ARM-perf-wire-up-perf_regs-and-unwind-support-for-AR.patch
@@ -0,0 +1,163 @@
1From 26f603c457e0af9f5f6a0ddda66e69978c7f43b4 Mon Sep 17 00:00:00 2001
2From: Will Deacon <will.deacon@arm.com>
3Date: Thu, 26 Sep 2013 12:36:36 +0100
4Subject: [PATCH] ARM: perf: wire up perf_regs and unwind support for ARM
5
6This patch hooks in the perf_regs and libunwind code for ARM.
7
8B2Qt: Backported for 3.8 kernel
9
10Cc: Jean Pihet <jean.pihet@linaro.org>
11Signed-off-by: Will Deacon <will.deacon@arm.com>
12---
13 tools/perf/Makefile | 4 +++
14 tools/perf/arch/arm/Makefile | 3 ++
15 tools/perf/arch/arm/include/perf_regs.h | 54 +++++++++++++++++++++++++++++++++
16 tools/perf/arch/arm/util/unwind.c | 48 +++++++++++++++++++++++++++++
17 4 files changed, 109 insertions(+)
18 create mode 100644 tools/perf/arch/arm/include/perf_regs.h
19 create mode 100644 tools/perf/arch/arm/util/unwind.c
20
21diff --git a/tools/perf/Makefile b/tools/perf/Makefile
22index fb1b1c4..316c575 100644
23--- a/tools/perf/Makefile
24+++ b/tools/perf/Makefile
25@@ -84,6 +84,10 @@ ifeq ($(ARCH),x86_64)
26 NO_PERF_REGS := 0
27 LIBUNWIND_LIBS = -lunwind -lunwind-x86_64
28 endif
29+ifeq ($(ARCH),arm)
30+ NO_PERF_REGS := 0
31+ LIBUNWIND_LIBS = -lunwind -lunwind-arm
32+endif
33
34 # Treat warnings as errors unless directed not to
35 ifneq ($(WERROR),0)
36diff --git a/tools/perf/arch/arm/Makefile b/tools/perf/arch/arm/Makefile
37index 15130b5..fe9b61e 100644
38--- a/tools/perf/arch/arm/Makefile
39+++ b/tools/perf/arch/arm/Makefile
40@@ -2,3 +2,6 @@ ifndef NO_DWARF
41 PERF_HAVE_DWARF_REGS := 1
42 LIB_OBJS += $(OUTPUT)arch/$(ARCH)/util/dwarf-regs.o
43 endif
44+ifndef NO_LIBUNWIND
45+LIB_OBJS += $(OUTPUT)arch/$(ARCH)/util/unwind.o
46+endif
47diff --git a/tools/perf/arch/arm/include/perf_regs.h b/tools/perf/arch/arm/include/perf_regs.h
48new file mode 100644
49index 0000000..2a1cfde
50--- /dev/null
51+++ b/tools/perf/arch/arm/include/perf_regs.h
52@@ -0,0 +1,54 @@
53+#ifndef ARCH_PERF_REGS_H
54+#define ARCH_PERF_REGS_H
55+
56+#include <stdlib.h>
57+#include "../../util/types.h"
58+#include <asm/perf_regs.h>
59+
60+#define PERF_REGS_MASK ((1ULL << PERF_REG_ARM_MAX) - 1)
61+#define PERF_REG_IP PERF_REG_ARM_PC
62+#define PERF_REG_SP PERF_REG_ARM_SP
63+
64+static inline const char *perf_reg_name(int id)
65+{
66+ switch (id) {
67+ case PERF_REG_ARM_R0:
68+ return "r0";
69+ case PERF_REG_ARM_R1:
70+ return "r1";
71+ case PERF_REG_ARM_R2:
72+ return "r2";
73+ case PERF_REG_ARM_R3:
74+ return "r3";
75+ case PERF_REG_ARM_R4:
76+ return "r4";
77+ case PERF_REG_ARM_R5:
78+ return "r5";
79+ case PERF_REG_ARM_R6:
80+ return "r6";
81+ case PERF_REG_ARM_R7:
82+ return "r7";
83+ case PERF_REG_ARM_R8:
84+ return "r8";
85+ case PERF_REG_ARM_R9:
86+ return "r9";
87+ case PERF_REG_ARM_R10:
88+ return "r10";
89+ case PERF_REG_ARM_FP:
90+ return "fp";
91+ case PERF_REG_ARM_IP:
92+ return "ip";
93+ case PERF_REG_ARM_SP:
94+ return "sp";
95+ case PERF_REG_ARM_LR:
96+ return "lr";
97+ case PERF_REG_ARM_PC:
98+ return "pc";
99+ default:
100+ return NULL;
101+ }
102+
103+ return NULL;
104+}
105+
106+#endif /* ARCH_PERF_REGS_H */
107diff --git a/tools/perf/arch/arm/util/unwind.c b/tools/perf/arch/arm/util/unwind.c
108new file mode 100644
109index 0000000..da3dc95
110--- /dev/null
111+++ b/tools/perf/arch/arm/util/unwind.c
112@@ -0,0 +1,48 @@
113+
114+#include <errno.h>
115+#include <libunwind.h>
116+#include "perf_regs.h"
117+#include "../../util/unwind.h"
118+
119+int unwind__arch_reg_id(int regnum)
120+{
121+ switch (regnum) {
122+ case UNW_ARM_R0:
123+ return PERF_REG_ARM_R0;
124+ case UNW_ARM_R1:
125+ return PERF_REG_ARM_R1;
126+ case UNW_ARM_R2:
127+ return PERF_REG_ARM_R2;
128+ case UNW_ARM_R3:
129+ return PERF_REG_ARM_R3;
130+ case UNW_ARM_R4:
131+ return PERF_REG_ARM_R4;
132+ case UNW_ARM_R5:
133+ return PERF_REG_ARM_R5;
134+ case UNW_ARM_R6:
135+ return PERF_REG_ARM_R6;
136+ case UNW_ARM_R7:
137+ return PERF_REG_ARM_R7;
138+ case UNW_ARM_R8:
139+ return PERF_REG_ARM_R8;
140+ case UNW_ARM_R9:
141+ return PERF_REG_ARM_R9;
142+ case UNW_ARM_R10:
143+ return PERF_REG_ARM_R10;
144+ case UNW_ARM_R11:
145+ return PERF_REG_ARM_FP;
146+ case UNW_ARM_R12:
147+ return PERF_REG_ARM_IP;
148+ case UNW_ARM_R13:
149+ return PERF_REG_ARM_SP;
150+ case UNW_ARM_R14:
151+ return PERF_REG_ARM_LR;
152+ case UNW_ARM_R15:
153+ return PERF_REG_ARM_PC;
154+ default:
155+ pr_err("unwind: invalid reg id %d\n", regnum);
156+ return -EINVAL;
157+ }
158+
159+ return -EINVAL;
160+}
161--
1621.9.1
163