perf script: Move perf_sample__sprintf_flags to trace-event-scripting.c
authorIan Rogers <irogers@google.com>
Tue, 19 Nov 2024 01:16:33 +0000 (17:16 -0800)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 18 Dec 2024 19:24:33 +0000 (16:24 -0300)
perf_sample__sprintf_flags is used in the python C code and so needs
to be in the util library rather than a builtin.

Signed-off-by: Ian Rogers <irogers@google.com>
Link: https://lore.kernel.org/r/20241119011644.971342-12-irogers@google.com
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Colin Ian King <colin.i.king@gmail.com>
Cc: Howard Chu <howardchu95@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Weilin Wang <weilin.wang@intel.com>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: James Clark <james.clark@linaro.org>
Cc: Ilya Leoshkevich <iii@linux.ibm.com>
Cc: Thomas Richter <tmricht@linux.ibm.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Dapeng Mi <dapeng1.mi@linux.intel.com>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Athira Jajeev <atrajeev@linux.vnet.ibm.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Michael Petlan <mpetlan@redhat.com>
Cc: Veronika Molnarova <vmolnaro@redhat.com>
Cc: linux-kernel@vger.kernel.org
Cc: linux-perf-users@vger.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-script.c
tools/perf/util/python.c
tools/perf/util/trace-event-scripting.c

index 098c5ac6a6f5482e4373cdefeb6f35f07a4dbe4a..6d5773539cfdf16e3674cdfab36822cc5de8d20d 100644 (file)
@@ -1693,87 +1693,6 @@ static int perf_sample__fprintf_bts(struct perf_sample *sample,
        return printed;
 }
 
-static struct {
-       u32 flags;
-       const char *name;
-} sample_flags[] = {
-       {PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_CALL, "call"},
-       {PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_RETURN, "return"},
-       {PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_CONDITIONAL, "jcc"},
-       {PERF_IP_FLAG_BRANCH, "jmp"},
-       {PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_CALL | PERF_IP_FLAG_INTERRUPT, "int"},
-       {PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_RETURN | PERF_IP_FLAG_INTERRUPT, "iret"},
-       {PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_CALL | PERF_IP_FLAG_SYSCALLRET, "syscall"},
-       {PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_RETURN | PERF_IP_FLAG_SYSCALLRET, "sysret"},
-       {PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_ASYNC, "async"},
-       {PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_CALL | PERF_IP_FLAG_ASYNC | PERF_IP_FLAG_INTERRUPT, "hw int"},
-       {PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_TX_ABORT, "tx abrt"},
-       {PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_TRACE_BEGIN, "tr strt"},
-       {PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_TRACE_END, "tr end"},
-       {PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_CALL | PERF_IP_FLAG_VMENTRY, "vmentry"},
-       {PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_CALL | PERF_IP_FLAG_VMEXIT, "vmexit"},
-       {PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_BRANCH_MISS, "br miss"},
-       {0, NULL}
-};
-
-static const char *sample_flags_to_name(u32 flags)
-{
-       int i;
-
-       for (i = 0; sample_flags[i].name ; i++) {
-               if (sample_flags[i].flags == flags)
-                       return sample_flags[i].name;
-       }
-
-       return NULL;
-}
-
-int perf_sample__sprintf_flags(u32 flags, char *str, size_t sz)
-{
-       u32 xf = PERF_IP_FLAG_IN_TX | PERF_IP_FLAG_INTR_DISABLE |
-                PERF_IP_FLAG_INTR_TOGGLE;
-       const char *chars = PERF_IP_FLAG_CHARS;
-       const size_t n = strlen(PERF_IP_FLAG_CHARS);
-       const char *name = NULL;
-       size_t i, pos = 0;
-       char xs[16] = {0};
-
-       if (flags & xf)
-               snprintf(xs, sizeof(xs), "(%s%s%s)",
-                        flags & PERF_IP_FLAG_IN_TX ? "x" : "",
-                        flags & PERF_IP_FLAG_INTR_DISABLE ? "D" : "",
-                        flags & PERF_IP_FLAG_INTR_TOGGLE ? "t" : "");
-
-       name = sample_flags_to_name(flags & ~xf);
-       if (name)
-               return snprintf(str, sz, "%-15s%6s", name, xs);
-
-       if (flags & PERF_IP_FLAG_TRACE_BEGIN) {
-               name = sample_flags_to_name(flags & ~(xf | PERF_IP_FLAG_TRACE_BEGIN));
-               if (name)
-                       return snprintf(str, sz, "tr strt %-7s%6s", name, xs);
-       }
-
-       if (flags & PERF_IP_FLAG_TRACE_END) {
-               name = sample_flags_to_name(flags & ~(xf | PERF_IP_FLAG_TRACE_END));
-               if (name)
-                       return snprintf(str, sz, "tr end  %-7s%6s", name, xs);
-       }
-
-       for (i = 0; i < n; i++, flags >>= 1) {
-               if ((flags & 1) && pos < sz)
-                       str[pos++] = chars[i];
-       }
-       for (; i < 32; i++, flags >>= 1) {
-               if ((flags & 1) && pos < sz)
-                       str[pos++] = '?';
-       }
-       if (pos < sz)
-               str[pos] = 0;
-
-       return pos;
-}
-
 static int perf_sample__fprintf_flags(u32 flags, FILE *fp)
 {
        char str[SAMPLE_FLAGS_BUF_SIZE];
index 3ade7b05def2a4a1234d27af6f3b5d48cecb524c..fa3ab954662c0c499a44f3953c37ac31a5f1976e 100644 (file)
@@ -1317,12 +1317,6 @@ struct kwork_work *perf_kwork_add_work(struct perf_kwork *kwork __maybe_unused,
        return NULL;
 }
 
-int perf_sample__sprintf_flags(u32 flags __maybe_unused, char *str __maybe_unused,
-                       size_t sz __maybe_unused)
-{
-       return -1;
-}
-
 bool match_callstack_filter(struct machine *machine __maybe_unused, u64 *callstack __maybe_unused)
 {
        return false;
index 62ba1af799368c59ce99d4485021706d2910bf21..04e3c9e29f951782065b14818f6604df645010e5 100644 (file)
@@ -15,6 +15,7 @@
 
 #include "archinsn.h"
 #include "debug.h"
+#include "event.h"
 #include "trace-event.h"
 #include "evsel.h"
 #include <linux/perf_event.h>
@@ -285,3 +286,85 @@ void script_fetch_insn(struct perf_sample *sample, struct thread *thread,
        if (sample->insn_len == 0 && native_arch)
                arch_fetch_insn(sample, thread, machine);
 }
+
+static const struct {
+       u32 flags;
+       const char *name;
+} sample_flags[] = {
+       {PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_CALL, "call"},
+       {PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_RETURN, "return"},
+       {PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_CONDITIONAL, "jcc"},
+       {PERF_IP_FLAG_BRANCH, "jmp"},
+       {PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_CALL | PERF_IP_FLAG_INTERRUPT, "int"},
+       {PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_RETURN | PERF_IP_FLAG_INTERRUPT, "iret"},
+       {PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_CALL | PERF_IP_FLAG_SYSCALLRET, "syscall"},
+       {PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_RETURN | PERF_IP_FLAG_SYSCALLRET, "sysret"},
+       {PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_ASYNC, "async"},
+       {PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_CALL | PERF_IP_FLAG_ASYNC | PERF_IP_FLAG_INTERRUPT,
+        "hw int"},
+       {PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_TX_ABORT, "tx abrt"},
+       {PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_TRACE_BEGIN, "tr strt"},
+       {PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_TRACE_END, "tr end"},
+       {PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_CALL | PERF_IP_FLAG_VMENTRY, "vmentry"},
+       {PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_CALL | PERF_IP_FLAG_VMEXIT, "vmexit"},
+       {PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_BRANCH_MISS, "br miss"},
+       {0, NULL}
+};
+
+static const char *sample_flags_to_name(u32 flags)
+{
+       int i;
+
+       for (i = 0; sample_flags[i].name ; i++) {
+               if (sample_flags[i].flags == flags)
+                       return sample_flags[i].name;
+       }
+
+       return NULL;
+}
+
+int perf_sample__sprintf_flags(u32 flags, char *str, size_t sz)
+{
+       u32 xf = PERF_IP_FLAG_IN_TX | PERF_IP_FLAG_INTR_DISABLE |
+                PERF_IP_FLAG_INTR_TOGGLE;
+       const char *chars = PERF_IP_FLAG_CHARS;
+       const size_t n = strlen(PERF_IP_FLAG_CHARS);
+       const char *name = NULL;
+       size_t i, pos = 0;
+       char xs[16] = {0};
+
+       if (flags & xf)
+               snprintf(xs, sizeof(xs), "(%s%s%s)",
+                        flags & PERF_IP_FLAG_IN_TX ? "x" : "",
+                        flags & PERF_IP_FLAG_INTR_DISABLE ? "D" : "",
+                        flags & PERF_IP_FLAG_INTR_TOGGLE ? "t" : "");
+
+       name = sample_flags_to_name(flags & ~xf);
+       if (name)
+               return snprintf(str, sz, "%-15s%6s", name, xs);
+
+       if (flags & PERF_IP_FLAG_TRACE_BEGIN) {
+               name = sample_flags_to_name(flags & ~(xf | PERF_IP_FLAG_TRACE_BEGIN));
+               if (name)
+                       return snprintf(str, sz, "tr strt %-7s%6s", name, xs);
+       }
+
+       if (flags & PERF_IP_FLAG_TRACE_END) {
+               name = sample_flags_to_name(flags & ~(xf | PERF_IP_FLAG_TRACE_END));
+               if (name)
+                       return snprintf(str, sz, "tr end  %-7s%6s", name, xs);
+       }
+
+       for (i = 0; i < n; i++, flags >>= 1) {
+               if ((flags & 1) && pos < sz)
+                       str[pos++] = chars[i];
+       }
+       for (; i < 32; i++, flags >>= 1) {
+               if ((flags & 1) && pos < sz)
+                       str[pos++] = '?';
+       }
+       if (pos < sz)
+               str[pos] = 0;
+
+       return pos;
+}