blob: 1de0a0ad258c2d462b9e7046e1d7a4545b9fee4f [file] [log] [blame]
#define arch_sigreturn i386_arch_sigreturn
#include "i386/arch_sigreturn.c"
#undef arch_sigreturn
static void
arch_sigreturn(struct tcb *tcp)
{
if (current_personality == 1) {
i386_arch_sigreturn(tcp);
return;
}
typedef struct {
uint32_t flags, link, stack[3], pad;
struct sigcontext mcontext;
} ucontext_x32_header;
#define X86_64_SIGMASK_OFFSET offsetof(struct ucontext, uc_sigmask)
#define X32_SIGMASK_OFFSET sizeof(ucontext_x32_header)
const unsigned long offset =
#ifdef X32
X32_SIGMASK_OFFSET;
#else
current_personality == 2 ? X32_SIGMASK_OFFSET :
X86_64_SIGMASK_OFFSET;
#endif
const unsigned long addr = (unsigned long) *x86_64_rsp_ptr + offset;
tprints("{mask=");
print_sigset_addr_len(tcp, addr, NSIG / 8);
tprints("}");
}