Messages in this thread | | | Date | Thu, 3 Aug 2023 19:31:06 +0200 | From | Oleg Nesterov <> | Subject | Re: [PATCH] perf probe: Show correct error about @symbol for uprobe |
| |
Hi Masami,
On 08/01, Masami Hiramatsu wrote: > > Oleg, what do you think about accessing symbols in data section from > uprobes? Can we access it from user-land IP-relative address?
Sorry, I don't I understand... I don't even understand the context, can't find the whole thread on lore.kernel.org/lkml. Plus I forgot EVERYTHING I knew about tracing/uprobes anyway ;)
but when I look at traceprobe_parse_probe_arg() paths it seems to me that uprobe can fetch the IP-relative address, not sure about the syntax but perhaps something like xxx=+OFFSET(%ip). The question is how tools/perf can calculate this OFFSET. But I am sure you understand this all much better than me.
> > > --- a/tools/perf/util/probe-event.c > > > +++ b/tools/perf/util/probe-event.c > > > @@ -2800,13 +2800,18 @@ static void warn_uprobe_event_compat(struct probe_trace_event *tev) > > > if (!tev->uprobes || tev->nargs == 0 || !buf) > > > goto out; > > > > > > - for (i = 0; i < tev->nargs; i++) > > > - if (strglobmatch(tev->args[i].value, "[$@+-]*")) { > > > - pr_warning("Please upgrade your kernel to at least " > > > - "3.14 to have access to feature %s\n", > > > + for (i = 0; i < tev->nargs; i++) { > > > + if (strchr(tev->args[i].value, '@')) { > > > + pr_warning("%s accesses a variable by symbol name, but that is not supported for user application probe.\n", > > > + tev->args[i].value); > > > + break;
IIUC without this change @symbol will trigger the
/* uprobes don't support symbols */ if (!(ctx->flags & TPARG_FL_KERNEL)) { trace_probe_log_err(ctx->offset, SYM_ON_UPROBE); return -EINVAL; }
in parse_probe_arg(), right?
So FWIW the patch looks fine to me, but as you have mentioned tools/perf could probably (try to) turn @symbol into @+symbol_offset_in_file...
In short, sorry for spam, I can't help ;)
And just in case, I am on PTO till Aug 14, won't be able to read emails till then.
Oleg.
| |