diff options
author | Andrii Nakryiko <andriin@fb.com> | 2019-05-24 14:59:03 -0400 |
---|---|---|
committer | Alexei Starovoitov <ast@kernel.org> | 2019-05-24 17:05:58 -0400 |
commit | 351131b51c7a27daf0fbdce80b619b8d130374c6 (patch) | |
tree | a6dc197b7f4fa83f8b8b83b6c19460a79a0feea4 /tools/lib/bpf/btf.h | |
parent | 2fc3fc0bcdcc5429947d1e5ed8f6f0a77ba80997 (diff) |
libbpf: add btf_dump API for BTF-to-C conversion
BTF contains enough type information to allow generating valid
compilable C header w/ correct layout of structs/unions and all the
typedef/enum definitions. This patch adds a new "object" - btf_dump to
facilitate dumping BTF as valid C. btf_dump__dump_type() is the main API
which takes care of dumping out (through user-provided printf-like
callback function) C definitions for given type ID and it's required
dependencies. This allows for not just dumping out entirety of BTF types,
but also selective filtering based on user-provided criterias w/ minimal
set of dependent types.
Signed-off-by: Andrii Nakryiko <andriin@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Diffstat (limited to 'tools/lib/bpf/btf.h')
-rw-r--r-- | tools/lib/bpf/btf.h | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/tools/lib/bpf/btf.h b/tools/lib/bpf/btf.h index bded210df9e8..ba4ffa831aa4 100644 --- a/tools/lib/bpf/btf.h +++ b/tools/lib/bpf/btf.h | |||
@@ -4,6 +4,7 @@ | |||
4 | #ifndef __LIBBPF_BTF_H | 4 | #ifndef __LIBBPF_BTF_H |
5 | #define __LIBBPF_BTF_H | 5 | #define __LIBBPF_BTF_H |
6 | 6 | ||
7 | #include <stdarg.h> | ||
7 | #include <linux/types.h> | 8 | #include <linux/types.h> |
8 | 9 | ||
9 | #ifdef __cplusplus | 10 | #ifdef __cplusplus |
@@ -102,6 +103,22 @@ struct btf_dedup_opts { | |||
102 | LIBBPF_API int btf__dedup(struct btf *btf, struct btf_ext *btf_ext, | 103 | LIBBPF_API int btf__dedup(struct btf *btf, struct btf_ext *btf_ext, |
103 | const struct btf_dedup_opts *opts); | 104 | const struct btf_dedup_opts *opts); |
104 | 105 | ||
106 | struct btf_dump; | ||
107 | |||
108 | struct btf_dump_opts { | ||
109 | void *ctx; | ||
110 | }; | ||
111 | |||
112 | typedef void (*btf_dump_printf_fn_t)(void *ctx, const char *fmt, va_list args); | ||
113 | |||
114 | LIBBPF_API struct btf_dump *btf_dump__new(const struct btf *btf, | ||
115 | const struct btf_ext *btf_ext, | ||
116 | const struct btf_dump_opts *opts, | ||
117 | btf_dump_printf_fn_t printf_fn); | ||
118 | LIBBPF_API void btf_dump__free(struct btf_dump *d); | ||
119 | |||
120 | LIBBPF_API int btf_dump__dump_type(struct btf_dump *d, __u32 id); | ||
121 | |||
105 | #ifdef __cplusplus | 122 | #ifdef __cplusplus |
106 | } /* extern "C" */ | 123 | } /* extern "C" */ |
107 | #endif | 124 | #endif |