libbpf: Add btf__new_empty() to create an empty BTF object
Add an ability to create an empty BTF object from scratch. This is going to be used by pahole for BTF encoding. And also by selftest for convenient creation of BTF objects. Signed-off-by: Andrii Nakryiko <andriin@fb.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Acked-by: John Fastabend <john.fastabend@gmail.com> Link: https://lore.kernel.org/bpf/20200926011357.2366158-7-andriin@fb.com
This commit is contained in:

committed by
Alexei Starovoitov

parent
919d2b1dbb
commit
a871b04310
@@ -565,6 +565,36 @@ void btf__free(struct btf *btf)
|
||||
free(btf);
|
||||
}
|
||||
|
||||
struct btf *btf__new_empty(void)
|
||||
{
|
||||
struct btf *btf;
|
||||
|
||||
btf = calloc(1, sizeof(*btf));
|
||||
if (!btf)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
btf->fd = -1;
|
||||
btf->ptr_sz = sizeof(void *);
|
||||
|
||||
/* +1 for empty string at offset 0 */
|
||||
btf->raw_size = sizeof(struct btf_header) + 1;
|
||||
btf->raw_data = calloc(1, btf->raw_size);
|
||||
if (!btf->raw_data) {
|
||||
free(btf);
|
||||
return ERR_PTR(-ENOMEM);
|
||||
}
|
||||
|
||||
btf->hdr = btf->raw_data;
|
||||
btf->hdr->hdr_len = sizeof(struct btf_header);
|
||||
btf->hdr->magic = BTF_MAGIC;
|
||||
btf->hdr->version = BTF_VERSION;
|
||||
|
||||
btf->types_data = btf->raw_data + btf->hdr->hdr_len;
|
||||
btf->strs_data = btf->raw_data + btf->hdr->hdr_len;
|
||||
btf->hdr->str_len = 1; /* empty string at offset 0 */
|
||||
|
||||
return btf;
|
||||
}
|
||||
|
||||
struct btf *btf__new(const void *data, __u32 size)
|
||||
{
|
||||
struct btf *btf;
|
||||
|
Reference in New Issue
Block a user