this repo has no description
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Correct signal handling (fill in sa_restorer)

+10 -2
+10 -2
src/kernel/emulation/linux/signal/sigaction.c
··· 8 8 static void handler_linux_to_bsd(int linux_signum, struct linux_siginfo* info, void* ctxt); 9 9 static int sigflags_bsd_to_linux(int flags); 10 10 static int sigflags_linux_to_bsd(int flags); 11 + static void sig_restorer(void); 11 12 12 13 extern void* memcpy(void* dest, const void* src, unsigned long len); 13 14 ··· 29 30 sa_tramp = nsa->sa_tramp; 30 31 sa.sa_sigaction = &handler_linux_to_bsd; 31 32 sigset_bsd_to_linux(&nsa->sa_mask, &sa.sa_mask); 32 - sa.sa_flags = sigflags_bsd_to_linux(nsa->sa_flags); 33 - sa.sa_restorer = NULL; 33 + sa.sa_flags = sigflags_bsd_to_linux(nsa->sa_flags) | LINUX_SA_RESTORER; 34 + sa.sa_restorer = sig_restorer; 34 35 } 35 36 36 37 ret = LINUX_SYSCALL(__NR_rt_sigaction, linux_signum, ··· 63 64 binfo.si_signo = signum_linux_to_bsd(binfo.si_signo); 64 65 65 66 sig_handlers[linux_signum](bsd_signum, &binfo, ctxt); 67 + } 68 + 69 + static void sig_restorer(void) 70 + { 71 + LINUX_SYSCALL(__NR_rt_sigreturn); 72 + //__asm__("movl $137, %eax\n" 73 + // "syscall"); 66 74 } 67 75 68 76 static int sigflags_bsd_to_linux(int flags)