On Mon, Jan 16, 2023 at 11:33 PM Daniel Colascione <dan...@dancol.org> wrote:
>
> > Having the vDSO do the unwinding allows the unwinding to be entirely
> transparent to userspace programs and libraries
>
> Why *should* unwinding be transparent to userspace programs and libraries? 
> Userspace can contribute to making unwinding better, especially in the 
> managed case, by hooking into the unwind mechanism and extending it. The 
> ability to extend unwinding so that it works with interpreters and managed 
> runtime environments implies that the userspace mechanism is accessible, not 
> transparent. Additionally, userspace configuration can set unwind policy more 
> flexibly than the kernel can.
>
> I'm not sure I understand the value of the "entirely transparent" argument or 
> why it should outweigh the extensibility and efficiency advantages of putting 
> this functionality in libc. I also haven't seen a strong rationale for 
> putting this functionality in vDSO instead of libc. libc is the traditional 
> place where we put all userspace bookkeeping for a Linux process. For 
> example, libc manages the list of threads and ensures setreuid(2) atomicity 
> across them. It would be strange and inconsistent for vDSO to take on this 
> role at this point.
>
> How would you support interpreter and managed runtime extension of the unwind 
> mechanism in a vDSO-based model? How would you deal with the problem of how 
> putting a large blob of unwinder code in the vDSO would permanently pin it 
> into memory even when unwinding is not being used?
>
> You've proposed putting the unwinder in the vDSO and thunking to it from 
> kernel space in some manner distinct from signal delivery. I believe that 
> while unwinding in userspace is fundamentally a good idea, both aspects of 
> your proposed implementation depart unnecessarily from precedent and that we 
> can achieve the same functionality with minimal changes to the current 
> user-kernel interface by using a signal, not a new kind of kernel-directed 
> jump to the vDSO, to start the unwind process.
>
> > languages such as Go that do not use any libc
>
> Go uses libc on operating systems like Windows, Solaris, and OpenBSD. Go's 
> bypassing libc on Linux serves no technical purpose and should not be 
> encouraged. That said, the mechanism I'm proposing is compatible with Go's 
> non-libc Linux model: in this model, Go would merely have to implement the 
> profiling signal protocol itself, without libc's help. There's nothing 
> special or magical about libc in the model I'm proposing: the Go runtime 
> could implement the same protocol with the kernel that libc uses.

Linux is the only operating system where it supports libc-less
compilation nowadays. It is the exception, rather than the rule.



-- 
真実はいつも一つ!/ Always, there's only one truth!
_______________________________________________
devel mailing list -- devel@lists.fedoraproject.org
To unsubscribe send an email to devel-le...@lists.fedoraproject.org
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@lists.fedoraproject.org
Do not reply to spam, report it: 
https://pagure.io/fedora-infrastructure/new_issue

Reply via email to