Re: [PATCH] perf dwarf-aux: Print array type name with "[]"

From: Google
Date: Tue May 07 2024 - 20:10:29 EST


On Mon, 6 May 2024 21:13:38 -0700
Namhyung Kim <namhyung@xxxxxxxxxx> wrote:

> It's confusing both pointers and arrays are printed as *. Let's print
> array types with [] so that we can identify them easily. Although it's
> interchangable, sometimes it can cause confusion with size like in the
> below example.
>
> Note that it is not the same with C syntax where it goes to the variable
> names, but we want to have it in the type names (like in Go language).
>
> Before:
> mov [20] 0x68(reg5) -> reg0 type='struct page**' size=0x80 (die:0x4e61d32)
>
> After:
> mov [20] 0x68(reg5) -> reg0 type='struct page*[]' size=0x80 (die:0x4e61d32)
>

Good improvement!

Acked-by: Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx>

Thank you!

> Cc: Masami Hiramatsu <mhiramat@xxxxxxxxxx>
> Signed-off-by: Namhyung Kim <namhyung@xxxxxxxxxx>
> ---
> tools/perf/util/dwarf-aux.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/tools/perf/util/dwarf-aux.c b/tools/perf/util/dwarf-aux.c
> index c0a492e65388..ec988f294497 100644
> --- a/tools/perf/util/dwarf-aux.c
> +++ b/tools/perf/util/dwarf-aux.c
> @@ -1110,8 +1110,10 @@ int die_get_typename_from_type(Dwarf_Die *type_die, struct strbuf *buf)
> const char *tmp = "";
>
> tag = dwarf_tag(type_die);
> - if (tag == DW_TAG_array_type || tag == DW_TAG_pointer_type)
> + if (tag == DW_TAG_pointer_type)
> tmp = "*";
> + else if (tag == DW_TAG_array_type)
> + tmp = "[]";
> else if (tag == DW_TAG_subroutine_type) {
> /* Function pointer */
> return strbuf_add(buf, "(function_type)", 15);
> --
> 2.45.0.rc1.225.g2a3ae87e7f-goog
>


--
Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx>