Re: [PATCH] perf tool: Build jitdump only on supported archs

From: Arnaldo Carvalho de Melo
Date: Thu Mar 10 2016 - 10:57:11 EST


Em Thu, Mar 10, 2016 at 10:32:29AM +0100, Jiri Olsa escreveu:
> On Mon, Mar 07, 2016 at 04:44:36PM -0300, Arnaldo Carvalho de Melo wrote:
>
> SNIP
>
> > ----------------------------------------------------------------
> > Adrian Hunter (5):
> > perf inject: Hit all DSOs for AUX data in JIT and other cases
> > perf session: Simplify tool stubs
> > perf jit: Let jit_process() return errors
> > perf jit: Move clockid validation
> > perf tools: Use 64-bit shifts with (TSC) time conversion
>
> hi,
> perf build failed for me on s390x because of jitdump feature.
>
> Attached patch tries to enable the build only on supported archs.
>
> I haven't followed this feature too much, so I might have missed
> something.. anyway it builds on s390x now ;-) I took the list of
> archs from util/genelf.h

Hi Jiri,

This may be related to this cset, still not in tip/perf/core:

commit 46dad054a19297af65c417c97cb920aa5bdf7e8c
Author: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
Date: Mon Mar 7 18:48:45 2016 -0300

perf jitdump: DWARF is also needed

Can you check if without this one perf builds on s390?

This patch is to make it build on ubuntu without libdw, i.e. it requires
both libdw and libelf, the way I fixed it may not be the best and
probably we need to fold these two patches before sending to Ingo, since
your patch essentially rewrites my previous patch :-)

Can you please check that?

- Arnaldo


> thanks,
> jirka
>
>
> ---
> Make jitdump being built only on architectures
> defined in util/genelf.h file.
>
> Signed-off-by: Jiri Olsa <jolsa@xxxxxxxxxx>
> ---
> tools/perf/arch/arm/Makefile | 1 +
> tools/perf/arch/arm64/Makefile | 1 +
> tools/perf/arch/powerpc/Makefile | 1 +
> tools/perf/arch/x86/Makefile | 1 +
> tools/perf/builtin-inject.c | 12 +++++++-----
> tools/perf/config/Makefile | 7 +++++++
> tools/perf/util/Build | 2 +-
> 7 files changed, 19 insertions(+), 6 deletions(-)
>
> diff --git a/tools/perf/arch/arm/Makefile b/tools/perf/arch/arm/Makefile
> index 7fbca175099e..18b13518d8d8 100644
> --- a/tools/perf/arch/arm/Makefile
> +++ b/tools/perf/arch/arm/Makefile
> @@ -1,3 +1,4 @@
> ifndef NO_DWARF
> PERF_HAVE_DWARF_REGS := 1
> endif
> +PERF_HAVE_JITDUMP := 1
> diff --git a/tools/perf/arch/arm64/Makefile b/tools/perf/arch/arm64/Makefile
> index 7fbca175099e..18b13518d8d8 100644
> --- a/tools/perf/arch/arm64/Makefile
> +++ b/tools/perf/arch/arm64/Makefile
> @@ -1,3 +1,4 @@
> ifndef NO_DWARF
> PERF_HAVE_DWARF_REGS := 1
> endif
> +PERF_HAVE_JITDUMP := 1
> diff --git a/tools/perf/arch/powerpc/Makefile b/tools/perf/arch/powerpc/Makefile
> index 9f9cea3478fd..56e05f126ad8 100644
> --- a/tools/perf/arch/powerpc/Makefile
> +++ b/tools/perf/arch/powerpc/Makefile
> @@ -3,3 +3,4 @@ PERF_HAVE_DWARF_REGS := 1
> endif
>
> HAVE_KVM_STAT_SUPPORT := 1
> +PERF_HAVE_JITDUMP := 1
> diff --git a/tools/perf/arch/x86/Makefile b/tools/perf/arch/x86/Makefile
> index 09ba923debe8..269af2143735 100644
> --- a/tools/perf/arch/x86/Makefile
> +++ b/tools/perf/arch/x86/Makefile
> @@ -3,3 +3,4 @@ PERF_HAVE_DWARF_REGS := 1
> endif
> HAVE_KVM_STAT_SUPPORT := 1
> PERF_HAVE_ARCH_REGS_QUERY_REGISTER_OFFSET := 1
> +PERF_HAVE_JITDUMP := 1
> diff --git a/tools/perf/builtin-inject.c b/tools/perf/builtin-inject.c
> index e219ed458d97..6eb17e24c4cc 100644
> --- a/tools/perf/builtin-inject.c
> +++ b/tools/perf/builtin-inject.c
> @@ -73,7 +73,7 @@ static int perf_event__repipe_oe_synth(struct perf_tool *tool,
> return perf_event__repipe_synth(tool, event);
> }
>
> -#if defined(HAVE_LIBELF_SUPPORT) && defined(HAVE_DWARF_SUPPORT)
> +#ifdef HAVE_JITDUMP
> static int perf_event__drop_oe(struct perf_tool *tool __maybe_unused,
> union perf_event *event __maybe_unused,
> struct ordered_events *oe __maybe_unused)
> @@ -245,7 +245,7 @@ static int perf_event__repipe_mmap(struct perf_tool *tool,
> return err;
> }
>
> -#if defined(HAVE_LIBELF_SUPPORT) && defined(HAVE_DWARF_SUPPORT)
> +#if defined(HAVE_JITDUMP)
> static int perf_event__jit_repipe_mmap(struct perf_tool *tool,
> union perf_event *event,
> struct perf_sample *sample,
> @@ -283,7 +283,7 @@ static int perf_event__repipe_mmap2(struct perf_tool *tool,
> return err;
> }
>
> -#if defined(HAVE_LIBELF_SUPPORT) && defined(HAVE_DWARF_SUPPORT)
> +#if defined(HAVE_JITDUMP)
> static int perf_event__jit_repipe_mmap2(struct perf_tool *tool,
> union perf_event *event,
> struct perf_sample *sample,
> @@ -778,7 +778,9 @@ int cmd_inject(int argc, const char **argv, const char *prefix __maybe_unused)
> OPT_BOOLEAN('s', "sched-stat", &inject.sched_stat,
> "Merge sched-stat and sched-switch for getting events "
> "where and how long tasks slept"),
> +#ifdef HAVE_JITDUMP
> OPT_BOOLEAN('j', "jit", &inject.jit_mode, "merge jitdump files into perf.data file"),
> +#endif
> OPT_INCR('v', "verbose", &verbose,
> "be more verbose (show build ids, etc)"),
> OPT_STRING(0, "kallsyms", &symbol_conf.kallsyms_name, "file",
> @@ -795,7 +797,7 @@ int cmd_inject(int argc, const char **argv, const char *prefix __maybe_unused)
> "perf inject [<options>]",
> NULL
> };
> -#if !defined(HAVE_LIBELF_SUPPORT) || !defined(HAVE_DWARF_SUPPORT)
> +#ifndef HAVE_JITDUMP
> set_option_nobuild(options, 'j', "jit", "NO_LIBELF=1", true);
> #endif
> argc = parse_options(argc, argv, options, inject_usage, 0);
> @@ -833,7 +835,7 @@ int cmd_inject(int argc, const char **argv, const char *prefix __maybe_unused)
> inject.tool.ordered_events = true;
> inject.tool.ordering_requires_timestamps = true;
> }
> -#if defined(HAVE_LIBELF_SUPPORT) && defined(HAVE_DWARF_SUPPORT)
> +#if defined(HAVE_JITDUMP)
> if (inject.jit_mode) {
> inject.tool.mmap2 = perf_event__jit_repipe_mmap2;
> inject.tool.mmap = perf_event__jit_repipe_mmap;
> diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile
> index f7aeaf303f5a..eca6a912e8c2 100644
> --- a/tools/perf/config/Makefile
> +++ b/tools/perf/config/Makefile
> @@ -328,6 +328,13 @@ ifndef NO_LIBELF
> endif # NO_LIBBPF
> endif # NO_LIBELF
>
> +ifdef PERF_HAVE_JITDUMP
> + ifndef NO_DWARF
> + $(call detected,CONFIG_JITDUMP)
> + CFLAGS += -DHAVE_JITDUMP
> + endif
> +endif
> +
> ifeq ($(ARCH),powerpc)
> ifndef NO_DWARF
> CFLAGS += -DHAVE_SKIP_CALLCHAIN_IDX
> diff --git a/tools/perf/util/Build b/tools/perf/util/Build
> index f130ce240158..eea25e2424e9 100644
> --- a/tools/perf/util/Build
> +++ b/tools/perf/util/Build
> @@ -108,7 +108,7 @@ libperf-$(CONFIG_ZLIB) += zlib.o
> libperf-$(CONFIG_LZMA) += lzma.o
> libperf-y += demangle-java.o
>
> -ifdef CONFIG_DWARF
> +ifdef CONFIG_JITDUMP
> libperf-$(CONFIG_LIBELF) += jitdump.o
> libperf-$(CONFIG_LIBELF) += genelf.o
> libperf-$(CONFIG_LIBELF) += genelf_debug.o
> --
> 2.4.3