fix previous commit that broke sigreturn. looks like the asm is needed.

This commit is contained in:
Rich Felker 2011-02-13 19:01:43 -05:00
parent 6027201e5a
commit dc3776d445
3 changed files with 17 additions and 5 deletions

15
src/signal/i386/restore.s Normal file
View File

@ -0,0 +1,15 @@
.global __restore
.type __restore,%function
__restore:
popl %eax
movl $119, %eax
int $0x80
.size __restore,.-__restore
.global __restore_rt
.type __restore_rt,%function
__restore_rt:
movl $173, %eax
int $0x80
.size __restore_rt,.-__restore_rt

0
src/signal/restore.c Normal file
View File

View File

@ -4,10 +4,7 @@
#include "syscall.h"
#include "pthread_impl.h"
static void restorer()
{
syscall0(__NR_rt_sigreturn);
}
void __restore(), __restore_rt();
int __libc_sigaction(int sig, const struct sigaction *sa, struct sigaction *old)
{
@ -21,7 +18,7 @@ int __libc_sigaction(int sig, const struct sigaction *sa, struct sigaction *old)
if (sa) {
ksa.handler = sa->sa_handler;
ksa.flags = sa->sa_flags | SA_RESTORER;
ksa.restorer = restorer;
ksa.restorer = (sa->sa_flags & SA_SIGINFO) ? __restore_rt : __restore;
ksa.mask = sa->sa_mask;
pksa = (long)&ksa;
}