This is a follow-up to the following discussion: https://lore.kernel.org/bpf/20240503111836.25275-1-jose.marchesi@xxxxxxxxxx/ As suggested by Andrii, this series adds several API functions to allow more flexibility with btf dump: - a function to add a type and all its dependencies to the emit queue; - functions to provide access to the emit queue owned by btf_dump object; - a function to print a given type (skipping any dependencies). This should allow filtering printed types and also adding attributes / pre-processor statements to specific types. There are several ways to add such API: 1. The simplest in terms of code changes is to refactor btf_dump_emit_type() to push types and forward declarations to the emit queue, instead of printing those directly; 2. More intrusive: refactor btf_dump_emit_type() and btf_dump_order_type() to avoid doing topological sorting twice and put forward declarations to the emit queue at once. This series opts for (2) as it seems to simplify library code a bit. For the sake of discussion, source code for option (1) as available at: https://github.com/eddyz87/bpf/tree/libbpf-sort-for-dump-api-simple Also, this series opts for the following new API function: int btf_dump__dump_one_type(struct btf_dump *d, __u32 id, bool fwd); As adding _opts variant of btf_dump__dump_type seems a bit clumsy: struct btf_dump_opts { size_t sz; bool fwd; bool skip_dependencies; bool skip_last_semi; }; int btf_dump__dump_type_opts(struct btf_dump *d, __u32 id, struct btf_dump_opts *opts); but maybe community would prefer the later variant. Eduard Zingerman (3): libbpf: put forward declarations to btf_dump->emit_queue libbpf: API to access btf_dump emit queue and print single type selftests/bpf: tests for btf_dump emit queue API tools/lib/bpf/btf.h | 33 ++ tools/lib/bpf/btf_dump.c | 363 ++++++++---------- tools/lib/bpf/libbpf.map | 4 + .../selftests/bpf/prog_tests/btf_dump.c | 86 +++++ 4 files changed, 289 insertions(+), 197 deletions(-) -- 2.34.1