Hi Jiri and Alexei, On Thu, 13 Jan 2022 13:27:34 +0100 Jiri Olsa <jolsa@xxxxxxxxxx> wrote: > On Wed, Jan 12, 2022 at 05:01:15PM +0100, Jiri Olsa wrote: > > On Wed, Jan 12, 2022 at 11:02:46PM +0900, Masami Hiramatsu wrote: > > > Hi Jiri and Alexei, > > > > > > Here is the 2nd version of fprobe. This version uses the > > > ftrace_set_filter_ips() for reducing the registering overhead. > > > Note that this also drops per-probe point private data, which > > > is not used anyway. > > > > > > This introduces the fprobe, the function entry/exit probe with > > > multiple probe point support. This also introduces the rethook > > > for hooking function return as same as kretprobe does. This > > > > nice, I was going through the multi-user-graph support > > and was wondering that this might be a better way > > > > > abstraction will help us to generalize the fgraph tracer, > > > because we can just switch it from rethook in fprobe, depending > > > on the kernel configuration. > > > > > > The patch [1/8] and [7/8] are from your series[1]. Other libbpf > > > patches will not be affected by this change. > > > > I'll try the bpf selftests on top of this > > I'm getting crash and stall when running bpf selftests, > the fprobe sample module works fine, I'll check on that I've tried to build tools/testing/selftests/bpf on my machine, but I got below errors. Would you know how I can setup to build the bpf selftests correctly? (I tried "make M=samples/bpf", but same result) ~/ksrc/linux/tools/testing/selftests/bpf$ make [...] CLANG /home/mhiramat/ksrc/linux/tools/testing/selftests/bpf/tools/build/bpftool/pid_iter.bpf.o skeleton/pid_iter.bpf.c:35:10: error: incomplete definition of type 'struct bpf_link' return BPF_CORE_READ((struct bpf_link *)ent, id); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/mhiramat/ksrc/linux/tools/testing/selftests/bpf/tools/build/bpftool//bootstrap/libbpf//include/bpf/bpf_core_read.h:403:2: note: expanded from macro 'BPF_CORE_READ' ___type((src), a, ##__VA_ARGS__) __r; \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/mhiramat/ksrc/linux/tools/testing/selftests/bpf/tools/build/bpftool//bootstrap/libbpf//include/bpf/bpf_core_read.h:274:29: note: expanded from macro '___type' #define ___type(...) typeof(___arrow(__VA_ARGS__)) ^~~~~~~~~~~~~~~~~~~~~ /home/mhiramat/ksrc/linux/tools/testing/selftests/bpf/tools/build/bpftool//bootstrap/libbpf//include/bpf/bpf_core_read.h:272:23: note: expanded from macro '___arrow' #define ___arrow(...) ___apply(___arrow, ___narg(__VA_ARGS__))(__VA_ARGS__) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ note: (skipping 1 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) /home/mhiramat/ksrc/linux/tools/testing/selftests/bpf/tools/build/bpftool//bootstrap/libbpf//include/bpf/bpf_core_read.h:223:25: note: expanded from macro '___concat' #define ___concat(a, b) a ## b ^ <scratch space>:16:1: note: expanded from here ___arrow2 ^ /home/mhiramat/ksrc/linux/tools/testing/selftests/bpf/tools/build/bpftool//bootstrap/libbpf//include/bpf/bpf_core_read.h:263:26: note: expanded from macro '___arrow2' #define ___arrow2(a, b) a->b ~^ skeleton/pid_iter.bpf.c:35:32: note: forward declaration of 'struct bpf_link' return BPF_CORE_READ((struct bpf_link *)ent, id); ^ skeleton/pid_iter.bpf.c:35:10: error: incomplete definition of type 'struct bpf_link' return BPF_CORE_READ((struct bpf_link *)ent, id); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/mhiramat/ksrc/linux/tools/testing/selftests/bpf/tools/build/bpftool//bootstrap/libbpf//include/bpf/bpf_core_read.h:404:2: note: expanded from macro 'BPF_CORE_READ' BPF_CORE_READ_INTO(&__r, (src), a, ##__VA_ARGS__); \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/mhiramat/ksrc/linux/tools/testing/selftests/bpf/tools/build/bpftool//bootstrap/libbpf//include/bpf/bpf_core_read.h:311:2: note: expanded from macro 'BPF_CORE_READ_INTO' ___core_read(bpf_core_read, bpf_core_read, \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/mhiramat/ksrc/linux/tools/testing/selftests/bpf/tools/build/bpftool//bootstrap/libbpf//include/bpf/bpf_core_read.h:302:2: note: expanded from macro '___core_read' ___apply(___core_read, ___empty(__VA_ARGS__))(fn, fn_ptr, dst, \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ note: (skipping 3 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) /home/mhiramat/ksrc/linux/tools/testing/selftests/bpf/tools/build/bpftool//bootstrap/libbpf//include/bpf/bpf_core_read.h:296:2: note: expanded from macro '___core_read0' ___read(fn, dst, ___type(src), src, a); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/mhiramat/ksrc/linux/tools/testing/selftests/bpf/tools/build/bpftool//bootstrap/libbpf//include/bpf/bpf_core_read.h:277:59: note: expanded from macro '___read' read_fn((void *)(dst), sizeof(*(dst)), &((src_type)(src))->accessor) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~ /home/mhiramat/ksrc/linux/tools/testing/selftests/bpf/tools/build/bpftool//bootstrap/libbpf//include/bpf/bpf_core_read.h:206:79: note: expanded from macro 'bpf_core_read' bpf_probe_read_kernel(dst, sz, (const void *)__builtin_preserve_access_index(src)) ^~~ skeleton/pid_iter.bpf.c:35:32: note: forward declaration of 'struct bpf_link' return BPF_CORE_READ((struct bpf_link *)ent, id); ^ skeleton/pid_iter.bpf.c:35:10: error: returning 'void' from a function with incompatible result type '__u32' (aka 'unsigned int') return BPF_CORE_READ((struct bpf_link *)ent, id); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/mhiramat/ksrc/linux/tools/testing/selftests/bpf/tools/build/bpftool//bootstrap/libbpf//include/bpf/bpf_core_read.h:402:36: note: expanded from macro 'BPF_CORE_READ' #define BPF_CORE_READ(src, a, ...) ({ \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ skeleton/pid_iter.bpf.c:42:17: warning: declaration of 'struct bpf_iter__task_file' will not be visible outside of this function [-Wvisibility] int iter(struct bpf_iter__task_file *ctx) ^ skeleton/pid_iter.bpf.c:44:25: error: incomplete definition of type 'struct bpf_iter__task_file' struct file *file = ctx->file; ~~~^ skeleton/pid_iter.bpf.c:42:17: note: forward declaration of 'struct bpf_iter__task_file' int iter(struct bpf_iter__task_file *ctx) ^ skeleton/pid_iter.bpf.c:45:32: error: incomplete definition of type 'struct bpf_iter__task_file' struct task_struct *task = ctx->task; ~~~^ skeleton/pid_iter.bpf.c:42:17: note: forward declaration of 'struct bpf_iter__task_file' int iter(struct bpf_iter__task_file *ctx) ^ skeleton/pid_iter.bpf.c:76:19: error: incomplete definition of type 'struct bpf_iter__task_file' bpf_seq_write(ctx->meta->seq, &e, sizeof(e)); ~~~^ skeleton/pid_iter.bpf.c:42:17: note: forward declaration of 'struct bpf_iter__task_file' int iter(struct bpf_iter__task_file *ctx) ^ 1 warning and 6 errors generated. make[1]: *** [Makefile:188: /home/mhiramat/ksrc/linux/tools/testing/selftests/bpf/tools/build/bpftool/pid_iter.bpf.o] Error 1 make: *** [Makefile:219: /home/mhiramat/ksrc/linux/tools/testing/selftests/bpf/tools/sbin/bpftool] Error 2 Thank you, -- Masami Hiramatsu <mhiramat@xxxxxxxxxx>