bpftool: Don't drop a type in the sorted C dump

The C dump sorts types by default, so that generated headers are
diffable. The sorted dump emits one type fewer than the unsorted dump
of the same BTF.

dump_btf_c() starts its loop at index 1 to skip the void type at BTF
type ID 0. That holds for the unsorted dump, where the array index is
the type ID, but not after qsort(): position 0 is then the lowest
ranked type, and btf_type_rank() ranks an anonymous enum 0 while void
takes the default rank of 10. So the enum is skipped, and void is
emitted instead as a no-op.

Fixes: 94133cf24b ("bpftool: Introduce btf c dump sorting")
Acked-by: Eduard Zingerman <eddyz87@gmail.com>
Signed-off-by: Ihor Solodrai <ihor.solodrai@linux.dev>
Link: https://lore.kernel.org/r/20260828215207.3105313-7-ihor.solodrai@linux.dev
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
Ihor Solodrai 2026-08-28 14:52:07 -07:00 committed by Alexei Starovoitov
parent 438147f7f6
commit ff01f88a91
2 changed files with 9 additions and 1 deletions

View File

@ -805,9 +805,13 @@ static int dump_btf_c(const struct btf *btf,
if (sort_dump)
datums = sort_btf_c(btf);
for (i = 1; i < cnt; i++) {
for (i = 0; i < cnt; i++) {
int idx = datums ? datums[i].index : i;
/* type ID 0 is void, skip it */
if (idx == 0)
continue;
err = btf_dump__dump_type(d, idx);
if (err)
goto done;

View File

@ -21,6 +21,10 @@
#endif
#endif
enum {
E0 = 1,
};
struct holey {
int c;
long: 32;