On 09/09, Jiri Olsa wrote:
>
> On Fri, Sep 06, 2024 at 09:18:15PM +0200, Oleg Nesterov wrote:
> >
> > And btw... Can bpftrace attach to the uprobe tp?
> >
> >     # perf probe -x ./test -a func
> >     Added new event:
> >       probe_test:func      (on func in /root/TTT/test)
> >
> >     You can now use it in all perf tools, such as:
> >
> >             perf record -e probe_test:func -aR sleep 1
> >
> >     # bpftrace -e 'tracepoint:probe_test:func { printf("%d\n", pid); }'
> >     Attaching 1 probe...
> >     ioctl(PERF_EVENT_IOC_SET_BPF): Invalid argument
> >     ERROR: Error attaching probe: tracepoint:probe_test:func
>
> the problem here is that bpftrace assumes BPF_PROG_TYPE_TRACEPOINT type
> for bpf program, but that will fail in perf_event_set_bpf_prog where
> perf event will be identified as uprobe and demands bpf program type
> to be BPF_PROG_TYPE_KPROBE

Yes, thanks, I know,

> I don't think
> there's a way to find out the tracepoint subtype (kprobe/uprobe) from
> the tracefs record

Hmm, indeed. it seems that it is not possible to derive tp_event->flags
from tracefs...

Perhaps bpftrace could look for probe_test:func in [uk]probe_events?
Or simply retry ioctl(PERF_EVENT_IOC_SET_BPF) with BPF_PROG_TYPE_KPROBE
if BPF_PROG_TYPE_TRACEPOINT returns EINVAL? Ugly, yes.

Oleg.


Reply via email to