On Fri, Jan 14, 2022 at 11:47:04PM +0900, Masami Hiramatsu wrote: > 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) what's your clang version? your distro might be behind, I'm using clang 14 compiled from sources: $ /opt/clang/bin/clang --version clang version 14.0.0 (https://github.com/llvm/llvm-project.git 9f8ffaaa0bddcefeec15a3df9858fd50b05fcbae) Target: x86_64-unknown-linux-gnu Thread model: posix InstalledDir: /opt/clang/bin and compiling bpf selftests with: $ CLANG=/opt/clang/bin/clang make jirka > > ~/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> >