linux/arch/e2k/fast_syscalls/fast_siggetmask.c

30 lines
627 B
C

#include <asm/fast_syscalls.h>
#include <asm/uaccess.h>
#include <asm/unistd.h>
#if _NSIG != 64
# error We read u64 value here...
#endif
notrace __interrupt __section(.ttable_entry6_C)
int fast_sys_siggetmask(u64 __user *oset, size_t sigsetsize)
{
struct thread_info *const ti =
(struct thread_info *) E2K_GET_DSREG_NV(osr0);
struct task_struct *task = ti->task;
u64 set;
set = task->blocked.sig[0];
if (unlikely(sigsetsize != 8))
return -EINVAL;
oset = (typeof(oset)) ((u64) oset & E2K_VA_MASK);
if (unlikely((u64) oset + sizeof(sigset_t) > ti->addr_limit.seg))
return -EFAULT;
*oset = set;
return 0;
}