From: Jiri Olsa <olsajiri@gmail.com>
To: Yonghong Song <yonghong.song@linux.dev>
Cc: Eduard Zingerman <eddyz87@gmail.com>,
Alan Maguire <alan.maguire@oracle.com>,
acme@kernel.org, dwarves@vger.kernel.org, ast@kernel.org,
andrii@kernel.org, bpf@vger.kernel.org, daniel@iogearbox.net,
kernel-team@fb.com, song@kernel.org, olsajiri@gmail.com
Subject: Re: [PATCH v2 dwarves 1/2] dwarf_loader: Check DW_OP_[GNU_]entry_value for possible parameter matching
Date: Fri, 15 Nov 2024 09:47:45 +0100 [thread overview]
Message-ID: <ZzcKsfbbG8CiSCTY@krava> (raw)
In-Reply-To: <fa3f1a9b-7fee-42f4-9827-b28b1bb3eff6@linux.dev>
On Thu, Nov 14, 2024 at 12:04:24PM -0800, Yonghong Song wrote:
>
>
>
> On 11/14/24 10:21 AM, Eduard Zingerman wrote:
> > On Thu, 2024-11-14 at 08:51 -0800, Yonghong Song wrote:
> >
> > [...]
> >
> > > > + /* match DW_OP_entry_value(DW_OP_regXX) at any location */
> > > > + case DW_OP_entry_value:
> > > > + case DW_OP_GNU_entry_value:
> > > > + if (dwarf_getlocation_attr(attr, expr, &entry_attr) == 0 &&
> > > > + dwarf_getlocation(&entry_attr, &entry_ops, &entry_len) == 0 &&
> > > > + entry_len == 1) {
> > > > + ret = entry_ops->atom;
> > > Could we have more than one DW_OP_entry_value? What if the second one
> > > matches execpted_reg? From dwarf5 documentation, there is no say about
> > > whether we could have more than one DW_OP_entry_value or not.
> > >
> > > If we have evidence that only one DW_OP_entry_value will appear in parameter
> > > locations, a comment will be needed in the above.
> > >
> > > Otherwise, let us not do 'goto out' here. Rather, let us compare
> > > entry_ops->atom with expected_reg. Do 'ret = entry_ops->atom' and
> > > 'goto out' only if entry_ops->atom == expected_reg. Otherwise,
> > > the original 'ret' value is preserved.
> > Basing on this description in lldb source:
> > https://github.com/llvm/llvm-project/blob/1cd981a5f3c89058edd61cdeb1efa3232b1f71e6/lldb/source/Expression/DWARFExpression.cpp#L538
> > It would be surprising if DW_OP_entry_value records had different expressions.
> > However, there are 50 instances of such behaviour in my clang 18.1.8 built kernel., e.g.:
> >
> > 0x01f75d14: DW_TAG_subprogram
> > DW_AT_low_pc (0xffffffff818c43a0)
> > DW_AT_high_pc (0xffffffff818c43c9)
> > DW_AT_frame_base (DW_OP_reg7 RSP)
> > DW_AT_call_all_calls (true)
> > DW_AT_name ("hwcache_align_show")
> > DW_AT_decl_file ("/home/eddy/work/bpf-next/mm/slub.c")
> > DW_AT_decl_line (6621)
> > DW_AT_prototyped (true)
> > DW_AT_type (0x01f51a9b "ssize_t")
> >
> > 0x01f75d26: DW_TAG_formal_parameter
> > DW_AT_location (indexed (0xa0f) loclist = 0x0062c64f:
> > [0xffffffff818c43a9, 0xffffffff818c43b5): DW_OP_reg5 RDI
> > [0xffffffff818c43b5, 0xffffffff818c43c1): DW_OP_entry_value(DW_OP_reg5 RDI), DW_OP_stack_value
> > [0xffffffff818c43c1, 0xffffffff818c43c9): DW_OP_entry_value(DW_OP_reg4 RSI), DW_OP_stack_value)
> > DW_AT_name ("s")
> > DW_AT_decl_file ("/home/eddy/work/bpf-next/mm/slub.c")
> > DW_AT_decl_line (6621)
> > DW_AT_type (0x01f4f449 "kmem_cache *")
> >
> > The following change seem not to affect pahole execution time:
> >
> > @@ -1234,7 +1234,8 @@ static int parameter__reg(Dwarf_Attribute *attr, int expected_reg)
> > dwarf_getlocation(&entry_attr, &entry_ops, &entry_len) == 0 &&
> > entry_len == 1) {
> > ret = entry_ops->atom;
> > - goto out;
> > + if (expr->atom == expected_reg)
> > + goto out;
> > }
> > break;
> > }
>
> Should we do
> ...
> dwarf_getlocation(&entry_attr, &entry_ops, &entry_len) == 0 &&
> entry_len == 1 && expr->atom == expected_reg) {
> ret = entry_ops->atom;
> goto out;
> }
> ...
> ?
+1
jirka
>
> >
> > This question aside, I think the changes fine.
> >
> > [...]
> >
>
next prev parent reply other threads:[~2024-11-15 8:47 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-14 15:58 [PATCH v2 dwarves 0/2] Check DW_OP_[GNU_]entry_value for possible parameter matching Alan Maguire
2024-11-14 15:58 ` [PATCH v2 dwarves 1/2] dwarf_loader: " Alan Maguire
2024-11-14 16:51 ` Yonghong Song
2024-11-14 16:59 ` Alan Maguire
2024-11-14 18:21 ` Eduard Zingerman
2024-11-14 20:04 ` Yonghong Song
2024-11-14 21:38 ` Eduard Zingerman
2024-11-15 8:47 ` Jiri Olsa [this message]
2024-11-14 15:58 ` [PATCH v2 dwarves 2/2] dwarf_loader: use libdw__lock for Alan Maguire
2024-11-14 18:01 ` Eduard Zingerman
2024-11-15 9:34 ` [PATCH v2 dwarves 0/2] Check DW_OP_[GNU_]entry_value for possible parameter matching Jiri Olsa
2024-11-15 14:52 ` Arnaldo Carvalho de Melo
2024-11-15 15:00 ` Jiri Olsa
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=ZzcKsfbbG8CiSCTY@krava \
--to=olsajiri@gmail.com \
--cc=acme@kernel.org \
--cc=alan.maguire@oracle.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=dwarves@vger.kernel.org \
--cc=eddyz87@gmail.com \
--cc=kernel-team@fb.com \
--cc=song@kernel.org \
--cc=yonghong.song@linux.dev \
/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.