This patch set switches pahole to use libbpf-provided BTF loading and encoding APIs. This reduces pahole's own BTF encoding code, speeds up the process, reduces amount of RAM needed for DWARF-to-BTF conversion. Also, pahole finally gets support to generating BTF for cross-compiled ELF binaries with different endianness (patch #11). Additionally, patch #6 fixes previously missed problem with invalid array index type generation. Patches #7-10 are speeding up DWARF-to-BTF convertion/dedup pretty significantly, saving overall about 9 seconds out of current 27 or so. Patch #8 revamps how per-CPU BTF variables are emitted, eliminating repeated and expensive looping over ELF symbols table. Patch #10 admittedly has some hacky parts to satisfy CTF use case, but its speed ups are greatest. So I'll understand if it gets dropped, but it would be a pity. More details could be found in respective patches. Andrii Nakryiko (11): libbpf: update to latest libbpf version btf_encoder: detect BTF encoding errors and exit dwarves: expose and maintain active debug info loader operations btf_loader: use libbpf to load BTF btf_encoder: use libbpf APIs to encode BTF type info btf_encoder: fix emitting __ARRAY_SIZE_TYPE__ as index range type btf_encoder: discard CUs after BTF encoding btf_encoder: revamp how per-CPU variables are encoded dwarf_loader: increase the size of lookup hash map strings: use BTF's string APIs for strings management btf_encoder: support cross-compiled ELF binaries with different endianness btf_encoder.c | 361 +++++++++++++++------------ btf_loader.c | 244 +++++++----------- ctf_encoder.c | 2 +- dwarf_loader.c | 2 +- dwarves.c | 8 + lib/bpf | 2 +- libbtf.c | 661 +++++++++++++++++++++---------------------------- libbtf.h | 41 ++- libctf.c | 14 +- libctf.h | 4 +- pahole.c | 9 +- strings.c | 91 +++---- strings.h | 32 +-- 13 files changed, 653 insertions(+), 818 deletions(-) -- 2.24.1