On Tue, Mar 1, 2022 at 6:49 PM Delyan Kratunov <delyank@xxxxxx> wrote: > > When generating subskeletons, bpftool needs to know the elf section > name, as that's the stable identifier that will survive into the final > linked bpf_object. > > This patch adds bpf_map__section_name in symmetry with > bpf_program__section_name. > > Signed-off-by: Delyan Kratunov <delyank@xxxxxx> > --- > tools/lib/bpf/libbpf.c | 8 ++++++++ > tools/lib/bpf/libbpf.h | 2 ++ > tools/lib/bpf/libbpf.map | 5 +++++ > tools/lib/bpf/libbpf_version.h | 2 +- > 4 files changed, 16 insertions(+), 1 deletion(-) > > diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c > index be6480e260c4..d20ae8f225ee 100644 > --- a/tools/lib/bpf/libbpf.c > +++ b/tools/lib/bpf/libbpf.c > @@ -9180,6 +9180,14 @@ const char *bpf_map__name(const struct bpf_map *map) > return map->name; > } > > +const char *bpf_map__section_name(const struct bpf_map *map) > +{ > + if (!map) > + return NULL; > + > + return map->real_name; > +} > + First, "section_name" here is extremely confusing in the face of bpf_program__section_name() which returns a very different thing for BPF program. But I think we shouldn't need to do anything extra here. Using bpf_map__name() and then bpf_object__find_map_by_name() should just work (there is real_name special-handling for maps that start with dot). If that real_name special handling doesn't work for subskeletons, we should fix that special handling instead of adding a special getter. But I'll need to look at other patches first and maybe play around locally with subskeletons. > enum bpf_map_type bpf_map__type(const struct bpf_map *map) > { > return map->def.type; > diff --git a/tools/lib/bpf/libbpf.h b/tools/lib/bpf/libbpf.h > index c8d8daad212e..7b66794f1c0a 100644 > --- a/tools/lib/bpf/libbpf.h > +++ b/tools/lib/bpf/libbpf.h > @@ -741,6 +741,8 @@ LIBBPF_API LIBBPF_DEPRECATED_SINCE(0, 8, "use appropriate getters or setters ins > const struct bpf_map_def *bpf_map__def(const struct bpf_map *map); > /* get map name */ > LIBBPF_API const char *bpf_map__name(const struct bpf_map *map); > +/* get map ELF section name */ > +LIBBPF_API const char *bpf_map__section_name(const struct bpf_map *map); > /* get/set map type */ > LIBBPF_API enum bpf_map_type bpf_map__type(const struct bpf_map *map); > LIBBPF_API int bpf_map__set_type(struct bpf_map *map, enum bpf_map_type type); > diff --git a/tools/lib/bpf/libbpf.map b/tools/lib/bpf/libbpf.map > index 47e70c9058d9..5c85d297d955 100644 > --- a/tools/lib/bpf/libbpf.map > +++ b/tools/lib/bpf/libbpf.map > @@ -439,3 +439,8 @@ LIBBPF_0.7.0 { > libbpf_probe_bpf_prog_type; > libbpf_set_memlock_rlim_max; > } LIBBPF_0.6.0; > + > +LIBBPF_0.8.0 { > + global: > + bpf_map__section_name; > +} LIBBPF_0.7.0; > diff --git a/tools/lib/bpf/libbpf_version.h b/tools/lib/bpf/libbpf_version.h > index 0fefefc3500b..61f2039404b6 100644 > --- a/tools/lib/bpf/libbpf_version.h > +++ b/tools/lib/bpf/libbpf_version.h > @@ -4,6 +4,6 @@ > #define __LIBBPF_VERSION_H > > #define LIBBPF_MAJOR_VERSION 0 > -#define LIBBPF_MINOR_VERSION 7 > +#define LIBBPF_MINOR_VERSION 8 > > #endif /* __LIBBPF_VERSION_H */ > -- > 2.34.1