[PATCH bpf-next v4 0/3] Normalize enum values in libbpf and bpftool
From: Hungyu Lin
Date: Fri Nov 06 2026 - 21:09:19 EST
This series fixes enum signedness in libbpf and bpftool data dumps
using the shared btf_enum_value() helper suggested by Alexei. It also
uses the helper for enum-backed map fields, where sign extension can
change the requested map_extra value.
Ordinary enums are interpreted according to kflag. When kflag is
clear, values are treated as unsigned, including BTF from producers
that did not record signedness.
The helper returns __u64, consistent with btf_enum64_value(). bpftool
casts to __s64 at signed numeric output. CO-RE relocation handling is
left for a separate change.
Changes in v4:
- Return __u64 from btf_enum_value(), as requested by Andrii.
- Rely on kflag for name matching; remove legacy comparisons and
bpftool's cached match and priority logic, as requested by Andrii.
- Remove the legacy and ambiguous narrow-alias test cases. Keep signed
controls, unsigned names, numeric output and width-boundary coverage.
- Add an open-only skeleton test for the map_extra parser.
- Drop four libbpf numeric-fallback cases that do not exercise this change.
- Rebase onto bpf-next commit 3e1821848412.
Tested on arm64 (Linux 6.12.68, GCC 13.3, Clang 18.1). libbpf and
bpftool build with -Werror. Without patches 1 and 2, 9 of the 18 new
subtests in btf_dump, bpftool_map_dump and map_extra fail. With the
series, all 18 pass; the 23 existing subtests pass in both cases.
v3: https://lore.kernel.org/bpf/20261101103221.51534-1-dennylin0707@xxxxxxxxx/
Thanks,
Hungyu
Hungyu Lin (3):
libbpf: Normalize enum values according to signedness
bpftool: Preserve unsigned enum values in data dumps
selftests/bpf: Cover enum signedness in data dumps and map fields
tools/bpf/bpftool/btf_dumper.c | 23 ++-
tools/lib/bpf/btf.h | 6 +
tools/lib/bpf/btf_dump.c | 2 +-
tools/lib/bpf/libbpf.c | 2 +-
.../bpf/prog_tests/bpftool_map_dump.c | 162 ++++++++++++++++++
.../selftests/bpf/prog_tests/btf_dump.c | 77 +++++++++
.../selftests/bpf/prog_tests/map_extra.c | 19 ++
.../selftests/bpf/progs/test_map_extra.c | 12 ++
8 files changed, 293 insertions(+), 10 deletions(-)
create mode 100644 tools/testing/selftests/bpf/prog_tests/map_extra.c
create mode 100644 tools/testing/selftests/bpf/progs/test_map_extra.c
base-commit: 3e18218484126afb9da722080659c038cb2256ab
--
2.43.0