extra syscall_cancel frames
Adhemerval Zanella Netto
adhemerval.zanella@linaro.org
Fri Mar 21 11:51:34 GMT 2025
On 20/03/25 19:10, Florian Weimer wrote:
> * Mark Wielaard:
>
>>> I think __internal_syscall_cancel should get inlined into
>>> __syscall_cancel.
>>
>> It isn't, I double checked with gdb and there are always two extra
>> frames on top of the call stack.
>
> Oh, right, it's not static.
And we need __always_inline to proper inline it. I will send a patch
to change it.
>
>>> And this commit fixed it:
>>>
>>> commit 89b53077d2a58f00e7debdfe58afabe953dac60d
>>> Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
>>> Date: Tue Jun 25 16:17:44 2024 -0300
>>>
>>> nptl: Fix Race conditions in pthread cancellation [BZ#12683]
>>
>> Interesting, so this is actually in 2.41? I should try the fedora 42
>> beta then. Do you happen to know whether people/distros have
>> backported this to earlier releases?
>
> We're probably going to backport it all the way to Fedora 40/RHEL 10,
> but perhaps not before Fedora 40 goes out of support.
>
>> I think these extra __*syscall*cancel* frames are somewhat confusing
>> to the user and messes up existing suppressions. They also cause
>> trouble for the valgrind regtests.
>>
>> I think the solution for valgrind is to just skip the top (two) frames
>> if they match the __*syscall*cancel* symbol address ranges. And we
>> only need to do that when we are creating a backtrace from a valgrind
>> syscall wrapper.
>>
>> Looking at the glibc symtab I see four function symbol matching that
>> pattern:
>>
>> 2140: 0000000000079840 51 FUNC LOCAL DEFAULT 4 __syscall_cancel_arch
>> 3561: 000000000006daf0 64 FUNC LOCAL DEFAULT 4 __syscall_cancel
>> 3700: 000000000006da60 140 FUNC LOCAL DEFAULT 4 __internal_syscall_cancel
>> 4566: 000000000006da00 87 FUNC LOCAL DEFAULT 4 __syscall_do_cancel
>>
>> Can we rely on those names (and assume there are only 4) or is it
>> better to be flexible and just create a dynamic array for any glibc
>> local function that matches the __*syscall*cancel* pattern?
>
> I don't think __syscall_do_cancel will need suppressions? It just
> starts unwinding.
>
> The names should remain fairly stable. We should add comments to the
> sources mentioning the valgrind dependency. Adhemerval, what do you
> think?
It should be reasonable, I will add then on the path as well. Although
the names are an implementation details, it should be ok add this
constraint.
>
> Does it matter for valgrind's purposes that those aren't dynamic
> symbols? In Fedora, we try to accommodate valgrind and similar tools
> and preserve the static symbol table, but not all distributions do this.
>
> Thanks,
> Florian
>
More information about the Libc-alpha
mailing list