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 #8). Additionally, patch #3 fixes previously missed problem with invalid array index type generation. Patches #4-7 are speeding up DWARF-to-BTF convertion/dedup pretty significantly, saving overall about 9 seconds out of current 27 or so. Patch #5 revamps how per-CPU BTF variables are emitted, eliminating repeated and expensive looping over ELF symbols table. The critical detail that took few hours of investigation is that when DW_AT_variable has DW_AT_specification, variable address (to correlate with symbol's address) has to be taken before specification is followed. More details could be found in respective patches. v1->v2: - rebase on latest dwarves master and fix var->spec's address problem. Cc: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx> Andrii Nakryiko (8): 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 | 370 +++++++++++++++------------ btf_loader.c | 244 +++++++----------- ctf_encoder.c | 2 +- dwarf_loader.c | 2 +- libbtf.c | 661 +++++++++++++++++++++---------------------------- libbtf.h | 41 ++- libctf.c | 14 +- libctf.h | 4 +- pahole.c | 2 +- strings.c | 91 +++---- strings.h | 32 +-- 11 files changed, 645 insertions(+), 818 deletions(-) -- 2.24.1