From: Vineet Gupta <vineet.gupta@linux.dev>
To: dwarves@vger.kernel.org
Cc: bpf@vger.kernel.org, Andrii Nakryiko <andrii@kernel.org>,
acme@kernel.org, Alan Maguire <alan.maguire@oracle.com>,
jose.marchesi@oracle.com, David Faust <david.faust@oracle.com>,
Vineet Gupta <vineet.gupta@linux.dev>
Subject: [PAHOLE v3 1/3] dwarf_loader: Extract die__add_btf_type_tag() helper
Date: Mon, 1 Jun 2026 11:35:09 -0700 [thread overview]
Message-ID: <20260601183511.594100-1-vineet.gupta@linux.dev> (raw)
NFC change preparing for DW_TAG_GNU_annotation support.
Extract the btf_type_tag annotation creation logic from into a helper
die__add_btf_type_tag().
Signed-off-by: Vineet Gupta <vineet.gupta@linux.dev>
---
Changes since v2 [2]
- die__add_btf_type_tag() returns pointer not error code.
Changes since v1 [1]
- NFC reinstate some original comments
[2] https://lore.kernel.org/bpf/20260528223616.2035618-1-vineet.gupta@linux.dev/
[1] https://lore.kernel.org/bpf/20260526181818.4159927-1-vineet.gupta@linux.dev/
---
dwarf_loader.c | 57 +++++++++++++++++++++++++++++---------------------
1 file changed, 33 insertions(+), 24 deletions(-)
diff --git a/dwarf_loader.c b/dwarf_loader.c
index 16fb7becffee..8b5b526299b5 100644
--- a/dwarf_loader.c
+++ b/dwarf_loader.c
@@ -1600,14 +1600,43 @@ 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 +1656,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);
--
2.54.0
next reply other threads:[~2026-06-01 18:35 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-01 18:35 Vineet Gupta [this message]
2026-06-01 18:35 ` [PAHOLE v3 2/3] dwarf_loader: Add support for DW_TAG_GNU_annotation Vineet Gupta
2026-06-02 1:04 ` Emil Tsalapatis
2026-06-02 18:54 ` Vineet Gupta
2026-06-02 18:24 ` Arnaldo Carvalho de Melo
2026-06-02 19:23 ` Vineet Gupta
2026-06-01 18:35 ` [PAHOLE v3 3/3] tests: Support GCC in pfunct-btf-decl-tags test Vineet Gupta
2026-06-02 1:05 ` Emil Tsalapatis
2026-06-01 19:27 ` [PAHOLE v3 1/3] dwarf_loader: Extract die__add_btf_type_tag() helper Emil Tsalapatis
2026-06-01 19:44 ` Vineet Gupta
2026-06-02 18:14 ` Arnaldo Carvalho de Melo
2026-06-02 19:00 ` Vineet Gupta
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260601183511.594100-1-vineet.gupta@linux.dev \
--to=vineet.gupta@linux.dev \
--cc=acme@kernel.org \
--cc=alan.maguire@oracle.com \
--cc=andrii@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=david.faust@oracle.com \
--cc=dwarves@vger.kernel.org \
--cc=jose.marchesi@oracle.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox