Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d5caef5b authored by Andrii Nakryiko's avatar Andrii Nakryiko Committed by Daniel Borkmann
Browse files

btf: add BTF types deduplication algorithm

This patch implements BTF types deduplication algorithm. It allows to
greatly compress typical output of pahole's DWARF-to-BTF conversion or
LLVM's compilation output by detecting and collapsing identical types emitted in
isolation per compilation unit. Algorithm also resolves struct/union forward
declarations into concrete BTF types representing referenced struct/union. If
undesired, this resolution can be disabled through specifying corresponding options.

Algorithm itself and its application to Linux kernel's BTF types is
described in details at:
https://facebookmicrosites.github.io/bpf/blog/2018/11/14/btf-enhancement.html



Signed-off-by: default avatarAndrii Nakryiko <andriin@fb.com>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
parent 69eaab04
Loading
Loading
Loading
Loading
+1741 −0

File changed.

Preview size limit exceeded, changes collapsed.

+7 −0
Original line number Diff line number Diff line
@@ -84,6 +84,13 @@ LIBBPF_API int btf_ext__reloc_line_info(const struct btf *btf,
LIBBPF_API __u32 btf_ext__func_info_rec_size(const struct btf_ext *btf_ext);
LIBBPF_API __u32 btf_ext__line_info_rec_size(const struct btf_ext *btf_ext);

struct btf_dedup_opts {
	bool dont_resolve_fwds;
};

LIBBPF_API int btf__dedup(struct btf *btf, struct btf_ext *btf_ext,
			  const struct btf_dedup_opts *opts);

#ifdef __cplusplus
} /* extern "C" */
#endif
+1 −0
Original line number Diff line number Diff line
@@ -133,6 +133,7 @@ LIBBPF_0.0.2 {
		bpf_map_lookup_elem_flags;
		bpf_object__find_map_fd_by_name;
		bpf_get_link_xdp_id;
		btf__dedup;
		btf__get_map_kv_tids;
		btf_ext__free;
		btf_ext__func_info_rec_size;