kernel/trace/blktrace.c | 6 + kernel/trace/ftrace.c | 26 ++++++ kernel/trace/trace.c | 154 +++++++++++++++++----------------- kernel/trace/trace.h | 40 +++++---- kernel/trace/trace_events.c | 4 - kernel/trace/trace_events_synth.c | 2 kernel/trace/trace_fprobe.c | 6 + kernel/trace/trace_functions_graph.c | 18 ++-- kernel/trace/trace_irqsoff.c | 30 +++---- kernel/trace/trace_kdb.c | 2 kernel/trace/trace_kprobe.c | 6 + kernel/trace/trace_output.c | 18 ++-- kernel/trace/trace_sched_wakeup.c | 24 +++-- kernel/trace/trace_syscalls.c | 4 - kernel/trace/trace_wprobe.c | 2 15 files changed, 187 insertions(+), 155 deletions(-)
Hi,
This series implements an option to show symbols in _text+OFFSET
format instead of symbol name in the function profiler.
This is the 6th version, the previous one is here;
https://lore.kernel.org/all/176114747153.315239.6863821259073466010.stgit@devnote2/
This version is rebased on top of linux-trace/for-next branch
and modify offset format to hex.
Thank you,
---
Masami Hiramatsu (Google) (2):
tracing: Allow tracer to add more than 32 options
tracing: Add an option to show symbols in _text+offset for function profiler
kernel/trace/blktrace.c | 6 +
kernel/trace/ftrace.c | 26 ++++++
kernel/trace/trace.c | 154 +++++++++++++++++-----------------
kernel/trace/trace.h | 40 +++++----
kernel/trace/trace_events.c | 4 -
kernel/trace/trace_events_synth.c | 2
kernel/trace/trace_fprobe.c | 6 +
kernel/trace/trace_functions_graph.c | 18 ++--
kernel/trace/trace_irqsoff.c | 30 +++----
kernel/trace/trace_kdb.c | 2
kernel/trace/trace_kprobe.c | 6 +
kernel/trace/trace_output.c | 18 ++--
kernel/trace/trace_sched_wakeup.c | 24 +++--
kernel/trace/trace_syscalls.c | 4 -
kernel/trace/trace_wprobe.c | 2
15 files changed, 187 insertions(+), 155 deletions(-)
--
Masami Hiramatsu (Google) <mhiramat@kernel.org>
On Thu, 30 Oct 2025 12:30:05 +0900
"Masami Hiramatsu (Google)" <mhiramat@kernel.org> wrote:
> kernel/trace/blktrace.c | 6 +
> kernel/trace/ftrace.c | 26 ++++++
> kernel/trace/trace.c | 154 +++++++++++++++++-----------------
> kernel/trace/trace.h | 40 +++++----
> kernel/trace/trace_events.c | 4 -
> kernel/trace/trace_events_synth.c | 2
> kernel/trace/trace_fprobe.c | 6 +
> kernel/trace/trace_functions_graph.c | 18 ++--
> kernel/trace/trace_irqsoff.c | 30 +++----
> kernel/trace/trace_kdb.c | 2
> kernel/trace/trace_kprobe.c | 6 +
> kernel/trace/trace_output.c | 18 ++--
> kernel/trace/trace_sched_wakeup.c | 24 +++--
> kernel/trace/trace_syscalls.c | 4 -
> kernel/trace/trace_wprobe.c | 2
I didn't realize this affected your branch too. Which means I can't apply
this to any branch.
Also, could you make a helper function...
+++ b/kernel/trace/trace_wprobe.c
@@ -260,7 +260,7 @@ print_wprobe_event(struct trace_iterator *iter, int flags,
trace_seq_printf(s, "%s: (", trace_probe_name(tp));
- if (!seq_print_ip_sym(s, field->ip, flags | TRACE_ITER_SYM_OFFSET))
+ if (!seq_print_ip_sym(s, field->ip, flags | TRACE_ITER(SYM_OFFSET)))
goto out;
trace_seq_putc(s, ')');
that both fprobe and wprobe use? And then you don't need to have this open
coded everywhere.
That is, add this patch:
diff --git a/kernel/trace/trace_probe.h b/kernel/trace/trace_probe.h
index 591adc9bb1e9..bd26004cc320 100644
--- a/kernel/trace/trace_probe.h
+++ b/kernel/trace/trace_probe.h
@@ -598,3 +598,9 @@ struct uprobe_dispatch_data {
struct trace_uprobe *tu;
unsigned long bp_addr;
};
+
+static inline int probe_print_ip_sym(struct trace_seq *s, unsigned long ip,
+ int flags)
+{
+ retun seq_print_ip_sym(s, field->ip, flags | TRACE_ITER_SYM_OFFSET);
+}
And use that instead.
So, new plan. Base this patch on top of v6.18-rc3 and send that.
Then what we can do is merge this branch into your branch and my branch and
add on top of it.
Note, you should have rebased your probe branch on top of one of the
v6.18-rc releases. It's still based on top of 6.17-rc6, which can cause
other issues.
-- Steve
On Thu, 30 Oct 2025 05:25:48 -0400
Steven Rostedt <rostedt@goodmis.org> wrote:
> On Thu, 30 Oct 2025 12:30:05 +0900
> "Masami Hiramatsu (Google)" <mhiramat@kernel.org> wrote:
>
> > kernel/trace/blktrace.c | 6 +
> > kernel/trace/ftrace.c | 26 ++++++
> > kernel/trace/trace.c | 154 +++++++++++++++++-----------------
> > kernel/trace/trace.h | 40 +++++----
> > kernel/trace/trace_events.c | 4 -
> > kernel/trace/trace_events_synth.c | 2
> > kernel/trace/trace_fprobe.c | 6 +
> > kernel/trace/trace_functions_graph.c | 18 ++--
> > kernel/trace/trace_irqsoff.c | 30 +++----
> > kernel/trace/trace_kdb.c | 2
> > kernel/trace/trace_kprobe.c | 6 +
> > kernel/trace/trace_output.c | 18 ++--
> > kernel/trace/trace_sched_wakeup.c | 24 +++--
> > kernel/trace/trace_syscalls.c | 4 -
> > kernel/trace/trace_wprobe.c | 2
>
> I didn't realize this affected your branch too. Which means I can't apply
> this to any branch.
>
> Also, could you make a helper function...
>
> +++ b/kernel/trace/trace_wprobe.c
> @@ -260,7 +260,7 @@ print_wprobe_event(struct trace_iterator *iter, int flags,
>
> trace_seq_printf(s, "%s: (", trace_probe_name(tp));
>
> - if (!seq_print_ip_sym(s, field->ip, flags | TRACE_ITER_SYM_OFFSET))
> + if (!seq_print_ip_sym(s, field->ip, flags | TRACE_ITER(SYM_OFFSET)))
> goto out;
>
> trace_seq_putc(s, ')');
>
> that both fprobe and wprobe use? And then you don't need to have this open
> coded everywhere.
>
> That is, add this patch:
>
> diff --git a/kernel/trace/trace_probe.h b/kernel/trace/trace_probe.h
> index 591adc9bb1e9..bd26004cc320 100644
> --- a/kernel/trace/trace_probe.h
> +++ b/kernel/trace/trace_probe.h
> @@ -598,3 +598,9 @@ struct uprobe_dispatch_data {
> struct trace_uprobe *tu;
> unsigned long bp_addr;
> };
> +
> +static inline int probe_print_ip_sym(struct trace_seq *s, unsigned long ip,
> + int flags)
> +{
> + retun seq_print_ip_sym(s, field->ip, flags | TRACE_ITER_SYM_OFFSET);
> +}
>
> And use that instead.
I would like to use more generic wrappers:
static inline int seq_print_ip_sym_offset(struct trace_seq *s, unsigned long ip,
unsigned long sym_flags)
{
return seq_print_ip_sym(s,ip, sym_flags | TRACE_ITER(SYM_OFFSET));
}
static inline int seq_print_ip_sym_no_offset(struct trace_seq *s, unsigned long ip,
unsigned long sym_flags)
{
return seq_print_ip_sym(s,ip, sym_flags & ~TRACE_ITER(SYM_OFFSET));
}
In trace_output.h, since this is also used in function_graph tracer.
Thank you,
--
Masami Hiramatsu (Google) <mhiramat@kernel.org>
On Thu, 30 Oct 2025 05:25:48 -0400
Steven Rostedt <rostedt@goodmis.org> wrote:
> On Thu, 30 Oct 2025 12:30:05 +0900
> "Masami Hiramatsu (Google)" <mhiramat@kernel.org> wrote:
>
> > kernel/trace/blktrace.c | 6 +
> > kernel/trace/ftrace.c | 26 ++++++
> > kernel/trace/trace.c | 154 +++++++++++++++++-----------------
> > kernel/trace/trace.h | 40 +++++----
> > kernel/trace/trace_events.c | 4 -
> > kernel/trace/trace_events_synth.c | 2
> > kernel/trace/trace_fprobe.c | 6 +
> > kernel/trace/trace_functions_graph.c | 18 ++--
> > kernel/trace/trace_irqsoff.c | 30 +++----
> > kernel/trace/trace_kdb.c | 2
> > kernel/trace/trace_kprobe.c | 6 +
> > kernel/trace/trace_output.c | 18 ++--
> > kernel/trace/trace_sched_wakeup.c | 24 +++--
> > kernel/trace/trace_syscalls.c | 4 -
> > kernel/trace/trace_wprobe.c | 2
>
> I didn't realize this affected your branch too. Which means I can't apply
> this to any branch.
Ah, I rebased it on the linux-trace/for-next, the auto merged branch.
Let me rebase it on trace/for-next.
>
> Also, could you make a helper function...
>
> +++ b/kernel/trace/trace_wprobe.c
> @@ -260,7 +260,7 @@ print_wprobe_event(struct trace_iterator *iter, int flags,
>
> trace_seq_printf(s, "%s: (", trace_probe_name(tp));
>
> - if (!seq_print_ip_sym(s, field->ip, flags | TRACE_ITER_SYM_OFFSET))
> + if (!seq_print_ip_sym(s, field->ip, flags | TRACE_ITER(SYM_OFFSET)))
> goto out;
>
> trace_seq_putc(s, ')');
>
> that both fprobe and wprobe use? And then you don't need to have this open
> coded everywhere.
Yeah, OK.
>
> That is, add this patch:
>
> diff --git a/kernel/trace/trace_probe.h b/kernel/trace/trace_probe.h
> index 591adc9bb1e9..bd26004cc320 100644
> --- a/kernel/trace/trace_probe.h
> +++ b/kernel/trace/trace_probe.h
> @@ -598,3 +598,9 @@ struct uprobe_dispatch_data {
> struct trace_uprobe *tu;
> unsigned long bp_addr;
> };
> +
> +static inline int probe_print_ip_sym(struct trace_seq *s, unsigned long ip,
> + int flags)
> +{
> + retun seq_print_ip_sym(s, field->ip, flags | TRACE_ITER_SYM_OFFSET);
> +}
>
> And use that instead.
Shouldn't we make it trace-wide function ?
>
> So, new plan. Base this patch on top of v6.18-rc3 and send that.
>
OK.
> Then what we can do is merge this branch into your branch and my branch and
> add on top of it.
>
> Note, you should have rebased your probe branch on top of one of the
> v6.18-rc releases. It's still based on top of 6.17-rc6, which can cause
> other issues.
OK.
Thank you,
>
>
> -- Steve
--
Masami Hiramatsu (Google) <mhiramat@kernel.org>
On Fri, 31 Oct 2025 10:29:47 +0900
Masami Hiramatsu (Google) <mhiramat@kernel.org> wrote:
> > +static inline int probe_print_ip_sym(struct trace_seq *s, unsigned long ip,
> > + int flags)
> > +{
> > + retun seq_print_ip_sym(s, field->ip, flags | TRACE_ITER_SYM_OFFSET);
> > +}
> >
> > And use that instead.
>
> Shouldn't we make it trace-wide function ?
Sure.
-- Steve
© 2016 - 2025 Red Hat, Inc.