Add a field to display the content the raw_data of a synthesized event.

Signed-off-by: Adrian Hunter <adrian.hun...@intel.com>
---
 tools/perf/Documentation/perf-script.txt |  6 +++++-
 tools/perf/builtin-script.c              | 20 ++++++++++++++++++--
 2 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/tools/perf/Documentation/perf-script.txt 
b/tools/perf/Documentation/perf-script.txt
index cb0eda3925e6..43770f174f64 100644
--- a/tools/perf/Documentation/perf-script.txt
+++ b/tools/perf/Documentation/perf-script.txt
@@ -117,7 +117,8 @@ OPTIONS
         Comma separated list of fields to print. Options are:
         comm, tid, pid, time, cpu, event, trace, ip, sym, dso, addr, symoff,
         srcline, period, iregs, brstack, brstacksym, flags, bpf-output, 
brstackinsn,
-        callindent, insn, insnlen. Field list can be prepended with the type, 
trace, sw or hw,
+        callindent, insn, insnlen, synth.
+        Field list can be prepended with the type, trace, sw or hw,
         to indicate to which event type the field list applies.
         e.g., -F sw:comm,tid,time,ip,sym  and -F trace:time,cpu,trace
 
@@ -185,6 +186,9 @@ OPTIONS
        instruction bytes and the instruction length of the current
        instruction.
 
+       The synth field is used by synthesized events which may be created when
+       Instruction Trace decoding.
+
        Finally, a user may not set fields to none for all event types.
        i.e., -F "" is not allowed.
 
diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
index 99167bafe81c..f7a5130d2fd0 100644
--- a/tools/perf/builtin-script.c
+++ b/tools/perf/builtin-script.c
@@ -85,6 +85,7 @@ enum perf_output_field {
        PERF_OUTPUT_INSN            = 1U << 21,
        PERF_OUTPUT_INSNLEN         = 1U << 22,
        PERF_OUTPUT_BRSTACKINSN     = 1U << 23,
+       PERF_OUTPUT_SYNTH           = 1U << 24,
 };
 
 struct output_option {
@@ -115,6 +116,7 @@ struct output_option {
        {.str = "insn", .field = PERF_OUTPUT_INSN},
        {.str = "insnlen", .field = PERF_OUTPUT_INSNLEN},
        {.str = "brstackinsn", .field = PERF_OUTPUT_BRSTACKINSN},
+       {.str = "synth", .field = PERF_OUTPUT_SYNTH},
 };
 
 enum {
@@ -194,7 +196,8 @@ enum {
                .fields = PERF_OUTPUT_COMM | PERF_OUTPUT_TID |
                              PERF_OUTPUT_CPU | PERF_OUTPUT_TIME |
                              PERF_OUTPUT_EVNAME | PERF_OUTPUT_IP |
-                             PERF_OUTPUT_SYM | PERF_OUTPUT_DSO,
+                             PERF_OUTPUT_SYM | PERF_OUTPUT_DSO |
+                             PERF_OUTPUT_SYNTH,
 
                .invalid_fields = PERF_OUTPUT_TRACE | PERF_OUTPUT_BPF_OUTPUT,
        },
@@ -1117,6 +1120,15 @@ static void print_sample_bpf_output(struct perf_sample 
*sample)
                       (char *)(sample->raw_data));
 }
 
+static void print_sample_synth(struct perf_sample *sample __maybe_unused,
+                              struct perf_evsel *evsel)
+{
+       switch (evsel->attr.config) {
+       default:
+               break;
+       }
+}
+
 struct perf_script {
        struct perf_tool        tool;
        struct perf_session     *session;
@@ -1201,6 +1213,10 @@ static void process_event(struct perf_script *script,
        if (PRINT_FIELD(TRACE))
                event_format__print(evsel->tp_format, sample->cpu,
                                    sample->raw_data, sample->raw_size);
+
+       if (attr->type == PERF_TYPE_SYNTH && PRINT_FIELD(SYNTH))
+               print_sample_synth(sample, evsel);
+
        if (PRINT_FIELD(ADDR))
                print_sample_addr(sample, thread, attr);
 
@@ -2489,7 +2505,7 @@ int cmd_script(int argc, const char **argv)
                     "Valid types: hw,sw,trace,raw,synth. "
                     "Fields: comm,tid,pid,time,cpu,event,trace,ip,sym,dso,"
                     "addr,symoff,period,iregs,brstack,brstacksym,flags,"
-                    "bpf-output,callindent,insn,insnlen,brstackinsn",
+                    "bpf-output,callindent,insn,insnlen,brstackinsn,synth",
                     parse_output_fields),
        OPT_BOOLEAN('a', "all-cpus", &system_wide,
                    "system-wide collection from all CPUs"),
-- 
1.9.1

Reply via email to