Dwarves debugging tools
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Alan Maguire <alan.maguire@oracle.com>
Cc: Andrii Nakryiko <andrii.nakryiko@gmail.com>,
	Alexei Starovoitov <alexei.starovoitov@gmail.com>,
	Andrii Nakryiko <andrii@kernel.org>, Eduard <eddyz87@gmail.com>,
	Ihor Solodrai <ihor.solodrai@linux.dev>,
	bpf <bpf@vger.kernel.org>,
	dwarves@vger.kernel.org,
	Kumar Kartikeya Dwivedi <memxor@gmail.com>
Subject: Re: pahole and gcc-14 issues
Date: Mon, 28 Apr 2025 16:50:12 -0300	[thread overview]
Message-ID: <aA_b9N89lHeVSm1b@x1> (raw)
In-Reply-To: <aA_Yo6v7qicMy9xk@x1>

On Mon, Apr 28, 2025 at 04:36:07PM -0300, Arnaldo Carvalho de Melo wrote:
> On Mon, Apr 28, 2025 at 04:21:14PM +0100, Alan Maguire wrote:
> > In the bad case, the bpf_prog active member:
>  
> > <2><3d594>: Abbrev Number: 4 (DW_TAG_member)
> >     <3d595>   DW_AT_name        : (indirect string, offset: 0x3b976): active
> >     <3d599>   DW_AT_decl_file   : 125
> >     <3d59a>   DW_AT_decl_line   : 1654
> >     <3d59c>   DW_AT_decl_column : 17
> >     <3d59d>   DW_AT_type        : <0x4bd05>
>  
> > ...is a pointer:
> > 
> >  <1><4bd05>: Abbrev Number: 58 (DW_TAG_pointer_type)
> >     <4bd06>   DW_AT_byte_size   : 8
> >     <4bd07>   DW_AT_address_class: 2
> >     <4bd08>   DW_AT_type        : <0x301cd>
>  
> > ...which points at an int
>  
> >  <1><301cd>: Abbrev Number: 214 (DW_TAG_base_type)
> >     <301cf>   DW_AT_byte_size   : 4
> >     <301d0>   DW_AT_encoding    : 5     (signed)
> >     <301d1>   DW_AT_name        : int
> >     <301d5>   DW_AT_name        : int
>  
> > ...but note the the DW_AT_address_class attribute in the latter case and
> > the two DW_AT_name values. We don't use that address attribute in pahole
> > as far as I can see, but it might be enough to cause problems.

I just looked at a vmlinux built with gcc 15 and we have those:

 <1><7812a39>: Abbrev Number: 7 (DW_TAG_structure_type)
    <7812a3a>   DW_AT_name        : (indirect string, offset: 0xc0e4): alloc_tag_counters
    <7812a3e>   DW_AT_byte_size   : 16
    <7812a3f>   DW_AT_decl_file   : 76
    <7812a40>   DW_AT_decl_line   : 18
    <7812a41>   DW_AT_decl_column : 8
    <7812a42>   DW_AT_sibling     : <0x7812a61>
 <2><7812a46>: Abbrev Number: 1 (DW_TAG_member)
    <7812a47>   DW_AT_name        : (indirect string, offset: 0x3c288f): bytes
    <7812a4b>   DW_AT_decl_file   : 76
    <7812a4c>   DW_AT_decl_line   : 19
    <7812a4d>   DW_AT_decl_column : 6
    <7812a4e>   DW_AT_type        : <0x780f217>
    <7812a52>   DW_AT_data_member_location: 0
 <2><7812a53>: Abbrev Number: 1 (DW_TAG_member)
    <7812a54>   DW_AT_name        : (indirect string, offset: 0x255770): calls
    <7812a58>   DW_AT_decl_file   : 76
    <7812a59>   DW_AT_decl_line   : 20
    <7812a5a>   DW_AT_decl_column : 6
    <7812a5b>   DW_AT_type        : <0x780f217>
    <7812a5f>   DW_AT_data_member_location: 8

 <1><7812a88>: Abbrev Number: 80 (DW_TAG_pointer_type)
    <7812a89>   DW_AT_byte_size   : 8
    <7812a89>   DW_AT_address_class: 2
    <7812a89>   DW_AT_type        : <0x7812a39>

 <1><7812a61>: Abbrev Number: 25 (DW_TAG_structure_type)
    <7812a62>   DW_AT_name        : (indirect string, offset: 0x585bd1): alloc_tag
    <7812a66>   DW_AT_byte_size   : 40
    <7812a67>   DW_AT_alignment   : 8
    <7812a68>   DW_AT_decl_file   : 76
    <7812a69>   DW_AT_decl_line   : 28
    <7812a6a>   DW_AT_decl_column : 8
    <7812a6a>   DW_AT_sibling     : <0x7812a88>
 <2><7812a6e>: Abbrev Number: 54 (DW_TAG_member)
    <7812a6f>   DW_AT_name        : ct
    <7812a72>   DW_AT_decl_file   : 76
    <7812a73>   DW_AT_decl_line   : 29
    <7812a74>   DW_AT_decl_column : 19
    <7812a75>   DW_AT_type        : <0x78129ea>
    <7812a79>   DW_AT_alignment   : 8
    <7812a79>   DW_AT_data_member_location: 0
 <2><7812a7a>: Abbrev Number: 1 (DW_TAG_member)
    <7812a7b>   DW_AT_name        : (indirect string, offset: 0x565566): counters
    <7812a7f>   DW_AT_decl_file   : 76
    <7812a80>   DW_AT_decl_line   : 30
    <7812a81>   DW_AT_decl_column : 38
    <7812a82>   DW_AT_type        : <0x7812a88>
    <7812a86>   DW_AT_data_member_location: 32

struct alloc_tag {
        struct codetag                  ct;
        struct alloc_tag_counters __percpu      *counters;
} __aligned(8);

Its the __percpu, something else to catch in the DWARF loader and then
to use when pretty printing.

⬢ [acme@toolbx linux]$ pahole -F dwarf -C alloc_tag ../build/v6.15.0-rc2+/vmlinux
struct alloc_tag {
	struct codetag             ct __attribute__((__aligned__(8))); /*     0    32 */
	struct alloc_tag_counters * counters;            /*    32     8 */

	/* size: 40, cachelines: 1, members: 2 */
	/* forced alignments: 1 */
	/* last cacheline: 40 bytes */
} __attribute__((__aligned__(8)));
⬢ [acme@toolbx linux]$

- Arnaldo
 
> Looks like broken DWARF, there should be just one DW_AT_name per
> DW_TAG_base_type, what is the language for the CU where the bad cases
> appear? Is some sort of LTO being used?

  reply	other threads:[~2025-04-28 19:50 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-25 14:50 pahole and gcc-14 issues Alexei Starovoitov
2025-04-25 17:50 ` Alan Maguire
2025-04-25 17:58   ` Andrii Nakryiko
2025-04-25 20:36     ` Alan Maguire
2025-04-25 20:41       ` Andrii Nakryiko
2025-04-26 17:28         ` Alan Maguire
2025-04-28 15:21           ` Alan Maguire
2025-04-28 19:36             ` Arnaldo Carvalho de Melo
2025-04-28 19:50               ` Arnaldo Carvalho de Melo [this message]
2025-04-28 22:12             ` Alexei Starovoitov
2025-04-29  0:33               ` Andrii Nakryiko
2025-04-29  6:59                 ` Andrii Nakryiko
2025-04-29 15:37                   ` Andrii Nakryiko
2025-04-29 15:55                     ` Alan Maguire
2025-04-29 19:29                     ` Eduard Zingerman
2025-04-29 19:50                       ` Andrii Nakryiko
2025-04-29 20:34                         ` Eduard Zingerman
2025-04-29 20:55                         ` Alexei Starovoitov
2025-04-29 21:44                           ` Andrii Nakryiko
2025-04-25 20:58     ` Andrii Nakryiko
2025-04-25 18:14 ` Eduard Zingerman
2025-04-25 19:43   ` Eduard Zingerman
2025-04-25 20:16     ` Alexei Starovoitov
2025-04-25 20:25       ` Eduard Zingerman
2025-04-25 20:30         ` Alexei Starovoitov
2025-04-25 20:30         ` Eduard Zingerman

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=aA_b9N89lHeVSm1b@x1 \
    --to=acme@kernel.org \
    --cc=alan.maguire@oracle.com \
    --cc=alexei.starovoitov@gmail.com \
    --cc=andrii.nakryiko@gmail.com \
    --cc=andrii@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=dwarves@vger.kernel.org \
    --cc=eddyz87@gmail.com \
    --cc=ihor.solodrai@linux.dev \
    --cc=memxor@gmail.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