]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/commitdiff
perf evsel: Introduce evsel_fprintf.h
authorArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 24 Sep 2019 18:41:51 +0000 (15:41 -0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 25 Sep 2019 19:26:34 +0000 (16:26 -0300)
We already had evsel_fprintf.c, add its counterpart, so that we can
reduce evsel.h a bit more.

We needed a new perf_event_attr_fprintf.c file so as to have a separate
object to link with the python binding in tools/perf/util/python-ext-sources
and not drag symbol_conf, etc into the python binding.

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: https://lkml.kernel.org/n/tip-06bdmt1062d9unzgqmxwlv88@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
12 files changed:
tools/perf/builtin-evlist.c
tools/perf/builtin-sched.c
tools/perf/builtin-script.c
tools/perf/builtin-trace.c
tools/perf/util/Build
tools/perf/util/evsel.c
tools/perf/util/evsel.h
tools/perf/util/evsel_fprintf.c
tools/perf/util/evsel_fprintf.h [new file with mode: 0644]
tools/perf/util/header.c
tools/perf/util/perf_event_attr_fprintf.c [new file with mode: 0644]
tools/perf/util/python-ext-sources

index 60509ce4dd28835f7cb686aafb7ba4c6afb382bd..440501994931dcb50beb3991c9065a6616311a98 100644 (file)
@@ -10,6 +10,7 @@
 #include "perf.h"
 #include "util/evlist.h"
 #include "util/evsel.h"
+#include "util/evsel_fprintf.h"
 #include "util/parse-events.h"
 #include <subcmd/parse-options.h>
 #include "util/session.h"
index f9706306fea0cf966349fc622ce1aff48aeafdaf..5cacc4f84c8d9b6d76ca4203533187a739238811 100644 (file)
@@ -6,6 +6,7 @@
 #include "util/cpumap.h"
 #include "util/evlist.h"
 #include "util/evsel.h"
+#include "util/evsel_fprintf.h"
 #include "util/symbol.h"
 #include "util/thread.h"
 #include "util/header.h"
index 0d43e2e5affff07b89461085a990c617322f3d89..286fc70d740264f55c1c97d8ee8af3692bf766fb 100644 (file)
@@ -17,6 +17,7 @@
 #include "util/trace-event.h"
 #include "util/evlist.h"
 #include "util/evsel.h"
+#include "util/evsel_fprintf.h"
 #include "util/evswitch.h"
 #include "util/sort.h"
 #include "util/data.h"
index 318225c8d7a7b216721f682007c1fb3e6e9fdab9..bb5130d0215549fb3eb2266cfea2ce742a0510d2 100644 (file)
@@ -28,6 +28,8 @@
 #include "util/dso.h"
 #include "util/env.h"
 #include "util/event.h"
+#include "util/evsel.h"
+#include "util/evsel_fprintf.h"
 #include "util/synthetic-events.h"
 #include "util/evlist.h"
 #include "util/evswitch.h"
index 4d1894e38a811dabc6acd9fcdd5f07e03591fb44..8dcfca1a882f0e9abb341fa45992d281f2e438b5 100644 (file)
@@ -11,6 +11,7 @@ perf-y += event.o
 perf-y += evlist.o
 perf-y += evsel.o
 perf-y += evsel_fprintf.o
+perf-y += perf_event_attr_fprintf.o
 perf-y += evswitch.o
 perf-y += find_bit.o
 perf-y += get_current_dir_name.o
index 9c284d2adcea577f6b384584084088fe442e7d49..6323b0c60f6cb8bf1ae3e4e57451d065ad11c247 100644 (file)
@@ -30,6 +30,7 @@
 #include "counts.h"
 #include "event.h"
 #include "evsel.h"
+#include "util/evsel_fprintf.h"
 #include "evlist.h"
 #include <perf/cpumap.h>
 #include "thread_map.h"
@@ -1443,152 +1444,6 @@ static int get_group_fd(struct evsel *evsel, int cpu, int thread)
        return fd;
 }
 
-struct bit_names {
-       int bit;
-       const char *name;
-};
-
-static void __p_bits(char *buf, size_t size, u64 value, struct bit_names *bits)
-{
-       bool first_bit = true;
-       int i = 0;
-
-       do {
-               if (value & bits[i].bit) {
-                       buf += scnprintf(buf, size, "%s%s", first_bit ? "" : "|", bits[i].name);
-                       first_bit = false;
-               }
-       } while (bits[++i].name != NULL);
-}
-
-static void __p_sample_type(char *buf, size_t size, u64 value)
-{
-#define bit_name(n) { PERF_SAMPLE_##n, #n }
-       struct bit_names bits[] = {
-               bit_name(IP), bit_name(TID), bit_name(TIME), bit_name(ADDR),
-               bit_name(READ), bit_name(CALLCHAIN), bit_name(ID), bit_name(CPU),
-               bit_name(PERIOD), bit_name(STREAM_ID), bit_name(RAW),
-               bit_name(BRANCH_STACK), bit_name(REGS_USER), bit_name(STACK_USER),
-               bit_name(IDENTIFIER), bit_name(REGS_INTR), bit_name(DATA_SRC),
-               bit_name(WEIGHT), bit_name(PHYS_ADDR),
-               { .name = NULL, }
-       };
-#undef bit_name
-       __p_bits(buf, size, value, bits);
-}
-
-static void __p_branch_sample_type(char *buf, size_t size, u64 value)
-{
-#define bit_name(n) { PERF_SAMPLE_BRANCH_##n, #n }
-       struct bit_names bits[] = {
-               bit_name(USER), bit_name(KERNEL), bit_name(HV), bit_name(ANY),
-               bit_name(ANY_CALL), bit_name(ANY_RETURN), bit_name(IND_CALL),
-               bit_name(ABORT_TX), bit_name(IN_TX), bit_name(NO_TX),
-               bit_name(COND), bit_name(CALL_STACK), bit_name(IND_JUMP),
-               bit_name(CALL), bit_name(NO_FLAGS), bit_name(NO_CYCLES),
-               { .name = NULL, }
-       };
-#undef bit_name
-       __p_bits(buf, size, value, bits);
-}
-
-static void __p_read_format(char *buf, size_t size, u64 value)
-{
-#define bit_name(n) { PERF_FORMAT_##n, #n }
-       struct bit_names bits[] = {
-               bit_name(TOTAL_TIME_ENABLED), bit_name(TOTAL_TIME_RUNNING),
-               bit_name(ID), bit_name(GROUP),
-               { .name = NULL, }
-       };
-#undef bit_name
-       __p_bits(buf, size, value, bits);
-}
-
-#define BUF_SIZE               1024
-
-#define p_hex(val)             snprintf(buf, BUF_SIZE, "%#"PRIx64, (uint64_t)(val))
-#define p_unsigned(val)                snprintf(buf, BUF_SIZE, "%"PRIu64, (uint64_t)(val))
-#define p_signed(val)          snprintf(buf, BUF_SIZE, "%"PRId64, (int64_t)(val))
-#define p_sample_type(val)     __p_sample_type(buf, BUF_SIZE, val)
-#define p_branch_sample_type(val) __p_branch_sample_type(buf, BUF_SIZE, val)
-#define p_read_format(val)     __p_read_format(buf, BUF_SIZE, val)
-
-#define PRINT_ATTRn(_n, _f, _p)                                \
-do {                                                   \
-       if (attr->_f) {                                 \
-               _p(attr->_f);                           \
-               ret += attr__fprintf(fp, _n, buf, priv);\
-       }                                               \
-} while (0)
-
-#define PRINT_ATTRf(_f, _p)    PRINT_ATTRn(#_f, _f, _p)
-
-int perf_event_attr__fprintf(FILE *fp, struct perf_event_attr *attr,
-                            attr__fprintf_f attr__fprintf, void *priv)
-{
-       char buf[BUF_SIZE];
-       int ret = 0;
-
-       PRINT_ATTRf(type, p_unsigned);
-       PRINT_ATTRf(size, p_unsigned);
-       PRINT_ATTRf(config, p_hex);
-       PRINT_ATTRn("{ sample_period, sample_freq }", sample_period, p_unsigned);
-       PRINT_ATTRf(sample_type, p_sample_type);
-       PRINT_ATTRf(read_format, p_read_format);
-
-       PRINT_ATTRf(disabled, p_unsigned);
-       PRINT_ATTRf(inherit, p_unsigned);
-       PRINT_ATTRf(pinned, p_unsigned);
-       PRINT_ATTRf(exclusive, p_unsigned);
-       PRINT_ATTRf(exclude_user, p_unsigned);
-       PRINT_ATTRf(exclude_kernel, p_unsigned);
-       PRINT_ATTRf(exclude_hv, p_unsigned);
-       PRINT_ATTRf(exclude_idle, p_unsigned);
-       PRINT_ATTRf(mmap, p_unsigned);
-       PRINT_ATTRf(comm, p_unsigned);
-       PRINT_ATTRf(freq, p_unsigned);
-       PRINT_ATTRf(inherit_stat, p_unsigned);
-       PRINT_ATTRf(enable_on_exec, p_unsigned);
-       PRINT_ATTRf(task, p_unsigned);
-       PRINT_ATTRf(watermark, p_unsigned);
-       PRINT_ATTRf(precise_ip, p_unsigned);
-       PRINT_ATTRf(mmap_data, p_unsigned);
-       PRINT_ATTRf(sample_id_all, p_unsigned);
-       PRINT_ATTRf(exclude_host, p_unsigned);
-       PRINT_ATTRf(exclude_guest, p_unsigned);
-       PRINT_ATTRf(exclude_callchain_kernel, p_unsigned);
-       PRINT_ATTRf(exclude_callchain_user, p_unsigned);
-       PRINT_ATTRf(mmap2, p_unsigned);
-       PRINT_ATTRf(comm_exec, p_unsigned);
-       PRINT_ATTRf(use_clockid, p_unsigned);
-       PRINT_ATTRf(context_switch, p_unsigned);
-       PRINT_ATTRf(write_backward, p_unsigned);
-       PRINT_ATTRf(namespaces, p_unsigned);
-       PRINT_ATTRf(ksymbol, p_unsigned);
-       PRINT_ATTRf(bpf_event, p_unsigned);
-       PRINT_ATTRf(aux_output, p_unsigned);
-
-       PRINT_ATTRn("{ wakeup_events, wakeup_watermark }", wakeup_events, p_unsigned);
-       PRINT_ATTRf(bp_type, p_unsigned);
-       PRINT_ATTRn("{ bp_addr, config1 }", bp_addr, p_hex);
-       PRINT_ATTRn("{ bp_len, config2 }", bp_len, p_hex);
-       PRINT_ATTRf(branch_sample_type, p_branch_sample_type);
-       PRINT_ATTRf(sample_regs_user, p_hex);
-       PRINT_ATTRf(sample_stack_user, p_unsigned);
-       PRINT_ATTRf(clockid, p_signed);
-       PRINT_ATTRf(sample_regs_intr, p_hex);
-       PRINT_ATTRf(aux_watermark, p_unsigned);
-       PRINT_ATTRf(sample_max_stack, p_unsigned);
-
-       return ret;
-}
-
-static int __open_attr__fprintf(FILE *fp, const char *name, const char *val,
-                               void *priv __maybe_unused)
-{
-       return fprintf(fp, "  %-32s %s\n", name, val);
-}
-
 static void perf_evsel__remove_fd(struct evsel *pos,
                                  int nr_cpus, int nr_threads,
                                  int thread_idx)
@@ -1659,6 +1514,12 @@ static bool ignore_missing_thread(struct evsel *evsel,
        return true;
 }
 
+static int __open_attr__fprintf(FILE *fp, const char *name, const char *val,
+                               void *priv __maybe_unused)
+{
+       return fprintf(fp, "  %-32s %s\n", name, val);
+}
+
 static void display_attr(struct perf_event_attr *attr)
 {
        if (verbose >= 2) {
index 4a4c648338936cd91b2b9d4bab6b7d040086e579..48183b5f5f83c112c1cc1a2bb2a8d0e2da49f898 100644 (file)
@@ -4,7 +4,6 @@
 
 #include <linux/list.h>
 #include <stdbool.h>
-#include <stdio.h>
 #include <sys/types.h>
 #include <linux/perf_event.h>
 #include <linux/types.h>
 #include "symbol_conf.h"
 #include <internal/cpumap.h>
 
-struct addr_location;
-struct evsel;
-union perf_event;
-
-struct cgroup;
-
 /*
  * The 'struct perf_evsel_config_term' is used to pass event
  * specific configuration data to perf_evsel__config routine.
@@ -62,7 +55,11 @@ struct perf_evsel_config_term {
        bool weak;
 };
 
+struct bpf_object;
+struct cgroup;
+struct perf_counts;
 struct perf_stat_evsel;
+union perf_event;
 
 typedef int (perf_evsel__sb_cb_t)(union perf_event *event, void *data);
 
@@ -71,9 +68,6 @@ enum perf_tool_event {
        PERF_TOOL_DURATION_TIME = 1,
 };
 
-struct bpf_object;
-struct perf_counts;
-
 /** struct evsel - event selector
  *
  * @evlist - evlist this evsel is in, if it is in one.
@@ -404,38 +398,6 @@ static inline bool perf_evsel__is_clock(struct evsel *evsel)
               perf_evsel__match(evsel, SOFTWARE, SW_TASK_CLOCK);
 }
 
-struct perf_attr_details {
-       bool freq;
-       bool verbose;
-       bool event_group;
-       bool force;
-       bool trace_fields;
-};
-
-int perf_evsel__fprintf(struct evsel *evsel,
-                       struct perf_attr_details *details, FILE *fp);
-
-#define EVSEL__PRINT_IP                        (1<<0)
-#define EVSEL__PRINT_SYM               (1<<1)
-#define EVSEL__PRINT_DSO               (1<<2)
-#define EVSEL__PRINT_SYMOFFSET         (1<<3)
-#define EVSEL__PRINT_ONELINE           (1<<4)
-#define EVSEL__PRINT_SRCLINE           (1<<5)
-#define EVSEL__PRINT_UNKNOWN_AS_ADDR   (1<<6)
-#define EVSEL__PRINT_CALLCHAIN_ARROW   (1<<7)
-#define EVSEL__PRINT_SKIP_IGNORED      (1<<8)
-
-struct callchain_cursor;
-
-int sample__fprintf_callchain(struct perf_sample *sample, int left_alignment,
-                             unsigned int print_opts, struct callchain_cursor *cursor,
-                             struct strlist *bt_stop_list, FILE *fp);
-
-int sample__fprintf_sym(struct perf_sample *sample, struct addr_location *al,
-                       int left_alignment, unsigned int print_opts,
-                       struct callchain_cursor *cursor,
-                       struct strlist *bt_stop_list, FILE *fp);
-
 bool perf_evsel__fallback(struct evsel *evsel, int err,
                          char *msg, size_t msgsize);
 int perf_evsel__open_strerror(struct evsel *evsel, struct target *target,
@@ -468,11 +430,6 @@ static inline bool evsel__has_callchain(const struct evsel *evsel)
        return (evsel->core.attr.sample_type & PERF_SAMPLE_CALLCHAIN) != 0;
 }
 
-typedef int (*attr__fprintf_f)(FILE *, const char *, const char *, void *);
-
-int perf_event_attr__fprintf(FILE *fp, struct perf_event_attr *attr,
-                            attr__fprintf_f attr__fprintf, void *priv);
-
 struct perf_env *perf_evsel__env(struct evsel *evsel);
 
 int perf_evsel__store_ids(struct evsel *evsel, struct evlist *evlist);
index 756b1e852db7f8913769304bab3aa44d2c31317c..028df7afb0dce994dd1c03ab3c67d1558a8e3df2 100644 (file)
@@ -4,6 +4,7 @@
 #include <stdbool.h>
 #include <traceevent/event-parse.h>
 #include "evsel.h"
+#include "util/evsel_fprintf.h"
 #include "util/event.h"
 #include "callchain.h"
 #include "map.h"
diff --git a/tools/perf/util/evsel_fprintf.h b/tools/perf/util/evsel_fprintf.h
new file mode 100644 (file)
index 0000000..47e6c84
--- /dev/null
@@ -0,0 +1,50 @@
+// SPDX-License-Identifier: GPL-2.0
+#ifndef __PERF_EVSEL_FPRINTF_H
+#define __PERF_EVSEL_FPRINTF_H 1
+
+#include <stdio.h>
+#include <stdbool.h>
+
+struct evsel;
+
+struct perf_attr_details {
+       bool freq;
+       bool verbose;
+       bool event_group;
+       bool force;
+       bool trace_fields;
+};
+
+int perf_evsel__fprintf(struct evsel *evsel,
+                       struct perf_attr_details *details, FILE *fp);
+
+#define EVSEL__PRINT_IP                        (1<<0)
+#define EVSEL__PRINT_SYM               (1<<1)
+#define EVSEL__PRINT_DSO               (1<<2)
+#define EVSEL__PRINT_SYMOFFSET         (1<<3)
+#define EVSEL__PRINT_ONELINE           (1<<4)
+#define EVSEL__PRINT_SRCLINE           (1<<5)
+#define EVSEL__PRINT_UNKNOWN_AS_ADDR   (1<<6)
+#define EVSEL__PRINT_CALLCHAIN_ARROW   (1<<7)
+#define EVSEL__PRINT_SKIP_IGNORED      (1<<8)
+
+struct addr_location;
+struct perf_event_attr;
+struct perf_sample;
+struct callchain_cursor;
+struct strlist;
+
+int sample__fprintf_callchain(struct perf_sample *sample, int left_alignment,
+                             unsigned int print_opts, struct callchain_cursor *cursor,
+                             struct strlist *bt_stop_list, FILE *fp);
+
+int sample__fprintf_sym(struct perf_sample *sample, struct addr_location *al,
+                       int left_alignment, unsigned int print_opts,
+                       struct callchain_cursor *cursor,
+                       struct strlist *bt_stop_list, FILE *fp);
+
+typedef int (*attr__fprintf_f)(FILE *, const char *, const char *, void *);
+
+int perf_event_attr__fprintf(FILE *fp, struct perf_event_attr *attr,
+                            attr__fprintf_f attr__fprintf, void *priv);
+#endif // __PERF_EVSEL_H
index 3b24b4974c5f1a2066bba8ec593b241bfe52ebbe..86d9396cb131cdca6731da256f3a10460827b6cf 100644 (file)
@@ -25,6 +25,7 @@
 #include "dso.h"
 #include "evlist.h"
 #include "evsel.h"
+#include "util/evsel_fprintf.h"
 #include "header.h"
 #include "memswap.h"
 #include "trace-event.h"
diff --git a/tools/perf/util/perf_event_attr_fprintf.c b/tools/perf/util/perf_event_attr_fprintf.c
new file mode 100644 (file)
index 0000000..d4ad3f0
--- /dev/null
@@ -0,0 +1,148 @@
+// SPDX-License-Identifier: GPL-2.0
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdbool.h>
+#include <linux/kernel.h>
+#include <linux/types.h>
+#include <linux/perf_event.h>
+#include "util/evsel_fprintf.h"
+
+struct bit_names {
+       int bit;
+       const char *name;
+};
+
+static void __p_bits(char *buf, size_t size, u64 value, struct bit_names *bits)
+{
+       bool first_bit = true;
+       int i = 0;
+
+       do {
+               if (value & bits[i].bit) {
+                       buf += scnprintf(buf, size, "%s%s", first_bit ? "" : "|", bits[i].name);
+                       first_bit = false;
+               }
+       } while (bits[++i].name != NULL);
+}
+
+static void __p_sample_type(char *buf, size_t size, u64 value)
+{
+#define bit_name(n) { PERF_SAMPLE_##n, #n }
+       struct bit_names bits[] = {
+               bit_name(IP), bit_name(TID), bit_name(TIME), bit_name(ADDR),
+               bit_name(READ), bit_name(CALLCHAIN), bit_name(ID), bit_name(CPU),
+               bit_name(PERIOD), bit_name(STREAM_ID), bit_name(RAW),
+               bit_name(BRANCH_STACK), bit_name(REGS_USER), bit_name(STACK_USER),
+               bit_name(IDENTIFIER), bit_name(REGS_INTR), bit_name(DATA_SRC),
+               bit_name(WEIGHT), bit_name(PHYS_ADDR),
+               { .name = NULL, }
+       };
+#undef bit_name
+       __p_bits(buf, size, value, bits);
+}
+
+static void __p_branch_sample_type(char *buf, size_t size, u64 value)
+{
+#define bit_name(n) { PERF_SAMPLE_BRANCH_##n, #n }
+       struct bit_names bits[] = {
+               bit_name(USER), bit_name(KERNEL), bit_name(HV), bit_name(ANY),
+               bit_name(ANY_CALL), bit_name(ANY_RETURN), bit_name(IND_CALL),
+               bit_name(ABORT_TX), bit_name(IN_TX), bit_name(NO_TX),
+               bit_name(COND), bit_name(CALL_STACK), bit_name(IND_JUMP),
+               bit_name(CALL), bit_name(NO_FLAGS), bit_name(NO_CYCLES),
+               { .name = NULL, }
+       };
+#undef bit_name
+       __p_bits(buf, size, value, bits);
+}
+
+static void __p_read_format(char *buf, size_t size, u64 value)
+{
+#define bit_name(n) { PERF_FORMAT_##n, #n }
+       struct bit_names bits[] = {
+               bit_name(TOTAL_TIME_ENABLED), bit_name(TOTAL_TIME_RUNNING),
+               bit_name(ID), bit_name(GROUP),
+               { .name = NULL, }
+       };
+#undef bit_name
+       __p_bits(buf, size, value, bits);
+}
+
+#define BUF_SIZE               1024
+
+#define p_hex(val)             snprintf(buf, BUF_SIZE, "%#"PRIx64, (uint64_t)(val))
+#define p_unsigned(val)                snprintf(buf, BUF_SIZE, "%"PRIu64, (uint64_t)(val))
+#define p_signed(val)          snprintf(buf, BUF_SIZE, "%"PRId64, (int64_t)(val))
+#define p_sample_type(val)     __p_sample_type(buf, BUF_SIZE, val)
+#define p_branch_sample_type(val) __p_branch_sample_type(buf, BUF_SIZE, val)
+#define p_read_format(val)     __p_read_format(buf, BUF_SIZE, val)
+
+#define PRINT_ATTRn(_n, _f, _p)                                \
+do {                                                   \
+       if (attr->_f) {                                 \
+               _p(attr->_f);                           \
+               ret += attr__fprintf(fp, _n, buf, priv);\
+       }                                               \
+} while (0)
+
+#define PRINT_ATTRf(_f, _p)    PRINT_ATTRn(#_f, _f, _p)
+
+int perf_event_attr__fprintf(FILE *fp, struct perf_event_attr *attr,
+                            attr__fprintf_f attr__fprintf, void *priv)
+{
+       char buf[BUF_SIZE];
+       int ret = 0;
+
+       PRINT_ATTRf(type, p_unsigned);
+       PRINT_ATTRf(size, p_unsigned);
+       PRINT_ATTRf(config, p_hex);
+       PRINT_ATTRn("{ sample_period, sample_freq }", sample_period, p_unsigned);
+       PRINT_ATTRf(sample_type, p_sample_type);
+       PRINT_ATTRf(read_format, p_read_format);
+
+       PRINT_ATTRf(disabled, p_unsigned);
+       PRINT_ATTRf(inherit, p_unsigned);
+       PRINT_ATTRf(pinned, p_unsigned);
+       PRINT_ATTRf(exclusive, p_unsigned);
+       PRINT_ATTRf(exclude_user, p_unsigned);
+       PRINT_ATTRf(exclude_kernel, p_unsigned);
+       PRINT_ATTRf(exclude_hv, p_unsigned);
+       PRINT_ATTRf(exclude_idle, p_unsigned);
+       PRINT_ATTRf(mmap, p_unsigned);
+       PRINT_ATTRf(comm, p_unsigned);
+       PRINT_ATTRf(freq, p_unsigned);
+       PRINT_ATTRf(inherit_stat, p_unsigned);
+       PRINT_ATTRf(enable_on_exec, p_unsigned);
+       PRINT_ATTRf(task, p_unsigned);
+       PRINT_ATTRf(watermark, p_unsigned);
+       PRINT_ATTRf(precise_ip, p_unsigned);
+       PRINT_ATTRf(mmap_data, p_unsigned);
+       PRINT_ATTRf(sample_id_all, p_unsigned);
+       PRINT_ATTRf(exclude_host, p_unsigned);
+       PRINT_ATTRf(exclude_guest, p_unsigned);
+       PRINT_ATTRf(exclude_callchain_kernel, p_unsigned);
+       PRINT_ATTRf(exclude_callchain_user, p_unsigned);
+       PRINT_ATTRf(mmap2, p_unsigned);
+       PRINT_ATTRf(comm_exec, p_unsigned);
+       PRINT_ATTRf(use_clockid, p_unsigned);
+       PRINT_ATTRf(context_switch, p_unsigned);
+       PRINT_ATTRf(write_backward, p_unsigned);
+       PRINT_ATTRf(namespaces, p_unsigned);
+       PRINT_ATTRf(ksymbol, p_unsigned);
+       PRINT_ATTRf(bpf_event, p_unsigned);
+       PRINT_ATTRf(aux_output, p_unsigned);
+
+       PRINT_ATTRn("{ wakeup_events, wakeup_watermark }", wakeup_events, p_unsigned);
+       PRINT_ATTRf(bp_type, p_unsigned);
+       PRINT_ATTRn("{ bp_addr, config1 }", bp_addr, p_hex);
+       PRINT_ATTRn("{ bp_len, config2 }", bp_len, p_hex);
+       PRINT_ATTRf(branch_sample_type, p_branch_sample_type);
+       PRINT_ATTRf(sample_regs_user, p_hex);
+       PRINT_ATTRf(sample_stack_user, p_unsigned);
+       PRINT_ATTRf(clockid, p_signed);
+       PRINT_ATTRf(sample_regs_intr, p_hex);
+       PRINT_ATTRf(aux_watermark, p_unsigned);
+       PRINT_ATTRf(sample_max_stack, p_unsigned);
+
+       return ret;
+}
index c6dd478956f10ce04991117983eea057bbec7be4..9af183860fbd08767969490133f444cec9be08cf 100644 (file)
@@ -10,6 +10,7 @@ util/python.c
 util/cap.c
 util/evlist.c
 util/evsel.c
+util/perf_event_attr_fprintf.c
 util/cpumap.c
 util/memswap.c
 util/mmap.c