[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <9c81e3e3-069c-3525-19b6-fd58b7be976c@fb.com>
Date: Tue, 5 Feb 2019 22:01:47 +0000
From: Yonghong Song <yhs@...com>
To: Andrii Nakryiko <andriin@...com>, Song Liu <songliubraving@...com>,
Alexei Starovoitov <ast@...com>, Martin Lau <kafai@...com>,
"netdev@...r.kernel.org" <netdev@...r.kernel.org>,
"daniel@...earbox.net" <daniel@...earbox.net>,
"andrii.nakryiko@...il.com" <andrii.nakryiko@...il.com>
Subject: Re: [PATCH bpf-next 2/2] btf: expose API to work with raw btf data
On 2/5/19 11:48 AM, Andrii Nakryiko wrote:
> This patch exposes two new APIs btf__get_raw_data_size() and
> btf__get_raw_data() that allows to get a copy of raw BTF data out of
> struct btf. This is useful for external programs that need to manipulate
> raw data, e.g., pahole using btf__dedup() to deduplicate BTF type info
> and then writing it back to file.
>
> Signed-off-by: Andrii Nakryiko <andriin@...com>
> Acked-by: Song Liu <songliubraving@...com>
Acked-by: Yonghong Song <yhs@...com>
> ---
> tools/lib/bpf/btf.c | 10 ++++++++++
> tools/lib/bpf/btf.h | 2 ++
> tools/lib/bpf/libbpf.map | 2 ++
> 3 files changed, 14 insertions(+)
>
> diff --git a/tools/lib/bpf/btf.c b/tools/lib/bpf/btf.c
> index 065d51fa63e5..6491d440c9a7 100644
> --- a/tools/lib/bpf/btf.c
> +++ b/tools/lib/bpf/btf.c
> @@ -437,6 +437,16 @@ int btf__fd(const struct btf *btf)
> return btf->fd;
> }
>
> +__u32 btf__get_raw_data_size(const struct btf *btf)
> +{
> + return btf->data_size;
> +}
> +
> +void btf__get_raw_data(const struct btf *btf, char *data)
> +{
> + memcpy(data, btf->data, btf->data_size);
> +}
> +
> void btf__get_strings(const struct btf *btf, const char **strings,
> __u32 *str_len)
> {
> diff --git a/tools/lib/bpf/btf.h b/tools/lib/bpf/btf.h
> index e8410887f93a..d46f680b9416 100644
> --- a/tools/lib/bpf/btf.h
> +++ b/tools/lib/bpf/btf.h
> @@ -66,6 +66,8 @@ LIBBPF_API const struct btf_type *btf__type_by_id(const struct btf *btf,
> LIBBPF_API __s64 btf__resolve_size(const struct btf *btf, __u32 type_id);
> LIBBPF_API int btf__resolve_type(const struct btf *btf, __u32 type_id);
> LIBBPF_API int btf__fd(const struct btf *btf);
> +LIBBPF_API __u32 btf__get_raw_data_size(const struct btf *btf);
> +LIBBPF_API void btf__get_raw_data(const struct btf *btf, char *data);
> LIBBPF_API void btf__get_strings(const struct btf *btf, const char **strings,
> __u32 *str_len);
> LIBBPF_API const char *btf__name_by_offset(const struct btf *btf, __u32 offset);
> diff --git a/tools/lib/bpf/libbpf.map b/tools/lib/bpf/libbpf.map
> index ffa1fe044f6a..873a26cd714d 100644
> --- a/tools/lib/bpf/libbpf.map
> +++ b/tools/lib/bpf/libbpf.map
> @@ -137,6 +137,8 @@ LIBBPF_0.0.2 {
> btf__load;
> btf__get_map_kv_tids;
> btf__get_nr_types;
> + btf__get_raw_data;
> + btf__get_raw_data_size;
> btf__get_strings;
> btf_ext__free;
> btf_ext__func_info_rec_size;
>
Powered by blists - more mailing lists