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 <thor...@me.com> wrote: > > > On Oct 28, 2021, at 8:49 AM, Valery Ushakov <u...@stderr.spb.ru> 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 > >