Re: [PAHOLE v4 1/3] dwarf_loader: Extract die__add_btf_type_tag() helper [NFC]
"Emil Tsalapatis" <[email protected]> Wed, 03 Jun 2026 16:37:50 -0400
| Newsgroups | org.kernel.vger.dwarves,org.kernel.vger.bpf |
|---|---|
| Message-ID | <[email protected]> |
On Tue Jun 2, 2026 at 3:55 PM EDT, Vineet Gupta wrote: > NFC change preparing for DW_TAG_GNU_annotation support. > Extract the btf_type_tag annotation creation logic into helper > die__add_btf_type_tag(). > > Signed-off-by: Vineet Gupta <[email protected]> Reviewed-by: Emil Tsalapatis <[email protected]> > --- > Changes since v3 [3] > - Fix comment to kernel style [Arnaldo] > > Changes since v2 [2] > - die__add_btf_type_tag() returns pointer not error code [Alan] > > Changes since v1 [1] > - NFC reinstate some original comments > > [3] https://lore.kernel.org/bpf/[email protected]/ > [2] https://lore.kernel.org/bpf/[email protected]/ > [1] https://lore.kernel.org/bpf/[email protected]/ > --- > dwarf_loader.c | 58 +++++++++++++++++++++++++++++--------------------- > 1 file changed, 34 insertions(+), 24 deletions(-) > > diff --git a/dwarf_loader.c b/dwarf_loader.c > index 16fb7becffee..42a0f3f74ce3 100644 > --- a/dwarf_loader.c > +++ b/dwarf_loader.c > @@ -1600,14 +1600,44 @@ static struct btf_type_tag_type *die__create_new_btf_type_tag_type(Dwarf_Die *di > return tag; > } > > +static struct btf_type_tag_ptr_type *die__add_btf_type_tag(struct btf_type_tag_ptr_type *tag, > + Dwarf_Die *die, Dwarf_Die *adie, > + struct cu *cu, struct conf_load *conf) > +{ > + struct btf_type_tag_type *annot; > + uint32_t id; > + > + if (tag == NULL) { > + tag = die__create_new_btf_type_tag_ptr_type(die, cu); > + if (!tag) > + return NULL; > + } > + > + annot = die__create_new_btf_type_tag_type(adie, cu, conf); > + if (annot == NULL) > + return NULL; > + > + if (cu__table_add_tag(cu, &annot->tag, &id) < 0) > + return NULL; > + > + struct dwarf_tag *dtag = tag__dwarf(&annot->tag); > + dtag->small_id = id; > + cu__hash(cu, &annot->tag); > + > + /* > + * Prepends: for annotations tag1 -> tag2 -> tag3, > + * the tag->tags list ends up as tag3 -> tag2 -> tag1. > + */ > + list_add(&annot->node, &tag->tags); > + return tag; > +} > + > static struct tag *die__create_new_pointer_tag(Dwarf_Die *die, struct cu *cu, > struct conf_load *conf) > { > struct btf_type_tag_ptr_type *tag = NULL; > - struct btf_type_tag_type *annot; > Dwarf_Die *cdie, child; > const char *name; > - uint32_t id; > > /* If no child tags or skipping btf_type_tag encoding, just create a new tag > * and return > @@ -1627,29 +1657,9 @@ static struct tag *die__create_new_pointer_tag(Dwarf_Die *die, struct cu *cu, > if (strcmp(name, "btf_type_tag") != 0) > continue; > > - if (tag == NULL) { > - /* Create a btf_type_tag_ptr type. */ > - tag = die__create_new_btf_type_tag_ptr_type(die, cu); > - if (!tag) > - return NULL; > - } > - > - /* Create a btf_type_tag type for this annotation. */ > - annot = die__create_new_btf_type_tag_type(cdie, cu, conf); > - if (annot == NULL) > - return NULL; > - > - if (cu__table_add_tag(cu, &annot->tag, &id) < 0) > + tag = die__add_btf_type_tag(tag, die, cdie, cu, conf); > + if (tag == NULL) > return NULL; > - > - struct dwarf_tag *dtag = tag__dwarf(&annot->tag); > - dtag->small_id = id; > - cu__hash(cu, &annot->tag); > - > - /* For a list of DW_TAG_LLVM_annotation like tag1 -> tag2 -> tag3, > - * the tag->tags contains tag3 -> tag2 -> tag1. > - */ > - list_add(&annot->node, &tag->tags); > } while (dwarf_siblingof(cdie, cdie) == 0); > > return tag ? &tag->tag : tag__new(die, cu);