On Wed, May 12, 2021 at 2:33 PM Alexei Starovoitov <alexei.starovoitov@xxxxxxxxx> wrote: > > From: Alexei Starovoitov <ast@xxxxxxxxxx> > > Add -L flag to bpftool to use libbpf gen_trace facility and syscall/loader program > for skeleton generation and program loading. > > "bpftool gen skeleton -L" command will generate a "light skeleton" or "loader skeleton" > that is similar to existing skeleton, but has one major difference: > $ bpftool gen skeleton lsm.o > lsm.skel.h > $ bpftool gen skeleton -L lsm.o > lsm.lskel.h > $ diff lsm.skel.h lsm.lskel.h > @@ -5,34 +4,34 @@ > #define __LSM_SKEL_H__ > > #include <stdlib.h> > -#include <bpf/libbpf.h> > +#include <bpf/bpf.h> > > The light skeleton does not use majority of libbpf infrastructure. > It doesn't need libelf. It doesn't parse .o file. > It only needs few sys_bpf wrappers. All of them are in bpf/bpf.h file. > In future libbpf/bpf.c can be inlined into bpf.h, so not even libbpf.a would be > needed to work with light skeleton. > > "bpftool prog load -L file.o" command is introduced for debugging of syscall/loader > program generation. Just like the same command without -L it will try to load > the programs from file.o into the kernel. It won't even try to pin them. > > "bpftool prog load -L -d file.o" command will provide additional debug messages > on how syscall/loader program was generated. > Also the execution of syscall/loader program will use bpf_trace_printk() for > each step of loading BTF, creating maps, and loading programs. > The user can do "cat /.../trace_pipe" for further debug. > > An example of fexit_sleep.lskel.h generated from progs/fexit_sleep.c: > struct fexit_sleep { > struct bpf_loader_ctx ctx; > struct { > struct bpf_map_desc bss; > } maps; > struct { > struct bpf_prog_desc nanosleep_fentry; > struct bpf_prog_desc nanosleep_fexit; > } progs; > struct { > int nanosleep_fentry_fd; > int nanosleep_fexit_fd; > } links; > struct fexit_sleep__bss { > int pid; > int fentry_cnt; > int fexit_cnt; > } *bss; > }; > > Signed-off-by: Alexei Starovoitov <ast@xxxxxxxxxx> > --- LGTM. Acked-by: Andrii Nakryiko <andrii@xxxxxxxxxx> > tools/bpf/bpftool/Makefile | 2 +- > tools/bpf/bpftool/gen.c | 386 ++++++++++++++++++++++++++++-- > tools/bpf/bpftool/main.c | 7 +- > tools/bpf/bpftool/main.h | 1 + > tools/bpf/bpftool/prog.c | 107 ++++++++- > tools/bpf/bpftool/xlated_dumper.c | 3 + > 6 files changed, 482 insertions(+), 24 deletions(-) > [...]