On Mon, Mar 25, 2024 at 8:48 AM Tao Chen <chen.dylane@xxxxxxxxx> wrote: > > The new api can be used to reset the function we want to trace in > runtime. So we need not to change the code again when we just do > minor changes to the trace function in kprobe or other ebpf event > type. We can replace the old section with new section passed in via > parameter. Maybe the following scenario we can use the api: > > 1. solve "*.isra.o" issue caused by compiler in new kernel > obj = offcputime_bpf__open(); > bpf_program__set_section_name(*(obj->skeleton->obj), > "kprobe/finish_task_switch", "kprobe/finish_task_switch.isra.0"); > > 2. dynamic adjustment for trace function offset > obj = offcputime_bpf__open(); > bpf_program__set_section_name(*(obj->skeleton->obj), > "kprobe/finish_task_switch+23", "kprobe/finish_task_switch+45"); > > Signed-off-by: Tao Chen <chen.dylane@xxxxxxxxx> > --- > tools/lib/bpf/libbpf.c | 24 ++++++++++++++++++++++++ > tools/lib/bpf/libbpf.h | 2 ++ > tools/lib/bpf/libbpf.map | 1 + > 3 files changed, 27 insertions(+) > This is a wrong approach. SEC() is immutable and serves as a hint to libbpf on program type and possibly some attach parameters. But after that libbpf allows to override all of them though APIs like bpf_program__set_type() and others. Attach APIs always allow to specify all the target parameters, including kprobe function name and so on. Please check all of the libbpf APIs in libbpf.h. pw-bot: cr > diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c > index 96ff1aa4bf6a..94f32e845c61 100644 > --- a/tools/lib/bpf/libbpf.c > +++ b/tools/lib/bpf/libbpf.c > @@ -8576,6 +8576,30 @@ const char *bpf_program__section_name(const struct bpf_program *prog) > return prog->sec_name; > } > [...]