1 #define arch_sigreturn i386_arch_sigreturn 2 #include "i386/arch_sigreturn.c" 3 #undef arch_sigreturn 4 5 static void arch_sigreturn(struct tcb * tcp)6arch_sigreturn(struct tcb *tcp) 7 { 8 if (current_personality == 1) { 9 i386_arch_sigreturn(tcp); 10 return; 11 } 12 13 typedef struct { 14 uint32_t flags, link, stack[3], pad; 15 struct sigcontext mcontext; 16 } ucontext_x32_header; 17 18 #define X86_64_SIGMASK_OFFSET offsetof(struct ucontext, uc_sigmask) 19 #define X32_SIGMASK_OFFSET sizeof(ucontext_x32_header) 20 21 const kernel_ulong_t offset = 22 #ifdef X32 23 X32_SIGMASK_OFFSET; 24 #else 25 current_personality == 2 ? X32_SIGMASK_OFFSET : 26 X86_64_SIGMASK_OFFSET; 27 #endif 28 const kernel_ulong_t addr = (kernel_ulong_t) *x86_64_rsp_ptr + offset; 29 tprints("{mask="); 30 print_sigset_addr_len(tcp, addr, NSIG_BYTES); 31 tprints("}"); 32 } 33