From: Yonghong Song <yonghong.song@linux.dev>
To: Alan Maguire <alan.maguire@oracle.com>,
Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>,
dwarves@vger.kernel.org
Cc: Alexei Starovoitov <ast@kernel.org>,
Andrii Nakryiko <andrii@kernel.org>,
bpf@vger.kernel.org, kernel-team@fb.com
Subject: Re: [PATCH dwarves v4 03/11] dwarf_loader: Handle signatures with dead arguments
Date: Sat, 23 May 2026 09:28:38 -0700 [thread overview]
Message-ID: <8f56fb9d-5ef0-4d16-bc3d-f04df31cb058@linux.dev> (raw)
In-Reply-To: <8b591079-987b-485f-b37d-f4207dbac08b@oracle.com>
On 3/30/26 3:13 AM, Alan Maguire wrote:
> On 26/03/2026 01:31, Yonghong Song wrote:
>> For llvm dwarf, the dead argument may be in the middle of
>> DW_TAG_subprogram. So we introduce skip_idx in order to
>> match expected registers properly.
>>
>> For example:
>> 0x00042897: DW_TAG_subprogram
>> DW_AT_name ("create_dev")
>> DW_AT_calling_convention (DW_CC_nocall)
>> DW_AT_type (0x0002429a "int")
>> ...
>>
>> 0x000428ab: DW_TAG_formal_parameter
>> DW_AT_name ("name")
>> DW_AT_type (0x000242ed "char *")
>> ...
>>
>> 0x000428b5: DW_TAG_formal_parameter
>> DW_AT_location (indexed (0x3f) loclist = 0x000027f8:
>> [0xffffffff87681370, 0xffffffff8768137a): DW_OP_reg5 RDI
>> [0xffffffff8768137a, 0xffffffff87681392): DW_OP_reg3 RBX
>> [0xffffffff87681392, 0xffffffff876813ae): DW_OP_entry_value(DW_OP_reg5 RDI), DW_OP_stack_value)
>> DW_AT_name ("dev")
>> DW_AT_type (0x00026859 "dev_t")
>> ...
>>
>> With skip_idx, we can identify that the second original argument
>> 'dev' becomes the first one after optimization.
>>
> Is there a way we could unify this a bit better with the existing approach
> where each struct parameter has an idx value associated with it? For gcc
> we compare concrete and abstract indices and if they mismatch we know a
> parameter is skipped and set reordered_parm at the function tag level.
> We could set the idx to -1 or similar for skipped parameters to cover
> the below cases maybe?
>
> Not sure how the skip_idx approach would generalize to multiple optimized
> out parameters; is there a way to handle that?
For this particular case (proper parameter indexes), gcc is better than
clang. For gcc, parameter are reordered to have dead arguments after
non-dead arguments. Compiler did the work here.
But for clang, parameters are still original parameter sequence.
For each parameter, we do not know that any particular parameter
is dead or not, unless we go through the whole parameter__reg().
>
>> The previous patch has the following:
>> 0x0533fd03: DW_TAG_subprogram
>> DW_AT_name ("acpi_irq_penalty_update")
>> DW_AT_calling_convention (DW_CC_nocall)
>> DW_AT_type (0x05334dc7 "int")
>> ...
>>
>> 0x0533fd15: DW_TAG_formal_parameter
>> DW_AT_name ("str")
>> DW_AT_type (0x05335918 "char *")
>> ...
>>
>> 0x0533fd1f: DW_TAG_formal_parameter
>> DW_AT_location (indexed (0x3b) loclist = 0x00eb9d83:
>> [0xffff80008419f2e0, 0xffff80008419f324): DW_OP_reg1 W1
>> [0xffff80008419f324, 0xffff80008419f47c): DW_OP_reg19 W19
>> [0xffff80008419f47c, 0xffff80008419f494): DW_OP_entry_value(DW_OP_reg1 W1), DW_OP_stack_value
>> [0xffff80008419f494, 0xffff80008419f498): DW_OP_reg19 W19)
>> DW_AT_name ("used")
>> DW_AT_type (0x05334dc7 "int")
>> ...
>>
>> It is also handled properly with parameter 'str' will have W0 register.
>>
>> With this patch, I checked x86_64 that the number of invalid true signatures is reduced
>> from 532 to 96. This suggests that majority of optimized functions are caused by
>> dead arguments.
[...]
next prev parent reply other threads:[~2026-05-23 16:28 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-26 1:31 [PATCH dwarves v4 00/11] pahole: Encode true signatures in kernel BTF Yonghong Song
2026-03-26 1:31 ` [PATCH dwarves v4 01/11] dwarf_loader: Reduce parameter checking with clang DW_AT_calling_convention attr Yonghong Song
2026-03-30 8:31 ` Alan Maguire
2026-05-23 16:22 ` Yonghong Song
2026-03-26 1:31 ` [PATCH dwarves v4 02/11] dwarf_loader: Prescan all parameters with expected registers Yonghong Song
2026-03-26 1:31 ` [PATCH dwarves v4 03/11] dwarf_loader: Handle signatures with dead arguments Yonghong Song
2026-03-30 10:13 ` Alan Maguire
2026-05-23 16:28 ` Yonghong Song [this message]
2026-03-26 1:32 ` [PATCH dwarves v4 04/11] dwarf_loader: Refactor initial ret -1 to be macro PARM_DEFAULT_FAIL Yonghong Song
2026-03-26 1:32 ` [PATCH dwarves v4 05/11] dwarf_laoder: Handle locations with DW_OP_fbreg Yonghong Song
2026-03-26 1:32 ` [PATCH dwarves v4 06/11] dwarf_loader: Change exprlen checking condition in parameter__reg() Yonghong Song
2026-03-26 1:32 ` [PATCH dwarves v4 07/11] dwarf_loader: Detect optimized parameters with locations having constant values Yonghong Song
2026-03-26 1:32 ` [PATCH dwarves v4 08/11] dwarf_loader: Check whether two-reg parameter actually use two regs or not Yonghong Song
2026-03-26 1:32 ` [PATCH dwarves v4 09/11] dwarf_loader: Handle expression lists Yonghong Song
2026-03-31 8:04 ` Alan Maguire
2026-05-23 16:32 ` Yonghong Song
2026-03-26 1:33 ` [PATCH dwarves v4 10/11] btf_encoder: Handle optimized parameter properly Yonghong Song
2026-03-26 1:33 ` [PATCH dwarves v4 11/11] tests: Add a few clang true signature tests Yonghong Song
2026-03-27 16:02 ` [PATCH dwarves v4 00/11] pahole: Encode true signatures in kernel BTF Alan Maguire
2026-03-27 19:38 ` Yonghong Song
2026-03-30 9:56 ` Alan Maguire
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=8f56fb9d-5ef0-4d16-bc3d-f04df31cb058@linux.dev \
--to=yonghong.song@linux.dev \
--cc=alan.maguire@oracle.com \
--cc=andrii@kernel.org \
--cc=arnaldo.melo@gmail.com \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=dwarves@vger.kernel.org \
--cc=kernel-team@fb.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 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.