[PATCH v3 0/2] libbpf: fix BTF dedup to support recursive typedef

Paul Houssel posted 2 patches 2 months, 3 weeks ago
There is a newer version of this series
tools/lib/bpf/btf.c                          | 73 +++++++++++++++-----
tools/testing/selftests/bpf/prog_tests/btf.c | 65 +++++++++++++++++
2 files changed, 121 insertions(+), 17 deletions(-)
[PATCH v3 0/2] libbpf: fix BTF dedup to support recursive typedef
Posted by Paul Houssel 2 months, 3 weeks ago
Pahole fails to encode BTF for some Go projects (e.g. Kubernetes and
Podman) due to recursive type definitions that create reference loops
not representable in C. These recursive typedefs trigger a failure in
the BTF deduplication algorithm.

This patch extends btf_dedup_struct_types() to properly handle potential
recursion for BTF_KIND_TYPEDEF, similar to how recursion is already
handled for BTF_KIND_STRUCT. This allows pahole to successfully
generate BTF for Go binaries using recursive types without impacting
existing C-based workflows.

Changes in v3:
  1. Patch 1: Adjusted the comment of btf_dedup_ref_type() to refer to
  typedef as well.
  2. Patch 2: Update of the "dedup: recursive typedef" test to include a
  duplicated version of the types to make sure deduplication still happens
  in this case.

Changes in v2:
  1. Patch 1: Refactored code to prevent copying existing logic. Instead of
  adding a new function we modify the existing btf_dedup_struct_type()
  function to handle the BTF_KIND_TYPEDEF case. Calls to btf_hash_struct()
  and btf_shallow_equal_struct() are replaced with calls to functions that
  select btf_hash_struct() / btf_hash_typedef() based on the type.
  2. Patch 2: Added tests

v2: https://lore.kernel.org/lkml/cover.1762956564.git.paul.houssel@orange.com/

v1: https://lore.kernel.org/lkml/20251107153408.159342-1-paulhoussel2@gmail.com/

Paul Houssel (2):
  libbpf: fix BTF dedup to support recursive typedef definitions
  selftests/bpf: add BTF dedup tests for recursive typedef definitions

 tools/lib/bpf/btf.c                          | 73 +++++++++++++++-----
 tools/testing/selftests/bpf/prog_tests/btf.c | 65 +++++++++++++++++
 2 files changed, 121 insertions(+), 17 deletions(-)

-- 
2.51.0