Message ID | e012e835cf644b7d444dcdf60a97b1256075993a.1550185216.git.rdna@fb.com |
---|---|
State | Accepted |
Delegated to: | BPF Maintainers |
Headers | show |
Series | libbpf: Add new interfaces | expand |
On 2/14/19 3:01 PM, Andrey Ignatov wrote: > Add new accessor for bpf_object to get opaque struct btf * from it. > > struct btf * is needed for all operations with BTF and it's present in > bpf_object. The only thing missing is a way to get it. > > Example use-case is to get BTF key_type_id an value_type_id for a map in nit: an => and > bpf_object. It can be done with btf__get_map_kv_tids() but that function > requires struct btf *. > > Similar API can be added for struct btf_ext but no use-case for it yet. > > Signed-off-by: Andrey Ignatov <rdna@fb.com> Acked-by: Yonghong Song <yhs@fb.com>
On 02/15/2019 02:53 AM, Yonghong Song wrote: > On 2/14/19 3:01 PM, Andrey Ignatov wrote: >> Add new accessor for bpf_object to get opaque struct btf * from it. >> >> struct btf * is needed for all operations with BTF and it's present in >> bpf_object. The only thing missing is a way to get it. >> >> Example use-case is to get BTF key_type_id an value_type_id for a map in > nit: an => and >> bpf_object. It can be done with btf__get_map_kv_tids() but that function >> requires struct btf *. Series applied and fixed above typo, thanks!
diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index 690e7b079202..a77a327c2bb8 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -2332,6 +2332,11 @@ unsigned int bpf_object__kversion(struct bpf_object *obj) return obj ? obj->kern_version : 0; } +struct btf *bpf_object__btf(struct bpf_object *obj) +{ + return obj ? obj->btf : NULL; +} + int bpf_object__btf_fd(const struct bpf_object *obj) { return obj->btf ? btf__fd(obj->btf) : -1; diff --git a/tools/lib/bpf/libbpf.h b/tools/lib/bpf/libbpf.h index 987fd92661d6..6c0168f8bba5 100644 --- a/tools/lib/bpf/libbpf.h +++ b/tools/lib/bpf/libbpf.h @@ -89,6 +89,9 @@ LIBBPF_API int bpf_object__load(struct bpf_object *obj); LIBBPF_API int bpf_object__unload(struct bpf_object *obj); LIBBPF_API const char *bpf_object__name(struct bpf_object *obj); LIBBPF_API unsigned int bpf_object__kversion(struct bpf_object *obj); + +struct btf; +LIBBPF_API struct btf *bpf_object__btf(struct bpf_object *obj); LIBBPF_API int bpf_object__btf_fd(const struct bpf_object *obj); LIBBPF_API struct bpf_program * diff --git a/tools/lib/bpf/libbpf.map b/tools/lib/bpf/libbpf.map index 16f342c3d4bc..99dfa710c818 100644 --- a/tools/lib/bpf/libbpf.map +++ b/tools/lib/bpf/libbpf.map @@ -132,6 +132,7 @@ LIBBPF_0.0.2 { bpf_probe_prog_type; bpf_map__resize; bpf_map_lookup_elem_flags; + bpf_object__btf; bpf_object__find_map_fd_by_name; bpf_get_link_xdp_id; btf__dedup;
Add new accessor for bpf_object to get opaque struct btf * from it. struct btf * is needed for all operations with BTF and it's present in bpf_object. The only thing missing is a way to get it. Example use-case is to get BTF key_type_id an value_type_id for a map in bpf_object. It can be done with btf__get_map_kv_tids() but that function requires struct btf *. Similar API can be added for struct btf_ext but no use-case for it yet. Signed-off-by: Andrey Ignatov <rdna@fb.com> --- tools/lib/bpf/libbpf.c | 5 +++++ tools/lib/bpf/libbpf.h | 3 +++ tools/lib/bpf/libbpf.map | 1 + 3 files changed, 9 insertions(+)