Received: by 2002:a05:6358:d09b:b0:dc:cd0c:909e with SMTP id jc27csp1150059rwb; Wed, 7 Dec 2022 09:12:58 -0800 (PST) X-Google-Smtp-Source: AA0mqf5rXV7pnHdBLlWaKOoURoiho5WPu1gV6CtI4n1aYqxl3mIwGaItxtdF4p+wWUEbW+P0M5kO X-Received: by 2002:a05:6a00:2883:b0:572:7b49:4f47 with SMTP id ch3-20020a056a00288300b005727b494f47mr77334593pfb.16.1670433178122; Wed, 07 Dec 2022 09:12:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670433178; cv=none; d=google.com; s=arc-20160816; b=UHyvxDTI0TE3RSVdqkT2K9Vamh9L+fL3dyIyYTzsbU7O3vRA4/4MF6EeRTXGE0Ro4F fVZcUzgfBsnTW+F3bN+ko6IzMO3JNcVotWcEpnXKgAZGdBBkNA09Pvdbd3qSilm2b0yj zz8pNqC6hANfNrNNHYSW2iMvcJESZJ7daDiTnr+T8o4SZnI+KRuBJ3qGJtPLPqirQv0d 2csXAPOwukxIEkxuQMEzABy3TMNONGjFaE/kUMpHLd1mlg276PJXFHLrcudwdeCLDt41 5idfYvYuPIm39ZQgSEhdBn2jHvw66ZBeDSo7g7GzhVplFIzB2WjfPH050VIce7ePKOTU Luyw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=nSNo7Sk/qFvLc4rP4DvD4e7NbF0Dj22ADP2dKhQQwnU=; b=N3P4Dpl3KXnZSeNX1WxbocXllDVDEnNH4YR9bXRYk5OU2J/utiW2Hqsm9KTX2aD9fZ /D4O0pHFpJ0mdJFbZAWjSBtSKCHQn82Slf+38/sXps5O6WOPfV+ECM1jB/tXHueZKSgb e+5+BPb8ZUSjSSvdpw053REDswJqMmg1ykuXSdYJZvewCFADq2S6EaQPPLtUa+viva2V a7zQxP6MX7yzFTYgMzmlQVYLNAkySItxZgpmiKoHZN980SBWI0dunv/DpZw5X79PnRVY Jk9+Rq8bTmIuwEEkBz2rbnwudybi2sbZGHlv34w/PVJz5YazOrBmUSjS0Oqwvbz8pqU+ lBfA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=kBg+iw7z; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id d6-20020a056a0024c600b00576d16ade55si11092158pfv.35.2022.12.07.09.12.47; Wed, 07 Dec 2022 09:12:58 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=kBg+iw7z; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229676AbiLGQwi (ORCPT + 76 others); Wed, 7 Dec 2022 11:52:38 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39704 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229586AbiLGQwg (ORCPT ); Wed, 7 Dec 2022 11:52:36 -0500 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D6B7732E; Wed, 7 Dec 2022 08:52:32 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 2EEDEB81F72; Wed, 7 Dec 2022 16:52:31 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 26C0AC433C1; Wed, 7 Dec 2022 16:52:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1670431949; bh=WE7/Z+toO6yRfkbOG4jkwgPoXJDYTSHzNF8yTWDUQlI=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=kBg+iw7ziNLrPpYmvCn9nl+KtGAwOLhPFy13uFrj6HxgceBvBH9l1oyYipeiJbTFc YZA5MvQmpt5lWt+AmVCksheTa66GRD6TPflqVTIFPDEGoLkKCYzjogEU4oyH6xzq/y 0/s2uKLnRFl4JD5HxO56cRD0y+IQdCss6B8WNDoq1jnHoFIWxExIIcAzdUvNI6OB+L 3sOBQHCwoU569eGFF/Ef0SKu4PF5KJnYONRqH0sNln0ipYGKJw9fLCAjPQaxO7/Xrt jYOhsvZrO7KJwr7oeY+AsIiXPS87iPjjeBQAR15AfuD4yF4Q5oc5aGkz+RKJpgTR+F 1wU09r1T1okOg== Received: by quaco.ghostprotocols.net (Postfix, from userid 1000) id 3F38640404; Wed, 7 Dec 2022 13:52:20 -0300 (-03) Date: Wed, 7 Dec 2022 13:52:20 -0300 From: Arnaldo Carvalho de Melo To: Athira Rajeev Cc: Ian Rogers , Peter Zijlstra , Ingo Molnar , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Nick Desaulniers , LKML , linux-perf-users@vger.kernel.org, bpf@vger.kernel.org, Stephane Eranian Subject: Re: [PATCH 2/3] perf build: Use libtraceevent from the system Message-ID: References: <20221205225940.3079667-1-irogers@google.com> <20221205225940.3079667-3-irogers@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Url: http://acmel.wordpress.com X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Em Wed, Dec 07, 2022 at 07:16:00PM +0530, Athira Rajeev escreveu: > Observed build failure in powerpc with NO_LIBTRACEEVENT due to kvm-stat.c compile fail. > CONFIG_TRACEEVENT check is also needed in arch/powerpc/util/Build to fix this. Patch below: > > From e06f020f66435649c10fb7d391922f687d5b8206 Mon Sep 17 00:00:00 2001 > From: Athira Rajeev > Date: Wed, 7 Dec 2022 16:46:30 +0530 > Subject: [PATCH] tools/perf/arch/powerpc: Disable kvm-stat when traceevent is > disabled > MIME-Version: 1.0 > Content-Type: text/plain; charset=UTF-8 > Content-Transfer-Encoding: 8bit > > commit 407bb16c1a32 ("perf build: Use libtraceevent from the system") > disables libtraceevent support when f libtraceevent isn't installed > or NO_LIBTRACEEVENT=1 is passed. Commit added CONFIG_TRACEEVENT check > for kvm-stat in x86/util/Build. But same has to be added in powerpc > as well. Otherwise build will fail as below: > > #make NO_LIBTRACEEVENT=1 > arch/powerpc/util/kvm-stat.c: In function 'hcall_event_get_key': > arch/powerpc/util/kvm-stat.c:42:20: error: implicit declaration of function 'evsel__intval'; did you mean 'evsel__env'? [-Werror=implicit-function-declaration] > 42 | key->key = evsel__intval(evsel, sample, "req"); > | ^~~~~~~~~~~~~ > | evsel__env > > Patch adds the check for CONFIG_TRACEEVENT in powerpc/util/Build. Ok, folding this together with my changes to Ian's patch, so that we try to keep bisectability widely. - Arnaldo > Signed-off-by: Athira Rajeev > --- > tools/perf/arch/powerpc/util/Build | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/tools/perf/arch/powerpc/util/Build b/tools/perf/arch/powerpc/util/Build > index 0115f3166568..71e57f28abda 100644 > --- a/tools/perf/arch/powerpc/util/Build > +++ b/tools/perf/arch/powerpc/util/Build > @@ -1,5 +1,5 @@ > perf-y += header.o > -perf-y += kvm-stat.o > +perf-$(CONFIG_TRACEEVENT) += kvm-stat.o > perf-y += perf_regs.o > perf-y += mem-events.o > perf-y += sym-handling.o > -- > 2.31.1 > > > I couldn't functionally check "perf kvm stat" after this change since there are build issues remaining. > > Thanks > Athira > > > perf-y += perf_regs.o > > perf-y += topdown.o > > perf-y += machine.o > > diff --git a/tools/perf/arch/x86/util/intel-pt.c b/tools/perf/arch/x86/util/intel-pt.c > > index af102f471e9f..1e39a034cee9 100644 > > --- a/tools/perf/arch/x86/util/intel-pt.c > > +++ b/tools/perf/arch/x86/util/intel-pt.c > > @@ -418,6 +418,7 @@ static int intel_pt_info_fill(struct auxtrace_record *itr, > > return 0; > > } > > > > +#ifdef HAVE_LIBTRACEEVENT > > static int intel_pt_track_switches(struct evlist *evlist) > > { > > const char *sched_switch = "sched:sched_switch"; > > @@ -439,6 +440,7 @@ static int intel_pt_track_switches(struct evlist *evlist) > > > > return 0; > > } > > +#endif > > > > static void intel_pt_valid_str(char *str, size_t len, u64 valid) > > { > > @@ -829,6 +831,7 @@ static int intel_pt_recording_options(struct auxtrace_record *itr, > > ptr->have_sched_switch = 2; > > } > > } else { > > +#ifdef HAVE_LIBTRACEEVENT > > err = intel_pt_track_switches(evlist); > > if (err == -EPERM) > > pr_debug2("Unable to select sched:sched_switch\n"); > > @@ -836,6 +839,7 @@ static int intel_pt_recording_options(struct auxtrace_record *itr, > > return err; > > else > > ptr->have_sched_switch = 1; > > +#endif > > } > > } > > > > diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c > > index 517d928c00e3..90458ca6933f 100644 > > --- a/tools/perf/builtin-annotate.c > > +++ b/tools/perf/builtin-annotate.c > > @@ -499,7 +499,9 @@ int cmd_annotate(int argc, const char **argv) > > .namespaces = perf_event__process_namespaces, > > .attr = perf_event__process_attr, > > .build_id = perf_event__process_build_id, > > +#ifdef HAVE_LIBTRACEEVENT > > .tracing_data = perf_event__process_tracing_data, > > +#endif > > .id_index = perf_event__process_id_index, > > .auxtrace_info = perf_event__process_auxtrace_info, > > .auxtrace = perf_event__process_auxtrace, > > diff --git a/tools/perf/builtin-inject.c b/tools/perf/builtin-inject.c > > index e254f18986f7..3f4e4dd5abf3 100644 > > --- a/tools/perf/builtin-inject.c > > +++ b/tools/perf/builtin-inject.c > > @@ -607,6 +607,7 @@ static int perf_event__repipe_exit(struct perf_tool *tool, > > return err; > > } > > > > +#ifdef HAVE_LIBTRACEEVENT > > static int perf_event__repipe_tracing_data(struct perf_session *session, > > union perf_event *event) > > { > > @@ -614,6 +615,7 @@ static int perf_event__repipe_tracing_data(struct perf_session *session, > > > > return perf_event__process_tracing_data(session, event); > > } > > +#endif > > > > static int dso__read_build_id(struct dso *dso) > > { > > @@ -807,6 +809,7 @@ static int perf_inject__sched_switch(struct perf_tool *tool, > > return 0; > > } > > > > +#ifdef HAVE_LIBTRACEEVENT > > static int perf_inject__sched_stat(struct perf_tool *tool, > > union perf_event *event __maybe_unused, > > struct perf_sample *sample, > > @@ -836,6 +839,7 @@ static int perf_inject__sched_stat(struct perf_tool *tool, > > build_id__mark_dso_hit(tool, event_sw, &sample_sw, evsel, machine); > > return perf_event__repipe(tool, event_sw, &sample_sw, machine); > > } > > +#endif > > > > static struct guest_vcpu *guest_session__vcpu(struct guest_session *gs, u32 vcpu) > > { > > @@ -1961,7 +1965,9 @@ static int __cmd_inject(struct perf_inject *inject) > > inject->tool.mmap = perf_event__repipe_mmap; > > inject->tool.mmap2 = perf_event__repipe_mmap2; > > inject->tool.fork = perf_event__repipe_fork; > > +#ifdef HAVE_LIBTRACEEVENT > > inject->tool.tracing_data = perf_event__repipe_tracing_data; > > +#endif > > } > > > > output_data_offset = perf_session__data_offset(session->evlist); > > @@ -1984,8 +1990,10 @@ static int __cmd_inject(struct perf_inject *inject) > > evsel->handler = perf_inject__sched_switch; > > } else if (!strcmp(name, "sched:sched_process_exit")) > > evsel->handler = perf_inject__sched_process_exit; > > +#ifdef HAVE_LIBTRACEEVENT > > else if (!strncmp(name, "sched:sched_stat_", 17)) > > evsel->handler = perf_inject__sched_stat; > > +#endif > > } > > } else if (inject->itrace_synth_opts.vm_time_correlation) { > > session->itrace_synth_opts = &inject->itrace_synth_opts; > > diff --git a/tools/perf/builtin-kmem.c b/tools/perf/builtin-kmem.c > > index ebfab2ca1702..e20656c431a4 100644 > > --- a/tools/perf/builtin-kmem.c > > +++ b/tools/perf/builtin-kmem.c > > @@ -35,6 +35,7 @@ > > #include > > > > #include > > +#include > > > > static int kmem_slab; > > static int kmem_page; > > diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c > > index 7d9ec1bac1a2..641e739c717c 100644 > > --- a/tools/perf/builtin-kvm.c > > +++ b/tools/perf/builtin-kvm.c > > @@ -63,7 +63,7 @@ static const char *get_filename_for_perf_kvm(void) > > return filename; > > } > > > > -#ifdef HAVE_KVM_STAT_SUPPORT > > +#if defined(HAVE_KVM_STAT_SUPPORT) && defined(HAVE_LIBTRACEEVENT) > > > > void exit_event_get_key(struct evsel *evsel, > > struct perf_sample *sample, > > @@ -654,7 +654,7 @@ static void print_result(struct perf_kvm_stat *kvm) > > pr_info("\nLost events: %" PRIu64 "\n\n", kvm->lost_events); > > } > > > > -#ifdef HAVE_TIMERFD_SUPPORT > > +#if defined(HAVE_TIMERFD_SUPPORT) && defined(HAVE_LIBTRACEEVENT) > > static int process_lost_event(struct perf_tool *tool, > > union perf_event *event __maybe_unused, > > struct perf_sample *sample __maybe_unused, > > @@ -742,7 +742,7 @@ static bool verify_vcpu(int vcpu) > > return true; > > } > > > > -#ifdef HAVE_TIMERFD_SUPPORT > > +#if defined(HAVE_TIMERFD_SUPPORT) && defined(HAVE_LIBTRACEEVENT) > > /* keeping the max events to a modest level to keep > > * the processing of samples per mmap smooth. > > */ > > @@ -1290,7 +1290,7 @@ kvm_events_report(struct perf_kvm_stat *kvm, int argc, const char **argv) > > return kvm_events_report_vcpu(kvm); > > } > > > > -#ifdef HAVE_TIMERFD_SUPPORT > > +#if defined(HAVE_TIMERFD_SUPPORT) && defined(HAVE_LIBTRACEEVENT) > > static struct evlist *kvm_live_event_list(void) > > { > > struct evlist *evlist; > > @@ -1507,7 +1507,7 @@ static int kvm_cmd_stat(const char *file_name, int argc, const char **argv) > > if (strlen(argv[1]) > 2 && strstarts("report", argv[1])) > > return kvm_events_report(&kvm, argc - 1 , argv + 1); > > > > -#ifdef HAVE_TIMERFD_SUPPORT > > +#if defined(HAVE_TIMERFD_SUPPORT) && defined(HAVE_LIBTRACEEVENT) > > if (!strncmp(argv[1], "live", 4)) > > return kvm_events_live(&kvm, argc - 1 , argv + 1); > > #endif > > @@ -1644,7 +1644,7 @@ int cmd_kvm(int argc, const char **argv) > > return cmd_top(argc, argv); > > else if (strlen(argv[0]) > 2 && strstarts("buildid-list", argv[0])) > > return __cmd_buildid_list(file_name, argc, argv); > > -#ifdef HAVE_KVM_STAT_SUPPORT > > +#if defined(HAVE_KVM_STAT_SUPPORT) && defined(HAVE_LIBTRACEEVENT) > > else if (strlen(argv[0]) > 2 && strstarts("stat", argv[0])) > > return kvm_cmd_stat(file_name, argc, argv); > > #endif > > diff --git a/tools/perf/builtin-kwork.c b/tools/perf/builtin-kwork.c > > index 0e02b8098644..dc59d75180d1 100644 > > --- a/tools/perf/builtin-kwork.c > > +++ b/tools/perf/builtin-kwork.c > > @@ -23,6 +23,7 @@ > > > > #include > > #include > > +#include > > > > #include > > #include > > diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c > > index b7fd7ec586fb..7e17374f6c1a 100644 > > --- a/tools/perf/builtin-record.c > > +++ b/tools/perf/builtin-record.c > > @@ -1701,8 +1701,10 @@ static void record__init_features(struct record *rec) > > if (rec->no_buildid) > > perf_header__clear_feat(&session->header, HEADER_BUILD_ID); > > > > +#ifdef HAVE_LIBTRACEEVENT > > if (!have_tracepoints(&rec->evlist->core.entries)) > > perf_header__clear_feat(&session->header, HEADER_TRACING_DATA); > > +#endif > > > > if (!rec->opts.branch_stack) > > perf_header__clear_feat(&session->header, HEADER_BRANCH_STACK); > > diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c > > index b6d77d3da64f..2ee2ecca208e 100644 > > --- a/tools/perf/builtin-report.c > > +++ b/tools/perf/builtin-report.c > > @@ -67,6 +67,10 @@ > > #include > > #include > > > > +#ifdef HAVE_LIBTRACEEVENT > > +#include > > +#endif > > + > > struct report { > > struct perf_tool tool; > > struct perf_session *session; > > @@ -1199,7 +1203,9 @@ int cmd_report(int argc, const char **argv) > > .lost = perf_event__process_lost, > > .read = process_read_event, > > .attr = process_attr, > > +#ifdef HAVE_LIBTRACEEVENT > > .tracing_data = perf_event__process_tracing_data, > > +#endif > > .build_id = perf_event__process_build_id, > > .id_index = perf_event__process_id_index, > > .auxtrace_info = perf_event__process_auxtrace_info, > > @@ -1660,6 +1666,7 @@ int cmd_report(int argc, const char **argv) > > report.range_num); > > } > > > > +#ifdef HAVE_LIBTRACEEVENT > > if (session->tevent.pevent && > > tep_set_function_resolver(session->tevent.pevent, > > machine__resolve_kernel_addr, > > @@ -1668,7 +1675,7 @@ int cmd_report(int argc, const char **argv) > > __func__); > > return -1; > > } > > - > > +#endif > > sort__setup_elide(stdout); > > > > ret = __cmd_report(&report); > > diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c > > index d7ec8c1af293..88888fb885c8 100644 > > --- a/tools/perf/builtin-script.c > > +++ b/tools/perf/builtin-script.c > > @@ -62,6 +62,9 @@ > > #include "perf.h" > > > > #include > > +#ifdef HAVE_LIBTRACEEVENT > > +#include > > +#endif > > > > static char const *script_name; > > static char const *generate_script_lang; > > @@ -2154,12 +2157,12 @@ static void process_event(struct perf_script *script, > > perf_sample__fprintf_bts(sample, evsel, thread, al, addr_al, machine, fp); > > return; > > } > > - > > +#ifdef HAVE_LIBTRACEEVENT > > if (PRINT_FIELD(TRACE) && sample->raw_data) { > > event_format__fprintf(evsel->tp_format, sample->cpu, > > sample->raw_data, sample->raw_size, fp); > > } > > - > > +#endif > > if (attr->type == PERF_TYPE_SYNTH && PRINT_FIELD(SYNTH)) > > perf_sample__fprintf_synth(sample, evsel, fp); > > > > @@ -2283,8 +2286,10 @@ static void process_stat_interval(u64 tstamp) > > > > static void setup_scripting(void) > > { > > +#ifdef HAVE_LIBTRACEEVENT > > setup_perl_scripting(); > > setup_python_scripting(); > > +#endif > > } > > > > static int flush_scripting(void) > > @@ -3784,7 +3789,9 @@ int cmd_script(int argc, const char **argv) > > .fork = perf_event__process_fork, > > .attr = process_attr, > > .event_update = perf_event__process_event_update, > > +#ifdef HAVE_LIBTRACEEVENT > > .tracing_data = perf_event__process_tracing_data, > > +#endif > > .feature = process_feature_event, > > .build_id = perf_event__process_build_id, > > .id_index = perf_event__process_id_index, > > @@ -4215,6 +4222,7 @@ int cmd_script(int argc, const char **argv) > > else > > symbol_conf.use_callchain = false; > > > > +#ifdef HAVE_LIBTRACEEVENT > > if (session->tevent.pevent && > > tep_set_function_resolver(session->tevent.pevent, > > machine__resolve_kernel_addr, > > @@ -4223,7 +4231,7 @@ int cmd_script(int argc, const char **argv) > > err = -1; > > goto out_delete; > > } > > - > > +#endif > > if (generate_script_lang) { > > struct stat perf_stat; > > int input; > > @@ -4259,9 +4267,12 @@ int cmd_script(int argc, const char **argv) > > err = -ENOENT; > > goto out_delete; > > } > > - > > +#ifdef HAVE_LIBTRACEEVENT > > err = scripting_ops->generate_script(session->tevent.pevent, > > "perf-script"); > > +#else > > + err = scripting_ops->generate_script(NULL, "perf-script"); > > +#endif > > goto out_delete; > > } > > > > diff --git a/tools/perf/builtin-timechart.c b/tools/perf/builtin-timechart.c > > index c36296bb7637..6c629e7d370a 100644 > > --- a/tools/perf/builtin-timechart.c > > +++ b/tools/perf/builtin-timechart.c > > @@ -38,6 +38,7 @@ > > #include "util/string2.h" > > #include "util/tracepoint.h" > > #include > > +#include > > > > #ifdef LACKS_OPEN_MEMSTREAM_PROTOTYPE > > FILE *open_memstream(char **ptr, size_t *sizeloc); > > diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c > > index 543c379d2a57..6909cd9f48d1 100644 > > --- a/tools/perf/builtin-trace.c > > +++ b/tools/perf/builtin-trace.c > > @@ -15,7 +15,6 @@ > > */ > > > > #include "util/record.h" > > -#include > > #include > > #include > > #include "util/bpf_map.h" > > @@ -80,6 +79,10 @@ > > #include > > #include > > > > +#ifdef HAVE_LIBTRACEEVENT > > +#include > > +#endif > > + > > #ifndef O_CLOEXEC > > # define O_CLOEXEC 02000000 > > #endif > > diff --git a/tools/perf/builtin-version.c b/tools/perf/builtin-version.c > > index a71f491224da..a886929ec6e5 100644 > > --- a/tools/perf/builtin-version.c > > +++ b/tools/perf/builtin-version.c > > @@ -82,6 +82,7 @@ static void library_status(void) > > STATUS(HAVE_AIO_SUPPORT, aio); > > STATUS(HAVE_ZSTD_SUPPORT, zstd); > > STATUS(HAVE_LIBPFM, libpfm4); > > + STATUS(HAVE_LIBTRACEEVENT, libtraceevent); > > } > > > > int cmd_version(int argc, const char **argv) > > diff --git a/tools/perf/perf.c b/tools/perf/perf.c > > index 7af135dea1cd..82bbe0ca858b 100644 > > --- a/tools/perf/perf.c > > +++ b/tools/perf/perf.c > > @@ -70,20 +70,26 @@ static struct cmd_struct commands[] = { > > { "report", cmd_report, 0 }, > > { "bench", cmd_bench, 0 }, > > { "stat", cmd_stat, 0 }, > > +#ifdef HAVE_LIBTRACEEVENT > > { "timechart", cmd_timechart, 0 }, > > +#endif > > { "top", cmd_top, 0 }, > > { "annotate", cmd_annotate, 0 }, > > { "version", cmd_version, 0 }, > > { "script", cmd_script, 0 }, > > +#ifdef HAVE_LIBTRACEEVENT > > { "sched", cmd_sched, 0 }, > > +#endif > > #ifdef HAVE_LIBELF_SUPPORT > > { "probe", cmd_probe, 0 }, > > #endif > > +#ifdef HAVE_LIBTRACEEVENT > > { "kmem", cmd_kmem, 0 }, > > { "lock", cmd_lock, 0 }, > > +#endif > > { "kvm", cmd_kvm, 0 }, > > { "test", cmd_test, 0 }, > > -#if defined(HAVE_LIBAUDIT_SUPPORT) || defined(HAVE_SYSCALL_TABLE_SUPPORT) > > +#if defined(HAVE_LIBTRACEEVENT) && (defined(HAVE_LIBAUDIT_SUPPORT) || defined(HAVE_SYSCALL_TABLE_SUPPORT)) > > { "trace", cmd_trace, 0 }, > > #endif > > { "inject", cmd_inject, 0 }, > > @@ -91,7 +97,9 @@ static struct cmd_struct commands[] = { > > { "data", cmd_data, 0 }, > > { "ftrace", cmd_ftrace, 0 }, > > { "daemon", cmd_daemon, 0 }, > > +#ifdef HAVE_LIBTRACEEVENT > > { "kwork", cmd_kwork, 0 }, > > +#endif > > }; > > > > struct pager_config { > > @@ -500,14 +508,18 @@ int main(int argc, const char **argv) > > argv[0] = cmd; > > } > > if (strstarts(cmd, "trace")) { > > -#if defined(HAVE_LIBAUDIT_SUPPORT) || defined(HAVE_SYSCALL_TABLE_SUPPORT) > > - setup_path(); > > - argv[0] = "trace"; > > - return cmd_trace(argc, argv); > > -#else > > +#ifndef HAVE_LIBTRACEEVENT > > + fprintf(stderr, > > + "trace command not available: missing libtraceevent devel package at build time.\n"); > > + goto out; > > +#elif !defined(HAVE_LIBAUDIT_SUPPORT) && !defined(HAVE_SYSCALL_TABLE_SUPPORT) > > fprintf(stderr, > > "trace command not available: missing audit-libs devel package at build time.\n"); > > goto out; > > +#else > > + setup_path(); > > + argv[0] = "trace"; > > + return cmd_trace(argc, argv); > > #endif > > } > > /* Look for flags.. */ > > diff --git a/tools/perf/scripts/python/Perf-Trace-Util/Build b/tools/perf/scripts/python/Perf-Trace-Util/Build > > index 7d0e33ce6aba..f65625a60704 100644 > > --- a/tools/perf/scripts/python/Perf-Trace-Util/Build > > +++ b/tools/perf/scripts/python/Perf-Trace-Util/Build > > @@ -1,3 +1,3 @@ > > -perf-y += Context.o > > +perf-$(CONFIG_TRACEEVENT) += Context.o > > > > CFLAGS_Context.o += $(PYTHON_EMBED_CCOPTS) -Wno-redundant-decls -Wno-strict-prototypes -Wno-unused-parameter -Wno-nested-externs > > diff --git a/tools/perf/tests/Build b/tools/perf/tests/Build > > index 11b69023011b..34ebc009e05a 100644 > > --- a/tools/perf/tests/Build > > +++ b/tools/perf/tests/Build > > @@ -6,13 +6,13 @@ perf-y += parse-events.o > > perf-y += dso-data.o > > perf-y += attr.o > > perf-y += vmlinux-kallsyms.o > > -perf-y += openat-syscall.o > > -perf-y += openat-syscall-all-cpus.o > > -perf-y += openat-syscall-tp-fields.o > > -perf-y += mmap-basic.o > > +perf-$(CONFIG_TRACEEVENT) += openat-syscall.o > > +perf-$(CONFIG_TRACEEVENT) += openat-syscall-all-cpus.o > > +perf-$(CONFIG_TRACEEVENT) += openat-syscall-tp-fields.o > > +perf-$(CONFIG_TRACEEVENT) += mmap-basic.o > > perf-y += perf-record.o > > perf-y += evsel-roundtrip-name.o > > -perf-y += evsel-tp-sched.o > > +perf-$(CONFIG_TRACEEVENT) += evsel-tp-sched.o > > perf-y += fdarray.o > > perf-y += pmu.o > > perf-y += pmu-events.o > > @@ -30,7 +30,7 @@ perf-y += task-exit.o > > perf-y += sw-clock.o > > perf-y += mmap-thread-lookup.o > > perf-y += thread-maps-share.o > > -perf-y += switch-tracking.o > > +perf-$(CONFIG_TRACEEVENT) += switch-tracking.o > > perf-y += keep-tracking.o > > perf-y += code-reading.o > > perf-y += sample-parsing.o > > diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-test.c > > index 4c6ae59a4dfd..658449204ce5 100644 > > --- a/tools/perf/tests/builtin-test.c > > +++ b/tools/perf/tests/builtin-test.c > > @@ -38,9 +38,11 @@ struct test_suite *__weak arch_tests[] = { > > > > static struct test_suite *generic_tests[] = { > > &suite__vmlinux_matches_kallsyms, > > +#ifdef HAVE_LIBTRACEEVENT > > &suite__openat_syscall_event, > > &suite__openat_syscall_event_on_all_cpus, > > &suite__basic_mmap, > > +#endif > > &suite__mem, > > &suite__parse_events, > > &suite__expr, > > @@ -51,8 +53,10 @@ static struct test_suite *generic_tests[] = { > > &suite__dso_data_cache, > > &suite__dso_data_reopen, > > &suite__perf_evsel__roundtrip_name_test, > > +#ifdef HAVE_LIBTRACEEVENT > > &suite__perf_evsel__tp_sched_test, > > &suite__syscall_openat_tp_fields, > > +#endif > > &suite__attr, > > &suite__hists_link, > > &suite__python_use, > > @@ -71,7 +75,9 @@ static struct test_suite *generic_tests[] = { > > &suite__thread_maps_share, > > &suite__hists_output, > > &suite__hists_cumulate, > > +#ifdef HAVE_LIBTRACEEVENT > > &suite__switch_tracking, > > +#endif > > &suite__fdarray__filter, > > &suite__fdarray__add, > > &suite__kmod_path__parse, > > diff --git a/tools/perf/tests/parse-events.c b/tools/perf/tests/parse-events.c > > index 3440dd2616b0..dcbfb93287e8 100644 > > --- a/tools/perf/tests/parse-events.c > > +++ b/tools/perf/tests/parse-events.c > > @@ -46,6 +46,7 @@ static bool kvm_s390_create_vm_valid(void) > > } > > #endif > > > > +#ifdef HAVE_LIBTRACEEVENT > > static int test__checkevent_tracepoint(struct evlist *evlist) > > { > > struct evsel *evsel = evlist__first(evlist); > > @@ -76,6 +77,7 @@ static int test__checkevent_tracepoint_multi(struct evlist *evlist) > > } > > return TEST_OK; > > } > > +#endif /* HAVE_LIBTRACEEVENT */ > > > > static int test__checkevent_raw(struct evlist *evlist) > > { > > @@ -222,6 +224,7 @@ static int test__checkevent_breakpoint_rw(struct evlist *evlist) > > return TEST_OK; > > } > > > > +#ifdef HAVE_LIBTRACEEVENT > > static int test__checkevent_tracepoint_modifier(struct evlist *evlist) > > { > > struct evsel *evsel = evlist__first(evlist); > > @@ -252,6 +255,7 @@ test__checkevent_tracepoint_multi_modifier(struct evlist *evlist) > > > > return test__checkevent_tracepoint_multi(evlist); > > } > > +#endif /* HAVE_LIBTRACEEVENT */ > > > > static int test__checkevent_raw_modifier(struct evlist *evlist) > > { > > @@ -453,6 +457,7 @@ static int test__checkevent_pmu(struct evlist *evlist) > > return TEST_OK; > > } > > > > +#ifdef HAVE_LIBTRACEEVENT > > static int test__checkevent_list(struct evlist *evlist) > > { > > struct evsel *evsel = evlist__first(evlist); > > @@ -491,6 +496,7 @@ static int test__checkevent_list(struct evlist *evlist) > > > > return TEST_OK; > > } > > +#endif > > > > static int test__checkevent_pmu_name(struct evlist *evlist) > > { > > @@ -762,6 +768,7 @@ static int test__group2(struct evlist *evlist) > > return TEST_OK; > > } > > > > +#ifdef HAVE_LIBTRACEEVENT > > static int test__group3(struct evlist *evlist __maybe_unused) > > { > > struct evsel *evsel, *leader; > > @@ -853,6 +860,7 @@ static int test__group3(struct evlist *evlist __maybe_unused) > > > > return TEST_OK; > > } > > +#endif > > > > static int test__group4(struct evlist *evlist __maybe_unused) > > { > > @@ -1460,6 +1468,7 @@ static int test__sym_event_dc(struct evlist *evlist) > > return TEST_OK; > > } > > > > +#ifdef HAVE_LIBTRACEEVENT > > static int count_tracepoints(void) > > { > > struct dirent *events_ent; > > @@ -1513,6 +1522,7 @@ static int test__all_tracepoints(struct evlist *evlist) > > > > return test__checkevent_tracepoint_multi(evlist); > > } > > +#endif /* HAVE_LIBTRACEVENT */ > > > > static int test__hybrid_hw_event_with_pmu(struct evlist *evlist) > > { > > @@ -1642,6 +1652,7 @@ struct evlist_test { > > }; > > > > static const struct evlist_test test__events[] = { > > +#ifdef HAVE_LIBTRACEEVENT > > { > > .name = "syscalls:sys_enter_openat", > > .check = test__checkevent_tracepoint, > > @@ -1652,6 +1663,7 @@ static const struct evlist_test test__events[] = { > > .check = test__checkevent_tracepoint_multi, > > /* 1 */ > > }, > > +#endif > > { > > .name = "r1a", > > .check = test__checkevent_raw, > > @@ -1702,6 +1714,7 @@ static const struct evlist_test test__events[] = { > > .check = test__checkevent_breakpoint_w, > > /* 1 */ > > }, > > +#ifdef HAVE_LIBTRACEEVENT > > { > > .name = "syscalls:sys_enter_openat:k", > > .check = test__checkevent_tracepoint_modifier, > > @@ -1712,6 +1725,7 @@ static const struct evlist_test test__events[] = { > > .check = test__checkevent_tracepoint_multi_modifier, > > /* 3 */ > > }, > > +#endif > > { > > .name = "r1a:kp", > > .check = test__checkevent_raw_modifier, > > @@ -1757,11 +1771,13 @@ static const struct evlist_test test__events[] = { > > .check = test__checkevent_breakpoint_w_modifier, > > /* 2 */ > > }, > > +#ifdef HAVE_LIBTRACEEVENT > > { > > .name = "r1,syscalls:sys_enter_openat:k,1:1:hp", > > .check = test__checkevent_list, > > /* 3 */ > > }, > > +#endif > > { > > .name = "instructions:G", > > .check = test__checkevent_exclude_host_modifier, > > @@ -1792,11 +1808,13 @@ static const struct evlist_test test__events[] = { > > .check = test__group2, > > /* 9 */ > > }, > > +#ifdef HAVE_LIBTRACEEVENT > > { > > .name = "group1{syscalls:sys_enter_openat:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u", > > .check = test__group3, > > /* 0 */ > > }, > > +#endif > > { > > .name = "{cycles:u,instructions:kp}:p", > > .check = test__group4, > > @@ -1807,11 +1825,13 @@ static const struct evlist_test test__events[] = { > > .check = test__group5, > > /* 2 */ > > }, > > +#ifdef HAVE_LIBTRACEEVENT > > { > > .name = "*:*", > > .check = test__all_tracepoints, > > /* 3 */ > > }, > > +#endif > > { > > .name = "{cycles,cache-misses:G}:H", > > .check = test__group_gh1, > > diff --git a/tools/perf/util/Build b/tools/perf/util/Build > > index ab37f588ee8b..612406311e27 100644 > > --- a/tools/perf/util/Build > > +++ b/tools/perf/util/Build > > @@ -69,17 +69,17 @@ perf-y += namespaces.o > > perf-y += comm.o > > perf-y += thread.o > > perf-y += thread_map.o > > -perf-y += trace-event-parse.o > > perf-y += parse-events-flex.o > > perf-y += parse-events-bison.o > > perf-y += pmu.o > > perf-y += pmu-flex.o > > perf-y += pmu-bison.o > > perf-y += pmu-hybrid.o > > -perf-y += trace-event-read.o > > -perf-y += trace-event-info.o > > -perf-y += trace-event-scripting.o > > -perf-y += trace-event.o > > +perf-$(CONFIG_TRACEEVENT) += trace-event-info.o > > +perf-$(CONFIG_TRACEEVENT) += trace-event-scripting.o > > +perf-$(CONFIG_TRACEEVENT) += trace-event.o > > +perf-$(CONFIG_TRACEEVENT) += trace-event-parse.o > > +perf-$(CONFIG_TRACEEVENT) += trace-event-read.o > > perf-y += svghelper.o > > perf-y += sort.o > > perf-y += hist.o > > diff --git a/tools/perf/util/data-convert-bt.c b/tools/perf/util/data-convert-bt.c > > index c65cdaf6975e..8031b586e813 100644 > > --- a/tools/perf/util/data-convert-bt.c > > +++ b/tools/perf/util/data-convert-bt.c > > @@ -19,7 +19,6 @@ > > #include > > #include > > #include > > -#include > > #include "asm/bug.h" > > #include "data-convert.h" > > #include "session.h" > > @@ -36,6 +35,10 @@ > > #include "clockid.h" > > #include "util/sample.h" > > > > +#ifdef HAVE_LIBTRACEEVENT > > +#include > > +#endif > > + > > #define pr_N(n, fmt, ...) \ > > eprintf(n, debug_data_convert, fmt, ##__VA_ARGS__) > > > > diff --git a/tools/perf/util/data-convert-json.c b/tools/perf/util/data-convert-json.c > > index 57db59068cb6..ba9d93ce9463 100644 > > --- a/tools/perf/util/data-convert-json.c > > +++ b/tools/perf/util/data-convert-json.c > > @@ -27,6 +27,10 @@ > > #include "util/thread.h" > > #include "util/tool.h" > > > > +#ifdef HAVE_LIBTRACEEVENT > > +#include > > +#endif > > + > > struct convert_json { > > struct perf_tool tool; > > FILE *out; > > @@ -217,6 +221,7 @@ static int process_sample_event(struct perf_tool *tool, > > } > > output_json_format(out, false, 3, "]"); > > > > +#ifdef HAVE_LIBTRACEEVENT > > if (sample->raw_data) { > > int i; > > struct tep_format_field **fields; > > @@ -236,7 +241,7 @@ static int process_sample_event(struct perf_tool *tool, > > free(fields); > > } > > } > > - > > +#endif > > output_json_format(out, false, 2, "}"); > > return 0; > > } > > @@ -313,7 +318,9 @@ int bt_convert__perf2json(const char *input_name, const char *output_name, > > .exit = perf_event__process_exit, > > .fork = perf_event__process_fork, > > .lost = perf_event__process_lost, > > +#ifdef HAVE_LIBTRACEEVENT > > .tracing_data = perf_event__process_tracing_data, > > +#endif > > .build_id = perf_event__process_build_id, > > .id_index = perf_event__process_id_index, > > .auxtrace_info = perf_event__process_auxtrace_info, > > diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c > > index fbf3192bced9..590d4e77effc 100644 > > --- a/tools/perf/util/evlist.c > > +++ b/tools/perf/util/evlist.c > > @@ -290,6 +290,7 @@ struct evsel *evlist__add_aux_dummy(struct evlist *evlist, bool system_wide) > > return evsel; > > } > > > > +#ifdef HAVE_LIBTRACEEVENT > > struct evsel *evlist__add_sched_switch(struct evlist *evlist, bool system_wide) > > { > > struct evsel *evsel = evsel__newtp_idx("sched", "sched_switch", 0); > > @@ -305,7 +306,8 @@ struct evsel *evlist__add_sched_switch(struct evlist *evlist, bool system_wide) > > > > evlist__add(evlist, evsel); > > return evsel; > > -}; > > +} > > +#endif > > > > int evlist__add_attrs(struct evlist *evlist, struct perf_event_attr *attrs, size_t nr_attrs) > > { > > @@ -376,6 +378,7 @@ struct evsel *evlist__find_tracepoint_by_name(struct evlist *evlist, const char > > return NULL; > > } > > > > +#ifdef HAVE_LIBTRACEEVENT > > int evlist__add_newtp(struct evlist *evlist, const char *sys, const char *name, void *handler) > > { > > struct evsel *evsel = evsel__newtp(sys, name); > > @@ -387,6 +390,7 @@ int evlist__add_newtp(struct evlist *evlist, const char *sys, const char *name, > > evlist__add(evlist, evsel); > > return 0; > > } > > +#endif > > > > struct evlist_cpu_iterator evlist__cpu_begin(struct evlist *evlist, struct affinity *affinity) > > { > > diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h > > index 16734c6756b3..e5b84ead566c 100644 > > --- a/tools/perf/util/evlist.h > > +++ b/tools/perf/util/evlist.h > > @@ -127,7 +127,9 @@ static inline struct evsel *evlist__add_dummy_on_all_cpus(struct evlist *evlist) > > { > > return evlist__add_aux_dummy(evlist, true); > > } > > +#ifdef HAVE_LIBTRACEEVENT > > struct evsel *evlist__add_sched_switch(struct evlist *evlist, bool system_wide); > > +#endif > > > > int evlist__add_sb_event(struct evlist *evlist, struct perf_event_attr *attr, > > evsel__sb_cb_t cb, void *data); > > @@ -135,7 +137,9 @@ void evlist__set_cb(struct evlist *evlist, evsel__sb_cb_t cb, void *data); > > int evlist__start_sb_thread(struct evlist *evlist, struct target *target); > > void evlist__stop_sb_thread(struct evlist *evlist); > > > > +#ifdef HAVE_LIBTRACEEVENT > > int evlist__add_newtp(struct evlist *evlist, const char *sys, const char *name, void *handler); > > +#endif > > > > int __evlist__set_tracepoints_handlers(struct evlist *evlist, > > const struct evsel_str_handler *assocs, > > diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c > > index 0f617359a82f..ca911856c4b1 100644 > > --- a/tools/perf/util/evsel.c > > +++ b/tools/perf/util/evsel.c > > @@ -12,7 +12,6 @@ > > #include > > #include > > #include > > -#include > > #include > > #include > > #include > > @@ -57,6 +56,10 @@ > > > > #include > > > > +#ifdef HAVE_LIBTRACEEVENT > > +#include > > +#endif > > + > > struct perf_missing_features perf_missing_features; > > > > static clockid_t clockid; > > @@ -439,7 +442,9 @@ struct evsel *evsel__clone(struct evsel *orig) > > goto out_err; > > } > > evsel->cgrp = cgroup__get(orig->cgrp); > > +#ifdef HAVE_LIBTRACEEVENT > > evsel->tp_format = orig->tp_format; > > +#endif > > evsel->handler = orig->handler; > > evsel->core.leader = orig->core.leader; > > > > @@ -479,6 +484,7 @@ struct evsel *evsel__clone(struct evsel *orig) > > /* > > * Returns pointer with encoded error via interface. > > */ > > +#ifdef HAVE_LIBTRACEEVENT > > struct evsel *evsel__newtp_idx(const char *sys, const char *name, int idx) > > { > > struct evsel *evsel = zalloc(perf_evsel__object.size); > > @@ -516,6 +522,7 @@ struct evsel *evsel__newtp_idx(const char *sys, const char *name, int idx) > > out_err: > > return ERR_PTR(err); > > } > > +#endif > > > > const char *const evsel__hw_names[PERF_COUNT_HW_MAX] = { > > "cycles", > > @@ -2758,6 +2765,7 @@ u16 evsel__id_hdr_size(struct evsel *evsel) > > return size; > > } > > > > +#ifdef HAVE_LIBTRACEEVENT > > struct tep_format_field *evsel__field(struct evsel *evsel, const char *name) > > { > > return tep_find_field(evsel->tp_format, name); > > @@ -2831,6 +2839,7 @@ u64 evsel__intval(struct evsel *evsel, struct perf_sample *sample, const char *n > > > > return field ? format_field__intval(field, sample, evsel->needs_swap) : 0; > > } > > +#endif > > > > bool evsel__fallback(struct evsel *evsel, int err, char *msg, size_t msgsize) > > { > > diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h > > index f3485799ddf9..d572be41b960 100644 > > --- a/tools/perf/util/evsel.h > > +++ b/tools/perf/util/evsel.h > > @@ -72,7 +72,9 @@ struct evsel { > > char *name; > > char *group_name; > > const char *pmu_name; > > +#ifdef HAVE_LIBTRACEEVENT > > struct tep_event *tp_format; > > +#endif > > char *filter; > > unsigned long max_events; > > double scale; > > @@ -223,11 +225,14 @@ static inline struct evsel *evsel__new(struct perf_event_attr *attr) > > } > > > > struct evsel *evsel__clone(struct evsel *orig); > > -struct evsel *evsel__newtp_idx(const char *sys, const char *name, int idx); > > > > int copy_config_terms(struct list_head *dst, struct list_head *src); > > void free_config_terms(struct list_head *config_terms); > > > > + > > +#ifdef HAVE_LIBTRACEEVENT > > +struct evsel *evsel__newtp_idx(const char *sys, const char *name, int idx); > > + > > /* > > * Returns pointer with encoded error via interface. > > */ > > @@ -235,10 +240,13 @@ static inline struct evsel *evsel__newtp(const char *sys, const char *name) > > { > > return evsel__newtp_idx(sys, name, 0); > > } > > +#endif > > > > struct evsel *evsel__new_cycles(bool precise, __u32 type, __u64 config); > > > > +#ifdef HAVE_LIBTRACEEVENT > > struct tep_event *event_format__new(const char *sys, const char *name); > > +#endif > > > > void evsel__init(struct evsel *evsel, struct perf_event_attr *attr, int idx); > > void evsel__exit(struct evsel *evsel); > > @@ -323,6 +331,7 @@ bool evsel__precise_ip_fallback(struct evsel *evsel); > > > > struct perf_sample; > > > > +#ifdef HAVE_LIBTRACEEVENT > > void *evsel__rawptr(struct evsel *evsel, struct perf_sample *sample, const char *name); > > u64 evsel__intval(struct evsel *evsel, struct perf_sample *sample, const char *name); > > > > @@ -330,6 +339,7 @@ static inline char *evsel__strval(struct evsel *evsel, struct perf_sample *sampl > > { > > return evsel__rawptr(evsel, sample, name); > > } > > +#endif > > > > struct tep_format_field; > > > > diff --git a/tools/perf/util/evsel_fprintf.c b/tools/perf/util/evsel_fprintf.c > > index 8c2ea8001329..bd22c4932d10 100644 > > --- a/tools/perf/util/evsel_fprintf.c > > +++ b/tools/perf/util/evsel_fprintf.c > > @@ -2,7 +2,6 @@ > > #include > > #include > > #include > > -#include > > #include "evsel.h" > > #include "util/evsel_fprintf.h" > > #include "util/event.h" > > @@ -13,6 +12,10 @@ > > #include "srcline.h" > > #include "dso.h" > > > > +#ifdef HAVE_LIBTRACEEVENT > > +#include > > +#endif > > + > > static int comma_fprintf(FILE *fp, bool *first, const char *fmt, ...) > > { > > va_list args; > > @@ -74,6 +77,7 @@ int evsel__fprintf(struct evsel *evsel, struct perf_attr_details *details, FILE > > term, (u64)evsel->core.attr.sample_freq); > > } > > > > +#ifdef HAVE_LIBTRACEEVENT > > if (details->trace_fields) { > > struct tep_format_field *field; > > > > @@ -96,6 +100,7 @@ int evsel__fprintf(struct evsel *evsel, struct perf_attr_details *details, FILE > > field = field->next; > > } > > } > > +#endif > > out: > > fputc('\n', fp); > > return ++printed; > > diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c > > index dc2ae397d400..404d816ca124 100644 > > --- a/tools/perf/util/header.c > > +++ b/tools/perf/util/header.c > > @@ -6,6 +6,7 @@ > > #include > > #include > > #include > > +#include > > #include > > #include > > #include > > @@ -55,6 +56,10 @@ > > #include > > #include > > > > +#ifdef HAVE_LIBTRACEEVENT > > +#include > > +#endif > > + > > /* > > * magic2 = "PERFILE2" > > * must be a numerical value to let the endianness > > @@ -298,6 +303,7 @@ static int do_read_bitmap(struct feat_fd *ff, unsigned long **pset, u64 *psize) > > return 0; > > } > > > > +#ifdef HAVE_LIBTRACEEVENT > > static int write_tracing_data(struct feat_fd *ff, > > struct evlist *evlist) > > { > > @@ -306,6 +312,7 @@ static int write_tracing_data(struct feat_fd *ff, > > > > return read_tracing_data(ff->fd, &evlist->core.entries); > > } > > +#endif > > > > static int write_build_id(struct feat_fd *ff, > > struct evlist *evlist __maybe_unused) > > @@ -2394,12 +2401,14 @@ FEAT_PROCESS_STR_FUN(arch, arch); > > FEAT_PROCESS_STR_FUN(cpudesc, cpu_desc); > > FEAT_PROCESS_STR_FUN(cpuid, cpuid); > > > > +#ifdef HAVE_LIBTRACEEVENT > > static int process_tracing_data(struct feat_fd *ff, void *data) > > { > > ssize_t ret = trace_report(ff->fd, data, false); > > > > return ret < 0 ? -1 : 0; > > } > > +#endif > > > > static int process_build_id(struct feat_fd *ff, void *data __maybe_unused) > > { > > @@ -3366,7 +3375,9 @@ static int process_pmu_caps(struct feat_fd *ff, void *data __maybe_unused) > > const struct perf_header_feature_ops feat_ops[HEADER_LAST_FEATURE]; > > > > const struct perf_header_feature_ops feat_ops[HEADER_LAST_FEATURE] = { > > +#ifdef HAVE_LIBTRACEEVENT > > FEAT_OPN(TRACING_DATA, tracing_data, false), > > +#endif > > FEAT_OPN(BUILD_ID, build_id, false), > > FEAT_OPR(HOSTNAME, hostname, false), > > FEAT_OPR(OSRELEASE, osrelease, false), > > @@ -4082,6 +4093,7 @@ static int read_attr(int fd, struct perf_header *ph, > > return ret <= 0 ? -1 : 0; > > } > > > > +#ifdef HAVE_LIBTRACEEVENT > > static int evsel__prepare_tracepoint_event(struct evsel *evsel, struct tep_handle *pevent) > > { > > struct tep_event *event; > > @@ -4125,6 +4137,7 @@ static int evlist__prepare_tracepoint_events(struct evlist *evlist, struct tep_h > > > > return 0; > > } > > +#endif > > > > int perf_session__read_header(struct perf_session *session, int repipe_fd) > > { > > @@ -4230,11 +4243,15 @@ int perf_session__read_header(struct perf_session *session, int repipe_fd) > > lseek(fd, tmp, SEEK_SET); > > } > > > > +#ifdef HAVE_LIBTRACEEVENT > > perf_header__process_sections(header, fd, &session->tevent, > > perf_file_section__process); > > > > if (evlist__prepare_tracepoint_events(session->evlist, session->tevent.pevent)) > > goto out_delete_evlist; > > +#else > > + perf_header__process_sections(header, fd, NULL, perf_file_section__process); > > +#endif > > > > return 0; > > out_errno: > > @@ -4412,6 +4429,7 @@ int perf_event__process_event_update(struct perf_tool *tool __maybe_unused, > > return 0; > > } > > > > +#ifdef HAVE_LIBTRACEEVENT > > int perf_event__process_tracing_data(struct perf_session *session, > > union perf_event *event) > > { > > @@ -4459,6 +4477,7 @@ int perf_event__process_tracing_data(struct perf_session *session, > > > > return size_read + padding; > > } > > +#endif > > > > int perf_event__process_build_id(struct perf_session *session, > > union perf_event *event) > > diff --git a/tools/perf/util/header.h b/tools/perf/util/header.h > > index 2d5e601ba60f..e3861ae62172 100644 > > --- a/tools/perf/util/header.h > > +++ b/tools/perf/util/header.h > > @@ -160,8 +160,10 @@ int perf_event__process_event_update(struct perf_tool *tool, > > union perf_event *event, > > struct evlist **pevlist); > > size_t perf_event__fprintf_event_update(union perf_event *event, FILE *fp); > > +#ifdef HAVE_LIBTRACEEVENT > > int perf_event__process_tracing_data(struct perf_session *session, > > union perf_event *event); > > +#endif > > int perf_event__process_build_id(struct perf_session *session, > > union perf_event *event); > > bool is_perf_magic(u64 magic); > > diff --git a/tools/perf/util/intel-pt.c b/tools/perf/util/intel-pt.c > > index e3548ddef254..6d3921627e33 100644 > > --- a/tools/perf/util/intel-pt.c > > +++ b/tools/perf/util/intel-pt.c > > @@ -3142,6 +3142,7 @@ static int intel_pt_sync_switch(struct intel_pt *pt, int cpu, pid_t tid, > > return 1; > > } > > > > +#ifdef HAVE_LIBTRACEEVENT > > static int intel_pt_process_switch(struct intel_pt *pt, > > struct perf_sample *sample) > > { > > @@ -3165,6 +3166,7 @@ static int intel_pt_process_switch(struct intel_pt *pt, > > > > return machine__set_current_tid(pt->machine, cpu, -1, tid); > > } > > +#endif /* HAVE_LIBTRACEEVENT */ > > > > static int intel_pt_context_switch_in(struct intel_pt *pt, > > struct perf_sample *sample) > > @@ -3433,9 +3435,12 @@ static int intel_pt_process_event(struct perf_session *session, > > return err; > > } > > > > +#ifdef HAVE_LIBTRACEEVENT > > if (pt->switch_evsel && event->header.type == PERF_RECORD_SAMPLE) > > err = intel_pt_process_switch(pt, sample); > > - else if (event->header.type == PERF_RECORD_ITRACE_START) > > + else > > +#endif > > + if (event->header.type == PERF_RECORD_ITRACE_START) > > err = intel_pt_process_itrace_start(pt, event, sample); > > else if (event->header.type == PERF_RECORD_AUX_OUTPUT_HW_ID) > > err = intel_pt_process_aux_output_hw_id(pt, event, sample); > > diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c > > index 6502cd679f57..21cce83462b3 100644 > > --- a/tools/perf/util/parse-events.c > > +++ b/tools/perf/util/parse-events.c > > @@ -445,6 +445,7 @@ int parse_events_add_cache(struct list_head *list, int *idx, > > return ret; > > } > > > > +#ifdef HAVE_LIBTRACEEVENT > > static void tracepoint_error(struct parse_events_error *e, int err, > > const char *sys, const char *name) > > { > > @@ -593,6 +594,7 @@ static int add_tracepoint_multi_sys(struct list_head *list, int *idx, > > closedir(events_dir); > > return ret; > > } > > +#endif /* HAVE_LIBTRACEEVENT */ > > > > #ifdef HAVE_LIBBPF_SUPPORT > > struct __add_bpf_event_param { > > @@ -1143,6 +1145,7 @@ static int config_term_pmu(struct perf_event_attr *attr, > > return config_term_common(attr, term, err); > > } > > > > +#ifdef HAVE_LIBTRACEEVENT > > static int config_term_tracepoint(struct perf_event_attr *attr, > > struct parse_events_term *term, > > struct parse_events_error *err) > > @@ -1170,6 +1173,7 @@ static int config_term_tracepoint(struct perf_event_attr *attr, > > > > return 0; > > } > > +#endif > > > > static int config_attr(struct perf_event_attr *attr, > > struct list_head *head, > > @@ -1325,6 +1329,7 @@ int parse_events_add_tracepoint(struct list_head *list, int *idx, > > struct parse_events_error *err, > > struct list_head *head_config) > > { > > +#ifdef HAVE_LIBTRACEEVENT > > if (head_config) { > > struct perf_event_attr attr; > > > > @@ -1339,6 +1344,16 @@ int parse_events_add_tracepoint(struct list_head *list, int *idx, > > else > > return add_tracepoint_event(list, idx, sys, event, > > err, head_config); > > +#else > > + (void)list; > > + (void)idx; > > + (void)sys; > > + (void)event; > > + (void)head_config; > > + parse_events_error__handle(err, 0, strdup("unsupported tracepoint"), > > + strdup("libtraceevent is necessary for tracepoint support")); > > + return -1; > > +#endif > > } > > > > int parse_events_add_numeric(struct parse_events_state *parse_state, > > diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h > > index 07df7bb7b042..428e72eaafcc 100644 > > --- a/tools/perf/util/parse-events.h > > +++ b/tools/perf/util/parse-events.h > > @@ -18,7 +18,6 @@ struct parse_events_error; > > struct option; > > struct perf_pmu; > > > > -bool have_tracepoints(struct list_head *evlist); > > bool is_event_supported(u8 type, u64 config); > > > > const char *event_type(int type); > > diff --git a/tools/perf/util/python.c b/tools/perf/util/python.c > > index b5941c74a0d6..728fe2f51759 100644 > > --- a/tools/perf/util/python.c > > +++ b/tools/perf/util/python.c > > @@ -417,6 +417,7 @@ static PyObject *pyrf_sample_event__repr(struct pyrf_event *pevent) > > return ret; > > } > > > > +#ifdef HAVE_LIBTRACEEVENT > > static bool is_tracepoint(struct pyrf_event *pevent) > > { > > return pevent->evsel->core.attr.type == PERF_TYPE_TRACEPOINT; > > @@ -486,14 +487,17 @@ get_tracepoint_field(struct pyrf_event *pevent, PyObject *attr_name) > > > > return tracepoint_field(pevent, field); > > } > > +#endif /* HAVE_LIBTRACEEVENT */ > > > > static PyObject* > > pyrf_sample_event__getattro(struct pyrf_event *pevent, PyObject *attr_name) > > { > > PyObject *obj = NULL; > > > > +#ifdef HAVE_LIBTRACEEVENT > > if (is_tracepoint(pevent)) > > obj = get_tracepoint_field(pevent, attr_name); > > +#endif > > > > return obj ?: PyObject_GenericGetAttr((PyObject *) pevent, attr_name); > > } > > diff --git a/tools/perf/util/scripting-engines/Build b/tools/perf/util/scripting-engines/Build > > index 0f5ba28339cf..77544d2c447c 100644 > > --- a/tools/perf/util/scripting-engines/Build > > +++ b/tools/perf/util/scripting-engines/Build > > @@ -1,5 +1,7 @@ > > -perf-$(CONFIG_LIBPERL) += trace-event-perl.o > > -perf-$(CONFIG_LIBPYTHON) += trace-event-python.o > > +ifeq ($(CONFIG_TRACEEVENT),y) > > + perf-$(CONFIG_LIBPERL) += trace-event-perl.o > > + perf-$(CONFIG_LIBPYTHON) += trace-event-python.o > > +endif > > > > CFLAGS_trace-event-perl.o += $(PERL_EMBED_CCOPTS) -Wno-redundant-decls -Wno-strict-prototypes -Wno-unused-parameter -Wno-shadow -Wno-nested-externs -Wno-undef -Wno-switch-default -Wno-bad-function-cast -Wno-declaration-after-statement -Wno-switch-enum > > > > diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c > > index d685a7399ee2..fabba21919b8 100644 > > --- a/tools/perf/util/scripting-engines/trace-event-python.c > > +++ b/tools/perf/util/scripting-engines/trace-event-python.c > > @@ -30,6 +30,7 @@ > > #include > > #include > > #include > > +#include > > > > #include "../build-id.h" > > #include "../counts.h" > > diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c > > index 1facd4616317..7c021c6cedb9 100644 > > --- a/tools/perf/util/session.c > > +++ b/tools/perf/util/session.c > > @@ -314,7 +314,9 @@ void perf_session__delete(struct perf_session *session) > > evlist__delete(session->evlist); > > perf_data__close(session->data); > > } > > +#ifdef HAVE_LIBTRACEEVENT > > trace_event__cleanup(&session->tevent); > > +#endif > > free(session); > > } > > > > diff --git a/tools/perf/util/session.h b/tools/perf/util/session.h > > index be5871ea558f..ee3715e8563b 100644 > > --- a/tools/perf/util/session.h > > +++ b/tools/perf/util/session.h > > @@ -33,7 +33,9 @@ struct perf_session { > > struct auxtrace *auxtrace; > > struct itrace_synth_opts *itrace_synth_opts; > > struct list_head auxtrace_index; > > +#ifdef HAVE_LIBTRACEEVENT > > struct trace_event tevent; > > +#endif > > struct perf_record_time_conv time_conv; > > bool repipe; > > bool one_mmap; > > diff --git a/tools/perf/util/sort.c b/tools/perf/util/sort.c > > index 2e7330867e2e..c7a97b33e134 100644 > > --- a/tools/perf/util/sort.c > > +++ b/tools/perf/util/sort.c > > @@ -22,7 +22,6 @@ > > #include "srcline.h" > > #include "strlist.h" > > #include "strbuf.h" > > -#include > > #include "mem-events.h" > > #include "annotate.h" > > #include "event.h" > > @@ -32,6 +31,10 @@ > > #include > > #include > > > > +#ifdef HAVE_LIBTRACEEVENT > > +#include > > +#endif > > + > > regex_t parent_regex; > > const char default_parent_pattern[] = "^sys_|^do_page_fault"; > > const char *parent_pattern = default_parent_pattern; > > @@ -743,6 +746,7 @@ struct sort_entry sort_time = { > > > > /* --sort trace */ > > > > +#ifdef HAVE_LIBTRACEEVENT > > static char *get_trace_output(struct hist_entry *he) > > { > > struct trace_seq seq; > > @@ -806,6 +810,7 @@ struct sort_entry sort_trace = { > > .se_snprintf = hist_entry__trace_snprintf, > > .se_width_idx = HISTC_TRACE, > > }; > > +#endif /* HAVE_LIBTRACEEVENT */ > > > > /* sort keys for branch stacks */ > > > > @@ -2022,7 +2027,9 @@ static struct sort_dimension common_sort_dimensions[] = { > > DIM(SORT_LOCAL_WEIGHT, "local_weight", sort_local_weight), > > DIM(SORT_GLOBAL_WEIGHT, "weight", sort_global_weight), > > DIM(SORT_TRANSACTION, "transaction", sort_transaction), > > +#ifdef HAVE_LIBTRACEEVENT > > DIM(SORT_TRACE, "trace", sort_trace), > > +#endif > > DIM(SORT_SYM_SIZE, "symbol_size", sort_sym_size), > > DIM(SORT_DSO_SIZE, "dso_size", sort_dso_size), > > DIM(SORT_CGROUP, "cgroup", sort_cgroup), > > @@ -2206,7 +2213,14 @@ bool perf_hpp__is_ ## key ## _entry(struct perf_hpp_fmt *fmt) \ > > return hse->se == &sort_ ## key ; \ > > } > > > > +#ifdef HAVE_LIBTRACEEVENT > > MK_SORT_ENTRY_CHK(trace) > > +#else > > +bool perf_hpp__is_trace_entry(struct perf_hpp_fmt *fmt __maybe_unused) > > +{ > > + return false; > > +} > > +#endif > > MK_SORT_ENTRY_CHK(srcline) > > MK_SORT_ENTRY_CHK(srcfile) > > MK_SORT_ENTRY_CHK(thread) > > @@ -2347,6 +2361,17 @@ static int __sort_dimension__add_hpp_output(struct sort_dimension *sd, > > return 0; > > } > > > > +#ifndef HAVE_LIBTRACEEVENT > > +bool perf_hpp__is_dynamic_entry(struct perf_hpp_fmt *fmt __maybe_unused) > > +{ > > + return false; > > +} > > +bool perf_hpp__defined_dynamic_entry(struct perf_hpp_fmt *fmt __maybe_unused, > > + struct hists *hists __maybe_unused) > > +{ > > + return false; > > +} > > +#else > > struct hpp_dynamic_entry { > > struct perf_hpp_fmt hpp; > > struct evsel *evsel; > > @@ -2621,6 +2646,7 @@ __alloc_dynamic_entry(struct evsel *evsel, struct tep_format_field *field, > > > > return hde; > > } > > +#endif /* HAVE_LIBTRACEEVENT */ > > > > struct perf_hpp_fmt *perf_hpp_fmt__dup(struct perf_hpp_fmt *fmt) > > { > > @@ -2633,6 +2659,7 @@ struct perf_hpp_fmt *perf_hpp_fmt__dup(struct perf_hpp_fmt *fmt) > > new_hse = memdup(hse, sizeof(*hse)); > > if (new_hse) > > new_fmt = &new_hse->hpp; > > +#ifdef HAVE_LIBTRACEEVENT > > } else if (perf_hpp__is_dynamic_entry(fmt)) { > > struct hpp_dynamic_entry *hde, *new_hde; > > > > @@ -2640,6 +2667,7 @@ struct perf_hpp_fmt *perf_hpp_fmt__dup(struct perf_hpp_fmt *fmt) > > new_hde = memdup(hde, sizeof(*hde)); > > if (new_hde) > > new_fmt = &new_hde->hpp; > > +#endif > > } else { > > new_fmt = memdup(fmt, sizeof(*fmt)); > > } > > @@ -2719,6 +2747,7 @@ static struct evsel *find_evsel(struct evlist *evlist, char *event_name) > > return evsel; > > } > > > > +#ifdef HAVE_LIBTRACEEVENT > > static int __dynamic_dimension__add(struct evsel *evsel, > > struct tep_format_field *field, > > bool raw_trace, int level) > > @@ -2789,13 +2818,13 @@ static int add_all_matching_fields(struct evlist *evlist, > > } > > return ret; > > } > > +#endif /* HAVE_LIBTRACEEVENT */ > > > > static int add_dynamic_entry(struct evlist *evlist, const char *tok, > > int level) > > { > > char *str, *event_name, *field_name, *opt_name; > > struct evsel *evsel; > > - struct tep_format_field *field; > > bool raw_trace = symbol_conf.raw_trace; > > int ret = 0; > > > > @@ -2820,6 +2849,7 @@ static int add_dynamic_entry(struct evlist *evlist, const char *tok, > > raw_trace = true; > > } > > > > +#ifdef HAVE_LIBTRACEEVENT > > if (!strcmp(field_name, "trace_fields")) { > > ret = add_all_dynamic_fields(evlist, raw_trace, level); > > goto out; > > @@ -2829,6 +2859,7 @@ static int add_dynamic_entry(struct evlist *evlist, const char *tok, > > ret = add_all_matching_fields(evlist, field_name, raw_trace, level); > > goto out; > > } > > +#endif > > > > evsel = find_evsel(evlist, event_name); > > if (evsel == NULL) { > > @@ -2843,10 +2874,12 @@ static int add_dynamic_entry(struct evlist *evlist, const char *tok, > > goto out; > > } > > > > +#ifdef HAVE_LIBTRACEEVENT > > if (!strcmp(field_name, "*")) { > > ret = add_evsel_fields(evsel, raw_trace, level); > > } else { > > - field = tep_find_any_field(evsel->tp_format, field_name); > > + struct tep_format_field *field = tep_find_any_field(evsel->tp_format, field_name); > > + > > if (field == NULL) { > > pr_debug("Cannot find event field for %s.%s\n", > > event_name, field_name); > > @@ -2855,6 +2888,10 @@ static int add_dynamic_entry(struct evlist *evlist, const char *tok, > > > > ret = __dynamic_dimension__add(evsel, field, raw_trace, level); > > } > > +#else > > + (void)level; > > + (void)raw_trace; > > +#endif /* HAVE_LIBTRACEEVENT */ > > > > out: > > free(str); > > @@ -2955,11 +2992,11 @@ int sort_dimension__add(struct perf_hpp_list *list, const char *tok, > > for (i = 0; i < ARRAY_SIZE(common_sort_dimensions); i++) { > > struct sort_dimension *sd = &common_sort_dimensions[i]; > > > > - if (strncasecmp(tok, sd->name, strlen(tok))) > > + if (!sd->name || strncasecmp(tok, sd->name, strlen(tok))) > > continue; > > > > for (j = 0; j < ARRAY_SIZE(dynamic_headers); j++) { > > - if (!strcmp(dynamic_headers[j], sd->name)) > > + if (sd->name && !strcmp(dynamic_headers[j], sd->name)) > > sort_dimension_add_dynamic_header(sd); > > } > > > > @@ -3009,7 +3046,7 @@ int sort_dimension__add(struct perf_hpp_list *list, const char *tok, > > for (i = 0; i < ARRAY_SIZE(bstack_sort_dimensions); i++) { > > struct sort_dimension *sd = &bstack_sort_dimensions[i]; > > > > - if (strncasecmp(tok, sd->name, strlen(tok))) > > + if (!sd->name || strncasecmp(tok, sd->name, strlen(tok))) > > continue; > > > > if (sort__mode != SORT_MODE__BRANCH) > > @@ -3025,7 +3062,7 @@ int sort_dimension__add(struct perf_hpp_list *list, const char *tok, > > for (i = 0; i < ARRAY_SIZE(memory_sort_dimensions); i++) { > > struct sort_dimension *sd = &memory_sort_dimensions[i]; > > > > - if (strncasecmp(tok, sd->name, strlen(tok))) > > + if (!sd->name || strncasecmp(tok, sd->name, strlen(tok))) > > continue; > > > > if (sort__mode != SORT_MODE__MEMORY) > > @@ -3339,7 +3376,7 @@ int output_field_add(struct perf_hpp_list *list, char *tok) > > for (i = 0; i < ARRAY_SIZE(common_sort_dimensions); i++) { > > struct sort_dimension *sd = &common_sort_dimensions[i]; > > > > - if (strncasecmp(tok, sd->name, strlen(tok))) > > + if (!sd->name || strncasecmp(tok, sd->name, strlen(tok))) > > continue; > > > > return __sort_dimension__add_output(list, sd); > > @@ -3357,7 +3394,7 @@ int output_field_add(struct perf_hpp_list *list, char *tok) > > for (i = 0; i < ARRAY_SIZE(bstack_sort_dimensions); i++) { > > struct sort_dimension *sd = &bstack_sort_dimensions[i]; > > > > - if (strncasecmp(tok, sd->name, strlen(tok))) > > + if (!sd->name || strncasecmp(tok, sd->name, strlen(tok))) > > continue; > > > > if (sort__mode != SORT_MODE__BRANCH) > > @@ -3369,7 +3406,7 @@ int output_field_add(struct perf_hpp_list *list, char *tok) > > for (i = 0; i < ARRAY_SIZE(memory_sort_dimensions); i++) { > > struct sort_dimension *sd = &memory_sort_dimensions[i]; > > > > - if (strncasecmp(tok, sd->name, strlen(tok))) > > + if (!sd->name || strncasecmp(tok, sd->name, strlen(tok))) > > continue; > > > > if (sort__mode != SORT_MODE__MEMORY) > > @@ -3508,6 +3545,9 @@ void reset_output_field(void) > > > > static void add_key(struct strbuf *sb, const char *str, int *llen) > > { > > + if (!str) > > + return; > > + > > if (*llen >= 75) { > > strbuf_addstr(sb, "\n\t\t\t "); > > *llen = INDENT; > > diff --git a/tools/perf/util/synthetic-events.c b/tools/perf/util/synthetic-events.c > > index 0645795ff080..3ab6a92b1a6d 100644 > > --- a/tools/perf/util/synthetic-events.c > > +++ b/tools/perf/util/synthetic-events.c > > @@ -2157,6 +2157,7 @@ int perf_event__synthesize_attr(struct perf_tool *tool, struct perf_event_attr * > > return err; > > } > > > > +#ifdef HAVE_LIBTRACEEVENT > > int perf_event__synthesize_tracing_data(struct perf_tool *tool, int fd, struct evlist *evlist, > > perf_event__handler_t process) > > { > > @@ -2203,6 +2204,7 @@ int perf_event__synthesize_tracing_data(struct perf_tool *tool, int fd, struct e > > > > return aligned_size; > > } > > +#endif > > > > int perf_event__synthesize_build_id(struct perf_tool *tool, struct dso *pos, u16 misc, > > perf_event__handler_t process, struct machine *machine) > > @@ -2355,6 +2357,7 @@ int perf_event__synthesize_for_pipe(struct perf_tool *tool, > > } > > ret += err; > > > > +#ifdef HAVE_LIBTRACEEVENT > > if (have_tracepoints(&evlist->core.entries)) { > > int fd = perf_data__fd(data); > > > > @@ -2374,6 +2377,9 @@ int perf_event__synthesize_for_pipe(struct perf_tool *tool, > > } > > ret += err; > > } > > +#else > > + (void)data; > > +#endif > > > > return ret; > > } > > diff --git a/tools/perf/util/trace-event-parse.c b/tools/perf/util/trace-event-parse.c > > index c9c83a40647c..2d3c2576bab7 100644 > > --- a/tools/perf/util/trace-event-parse.c > > +++ b/tools/perf/util/trace-event-parse.c > > @@ -11,6 +11,8 @@ > > #include "trace-event.h" > > > > #include > > +#include > > +#include > > > > static int get_common_field(struct scripting_context *context, > > int *offset, int *size, const char *type) > > diff --git a/tools/perf/util/trace-event-read.c b/tools/perf/util/trace-event-read.c > > index 43146a4ce2fb..1162c49b8082 100644 > > --- a/tools/perf/util/trace-event-read.c > > +++ b/tools/perf/util/trace-event-read.c > > @@ -11,6 +11,7 @@ > > #include > > #include > > #include > > +#include > > #include > > #include > > #include > > diff --git a/tools/perf/util/trace-event-scripting.c b/tools/perf/util/trace-event-scripting.c > > index 636a010d929b..56175c53f9af 100644 > > --- a/tools/perf/util/trace-event-scripting.c > > +++ b/tools/perf/util/trace-event-scripting.c > > @@ -9,6 +9,7 @@ > > #include > > #include > > #include > > +#include > > > > #include "debug.h" > > #include "trace-event.h" > > diff --git a/tools/perf/util/trace-event.c b/tools/perf/util/trace-event.c > > index b3ee651e3d91..8ad75b31e09b 100644 > > --- a/tools/perf/util/trace-event.c > > +++ b/tools/perf/util/trace-event.c > > @@ -1,5 +1,4 @@ > > // SPDX-License-Identifier: GPL-2.0 > > - > > #include > > #include > > #include > > diff --git a/tools/perf/util/trace-event.h b/tools/perf/util/trace-event.h > > index 8f39f5bcb2c2..add6c5d9531c 100644 > > --- a/tools/perf/util/trace-event.h > > +++ b/tools/perf/util/trace-event.h > > @@ -2,9 +2,11 @@ > > #ifndef _PERF_UTIL_TRACE_EVENT_H > > #define _PERF_UTIL_TRACE_EVENT_H > > > > -#include > > -#include "parse-events.h" > > +#include > > +#include > > +#include > > > > +struct evlist; > > struct machine; > > struct perf_sample; > > union perf_event; > > @@ -18,6 +20,11 @@ struct trace_event { > > struct tep_plugin_list *plugin_list; > > }; > > > > +typedef char *(tep_func_resolver_t)(void *priv, > > + unsigned long long *addrp, char **modp); > > + > > +bool have_tracepoints(struct list_head *evlist); > > + > > int trace_event__init(struct trace_event *t); > > void trace_event__cleanup(struct trace_event *t); > > int trace_event__register_resolver(struct machine *machine, > > -- > > 2.39.0.rc0.267.gcb52ba06e7-goog > > -- - Arnaldo