diff mbox series

[bpf-next,2/2] libbpf: Introduce bpf_object__btf

Message ID e012e835cf644b7d444dcdf60a97b1256075993a.1550185216.git.rdna@fb.com
State Accepted
Delegated to: BPF Maintainers
Headers show
Series libbpf: Add new interfaces | expand

Commit Message

Andrey Ignatov Feb. 14, 2019, 11:01 p.m. UTC
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(+)

Comments

Yonghong Song Feb. 15, 2019, 1:53 a.m. UTC | #1
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>
Daniel Borkmann Feb. 15, 2019, 2:23 p.m. UTC | #2
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 mbox series

Patch

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;