support sigaltstack

This commit is contained in:
Tomoki Shirasawa
2014-06-25 13:45:33 +09:00
parent bbb7f77706
commit 770eae0186
5 changed files with 59 additions and 25 deletions

View File

@@ -1424,7 +1424,6 @@ SYSCALL_DECLARE(rt_sigprocmask)
break;
}
}
proc->supmask = proc->sigmask;
ihk_mc_spinlock_unlock(&proc->sighandler->lock, flag);
return 0;
fault:
@@ -1587,15 +1586,28 @@ SYSCALL_DECLARE(sigaltstack)
stack_t *oss = (stack_t *)ihk_mc_syscall_arg1(ctx);
stack_t wss;
memset(&wss, '\0', sizeof wss);
if(oss)
if(copy_to_user(proc, oss, &wss, sizeof wss))
if(copy_to_user(proc, oss, &proc->sigstack, sizeof wss))
return -EFAULT;
if(ss)
if(ss){
if(copy_from_user(proc, &wss, ss, sizeof wss))
return -EFAULT;
if(wss.ss_flags != 0 && wss.ss_flags != SS_DISABLE)
return -EINVAL;
if(wss.ss_flags == SS_DISABLE){
proc->sigstack.ss_sp = NULL;
proc->sigstack.ss_flags = SS_DISABLE;
proc->sigstack.ss_size = 0;
}
else{
if(wss.ss_size < MINSIGSTKSZ)
return -ENOMEM;
return -EOPNOTSUPP;
memcpy(&proc->sigstack, &wss, sizeof wss);
}
}
return 0;
}
SYSCALL_DECLARE(madvise)