Re: [PATCH dwarves v7 0/5] pahole: Encode true signatures in kernel BTF
Alan Maguire <[email protected]> Tue, 23 Jun 2026 17:02:30 +0100
| Newsgroups | org.kernel.vger.dwarves,org.kernel.vger.bpf |
|---|---|
| Message-ID | <[email protected]> |
--------------L0j1o4UK70snuZDFSplKcf2Z
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
On 23/06/2026 14:11, Alan Maguire wrote:
> On 23/06/2026 13:28, Jiri Olsa wrote:
>> On Mon, Jun 22, 2026 at 09:07:04PM -0700, Yonghong Song wrote:
>>> Current vmlinux BTF encoding is based on the source level signatures.
>>> But the compiler may do some optimization and changed the signature.
>>> If the user tried with source level signature, their initial implementation
>>> may have wrong results and then the user need to check what is the
>>> problem and work around it, e.g. through kprobe since kprobe does not
>>> need vmlinux BTF.
>>>
>>> Majority of changed signatures are due to dead argument elimination.
>>> The following is a more complex one. The original source signature:
>>> typedef struct {
>>> union {
>>> void *kernel;
>>> void __user *user;
>>> };
>>> bool is_kernel : 1;
>>> } sockptr_t;
>>> typedef sockptr_t bpfptr_t;
>>> static int map_create(union bpf_attr *attr, bpfptr_t uattr) { ... }
>>> After compiler optimization, the signature becomes:
>>> static int map_create(union bpf_attr *attr, bool uattr__is_kernel) { ... }
>>> In the above, uattr__is_kernel corresponds to 'is_kernel' field in sockptr_t.
>>> This makes it easier for developers to understand what changed.
>>>
>>> The new signature needs to properly follow ABI specification based on
>>> locations. Otherwise, that signature should be discarded. For example,
>>>
>>> 0x0242f1f7: DW_TAG_subprogram
>>> DW_AT_name ("memblock_find_in_range")
>>> DW_AT_calling_convention (DW_CC_nocall)
>>> DW_AT_type (0x0242decc "phys_addr_t")
>>> ...
>>> 0x0242f22e: DW_TAG_formal_parameter
>>> DW_AT_location (indexed (0x14a) loclist = 0x005595bc:
>>> [0xffffffff87a000f9, 0xffffffff87a00178): DW_OP_reg5 RDI
>>> [0xffffffff87a00178, 0xffffffff87a001be): DW_OP_reg14 R14
>>> [0xffffffff87a001be, 0xffffffff87a001c7): DW_OP_entry_value(DW_OP_reg5 RDI), DW_OP_stack_value
>>> [0xffffffff87a001c7, 0xffffffff87a00214): DW_OP_reg14 R14)
>>> DW_AT_name ("start")
>>> DW_AT_type (0x0242decc "phys_addr_t")
>>> ...
>>> 0x0242f239: DW_TAG_formal_parameter
>>> DW_AT_location (indexed (0x14b) loclist = 0x005595e6:
>>> [0xffffffff87a000f9, 0xffffffff87a00175): DW_OP_reg4 RSI
>>> [0xffffffff87a00175, 0xffffffff87a001b8): DW_OP_reg3 RBX
>>> [0xffffffff87a001b8, 0xffffffff87a001c7): DW_OP_entry_value(DW_OP_reg4 RSI), DW_OP_stack_value
>>> [0xffffffff87a001c7, 0xffffffff87a00214): DW_OP_reg3 RBX)
>>> DW_AT_name ("end")
>>> DW_AT_type (0x0242decc "phys_addr_t")
>>> ...
>>> 0x0242f245: DW_TAG_formal_parameter
>>> DW_AT_location (indexed (0x14c) loclist = 0x00559610:
>>> [0xffffffff87a001e3, 0xffffffff87a001ef): DW_OP_breg4 RSI+0)
>>> DW_AT_name ("size")
>>> DW_AT_type (0x0242decc "phys_addr_t")
>>> ...
>>> 0x0242f250: DW_TAG_formal_parameter
>>> DW_AT_const_value (4096)
>>> DW_AT_name ("align")
>>> DW_AT_type (0x0242decc "phys_addr_t")
>>> ...
>>>
>>> The third argument should correspond to RDX for x86_64. But the location suggests that
>>> the parameter value is stored in the address with 'RSI + 0'. It is not clear whether
>>> the parameter value is stored in RDX or not. So we have to discard this funciton in
>>> vmlinux BTF to avoid incorrect true signatures.
>>>
>>> For llvm, any function having
>>> DW_AT_calling_convention (DW_CC_nocall)
>>> in dwarf DW_TAG_subprogram will indicate that this function has signature changed.
>>> I did experiment with latest bpf-next. For x86_64, there are 69103 kernel functions
>>> and 875 kernel functions having signature changed. A series of patches are intended
>>> to ensure true signatures are properly represented. Eventually, only 20 functions
>>> cannot have true signatures due to locations.
>>
>> hi,
>> I tried to get the numbers from my setup and noticed that some new
>> functions were included in BTF compared to the current version
>> (functions diff attached below)
>>
>> like for "arp_process" function the current pahole gives me:
>>
>> arp_process : skipping BTF encoding of function due to unexpected register usage for parameter
>>
>> but it's included in BTF generated with the new pahole.
>>
>> in addition to your explanation above also one of the commit says:
>>
>> - a parameter with no location, a constant value, or (for non-clang) no
>> register found is marked optimized out
>>
>> please check below, it seems like 2nd argument of arp_process has no location,
>> so iiuc it should not be included in BTF, right?
>>
>> thanks,
>> jirka
>>
>>
>
> thanks for catching this; it looks like we return a bit early before detecting
> missing locations in the non-true-signature code. If you get a chance, would you
> mind trying the attached patch to see if it fixes the problem?
>
> If the fix works and Yonghong is happy with it we can add it as a followup
> and land the true signature series to save another round.
actually sorry that patch leaked true signature partial names for gcc; updated
patch attached.
--------------L0j1o4UK70snuZDFSplKcf2Z
Content-Type: text/x-patch; charset=UTF-8;
name="0001-dwarf_loader-Keep-clang-parameter-location-checks-wi.patch"
Content-Disposition: attachment;
filename*0="0001-dwarf_loader-Keep-clang-parameter-location-checks-wi.pa";
filename*1="tch"
Content-Transfer-Encoding: base64
RnJvbSA1YTk1ODk4MDRmYjNjODA5NWRhZTc5MWY4ZTQ5MTVhY2VjYzAzNWU2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGFuIE1hZ3VpcmUgPGFsYW4ubWFndWlyZUBvcmFjbGUuY29t
PgpEYXRlOiBUdWUsIDIzIEp1biAyMDI2IDE0OjA4OjIxICswMTAwClN1YmplY3Q6IFtQQVRDSCBk
d2FydmVzXSBkd2FyZl9sb2FkZXI6IEtlZXAgY2xhbmcgcGFyYW1ldGVyIGxvY2F0aW9uIGNoZWNr
cwogd2l0aG91dCB0cnVlX3NpZ25hdHVyZQoKVGhlIHRydWVfc2lnbmF0dXJlIHNlcmllcyBza2lw
cGVkIGNsYW5nIHBhcmFtZXRlciBsb2NhdGlvbiBhbmFseXNpcyB1bmxlc3MKdHJ1ZV9zaWduYXR1
cmUgd2FzIGVuYWJsZWQgZm9yIGEgZnVuY3Rpb24gd2hvc2Ugc2lnbmF0dXJlIGNoYW5nZWQuICBU
aGF0CmFsc28gZGlzYWJsZWQgdGhlIGV4aXN0aW5nIHNhZmV0eSBjaGVjayB0aGF0IHJlamVjdHMg
ZnVuY3Rpb25zIHdob3NlIERXQVJGCnNvdXJjZSBwcm90b3R5cGUgbm8gbG9uZ2VyIG1hdGNoZXMg
dGhlIEFCSSByZWdpc3RlciBsYXlvdXQuCgpGb3IgZXhhbXBsZSwgY2xhbmcgY2FuIGVtaXQgYSBE
V19DQ19ub2NhbGwgZnVuY3Rpb24gbGlrZToKCiAgICBhcnBfcHJvY2VzcyhuZXQsIHNrLCBza2Ip
Cgp3aGVyZSBzayBoYXMgbm8gbG9jYXRpb24gYW5kIHNrYiBpcyBhY3R1YWxseSBwYXNzZWQgaW4g
UlNJLCB0aGUgc2xvdAp0aGF0IHRoZSBzb3VyY2UgcHJvdG90eXBlIHdvdWxkIGFzc2lnbiB0byBz
ay4gIFdpdGggbG9jYXRpb24gYW5hbHlzaXMKZGlzYWJsZWQsIG5vcm1hbCBCVEYgZW5jb2Rpbmcg
Y291bGQgZW1pdCB0aGUgbWlzbGVhZGluZyBzb3VyY2Ugc2lnbmF0dXJlCndoZW4gdHJ1ZV9zaWdu
YXR1cmUgd2FzIG9mZi4KCkFsd2F5cyBkZWNvZGUgcGFyYW1ldGVyIGxvY2F0aW9ucywgYnV0IG9u
bHkgcnVuIHRoZSByZWdpc3Rlci9vcHRpbWl6ZWQKcGFyYW1ldGVyIGFuYWx5c2lzIGZvciB0aGUg
Y2FzZXMgdGhhdCBuZWVkIGl0OiBub24tY2xhbmcgQ1VzLCBvciBjbGFuZwpmdW5jdGlvbnMgbWFy
a2VkIGFzIHNpZ25hdHVyZS1jaGFuZ2VkLiAgVGhpcyBwcmVzZXJ2ZXMgdGhlIGxlZ2FjeQp1bmV4
cGVjdGVkLXJlZ2lzdGVyIHNraXAgcGF0aCBmb3IgY2xhbmcgRFdfQ0Nfbm9jYWxsIGZ1bmN0aW9u
cyB3aXRob3V0CnBvaXNvbmluZyBvcmRpbmFyeSBjbGFuZyBmdW5jdGlvbnMgd2l0aCBzcGVjdWxh
dGl2ZSBsb2NhdGlvbiBhbmFseXNpcy4KCkFsc28gaW5pdGlhbGl6ZSBsb2NfcmVnIGJlZm9yZSBl
YXJseSByZXR1cm5zIHNvIG1pc3NpbmcgYW5hbHlzaXMgY2Fubm90IGJlCmNvbmZ1c2VkIHdpdGgg
RFdfT1BfcmVnMC9SQVguCgpTaWduZWQtb2ZmLWJ5OiBBbGFuIE1hZ3VpcmUgPGFsYW4ubWFndWly
ZUBvcmFjbGUuY29tPgotLS0KIGJ0Zl9lbmNvZGVyLmMgIHwgIDQgKysrLQogZHdhcmZfbG9hZGVy
LmMgfCAxNiArKystLS0tLS0tLS0tLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygr
KSwgMTQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvYnRmX2VuY29kZXIuYyBiL2J0Zl9lbmNv
ZGVyLmMKaW5kZXggNzlkNmQ5Ni4uMzg0NTVhNCAxMDA2NDQKLS0tIGEvYnRmX2VuY29kZXIuYwor
KysgYi9idGZfZW5jb2Rlci5jCkBAIC0xMzEyLDcgKzEzMTIsOSBAQCBzdGF0aWMgaW50MzJfdCBi
dGZfZW5jb2Rlcl9fc2F2ZV9mdW5jKHN0cnVjdCBidGZfZW5jb2RlciAqZW5jb2Rlciwgc3RydWN0
IGZ1bmN0aQogCQluYW1lID0gcGFyYW1ldGVyX19uYW1lKHBhcmFtKTsKIAkJaWYgKCFuYW1lKSB7
CiAJCQluYW1lID0gIiI7Ci0JCX0gZWxzZSBpZiAocGFyYW0tPnRydWVfc2lnX21lbWJlcl9uYW1l
KSB7CisJCX0gZWxzZSBpZiAoZW5jb2Rlci0+dHJ1ZV9zaWduYXR1cmUgJiYKKwkJCSAgIGZ0eXBl
LT5zaWduYXR1cmVfY2hhbmdlZCAmJgorCQkJICAgcGFyYW0tPnRydWVfc2lnX21lbWJlcl9uYW1l
KSB7CiAJCQkvKiBOb24tbnVsbCBwYXJhbS0+dHJ1ZV9zaWdfbWVtYmVyX25hbWUgaW5kaWNhdGVz
IHRoYXQgdGhlIHBhcmFtZXRlcgogCQkJICogbmFtZSBpcyA8cGFyYW1ldGVyX25hbWU+X188Zmll
bGRfbmFtZT4uCiAJCQkgKi8KZGlmZiAtLWdpdCBhL2R3YXJmX2xvYWRlci5jIGIvZHdhcmZfbG9h
ZGVyLmMKaW5kZXggOWQ1MWZmNy4uZTA0OGI4NSAxMDA2NDQKLS0tIGEvZHdhcmZfbG9hZGVyLmMK
KysrIGIvZHdhcmZfbG9hZGVyLmMKQEAgLTE1MjAsMTQgKzE1MjAsNiBAQCBzdGF0aWMgdm9pZCBw
YXJhbWV0ZXJfX2RlY29kZV9sb2NhdGlvbihEd2FyZl9BdHRyaWJ1dGUgKmF0dHIsIHN0cnVjdCBj
b25mX2xvYWQgKgogCXBhcmFtZXRlcl9fZmluaXNoX3BpZWNlX2RlY29kZShwYXJtLCBkaWUsIGNv
bmYsIGN1KTsKIH0KIAotc3RhdGljIGJvb2wgZnR5cGVfX2FuYWx5emVfbG9jYXRpb25zKGNvbnN0
IHN0cnVjdCBmdHlwZSAqZnR5cGUsIGNvbnN0IHN0cnVjdCBjdSAqY3UsCi0JCQkJICAgICBjb25z
dCBzdHJ1Y3QgY29uZl9sb2FkICpjb25mKQotewotCWJvb2wgdHJ1ZV9zaWdfZW5hYmxlZCA9IGNv
bmYtPnRydWVfc2lnbmF0dXJlICYmIGZ0eXBlLT5zaWduYXR1cmVfY2hhbmdlZDsKLQotCXJldHVy
biAhY3UtPnByb2R1Y2VyX2NsYW5nIHx8IHRydWVfc2lnX2VuYWJsZWQ7Ci19Ci0KIHN0YXRpYyBz
dHJ1Y3QgcGFyYW1ldGVyICpwYXJhbWV0ZXJfX25ldyhEd2FyZl9EaWUgKmRpZSwgc3RydWN0IGN1
ICpjdSwgc3RydWN0IGNvbmZfbG9hZCAqY29uZiwKIAkJCQkJc3RydWN0IGZ0eXBlICpmdHlwZSwg
aW50IHBhcmFtX2lkeCkKIHsKQEAgLTE1MzksMTMgKzE1MzEsMTAgQEAgc3RhdGljIHN0cnVjdCBw
YXJhbWV0ZXIgKnBhcmFtZXRlcl9fbmV3KER3YXJmX0RpZSAqZGllLCBzdHJ1Y3QgY3UgKmN1LCBz
dHJ1Y3QgY28KIAkJdGFnX19pbml0KCZwYXJtLT50YWcsIGN1LCBkaWUpOwogCQlwYXJtLT5uYW1l
ID0gYXR0cl9zdHJpbmcoZGllLCBEV19BVF9uYW1lLCBjb25mKTsKIAkJcGFybS0+aWR4ID0gcGFy
YW1faWR4OworCQlwYXJtLT5sb2NfcmVnID0gUEFSQU1FVEVSX1VOS05PV05fUkVHOwogCQlpZiAo
IWZ0eXBlKQogCQkJcmV0dXJuIHBhcm07CiAKLQkJaWYgKCFmdHlwZV9fYW5hbHl6ZV9sb2NhdGlv
bnMoZnR5cGUsIGN1LCBjb25mKSkKLQkJCXJldHVybiBwYXJtOwotCi0JCXBhcm0tPmxvY19yZWcg
PSBQQVJBTUVURVJfVU5LTk9XTl9SRUc7CiAJCXBhcm0tPnR5cGVfYnl0ZV9zaXplID0gZ2V0X3R5
cGVfYnl0ZV9zaXplKGRpZSwgY3UpOwogCQlwYXJtLT5wYXNzZWRfaW5fbWVtb3J5ID0gcGFybS0+
dHlwZV9ieXRlX3NpemUgPgogCQkJKGN1LT5hZ2dfdXNlX3R3b19yZWdzID8gMiAqIGN1LT5hZGRy
X3NpemUgOiBjdS0+YWRkcl9zaXplKTsKQEAgLTMxMjAsOSArMzEwOSwxMCBAQCBzdGF0aWMgdm9p
ZCBmdW5jdGlvbl9fYW5hbHl6ZV9wYXJhbWV0ZXJfbG9jYXRpb25zKHN0cnVjdCBmdW5jdGlvbiAq
Zm4sIHN0cnVjdCBjdQogCXN0cnVjdCBmdHlwZSAqZnR5cGUgPSAmZm4tPnByb3RvOwogCXN0cnVj
dCBwYXJhbWV0ZXIgKnBvczsKIAlib29sIHRydWVfc2lnX2VuYWJsZWQgPSBjb25mLT50cnVlX3Np
Z25hdHVyZSAmJiBmdHlwZS0+c2lnbmF0dXJlX2NoYW5nZWQ7CisJYm9vbCBjaGVja19sb2NhdGlv
bnMgPSAhY3UtPnByb2R1Y2VyX2NsYW5nIHx8IGZ0eXBlLT5zaWduYXR1cmVfY2hhbmdlZDsKIAlp
bnQgcmVnX2lkeCA9IDA7CiAKLQlpZiAoIWZ0eXBlX19hbmFseXplX2xvY2F0aW9ucyhmdHlwZSwg
Y3UsIGNvbmYpKQorCWlmICghY2hlY2tfbG9jYXRpb25zKQogCQlyZXR1cm47CiAKIAlmdHlwZV9f
Zm9yX2VhY2hfcGFyYW1ldGVyKGZ0eXBlLCBwb3MpIHsKLS0gCjIuNDMuNQoK
--------------L0j1o4UK70snuZDFSplKcf2Z--