Linux Perf Users
 help / color / mirror / Atom feed
* [PATCH] perf trace: Format instruction pointer fields as hexadecimal
@ 2026-07-19 19:10 Aaron Tomlin
  2026-07-20  1:50 ` Aaron Tomlin
  0 siblings, 1 reply; 2+ messages in thread
From: Aaron Tomlin @ 2026-07-19 19:10 UTC (permalink / raw)
  To: peterz, mingo, acme, namhyung
  Cc: mark.rutland, alexander.shishkin, jolsa, irogers, adrian.hunter,
	james.clark, howardchu95, atomlin, neelx, chjohnst, sean,
	linux-perf-users, linux-kernel

Provide a helper function trace__field_is_ip() in
trace__fprintf_tp_fields() to ensure that tracepoint fields representing
instruction pointers such as "__probe_ip", "caller_ip", and
"call_site" are always formatted as hexadecimal memory addresses rather
than signed integers.

For example, when running a kmem:kfree tracepoint:

    # perf trace --show-cpu --event kmem:kfree --max-event 1

    Before this change, "call_site" was represented as a signed integer:
      0.000 [003] xfce4-terminal/2201 kmem:kfree(call_site: -1714572588, ptr: 0xffff8afee0303000)

    After this change, "call_site" is correctly represented in hexadecimal:
      0.000 [003] xfce4-terminal/2201 kmem:kfree(call_site: 0xffffffff99cf1194, ptr: 0xffff8afee0303000)

This improves the readability of perf trace output by making code
addresses straightforward to parse and map to kernel symbols.

Signed-off-by: Aaron Tomlin <atomlin@atomlin.com>
---
 tools/perf/builtin-trace.c | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
index 0142a16830de..207d46d073c1 100644
--- a/tools/perf/builtin-trace.c
+++ b/tools/perf/builtin-trace.c
@@ -3223,6 +3223,13 @@ static unsigned char bitmap_byte(const unsigned long *mask, int byte_idx)
 	return b_val;
 }
 
+static bool trace__field_is_ip(const char *name)
+{
+	return !strcmp(name, "__probe_ip") ||
+	       !strcmp(name, "caller_ip") ||
+	       !strcmp(name, "call_site");
+}
+
 static size_t trace__fprintf_tp_fields(struct trace *trace, struct perf_sample *sample,
 				       struct thread *thread, void *augmented_args, int augmented_args_size)
 {
@@ -3235,6 +3242,7 @@ static size_t trace__fprintf_tp_fields(struct trace *trace, struct perf_sample *
 	size_t printed = 0, btf_printed;
 	unsigned long val;
 	u8 bit = 1;
+	bool is_probe_ip;
 	struct syscall_arg syscall_arg = {
 		.augmented = {
 			.size = augmented_args_size,
@@ -3322,9 +3330,14 @@ static size_t trace__fprintf_tp_fields(struct trace *trace, struct perf_sample *
 		 * 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.
+		 *
+		 * caller_ip and call_site are also expected to be instruction
+		 * pointers and should always be represented in hexadecimal.
 		 */
-		if (evsel__is_probe(evsel) && !strcmp(field->name, "__probe_ip")) {
-			if (!verbose)
+		is_probe_ip = evsel__is_probe(evsel) && !strcmp(field->name, "__probe_ip");
+
+		if (is_probe_ip || trace__field_is_ip(field->name)) {
+			if (is_probe_ip && !verbose)
 				continue;
 
 			printed += scnprintf(bf + printed, size - printed,

base-commit: ef06fd2704cafbcf04e220f2103ca5488508f13e
-- 
2.54.0


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] perf trace: Format instruction pointer fields as hexadecimal
  2026-07-19 19:10 [PATCH] perf trace: Format instruction pointer fields as hexadecimal Aaron Tomlin
@ 2026-07-20  1:50 ` Aaron Tomlin
  0 siblings, 0 replies; 2+ messages in thread
From: Aaron Tomlin @ 2026-07-20  1:50 UTC (permalink / raw)
  To: peterz, mingo, acme, namhyung
  Cc: mark.rutland, alexander.shishkin, jolsa, irogers, adrian.hunter,
	james.clark, howardchu95, neelx, chjohnst, sean, linux-perf-users,
	linux-kernel

On Sun, Jul 19, 2026 at 03:10:00PM -0400, Aaron Tomlin wrote:
> Provide a helper function trace__field_is_ip() in
> trace__fprintf_tp_fields() to ensure that tracepoint fields representing
> instruction pointers such as "__probe_ip", "caller_ip", and
> "call_site" are always formatted as hexadecimal memory addresses rather
> than signed integers.
> 
> For example, when running a kmem:kfree tracepoint:
> 
>     # perf trace --show-cpu --event kmem:kfree --max-event 1
> 
>     Before this change, "call_site" was represented as a signed integer:
>       0.000 [003] xfce4-terminal/2201 kmem:kfree(call_site: -1714572588, ptr: 0xffff8afee0303000)
> 
>     After this change, "call_site" is correctly represented in hexadecimal:
>       0.000 [003] xfce4-terminal/2201 kmem:kfree(call_site: 0xffffffff99cf1194, ptr: 0xffff8afee0303000)
> 
> This improves the readability of perf trace output by making code
> addresses straightforward to parse and map to kernel symbols.
> 
> Signed-off-by: Aaron Tomlin <atomlin@atomlin.com>
> ---
>  tools/perf/builtin-trace.c | 17 +++++++++++++++--
>  1 file changed, 15 insertions(+), 2 deletions(-)

Hi Peter, Ingo, Arnaldo, Namhyung, Ian,

Please note that this patch was rebased on "perf trace: Correct cpumask
formatting and add --bitmask-list" (Message-ID:
20260719001510.398616-1-atomlin@atomlin.com).


Kind regards,
-- 
Aaron Tomlin

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2026-07-20  1:50 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-19 19:10 [PATCH] perf trace: Format instruction pointer fields as hexadecimal Aaron Tomlin
2026-07-20  1:50 ` Aaron Tomlin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox