tech-kern archive

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

Re: Request for implementation of KERN_PROC_SIGTRAMP sysctl



So for the purpose of the gdb unwinder, I would pass NULL for the sp argument?
The unwinder would only be checking the result to see __sigtramp_unwind_np returns null or not.
John

On Sun, Nov 14, 2021 at 2:49 PM Jason Thorpe <thorpej%me.com@localhost> wrote:

> On Oct 28, 2021, at 8:49 AM, Valery Ushakov <uwe%stderr.spb.ru@localhost> wrote:
>
> It is ucontext for the siginfo trampoline and sigcontext for the older
> one, isn't it?

Ok, I’ve settled on the following:

void *__sigtramp_unwind_np(void *pc, void *sp, int *versp);

Given a program counter and stack pointer, return a pointer to the context that will be restored when the signal handler returns.  The signal trampoline version is returned in *versp; versp must not be NULL, and passing NULL will result in undefined behavior.

Returns NULL if the provided pc is not within the signal trampoline, or if the location of the context to restore cannot be determined.

If the returned version is within the range __SIGTRAMP_SIGINFO_VERSION_MIN … __SIGTRAMP_SIGINFO_VERSION_MAX, then the returned context points to a ucontext_t.

If the returned version is within the range __SIGTRAMP_SIGCONTEXT_VERSION_MIN … __SIGTRAMP_SIGCONTEXT_VERSION_MAX, then the returned context points to a struct sigcontext.

Note that the layout of the context structures is architecture-dependent and may also be version-dependent.

Does this sound good to everyone?

-- thorpej



Home | Main Index | Thread Index | Old Index