libbpf: Support detecting and attaching of writable tracepoint program
Program on writable tracepoint is BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE, but its attachment is the same as BPF_PROG_TYPE_RAW_TRACEPOINT. Signed-off-by: Hou Tao <houtao1@huawei.com> Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Link: https://lore.kernel.org/bpf/20211004094857.30868-3-hotforest@gmail.com
This commit is contained in:
parent
65223741ae
commit
ccaf12d621
|
@ -8077,6 +8077,8 @@ static const struct bpf_sec_def section_defs[] = {
|
|||
SEC_DEF("tp/", TRACEPOINT, 0, SEC_NONE, attach_tp),
|
||||
SEC_DEF("raw_tracepoint/", RAW_TRACEPOINT, 0, SEC_NONE, attach_raw_tp),
|
||||
SEC_DEF("raw_tp/", RAW_TRACEPOINT, 0, SEC_NONE, attach_raw_tp),
|
||||
SEC_DEF("raw_tracepoint.w/", RAW_TRACEPOINT_WRITABLE, 0, SEC_NONE, attach_raw_tp),
|
||||
SEC_DEF("raw_tp.w/", RAW_TRACEPOINT_WRITABLE, 0, SEC_NONE, attach_raw_tp),
|
||||
SEC_DEF("tp_btf/", TRACING, BPF_TRACE_RAW_TP, SEC_ATTACH_BTF, attach_trace),
|
||||
SEC_DEF("fentry/", TRACING, BPF_TRACE_FENTRY, SEC_ATTACH_BTF, attach_trace),
|
||||
SEC_DEF("fmod_ret/", TRACING, BPF_MODIFY_RETURN, SEC_ATTACH_BTF, attach_trace),
|
||||
|
@ -9846,12 +9848,26 @@ struct bpf_link *bpf_program__attach_raw_tracepoint(const struct bpf_program *pr
|
|||
|
||||
static struct bpf_link *attach_raw_tp(const struct bpf_program *prog, long cookie)
|
||||
{
|
||||
const char *tp_name;
|
||||
static const char *const prefixes[] = {
|
||||
"raw_tp/",
|
||||
"raw_tracepoint/",
|
||||
"raw_tp.w/",
|
||||
"raw_tracepoint.w/",
|
||||
};
|
||||
size_t i;
|
||||
const char *tp_name = NULL;
|
||||
|
||||
if (str_has_pfx(prog->sec_name, "raw_tp/"))
|
||||
tp_name = prog->sec_name + sizeof("raw_tp/") - 1;
|
||||
else
|
||||
tp_name = prog->sec_name + sizeof("raw_tracepoint/") - 1;
|
||||
for (i = 0; i < ARRAY_SIZE(prefixes); i++) {
|
||||
if (str_has_pfx(prog->sec_name, prefixes[i])) {
|
||||
tp_name = prog->sec_name + strlen(prefixes[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!tp_name) {
|
||||
pr_warn("prog '%s': invalid section name '%s'\n",
|
||||
prog->name, prog->sec_name);
|
||||
return libbpf_err_ptr(-EINVAL);
|
||||
}
|
||||
|
||||
return bpf_program__attach_raw_tracepoint(prog, tp_name);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue