Re: [PATCHES 00/31] pahole: Bug fixes and small improvements

Alan Maguire <[email protected]>
Newsgroups org.kernel.vger.bpf,org.kernel.vger.dwarves
Message-ID <[email protected]>
On 29/07/2026 20:07, Arnaldo Carvalho de Melo wrote:
> Hi,
> 
> 	Here are 31 patches fixing pre-existing bugs found via coverage
> analysis, AI-assisted review (sashiko), and manual testing. No new
> features.
> 
> Critical kernel build path fix:
>   Multi-dimensional arrays (e.g. int[2][3]) were incorrectly collapsed
>   into flat arrays (int[6]) in BTF encoding. The encoder wrote only
>   the total element count; the loader read only the first dimension.
>   Both now preserve the full dimension chain using chained
>   BTF_KIND_ARRAY nodes, matching bpftool and kernel verifier format.
> 
>   Before: pahole -F btf showed int a[3][4] as int a[12]
>   After:  int a[2][3][4] encodes as three chained BTF_KIND_ARRAY nodes
>           and round-trips correctly
> 
> Bug fixes found via coverage analysis:
>   - Fix interior pointer free and missing NULL check in btf_encoder
>   - Fix missing list head initialization in type__clone_members
>   - Fix instance memory leak on 14 early returns in
>     prototype__stdio_fprintf_value
>   - Fix error path resource leaks in ctf_loader and libctf
>   - Fix early cleanup crashes in btf_encoder__new/delete
>   - Fix dangling stack pointer: allocate type_dcu via dwarf_cu__new
>   - Fix annotation failure leaks in variable and typedef creation
>   - Fix --errno typo that decrements instead of negating
>   - Fix heap buffer overflow in languages__parse realloc
>   - Fix parse_btf_features("all") being a silent no-op
>   - Fix --fixup_silly_bitfields condition check
>   - Fix data race in tag__init() decl_file string cache
>   - Fix variable shadowing in __cus__find_struct_by_name
>   - Fix phantom holes when class__find_holes ran before byte sizes
>     were cached (eliminates 36 false "BRAIN FART ALERT" on Firefox)
>   - Add elf_strptr NULL checks and fix kfunc bounds in btf_encoder
>   - Use btf_encoder__tag_type() for all type ID computations
> 
> Other improvements:
>   - Fix -Wsign-compare warnings across the codebase
>   - cmake: Update minimum required version from 3.5 to 3.10
>   - Skip inline expansions during BTF encoding (performance)
>   - Use fseek for seekable files in --prettify and --seek_bytes
>   - Guard pipe_seek() against negative offsets
>   - Fall back to GNU objcopy when llvm-objcopy is not available
>   - Add exec_objcopy() shell-injection-safe helper
>   - Skip libdw__lock when elfutils >= 0.194 is built thread-safe
>   - Replace stale FIXME/XXX comments with explanations
>   - Remove 11 dead functions found via coverage analysis
>   - Mark file-local functions as static
> 
> There are several other series that will result in way more coverage
> and regression tests and will add support for more rust DWARF tags,
> DWARF partial units that will allow us to build the kernel with most
> of the CONFIG_DEBUG_ DWARF options (DWARF5, etc), only split DWARF
> (skeletons) is left for after these series are applied.
> 
> The end result for tests/tests is this, that runs in parallel and mimics
> the 'perf test' output:
> 
> ⬢ [acme@toolbx pahole]$ ./build-and-test-cmd.sh
> <SNIP>
> Testing pahole version:
>   v1.31-215-gcd4504f549af6fe7
> 
> Verbose mode enabled - showing diagnostic information:
>   Architecture: x86_64
>   CPUs: 32
>   Memory: 60.4 GB
>   Swap: 8.0 GB
>   Parallelism: unlimited (all tests run in parallel)
>     Tip: On low-memory systems, use -j to limit parallelism (e.g., -j 4 or -j 1)
>   Test artifacts: /tmp/pahole-tests/
>   Compiler: gcc (GCC) 16.1.1 20260515 (Red Hat 16.1.1-2)
>   libc: ldd (GNU libc) 2.43
>   bpftool: bpftool v7.6.0
>   VMLINUX: not set
>   PERF_BIN: not set
>   PERF_SRC_DIR: not set
> 
>   1: dwarves_emit.c: _Atomic type compile emission.                     : Ok
>   2: _Atomic type display and --skip_emitting_atomic_typedefs.          : Ok
>   3: Auxiliary tools: pglobal, prefcnt, dtagnames.                      : Ok
>   4: Bitfield layout and data member filtering.                         : Ok
>   5: dwarf_loader coverage: bitfields, templates, enums, inlines.       : Ok
>   6: Bitfield typedef recoding (tag__recode_dwarf_bitfield).            : Ok
>   7: DW_FORM_block byte order conversion.                               : Skip
>   8: BTF arena type tag encoding for kfuncs.                            : Ok
>   9: BTF multi-dimensional array encoding and round-trip.               : Ok
>  10: BTF bitfield encoding and loading round-trip.                      : Ok
>  11: BTF VAR and DATASEC encoding for global variables.                 : Ok
>  12: BTF deduplication of array types across CUs.                       : Ok
>  13: Distilled base BTF generation.                                     : Skip
>  14: BTF encoding options.                                              : Ok
>  15: BTF encoder coverage.                                              : Ok
>  16: BTF encoder comprehensive feature coverage.                        : Ok
>  17: BTF_KIND_FWD encoding and loading round-trip.                      : Ok
>  18: BTF encoding with invalid symbol names.                            : Ok
>  21: BTF FLOAT and ENUM64 type encoding.                                : Ok
>  22: Check BTF type tag order.                                          : Ok
>  23: BTF encoder verbose logging coverage.                              : Ok
>  24: BTF encoding into ELF via pahole -J (btf_encoder__write_elf).      : Ok
>  25: BTF true_signature: clang optimized aggregate parameters (2 structs: Ok
>  26: BTF true_signature: clang optimized aggregate parameters (2 structs: Ok
>  27: BTF true_signature: clang optimized with large union parameter     : Ok
>  28: BTF true_signature: clang optimized parameters (scalar)            : Ok
>  29: BTF true_signature: clang optimized with stack parameters (9 params: Ok
>  30: BTF true_signature: clang optimized with stack parameters (non-stat: Ok
>  31: Class name list from file.                                         : Ok
>  32: CLI display and filtering options.                                 : Ok
>  33: codiff struct comparison.                                          : Ok
>  34: codiff coverage: terse, functions, verbose, multi-CU.              : Ok
>  35: codiff member change coverage.                                     : Ok
>  36: codiff multi-CU: __cus__find_cu_by_name coverage.                  : Ok
>  37: codiff --terse (-t) type change reporting.                         : Ok
>  38: Compile emission pipeline.                                         : Ok
>  39: Compilable output and type filtering.                              : Ok
>  40: Recursive container search and verbose counts.                     : Ok
>  41: Type containment and pointer search.                               : Ok
>  42: C++ advanced DWARF tag coverage.                                   : Ok
>  43: C++ cleanup: delete_tags coverage for lexblock, parameter packs.   : Ok
>  44: C++ inheritance and namespace printing.                            : Ok
>  45: C++ value parameter pack and shadow definition disambiguation.     : Ok
>  46: C++ namespace and using-declaration display.                       : Ok
>  47: C++ variadic template parameter pack handling.                     : Ok
>  48: C++ template pretty printing round-trip.                           : Ok
>  49: C++ template template parameter pretty printing round-trip.        : Ok
>  51: Class name filtering.                                              : Ok
>  52: Default BTF on a system without BTF.                               : Ok
>  53: Display format options.                                            : Ok
>  54: dwarf_loader.c edge cases: bitfield recode, inlining, call sites.  : Ok
>  55: dwarves.c core API coverage.                                       : Ok
>  56: DWZ alternate debug file type resolution.                          : Ok
>  57: Legacy atomic_ base type emission via --compile (hand-crafted DWARF: Ok
>  58: Atomic typedef emission.                                           : Ok
>  59: dwarves_emit.c / dwarves_reorganize.c coverage.                    : Ok
>  60: DW_TAG_atomic_type member handling via --compile.                  : Ok
>  61: Type emission (--compile) and atomic typedefs.                     : Ok
>  62: Enumerator search.                                                 : Ok
>  63: Expand pointers option.                                            : Ok
>  64: Type expansion and anonymous struct options.                       : Ok
>  65: Flexible arrays accounting.                                        : Ok
>  66: dwarves_fprintf.c coverage: fn-ptr members, labels, C++ types.     : Ok
>  67: Validation of GCC optimized parameters in default BTF.             : Ok
>  68: Validation of BTF encoding of true_signatures.                     : Skip (no optimizations applied.)
>  69: Compare parallel vs merged CU loading for inter-CU type references.: Ok
>  70: Multi-file loading (cus__load_files).                              : Ok
>  71: Version output.                                                    : Ok
>  72: Struct packing and reorganization.                                 : Ok
>  73: pahole coverage: sort, word_size unions, prettify bitfields.       : Ok
>  74: Format coverage: count, skip, structs, hex, contains, first_obj_onl: Ok
>  75: Header, range and seek_bytes prettify paths.                       : Ok
>  76: pahole.c scattered option paths.                                   : Ok
>  77: pdwtags DWARF tag display.                                         : Ok
>  78: Check that pfunct can print btf_decl_tags read from BTF.           : Ok
>  79: pfunct --class and --expand_types.                                 : Ok
>  80: pfunct coverage: symtab, class, expand_types, compile.             : Ok
>  81: pfunct function statistics.                                        : Ok
>  82: pglobal basic: variables, functions, static exclusion.             : Ok
>  83: prefcnt.c: reference counting coverage.                            : Ok
>  84: prettify_bitfield                                                  : Ok
>  85: Pretty printing of files using DWARF type information.             : Ok
>  86: Prototype expression parsing and prettify.                         : Ok
>  87: Cacheline boundary display with large structs.                     : Ok
>  88: Sizes and holes display.                                           : Ok
>  89: Small files coverage: elf_symtab, gobuffer, dutil, pglobal.        : Ok
>  90: Sort with multi-CU deduplication.                                  : Ok
>  91: Sort output and separator.                                         : Ok
>  92: Statistics and filtering options.                                  : Ok
>  93: Typedef chain display.                                             : Ok
>  94: Word size LP resizing.                                             : Ok
>  95: Union word_size resize and packable hex.                           : Ok
>  96: Validation of BTF encoding of functions.                           : Ok
>  50: ctracer: struct method tracing generation.                         : Ok
>  20: Split BTF encoding (vmlinux base + kernel module).                 : Ok
>  19: BTF encoding with kernel vmlinux.                                  : Ok
>  98: Parallel reproducible DWARF Loading/Serial BTF encoding.           : Ok
>  97: BTF encoding on vmlinux.                                           : Ok
> Saved timing data to .test-times (98 tests)
> 
> ⬢ [acme@toolbx pahole]$
> 
> Cheers,
> 
> - Arnaldo

Series applied, thanks!

Alan
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.