[PATCH v5 2/4] perf annotate-data: A small cleanup in __add_member_cb()

From: Namhyung Kim

Date: Sat Sep 19 2026 - 02:38:41 EST


Check return value of strbuf_init() and die_get_typename() to make sure
if typename of a member gets never NULL.

Also remove the check for typedef by just using die_get_real_type().
It can get rid of member_type variable as well.

Signed-off-by: Namhyung Kim <namhyung@xxxxxxxxxx>
---
tools/perf/util/annotate-data.c | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/tools/perf/util/annotate-data.c b/tools/perf/util/annotate-data.c
index aff60a630fd05b01..845a5d8c2b84b6a6 100644
--- a/tools/perf/util/annotate-data.c
+++ b/tools/perf/util/annotate-data.c
@@ -226,7 +226,7 @@ static int __add_member_cb(Dwarf_Die *die, void *arg)
{
struct annotated_member *parent = arg;
struct annotated_member *member;
- Dwarf_Die member_type, die_mem;
+ Dwarf_Die die_mem;
Dwarf_Word size, loc, bit_size = 0;
Dwarf_Attribute attr;
struct strbuf sb;
@@ -239,14 +239,15 @@ static int __add_member_cb(Dwarf_Die *die, void *arg)
if (member == NULL)
return DIE_FIND_CB_END;

- strbuf_init(&sb, 32);
- die_get_typename(die, &sb);
+ if (strbuf_init(&sb, 32) < 0) {
+ free(member);
+ return DIE_FIND_CB_END;
+ }

- __die_get_real_type(die, &member_type);
- if (dwarf_tag(&member_type) == DW_TAG_typedef)
- die_get_real_type(&member_type, &die_mem);
- else
- die_mem = member_type;
+ if (die_get_typename(die, &sb) < 0)
+ strbuf_add(&sb, "(unknown type)", 14);
+
+ die_get_real_type(die, &die_mem);

if (dwarf_aggregate_size(&die_mem, &size) < 0)
size = 0;
--
2.55.0