📄 sys_parisc.c
字号:
/* * linux/arch/parisc/kernel/sys_parisc.c * * this implements the missing syscalls. */#include <asm/uaccess.h>#include <linux/file.h>#include <linux/fs.h>#include <linux/linkage.h>#include <linux/mm.h>#include <linux/mman.h>#include <linux/smp_lock.h>/* for some reason, "old_readdir" is the only syscall which does not begin * with "sys_", which breaks the ENTRY_* macros in syscall.S so I "fixed" * it here. */int sys_old_readdir(unsigned int fd, void *dirent, unsigned int count){ return old_readdir(fd, dirent, count);}int sys_pipe(int *fildes){ int fd[2]; int error; lock_kernel(); error = do_pipe(fd); unlock_kernel(); if (!error) { if (copy_to_user(fildes, fd, 2*sizeof(int))) error = -EFAULT; } return error;}int sys_pause(void){ current->state = TASK_INTERRUPTIBLE; schedule(); return -ERESTARTNOHAND;}int sys_mmap(unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, unsigned long fd, unsigned long offset){ struct file * file = NULL; int error; down_write(¤t->mm->mmap_sem); lock_kernel(); if (!(flags & MAP_ANONYMOUS)) { error = -EBADF; file = fget(fd); if (!file) goto out; } flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); error = do_mmap(file, addr, len, prot, flags, offset); if (file != NULL) fput(file);out: unlock_kernel(); up_write(¤t->mm->mmap_sem); return error;}int sys_ioperm(unsigned long from, unsigned long num, int on){ return -ENOSYS;}long sys_shmat_wrapper(int shmid, void *shmaddr, int shmflag){ extern int sys_shmat(int shmid, char *shmaddr, int shmflg, unsigned long * raddr); unsigned long raddr; int r; r = sys_shmat(shmid, shmaddr, shmflag, &raddr); if (r < 0) return r; return raddr;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -