Re: [RFC PATCH] libbpf: Add bpf_program__set_section_name api

From: Tao Chen
Date: Tue Mar 26 2024 - 10:56:27 EST


Hi, Andrii, thank you for your reply. I read the apis again in libbpf.h, as you say, it seems that this patch no need. Thanks again.

在 2024/3/26 上午1:25, Andrii Nakryiko 写道:
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;
}


[...]