Message ID | c298c45f77ba2fc12fb54da5ea73b5a4dfbfe763.1646188795.git.delyank@fb.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | BPF |
Headers | show |
Series | Subskeleton support for BPF libraries | expand |
On Tue, Mar 1, 2022 at 6:49 PM Delyan Kratunov <delyank@fb.com> 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@fb.com> > --- > 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
On Wed, 2022-03-02 at 17:13 -0800, Andrii Nakryiko wrote: > 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. That special handling did not do the right thing when I first tried it but I'll poke at it, if that's the preferred approach! Thanks, Delyan
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; +} + 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 */
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@fb.com> --- 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(-)