Re: Yet another unwinding approach

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Mark Wielaard <mjw@xxxxxxxxxxxxxxxxx> writes:

> Hi Florian,
>
> On Wed, 2023-01-18 at 07:22 +0100, Florian Weimer wrote:
>> * Daniel Colascione:
>> 
>> > See, both pro-FP and anti-FP camps think that it's the kernel that has
>> > to do the unwinding unless we copy whole stacks into traces.
>> 
>> Well, I think we should explore hardware-assisted backtraces (shadow
>> stacks), which hopefully are going to get merged in Linux 6.2.
>
> Yes, that is also a good alternative if available. The shadow stack
> seems to be ideal because it is just the function return addresses,
> which basically is just the backtrace you are looking for.
>
>> If the unwind information is incomplete, this …
>> 
>> > 7) signal handler unwinds the calling thread however it wants (and can
>> > sleep and take page faults if needed)
>> 
>> … might encounter segmentation faults and terminate the process.  So
>> far, incorrect unwind information (whether it's a clobbered frame
>> pointer, or missing DWARF information about clobbered registers) is not
>> a problem, but it's kind of hard to validate this information from
>> within the process itself.  Maybe we'd have to add a magic memcpy first
>> to the vDSO, which the kernel recognizes based on the code addresses,
>> and suppresses sending the signal for it.
>
> Yeah, I am not too afraid of that happening with an .eh_frame based
> unwinder unless someone deliberately produced a bad table (or dlcloses
> a library which still has code on the call stack). You still have to be
> careful about the stack bounds of course.
>
> But it is something to keep in mind, accidents happen. I assume that
> any (seg) fault caused by the unwind signal thread will simply end that
> contribution of user space to the backtrace (instead of really
> generating a SEGV)
>
> But it is tricky to handle that without kernel support. As a fallback
> you could install a SIGSEGV handler that handles the fault and somehow
> makes the original SIGPROF based handler (if you use that) sigreturn.

Yep. SIGSEGV in the unwinder could just longjmp back to the top of
the unwinder.

BTW: I'm imagining overloading SIGRTMIN+0, not SIGPROF, because
SIGRTMIN+0 is already reserved for libc.
_______________________________________________
devel mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxx
Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: https://lists.fedoraproject.org/archives/list/devel@xxxxxxxxxxxxxxxxxxxxxxx
Do not reply to spam, report it: https://pagure.io/fedora-infrastructure/new_issue




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Fedora Announce]     [Fedora Users]     [Fedora Kernel]     [Fedora Testing]     [Fedora Formulas]     [Fedora PHP Devel]     [Kernel Development]     [Fedora Legacy]     [Fedora Maintainers]     [Fedora Desktop]     [PAM]     [Red Hat Development]     [Gimp]     [Yosemite News]

  Powered by Linux