Implement get_arch_regstr() for SH so that, given a DWARF register
number, the corresponding symbolic name of that register can be looked
up.
Signed-off-by: Matt Fleming <[email protected]>
---
tools/perf/arch/sh/Makefile | 4 ++
tools/perf/arch/sh/util/dwarf-regs.c | 55 ++++++++++++++++++++++++++++++++++
2 files changed, 59 insertions(+), 0 deletions(-)
create mode 100644 tools/perf/arch/sh/Makefile
create mode 100644 tools/perf/arch/sh/util/dwarf-regs.c
diff --git a/tools/perf/arch/sh/Makefile b/tools/perf/arch/sh/Makefile
new file mode 100644
index 0000000..15130b5
--- /dev/null
+++ b/tools/perf/arch/sh/Makefile
@@ -0,0 +1,4 @@
+ifndef NO_DWARF
+PERF_HAVE_DWARF_REGS := 1
+LIB_OBJS += $(OUTPUT)arch/$(ARCH)/util/dwarf-regs.o
+endif
diff --git a/tools/perf/arch/sh/util/dwarf-regs.c b/tools/perf/arch/sh/util/dwarf-regs.c
new file mode 100644
index 0000000..a11edb0
--- /dev/null
+++ b/tools/perf/arch/sh/util/dwarf-regs.c
@@ -0,0 +1,55 @@
+/*
+ * Mapping of DWARF debug register numbers into register names.
+ *
+ * Copyright (C) 2010 Matt Fleming <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#include <libio.h>
+#include <dwarf-regs.h>
+
+/*
+ * Generic dwarf analysis helpers
+ */
+
+#define SH_MAX_REGS 18
+const char *sh_regs_table[SH_MAX_REGS] = {
+ "r0",
+ "r1",
+ "r2",
+ "r3",
+ "r4",
+ "r5",
+ "r6",
+ "r7",
+ "r8",
+ "r9",
+ "r10",
+ "r11",
+ "r12",
+ "r13",
+ "r14",
+ "r15",
+ "pc",
+ "pr",
+};
+
+/* Return architecture dependent register string (for kprobe-tracer) */
+const char *get_arch_regstr(unsigned int n)
+{
+ return (n <= SH_MAX_REGS) ? sh_regs_table[n] : NULL;
+}
--
1.6.4.rc0
Matt Fleming wrote:
> Implement get_arch_regstr() for SH so that, given a DWARF register
> number, the corresponding symbolic name of that register can be looked
> up.
OK, the patch itself looks good, but I don't know whether SH kernel
supports KPROBE_EVENT which is required for perf-probe. Or, SH kernel
repository already has it?
Thank you,
>
> Signed-off-by: Matt Fleming <[email protected]>
> ---
> tools/perf/arch/sh/Makefile | 4 ++
> tools/perf/arch/sh/util/dwarf-regs.c | 55 ++++++++++++++++++++++++++++++++++
> 2 files changed, 59 insertions(+), 0 deletions(-)
> create mode 100644 tools/perf/arch/sh/Makefile
> create mode 100644 tools/perf/arch/sh/util/dwarf-regs.c
>
> diff --git a/tools/perf/arch/sh/Makefile b/tools/perf/arch/sh/Makefile
> new file mode 100644
> index 0000000..15130b5
> --- /dev/null
> +++ b/tools/perf/arch/sh/Makefile
> @@ -0,0 +1,4 @@
> +ifndef NO_DWARF
> +PERF_HAVE_DWARF_REGS := 1
> +LIB_OBJS += $(OUTPUT)arch/$(ARCH)/util/dwarf-regs.o
> +endif
> diff --git a/tools/perf/arch/sh/util/dwarf-regs.c b/tools/perf/arch/sh/util/dwarf-regs.c
> new file mode 100644
> index 0000000..a11edb0
> --- /dev/null
> +++ b/tools/perf/arch/sh/util/dwarf-regs.c
> @@ -0,0 +1,55 @@
> +/*
> + * Mapping of DWARF debug register numbers into register names.
> + *
> + * Copyright (C) 2010 Matt Fleming <[email protected]>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
> + *
> + */
> +
> +#include <libio.h>
> +#include <dwarf-regs.h>
> +
> +/*
> + * Generic dwarf analysis helpers
> + */
> +
> +#define SH_MAX_REGS 18
> +const char *sh_regs_table[SH_MAX_REGS] = {
> + "r0",
> + "r1",
> + "r2",
> + "r3",
> + "r4",
> + "r5",
> + "r6",
> + "r7",
> + "r8",
> + "r9",
> + "r10",
> + "r11",
> + "r12",
> + "r13",
> + "r14",
> + "r15",
> + "pc",
> + "pr",
> +};
> +
> +/* Return architecture dependent register string (for kprobe-tracer) */
> +const char *get_arch_regstr(unsigned int n)
> +{
> + return (n <= SH_MAX_REGS) ? sh_regs_table[n] : NULL;
> +}
On Mon, 12 Jul 2010 10:54:43 +0900, Masami Hiramatsu <[email protected]> wrote:
> Matt Fleming wrote:
> > Implement get_arch_regstr() for SH so that, given a DWARF register
> > number, the corresponding symbolic name of that register can be looked
> > up.
>
> OK, the patch itself looks good, but I don't know whether SH kernel
> supports KPROBE_EVENT which is required for perf-probe. Or, SH kernel
> repository already has it?
No, SH doesn't support KPROBE_EVENT yet. It's on my list of things to
do. However, this patch also stops the "DWARF register mappings have not
been defined" warning when building perf.
On Mon, Jul 12, 2010 at 07:23:44AM +0100, Matt Fleming wrote:
> On Mon, 12 Jul 2010 10:54:43 +0900, Masami Hiramatsu <[email protected]> wrote:
> > Matt Fleming wrote:
> > > Implement get_arch_regstr() for SH so that, given a DWARF register
> > > number, the corresponding symbolic name of that register can be looked
> > > up.
> >
> > OK, the patch itself looks good, but I don't know whether SH kernel
> > supports KPROBE_EVENT which is required for perf-probe. Or, SH kernel
> > repository already has it?
>
> No, SH doesn't support KPROBE_EVENT yet. It's on my list of things to
> do. However, this patch also stops the "DWARF register mappings have not
> been defined" warning when building perf.
It does now, by virtue of HAVE_REGS_AND_STACK_ACCESS_API. The initial
support for this was checked in on June 14th, so you should be able to
use it already as long as you're working with current HEAD.
On Mon, Jul 12, 2010 at 03:41:26PM +0900, Paul Mundt wrote:
> On Mon, Jul 12, 2010 at 07:23:44AM +0100, Matt Fleming wrote:
> >
> > No, SH doesn't support KPROBE_EVENT yet. It's on my list of things to
> > do. However, this patch also stops the "DWARF register mappings have not
> > been defined" warning when building perf.
>
> It does now, by virtue of HAVE_REGS_AND_STACK_ACCESS_API. The initial
> support for this was checked in on June 14th, so you should be able to
> use it already as long as you're working with current HEAD.
Oh, whoops, I must have been thinking of something else. Thanks Paul!
Paul Mundt wrote:
> On Mon, Jul 12, 2010 at 07:23:44AM +0100, Matt Fleming wrote:
>> On Mon, 12 Jul 2010 10:54:43 +0900, Masami Hiramatsu <[email protected]> wrote:
>>> Matt Fleming wrote:
>>>> Implement get_arch_regstr() for SH so that, given a DWARF register
>>>> number, the corresponding symbolic name of that register can be looked
>>>> up.
>>> OK, the patch itself looks good, but I don't know whether SH kernel
>>> supports KPROBE_EVENT which is required for perf-probe. Or, SH kernel
>>> repository already has it?
>> No, SH doesn't support KPROBE_EVENT yet. It's on my list of things to
>> do. However, this patch also stops the "DWARF register mappings have not
>> been defined" warning when building perf.
>
> It does now, by virtue of HAVE_REGS_AND_STACK_ACCESS_API. The initial
> support for this was checked in on June 14th, so you should be able to
> use it already as long as you're working with current HEAD.
Wow, that's great! :)
Thanks!
--
Masami HIRAMATSU
2nd Research Dept.
Hitachi, Ltd., Systems Development Laboratory
E-mail: [email protected]
Matt Fleming wrote:
> Implement get_arch_regstr() for SH so that, given a DWARF register
> number, the corresponding symbolic name of that register can be looked
> up.
KPROBE_EVENT has already been supported on the latest linux-sh,
so this should be work on that.
Acked-by: Masami Hiramatsu <[email protected]>
Thanks!
>
> Signed-off-by: Matt Fleming <[email protected]>
> ---
> tools/perf/arch/sh/Makefile | 4 ++
> tools/perf/arch/sh/util/dwarf-regs.c | 55 ++++++++++++++++++++++++++++++++++
> 2 files changed, 59 insertions(+), 0 deletions(-)
> create mode 100644 tools/perf/arch/sh/Makefile
> create mode 100644 tools/perf/arch/sh/util/dwarf-regs.c
>
> diff --git a/tools/perf/arch/sh/Makefile b/tools/perf/arch/sh/Makefile
> new file mode 100644
> index 0000000..15130b5
> --- /dev/null
> +++ b/tools/perf/arch/sh/Makefile
> @@ -0,0 +1,4 @@
> +ifndef NO_DWARF
> +PERF_HAVE_DWARF_REGS := 1
> +LIB_OBJS += $(OUTPUT)arch/$(ARCH)/util/dwarf-regs.o
> +endif
> diff --git a/tools/perf/arch/sh/util/dwarf-regs.c b/tools/perf/arch/sh/util/dwarf-regs.c
> new file mode 100644
> index 0000000..a11edb0
> --- /dev/null
> +++ b/tools/perf/arch/sh/util/dwarf-regs.c
> @@ -0,0 +1,55 @@
> +/*
> + * Mapping of DWARF debug register numbers into register names.
> + *
> + * Copyright (C) 2010 Matt Fleming <[email protected]>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
> + *
> + */
> +
> +#include <libio.h>
> +#include <dwarf-regs.h>
> +
> +/*
> + * Generic dwarf analysis helpers
> + */
> +
> +#define SH_MAX_REGS 18
> +const char *sh_regs_table[SH_MAX_REGS] = {
> + "r0",
> + "r1",
> + "r2",
> + "r3",
> + "r4",
> + "r5",
> + "r6",
> + "r7",
> + "r8",
> + "r9",
> + "r10",
> + "r11",
> + "r12",
> + "r13",
> + "r14",
> + "r15",
> + "pc",
> + "pr",
> +};
> +
> +/* Return architecture dependent register string (for kprobe-tracer) */
> +const char *get_arch_regstr(unsigned int n)
> +{
> + return (n <= SH_MAX_REGS) ? sh_regs_table[n] : NULL;
> +}
Em Mon, Jul 12, 2010 at 05:57:29PM +0900, Masami Hiramatsu escreveu:
> Matt Fleming wrote:
> > Implement get_arch_regstr() for SH so that, given a DWARF register
> > number, the corresponding symbolic name of that register can be looked
> > up.
>
> KPROBE_EVENT has already been supported on the latest linux-sh,
> so this should be work on that.
>
> Acked-by: Masami Hiramatsu <[email protected]>
Thanks, applying it then,
- Arnaldo
Commit-ID: 0dd9ac63ce26ec87b080ca9c3e6efed33c23ace6
Gitweb: http://git.kernel.org/tip/0dd9ac63ce26ec87b080ca9c3e6efed33c23ace6
Author: Matt Fleming <[email protected]>
AuthorDate: Sat, 10 Jul 2010 16:10:39 +0100
Committer: Arnaldo Carvalho de Melo <[email protected]>
CommitDate: Mon, 12 Jul 2010 11:25:10 -0300
perf tools: Add DWARF register lookup for SH
Implement get_arch_regstr() for SH so that, given a DWARF register number, the
corresponding symbolic name of that register can be looked up.
Acked-by: Masami Hiramatsu <[email protected]>
Cc: Masami Hiramatsu <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Paul Mackerras <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Ian Munsie <[email protected]>
LKML-Reference: <e55812819ad18c2ceca5651ac7698a2af46180d7.1278774279.git.matt@console-pimps.org>
Signed-off-by: Matt Fleming <[email protected]>
Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
---
tools/perf/arch/{powerpc => sh}/Makefile | 0
.../perf/arch/sh/util/dwarf-regs.c | 48 +++++++++++++-------
2 files changed, 32 insertions(+), 16 deletions(-)
diff --git a/tools/perf/arch/powerpc/Makefile b/tools/perf/arch/sh/Makefile
similarity index 100%
copy from tools/perf/arch/powerpc/Makefile
copy to tools/perf/arch/sh/Makefile
diff --git a/kernel/rcutiny_plugin.h b/tools/perf/arch/sh/util/dwarf-regs.c
similarity index 55%
copy from kernel/rcutiny_plugin.h
copy to tools/perf/arch/sh/util/dwarf-regs.c
index d223a92..a11edb0 100644
--- a/kernel/rcutiny_plugin.h
+++ b/tools/perf/arch/sh/util/dwarf-regs.c
@@ -1,7 +1,7 @@
/*
- * Read-Copy Update mechanism for mutual exclusion (tree-based version)
- * Internal non-public definitions that provide either classic
- * or preemptable semantics.
+ * Mapping of DWARF debug register numbers into register names.
+ *
+ * Copyright (C) 2010 Matt Fleming <[email protected]>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,23 +17,39 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
- * Copyright IBM Corporation, 2009
- *
- * Author: Paul E. McKenney <[email protected]>
*/
-#ifdef CONFIG_DEBUG_LOCK_ALLOC
-
-#include <linux/kernel_stat.h>
+#include <libio.h>
+#include <dwarf-regs.h>
/*
- * During boot, we forgive RCU lockdep issues. After this function is
- * invoked, we start taking RCU lockdep issues seriously.
+ * Generic dwarf analysis helpers
*/
-void rcu_scheduler_starting(void)
+
+#define SH_MAX_REGS 18
+const char *sh_regs_table[SH_MAX_REGS] = {
+ "r0",
+ "r1",
+ "r2",
+ "r3",
+ "r4",
+ "r5",
+ "r6",
+ "r7",
+ "r8",
+ "r9",
+ "r10",
+ "r11",
+ "r12",
+ "r13",
+ "r14",
+ "r15",
+ "pc",
+ "pr",
+};
+
+/* Return architecture dependent register string (for kprobe-tracer) */
+const char *get_arch_regstr(unsigned int n)
{
- WARN_ON(nr_context_switches() > 0);
- rcu_scheduler_active = 1;
+ return (n <= SH_MAX_REGS) ? sh_regs_table[n] : NULL;
}
-
-#endif /* #ifdef CONFIG_DEBUG_LOCK_ALLOC */