forked from Minki/linux
libbpf: Minimize explicit iterator of section definition array
Remove almost all the code that explicitly iterated BPF program section definitions in favor of using find_sec_def(). The only remaining user of section_defs is libbpf_get_type_names that has to iterate all of them to construct its result. Having one internal API entry point for section definitions will simplify further refactorings around libbpf's program section definitions parsing. Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Acked-by: Martin KaFai Lau <kafai@fb.com> Link: https://lore.kernel.org/bpf/20210914014733.2768-5-andrii@kernel.org
This commit is contained in:
parent
5532dfd42e
commit
b6291a6f30
@ -8438,22 +8438,13 @@ static int libbpf_find_attach_btf_id(struct bpf_program *prog, int *btf_obj_fd,
|
||||
__u32 attach_prog_fd = prog->attach_prog_fd;
|
||||
const char *name = prog->sec_name, *attach_name;
|
||||
const struct bpf_sec_def *sec = NULL;
|
||||
int i, err = 0;
|
||||
int err = 0;
|
||||
|
||||
if (!name)
|
||||
return -EINVAL;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(section_defs); i++) {
|
||||
if (!section_defs[i].is_attach_btf)
|
||||
continue;
|
||||
if (strncmp(name, section_defs[i].sec, section_defs[i].len))
|
||||
continue;
|
||||
|
||||
sec = §ion_defs[i];
|
||||
break;
|
||||
}
|
||||
|
||||
if (!sec) {
|
||||
sec = find_sec_def(name);
|
||||
if (!sec || !sec->is_attach_btf) {
|
||||
pr_warn("failed to identify BTF ID based on ELF section name '%s'\n", name);
|
||||
return -ESRCH;
|
||||
}
|
||||
@ -8491,27 +8482,28 @@ int libbpf_attach_type_by_name(const char *name,
|
||||
enum bpf_attach_type *attach_type)
|
||||
{
|
||||
char *type_names;
|
||||
int i;
|
||||
const struct bpf_sec_def *sec_def;
|
||||
|
||||
if (!name)
|
||||
return libbpf_err(-EINVAL);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(section_defs); i++) {
|
||||
if (strncmp(name, section_defs[i].sec, section_defs[i].len))
|
||||
continue;
|
||||
if (!section_defs[i].is_attachable)
|
||||
return libbpf_err(-EINVAL);
|
||||
*attach_type = section_defs[i].expected_attach_type;
|
||||
return 0;
|
||||
}
|
||||
pr_debug("failed to guess attach type based on ELF section name '%s'\n", name);
|
||||
type_names = libbpf_get_type_names(true);
|
||||
if (type_names != NULL) {
|
||||
pr_debug("attachable section(type) names are:%s\n", type_names);
|
||||
free(type_names);
|
||||
sec_def = find_sec_def(name);
|
||||
if (!sec_def) {
|
||||
pr_debug("failed to guess attach type based on ELF section name '%s'\n", name);
|
||||
type_names = libbpf_get_type_names(true);
|
||||
if (type_names != NULL) {
|
||||
pr_debug("attachable section(type) names are:%s\n", type_names);
|
||||
free(type_names);
|
||||
}
|
||||
|
||||
return libbpf_err(-EINVAL);
|
||||
}
|
||||
|
||||
return libbpf_err(-EINVAL);
|
||||
if (!sec_def->is_attachable)
|
||||
return libbpf_err(-EINVAL);
|
||||
|
||||
*attach_type = sec_def->expected_attach_type;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int bpf_map__fd(const struct bpf_map *map)
|
||||
|
Loading…
Reference in New Issue
Block a user