From: Aditya Dutt <duttaditya18@gmail.com>
To: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Aditya Dutt <duttaditya18@gmail.com>,
dwarves@vger.kernel.org, Alan Maguire <alan.maguire@oracle.com>
Subject: Re: [PATCH dwarves] pahole: --unions shouldn't bypass struct-only options
Date: Tue, 1 Sep 2026 13:21:35 +0000 [thread overview]
Message-ID: <20260901132137.1206269-1-duttaditya18@gmail.com> (raw)
In-Reply-To: <apXzlIKeb4tc8x88@x2>
On Mon, Aug 31, 2026 at 06:35:16PM -0300, Arnaldo Carvalho de Melo wrote:
> Please split this into multiple patches, so that we can cherry pick
> independent patches when we have some issue with one of the patches in
> the series.
I'll split this change to 3 patches.
1. Fixing only the segfault by adding the guard at the top of
print_packable_info. Contains the Fixes tag.
2. --with_flexible_array and --with_embedded_flexible_array guard if !struct.
3. In the case of unions, don't ignore struct-only filters.
Is this good, so that whatever is needed can be picked up?
> I can imagine looking for an union with bit holes:
>
> union x86_pmu_config {
> struct {
> u64 event:8; /* 0: 0 8 */
> u64 umask:8; /* 0: 8 8 */
> u64 usr:1; /* 0:16 8 */
> u64 os:1; /* 0:17 8 */
> u64 edge:1; /* 0:18 8 */
> u64 pc:1; /* 0:19 8 */
> u64 interrupt:1; /* 0:20 8 */
> u64 __reserved1:1; /* 0:21 8 */
> u64 en:1; /* 0:22 8 */
> u64 inv:1; /* 0:23 8 */
> u64 cmask:8; /* 0:24 8 */
> u64 event2:4; /* 0:32 8 */
> u64 __reserved2:4; /* 0:36 8 */
> u64 go:1; /* 0:40 8 */
> u64 ho:1; /* 0:41 8 */
> } bits; /* 0 8 */
> u64 value; /* 0 8 */
> };
>
> The sum of that bitfield is 42 bits, so we have a "padding"/hole of 22
> bits in that union, can't see quickly a use fase for this right now, but
> maybe someone can have this corner case need?
You can already get that using 'pahole -a -A' (both flags are needed).
For example:
$ cat /tmp/a.c
typedef unsigned long long u64;
union u_hole {
struct {
u64 a:8;
u64 b:8;
u64 c:1;
} bits;
u64 value;
};
union u_hole u;
$ gcc -c -g /tmp/a.c -o /tmp/a.o
$ pahole -a -A /tmp/a.o
struct {
u64 a:8; /* 0: 0 8 */
u64 b:8; /* 0: 8 8 */
u64 c:1; /* 0:16 8 */
/* size: 8, cachelines: 1, members: 3 */
/* bit_padding: 47 bits */
/* last cacheline: 8 bytes */
};
union u_hole {
struct {
u64 a:8; /* 0: 0 8 */
u64 b:8; /* 0: 8 8 */
u64 c:1; /* 0:16 8 */
} bits; /* 0 8 */
u64 value; /* 0 8 */
};
The padding is for the anonymous struct and not the union itself.
Does it make sense for '--unions' to show the results for the anonymous
structs inside a union?
Maybe a '--recursive' modifier is better? Which looks inside
structs/unions and unions when applying the filters, so that the outer
struct/union returned if a filter applies to any inner struct/union.
> > --with_flexible_array and --with_embedded_flexible_array were missing from the
> > struct only list, so add them too.
>
> Well spotted, please put this in a separate patch, with the
> corresponding fix.
Same thing here, a union cannot have a flexible array directly but a
union may have a struct inside containing a flexible array. Maybe a
'--recursive' modifier makes sense? And optionally, you can specify the
depth to which we search '--recursive=2' etc.
--
Thanks,
Aditya Dutt
prev parent reply other threads:[~2026-09-01 13:22 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-31 18:56 [PATCH dwarves] pahole: --unions shouldn't bypass struct-only options Aditya Dutt
2026-08-31 21:35 ` Arnaldo Carvalho de Melo
2026-09-01 13:21 ` Aditya Dutt [this message]
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=20260901132137.1206269-1-duttaditya18@gmail.com \
--to=duttaditya18@gmail.com \
--cc=acme@kernel.org \
--cc=alan.maguire@oracle.com \
--cc=dwarves@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.