Message ID | 20240516230443.3436233-1-eddyz87@gmail.com (mailing list archive) |
---|---|
Headers | show |
Series | API to access btf_dump emit queue and print single type | expand |
On Thu, 2024-05-16 at 16:04 -0700, Eduard Zingerman wrote: > This is a follow-up to the following discussion: > https://lore.kernel.org/bpf/20240503111836.25275-1-jose.marchesi@oracle.com/ > > 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). The series fails on the CI despite passing local testing, I'll submit v2 when ready. [...]
On Thu, 2024-05-16 at 17:02 -0700, Eduard Zingerman wrote: > On Thu, 2024-05-16 at 16:04 -0700, Eduard Zingerman wrote: > > This is a follow-up to the following discussion: > > https://lore.kernel.org/bpf/20240503111836.25275-1-jose.marchesi@oracle.com/ > > > > 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). > > The series fails on the CI despite passing local testing, > I'll submit v2 when ready. > > [...] The bug was caused by a logical error in typedefs handling. Do not mark typedef as ORDERED, always emit a forward declaration for it instead. Otherwise the following situation would be troublesome: typedef struct foo foo_alias; struct foo {}; struct root { foo_alias *a; <-- foo->a leads to forward declaration for 'foo', foo_alias b; if 'foo_alias' is marked ORDERED }; foo->b will not traverse to generate full declaration for 'foo'. The patch below fixes error. CI builds seem ok: https://github.com/kernel-patches/bpf/pull/7052 --- diff --git a/tools/lib/bpf/btf_dump.c b/tools/lib/bpf/btf_dump.c index cb233f891582..7e845ad9ca9e 100644 --- a/tools/lib/bpf/btf_dump.c +++ b/tools/lib/bpf/btf_dump.c @@ -653,12 +653,9 @@ static int btf_dump_order_type(struct btf_dump *d, __u32 id, __u32 cont_id, bool if (err < 0) return err; - /* typedef is always a named definition */ - err = btf_dump_add_emit_queue_id(d, id); + err = btf_dump_add_emit_queue_fwd(d, id); if (err) return err; - - d->type_states[id].order_state = ORDERED; return 0; } case BTF_KIND_VOLATILE: