btf: separate btf creation and loading
authorAndrii Nakryiko <andriin@fb.com>
Fri, 8 Feb 2019 19:19:36 +0000 (11:19 -0800)
committerAlexei Starovoitov <ast@kernel.org>
Fri, 8 Feb 2019 20:04:13 +0000 (12:04 -0800)
commitd29d87f7e61226c339d1212beff6b82f653acd67
treea7b9c48234295bf780fa7476bf476efe29690b87
parenta4021a3579c52d5a5131820aeb94f531a7b082a7
btf: separate btf creation and loading

This change splits out previous btf__new functionality of constructing
struct btf and loading it into kernel into two:
- btf__new() just creates and initializes struct btf
- btf__load() attempts to load existing struct btf into kernel

btf__free will still close BTF fd, if it was ever loaded successfully
into kernel.

This change allows users of libbpf to manipulate BTF using its API,
without the need to unnecessarily load it into kernel.

One of the intended use cases is pahole, which will do DWARF to BTF
conversion and then use libbpf to do type deduplication, while then
handling ELF sections overwriting and other concerns on its own.

Fixes: 2d3feca8c44f ("bpf: btf: print map dump and lookup with btf info")
Signed-off-by: Andrii Nakryiko <andriin@fb.com>
Acked-by: Song Liu <songliubraving@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
tools/lib/bpf/btf.c
tools/lib/bpf/btf.h
tools/lib/bpf/libbpf.c
tools/lib/bpf/libbpf.map