mirror of
https://github.com/netdata/libbpf.git
synced 2026-03-19 07:49:07 +08:00
libbpf: Struct_ops in SEC("?.struct_ops") / SEC("?.struct_ops.link")
Allow using two new section names for struct_ops maps:
- SEC("?.struct_ops")
- SEC("?.struct_ops.link")
To specify maps that have bpf_map->autocreate == false after open.
Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20240306104529.6453-12-eddyz87@gmail.com
This commit is contained in:
committed by
Andrii Nakryiko
parent
d5d0b6e920
commit
fc8b86bda2
15
src/libbpf.c
15
src/libbpf.c
@@ -1322,6 +1322,15 @@ static int init_struct_ops_maps(struct bpf_object *obj, const char *sec_name,
|
||||
return -ENOMEM;
|
||||
map->btf_value_type_id = type_id;
|
||||
|
||||
/* Follow same convention as for programs autoload:
|
||||
* SEC("?.struct_ops") means map is not created by default.
|
||||
*/
|
||||
if (sec_name[0] == '?') {
|
||||
map->autocreate = false;
|
||||
/* from now on forget there was ? in section name */
|
||||
sec_name++;
|
||||
}
|
||||
|
||||
map->def.type = BPF_MAP_TYPE_STRUCT_OPS;
|
||||
map->def.key_size = sizeof(int);
|
||||
map->def.value_size = type->size;
|
||||
@@ -3685,7 +3694,9 @@ static int bpf_object__elf_collect(struct bpf_object *obj)
|
||||
sec_desc->shdr = sh;
|
||||
sec_desc->data = data;
|
||||
} else if (strcmp(name, STRUCT_OPS_SEC) == 0 ||
|
||||
strcmp(name, STRUCT_OPS_LINK_SEC) == 0) {
|
||||
strcmp(name, STRUCT_OPS_LINK_SEC) == 0 ||
|
||||
strcmp(name, "?" STRUCT_OPS_SEC) == 0 ||
|
||||
strcmp(name, "?" STRUCT_OPS_LINK_SEC) == 0) {
|
||||
sec_desc->sec_type = SEC_ST_OPS;
|
||||
sec_desc->shdr = sh;
|
||||
sec_desc->data = data;
|
||||
@@ -3705,6 +3716,8 @@ static int bpf_object__elf_collect(struct bpf_object *obj)
|
||||
if (!section_have_execinstr(obj, targ_sec_idx) &&
|
||||
strcmp(name, ".rel" STRUCT_OPS_SEC) &&
|
||||
strcmp(name, ".rel" STRUCT_OPS_LINK_SEC) &&
|
||||
strcmp(name, ".rel?" STRUCT_OPS_SEC) &&
|
||||
strcmp(name, ".rel?" STRUCT_OPS_LINK_SEC) &&
|
||||
strcmp(name, ".rel" MAPS_ELF_SEC)) {
|
||||
pr_info("elf: skipping relo section(%d) %s for section(%d) %s\n",
|
||||
idx, name, targ_sec_idx,
|
||||
|
||||
Reference in New Issue
Block a user