summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Tomlin <atomlin@atomlin.com>2026-06-12 18:56:10 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2026-06-15 14:33:49 -0300
commitcd355f6dc70503191249c5147e2f2e8f3c8838bd (patch)
treeb5df194cb4ce3e8ae3ef0dd0d1175432b03cb9b0
parent190c4546384461f3dee70a649b438aa41c24d01e (diff)
perf trace: Fix noise and signed formatting of __probe_ip in bare dynamic probes
When a dynamic probe is created without explicitly requested arguments via perf probe --add, the Ftrace subsystem automatically appends "__probe_ip" to the tracepoint format to record the instruction pointer. Currently, perf trace prints this implicit field by default. Furthermore, because the formatting logic defaults to a standard signed integer representation, the kernel space memory address is erroneously displayed as a meaningless negative integer. ❯ sudo ./perf trace --event probe:proc_sys_open --max-events 1 0.000 ps/1316543 probe:proc_sys_open(__probe_ip: -1406056956) This patch addresses the user experience by combining two refinements: 1. "__probe_ip" is now hidden from the standard output, as its presence adds no contextual value for a bare probe. 2. If the user explicitly requests verbose output (--verbose), "__probe_ip" is intercepted and properly formatted as a hexadecimal kernel address, restoring its utility for debugging inline function hits. ❯ sudo ./perf trace --event probe:proc_sys_open --max-events 1 0.000 ps/1314074 probe:proc_sys_open() ❯ sudo ./perf trace --verbose --event probe:proc_sys_open --max-events 1 Using CPUID GenuineIntel-6-8E-C mmap size 528384B 0.000 ps/1314366 probe:proc_sys_open(__probe_ip: 0xffffffffac314604) Reviewed-by: James Clark <james.clark@linaro.org> Signed-off-by: Aaron Tomlin <atomlin@atomlin.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Daniel Vacek <neelx@suse.com> Cc: Howard Chu <howardchu95@gmail.com> Cc: Ian Rogers <irogers@google.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Sean Ashe <sean@ashe.io> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-rw-r--r--tools/perf/builtin-trace.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
index 377f0a18b00e..a8492da23a9c 100644
--- a/tools/perf/builtin-trace.c
+++ b/tools/perf/builtin-trace.c
@@ -3261,6 +3261,27 @@ static size_t trace__fprintf_tp_fields(struct trace *trace, struct perf_sample *
if (val == 0 && !trace->show_zeros && !arg->show_zero && arg->strtoul != STUL_BTF_TYPE)
continue;
+ /*
+ * __probe_ip is implicitly added to bare dynamic probes.
+ * Suppress it by default to avoid cluttering the output.
+ * If verbose mode is enabled, ensure it is formatted as a
+ * hexadecimal memory address rather than a signed integer.
+ */
+ if (!strcmp(field->name, "__probe_ip")) {
+ if (!verbose)
+ continue;
+
+ printed += scnprintf(bf + printed, size - printed,
+ "%s", printed ? ", " : "");
+ if (trace->show_arg_names)
+ printed += scnprintf(bf + printed, size - printed,
+ "%s: ", field->name);
+
+ printed += scnprintf(bf + printed, size - printed, "%#016llx",
+ (unsigned long long)val);
+ continue;
+ }
+
printed += scnprintf(bf + printed, size - printed, "%s", printed ? ", " : "");
if (trace->show_arg_names)