]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
tools lib bpf: Retrive bpf_map through offset of bpf_map_def
authorWang Nan <wangnan0@huawei.com>
Sat, 26 Nov 2016 07:03:27 +0000 (07:03 +0000)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 29 Nov 2016 15:10:19 +0000 (12:10 -0300)
Add a new API to libbpf, caller is able to get bpf_map through the
offset of bpf_map_def to 'maps' section.

The API will be used to help jitted perf hook code find fd of a map.

Signed-off-by: Wang Nan <wangnan0@huawei.com>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Cc: He Kuang <hekuang@huawei.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Joe Stringer <joe@ovn.org>
Cc: Zefan Li <lizefan@huawei.com>
Cc: pi3orama@163.com
Link: http://lkml.kernel.org/r/20161126070354.141764-4-wangnan0@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/lib/bpf/libbpf.c
tools/lib/bpf/libbpf.h

index 866d5cdeffc74d42dce44de8c51c0aab6dbc854c..2e974593f3e8dc2b14b47d61b9354b31f7c8c0c5 100644 (file)
@@ -1524,3 +1524,15 @@ bpf_object__find_map_by_name(struct bpf_object *obj, const char *name)
        }
        return NULL;
 }
+
+struct bpf_map *
+bpf_object__find_map_by_offset(struct bpf_object *obj, size_t offset)
+{
+       int i;
+
+       for (i = 0; i < obj->nr_maps; i++) {
+               if (obj->maps[i].offset == offset)
+                       return &obj->maps[i];
+       }
+       return ERR_PTR(-ENOENT);
+}
index 0c0b0127e03ed3c7bd1d4a4ae43ed72d65422fef..a5a8b86a06fe0794623a3f9ac3fb3bf719553ba9 100644 (file)
@@ -24,6 +24,7 @@
 #include <stdio.h>
 #include <stdbool.h>
 #include <linux/err.h>
+#include <sys/types.h>  // for size_t
 
 enum libbpf_errno {
        __LIBBPF_ERRNO__START = 4000,
@@ -200,6 +201,13 @@ struct bpf_map;
 struct bpf_map *
 bpf_object__find_map_by_name(struct bpf_object *obj, const char *name);
 
+/*
+ * Get bpf_map through the offset of corresponding struct bpf_map_def
+ * in the bpf object file.
+ */
+struct bpf_map *
+bpf_object__find_map_by_offset(struct bpf_object *obj, size_t offset);
+
 struct bpf_map *
 bpf_map__next(struct bpf_map *map, struct bpf_object *obj);
 #define bpf_map__for_each(pos, obj)            \