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: Andrii Nakryiko <andriin@fb.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
This commit is contained in:
		
							parent
							
								
									69eaab04c6
								
							
						
					
					
						commit
						d5caef5b56
					
				
							
								
								
									
										1741
									
								
								tools/lib/bpf/btf.c
									
									
									
									
									
								
							
							
						
						
									
										1741
									
								
								tools/lib/bpf/btf.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -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 | ||||
|  | ||||
| @ -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; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user