002ec58eb5
ppc64 has its own version of sys_time. It looks pretty scary, touching a whole bunch of variables without any locking or memory ordering. In fact, a recent bugreport has shown it can actually go backwards. Time to remove it and just use the generic sys_time, which is implemented on top of do_gettimeofday. Signed-off-by: Anton Blanchard <anton@samba.org> Signed-off-by: Paul Mackerras <paulus@samba.org>
323 lines
7.4 KiB
ArmAsm
323 lines
7.4 KiB
ArmAsm
/*
|
|
* This file contains the table of syscall-handling functions.
|
|
* Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org)
|
|
*
|
|
* Largely rewritten by Cort Dougan (cort@cs.nmt.edu)
|
|
* and Paul Mackerras.
|
|
*
|
|
* Adapted for iSeries by Mike Corrigan (mikejc@us.ibm.com)
|
|
* PPC64 updates by Dave Engebretsen (engebret@us.ibm.com)
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version
|
|
* 2 of the License, or (at your option) any later version.
|
|
*/
|
|
|
|
#include <linux/config.h>
|
|
#include <asm/ppc_asm.h>
|
|
|
|
#ifdef CONFIG_PPC64
|
|
#define SYSCALL(func) .llong .sys_##func,.sys_##func
|
|
#define COMPAT_SYS(func) .llong .sys_##func,.compat_sys_##func
|
|
#define PPC_SYS(func) .llong .ppc_##func,.ppc_##func
|
|
#define OLDSYS(func) .llong .sys_ni_syscall,.sys_ni_syscall
|
|
#define SYS32ONLY(func) .llong .sys_ni_syscall,.compat_sys_##func
|
|
#define SYSX(f, f3264, f32) .llong .f,.f3264
|
|
#else
|
|
#define SYSCALL(func) .long sys_##func
|
|
#define COMPAT_SYS(func) .long sys_##func
|
|
#define PPC_SYS(func) .long ppc_##func
|
|
#define OLDSYS(func) .long sys_##func
|
|
#define SYS32ONLY(func) .long sys_##func
|
|
#define SYSX(f, f3264, f32) .long f32
|
|
#endif
|
|
|
|
#ifdef CONFIG_PPC64
|
|
#define sys_sigpending sys_ni_syscall
|
|
#define sys_old_getrlimit sys_ni_syscall
|
|
#else
|
|
#define ppc_rtas sys_ni_syscall
|
|
#endif
|
|
|
|
_GLOBAL(sys_call_table)
|
|
SYSCALL(restart_syscall)
|
|
SYSCALL(exit)
|
|
PPC_SYS(fork)
|
|
SYSCALL(read)
|
|
SYSCALL(write)
|
|
COMPAT_SYS(open)
|
|
SYSCALL(close)
|
|
COMPAT_SYS(waitpid)
|
|
COMPAT_SYS(creat)
|
|
SYSCALL(link)
|
|
SYSCALL(unlink)
|
|
COMPAT_SYS(execve)
|
|
SYSCALL(chdir)
|
|
COMPAT_SYS(time)
|
|
SYSCALL(mknod)
|
|
SYSCALL(chmod)
|
|
SYSCALL(lchown)
|
|
SYSCALL(ni_syscall)
|
|
OLDSYS(stat)
|
|
SYSX(sys_lseek,ppc32_lseek,sys_lseek)
|
|
SYSCALL(getpid)
|
|
COMPAT_SYS(mount)
|
|
SYSX(sys_ni_syscall,sys_oldumount,sys_oldumount)
|
|
SYSCALL(setuid)
|
|
SYSCALL(getuid)
|
|
COMPAT_SYS(stime)
|
|
COMPAT_SYS(ptrace)
|
|
SYSCALL(alarm)
|
|
OLDSYS(fstat)
|
|
COMPAT_SYS(pause)
|
|
COMPAT_SYS(utime)
|
|
SYSCALL(ni_syscall)
|
|
SYSCALL(ni_syscall)
|
|
COMPAT_SYS(access)
|
|
COMPAT_SYS(nice)
|
|
SYSCALL(ni_syscall)
|
|
SYSCALL(sync)
|
|
COMPAT_SYS(kill)
|
|
SYSCALL(rename)
|
|
COMPAT_SYS(mkdir)
|
|
SYSCALL(rmdir)
|
|
SYSCALL(dup)
|
|
SYSCALL(pipe)
|
|
COMPAT_SYS(times)
|
|
SYSCALL(ni_syscall)
|
|
SYSCALL(brk)
|
|
SYSCALL(setgid)
|
|
SYSCALL(getgid)
|
|
SYSCALL(signal)
|
|
SYSCALL(geteuid)
|
|
SYSCALL(getegid)
|
|
SYSCALL(acct)
|
|
SYSCALL(umount)
|
|
SYSCALL(ni_syscall)
|
|
COMPAT_SYS(ioctl)
|
|
COMPAT_SYS(fcntl)
|
|
SYSCALL(ni_syscall)
|
|
COMPAT_SYS(setpgid)
|
|
SYSCALL(ni_syscall)
|
|
SYSX(sys_ni_syscall,sys_olduname, sys_olduname)
|
|
COMPAT_SYS(umask)
|
|
SYSCALL(chroot)
|
|
SYSCALL(ustat)
|
|
SYSCALL(dup2)
|
|
SYSCALL(getppid)
|
|
SYSCALL(getpgrp)
|
|
SYSCALL(setsid)
|
|
SYS32ONLY(sigaction)
|
|
SYSCALL(sgetmask)
|
|
COMPAT_SYS(ssetmask)
|
|
SYSCALL(setreuid)
|
|
SYSCALL(setregid)
|
|
SYS32ONLY(sigsuspend)
|
|
COMPAT_SYS(sigpending)
|
|
COMPAT_SYS(sethostname)
|
|
COMPAT_SYS(setrlimit)
|
|
COMPAT_SYS(old_getrlimit)
|
|
COMPAT_SYS(getrusage)
|
|
COMPAT_SYS(gettimeofday)
|
|
COMPAT_SYS(settimeofday)
|
|
COMPAT_SYS(getgroups)
|
|
COMPAT_SYS(setgroups)
|
|
SYSX(sys_ni_syscall,sys_ni_syscall,ppc_select)
|
|
SYSCALL(symlink)
|
|
OLDSYS(lstat)
|
|
COMPAT_SYS(readlink)
|
|
SYSCALL(uselib)
|
|
SYSCALL(swapon)
|
|
SYSCALL(reboot)
|
|
SYSX(sys_ni_syscall,old32_readdir,old_readdir)
|
|
SYSCALL(mmap)
|
|
SYSCALL(munmap)
|
|
SYSCALL(truncate)
|
|
SYSCALL(ftruncate)
|
|
SYSCALL(fchmod)
|
|
SYSCALL(fchown)
|
|
COMPAT_SYS(getpriority)
|
|
COMPAT_SYS(setpriority)
|
|
SYSCALL(ni_syscall)
|
|
COMPAT_SYS(statfs)
|
|
COMPAT_SYS(fstatfs)
|
|
SYSCALL(ni_syscall)
|
|
COMPAT_SYS(socketcall)
|
|
COMPAT_SYS(syslog)
|
|
COMPAT_SYS(setitimer)
|
|
COMPAT_SYS(getitimer)
|
|
COMPAT_SYS(newstat)
|
|
COMPAT_SYS(newlstat)
|
|
COMPAT_SYS(newfstat)
|
|
SYSX(sys_ni_syscall,sys_uname,sys_uname)
|
|
SYSCALL(ni_syscall)
|
|
SYSCALL(vhangup)
|
|
SYSCALL(ni_syscall)
|
|
SYSCALL(ni_syscall)
|
|
COMPAT_SYS(wait4)
|
|
SYSCALL(swapoff)
|
|
COMPAT_SYS(sysinfo)
|
|
COMPAT_SYS(ipc)
|
|
SYSCALL(fsync)
|
|
SYS32ONLY(sigreturn)
|
|
PPC_SYS(clone)
|
|
COMPAT_SYS(setdomainname)
|
|
PPC_SYS(newuname)
|
|
SYSCALL(ni_syscall)
|
|
COMPAT_SYS(adjtimex)
|
|
SYSCALL(mprotect)
|
|
SYSX(sys_ni_syscall,compat_sys_sigprocmask,sys_sigprocmask)
|
|
SYSCALL(ni_syscall)
|
|
SYSCALL(init_module)
|
|
SYSCALL(delete_module)
|
|
SYSCALL(ni_syscall)
|
|
SYSCALL(quotactl)
|
|
COMPAT_SYS(getpgid)
|
|
SYSCALL(fchdir)
|
|
SYSCALL(bdflush)
|
|
COMPAT_SYS(sysfs)
|
|
SYSX(ppc64_personality,ppc64_personality,sys_personality)
|
|
SYSCALL(ni_syscall)
|
|
SYSCALL(setfsuid)
|
|
SYSCALL(setfsgid)
|
|
SYSCALL(llseek)
|
|
COMPAT_SYS(getdents)
|
|
SYSX(sys_select,ppc32_select,ppc_select)
|
|
SYSCALL(flock)
|
|
SYSCALL(msync)
|
|
COMPAT_SYS(readv)
|
|
COMPAT_SYS(writev)
|
|
COMPAT_SYS(getsid)
|
|
SYSCALL(fdatasync)
|
|
COMPAT_SYS(sysctl)
|
|
SYSCALL(mlock)
|
|
SYSCALL(munlock)
|
|
SYSCALL(mlockall)
|
|
SYSCALL(munlockall)
|
|
COMPAT_SYS(sched_setparam)
|
|
COMPAT_SYS(sched_getparam)
|
|
COMPAT_SYS(sched_setscheduler)
|
|
COMPAT_SYS(sched_getscheduler)
|
|
SYSCALL(sched_yield)
|
|
COMPAT_SYS(sched_get_priority_max)
|
|
COMPAT_SYS(sched_get_priority_min)
|
|
COMPAT_SYS(sched_rr_get_interval)
|
|
COMPAT_SYS(nanosleep)
|
|
SYSCALL(mremap)
|
|
SYSCALL(setresuid)
|
|
SYSCALL(getresuid)
|
|
SYSCALL(ni_syscall)
|
|
SYSCALL(poll)
|
|
COMPAT_SYS(nfsservctl)
|
|
SYSCALL(setresgid)
|
|
SYSCALL(getresgid)
|
|
COMPAT_SYS(prctl)
|
|
COMPAT_SYS(rt_sigreturn)
|
|
COMPAT_SYS(rt_sigaction)
|
|
COMPAT_SYS(rt_sigprocmask)
|
|
COMPAT_SYS(rt_sigpending)
|
|
COMPAT_SYS(rt_sigtimedwait)
|
|
COMPAT_SYS(rt_sigqueueinfo)
|
|
COMPAT_SYS(rt_sigsuspend)
|
|
COMPAT_SYS(pread64)
|
|
COMPAT_SYS(pwrite64)
|
|
SYSCALL(chown)
|
|
SYSCALL(getcwd)
|
|
SYSCALL(capget)
|
|
SYSCALL(capset)
|
|
COMPAT_SYS(sigaltstack)
|
|
SYSX(sys_sendfile64,compat_sys_sendfile,sys_sendfile)
|
|
SYSCALL(ni_syscall)
|
|
SYSCALL(ni_syscall)
|
|
PPC_SYS(vfork)
|
|
COMPAT_SYS(getrlimit)
|
|
COMPAT_SYS(readahead)
|
|
SYS32ONLY(mmap2)
|
|
SYS32ONLY(truncate64)
|
|
SYS32ONLY(ftruncate64)
|
|
SYSX(sys_ni_syscall,sys_stat64,sys_stat64)
|
|
SYSX(sys_ni_syscall,sys_lstat64,sys_lstat64)
|
|
SYSX(sys_ni_syscall,sys_fstat64,sys_fstat64)
|
|
COMPAT_SYS(pciconfig_read)
|
|
COMPAT_SYS(pciconfig_write)
|
|
COMPAT_SYS(pciconfig_iobase)
|
|
SYSCALL(ni_syscall)
|
|
SYSCALL(getdents64)
|
|
SYSCALL(pivot_root)
|
|
SYSX(sys_ni_syscall,compat_sys_fcntl64,sys_fcntl64)
|
|
SYSCALL(madvise)
|
|
SYSCALL(mincore)
|
|
SYSCALL(gettid)
|
|
SYSCALL(tkill)
|
|
SYSCALL(setxattr)
|
|
SYSCALL(lsetxattr)
|
|
SYSCALL(fsetxattr)
|
|
SYSCALL(getxattr)
|
|
SYSCALL(lgetxattr)
|
|
SYSCALL(fgetxattr)
|
|
SYSCALL(listxattr)
|
|
SYSCALL(llistxattr)
|
|
SYSCALL(flistxattr)
|
|
SYSCALL(removexattr)
|
|
SYSCALL(lremovexattr)
|
|
SYSCALL(fremovexattr)
|
|
COMPAT_SYS(futex)
|
|
COMPAT_SYS(sched_setaffinity)
|
|
COMPAT_SYS(sched_getaffinity)
|
|
SYSCALL(ni_syscall)
|
|
SYSCALL(ni_syscall)
|
|
SYS32ONLY(sendfile64)
|
|
COMPAT_SYS(io_setup)
|
|
SYSCALL(io_destroy)
|
|
COMPAT_SYS(io_getevents)
|
|
COMPAT_SYS(io_submit)
|
|
SYSCALL(io_cancel)
|
|
SYSCALL(set_tid_address)
|
|
SYSX(sys_fadvise64,ppc32_fadvise64,sys_fadvise64)
|
|
SYSCALL(exit_group)
|
|
SYSX(sys_lookup_dcookie,ppc32_lookup_dcookie,sys_lookup_dcookie)
|
|
SYSCALL(epoll_create)
|
|
SYSCALL(epoll_ctl)
|
|
SYSCALL(epoll_wait)
|
|
SYSCALL(remap_file_pages)
|
|
SYSX(sys_timer_create,ppc32_timer_create,sys_timer_create)
|
|
COMPAT_SYS(timer_settime)
|
|
COMPAT_SYS(timer_gettime)
|
|
SYSCALL(timer_getoverrun)
|
|
SYSCALL(timer_delete)
|
|
COMPAT_SYS(clock_settime)
|
|
COMPAT_SYS(clock_gettime)
|
|
COMPAT_SYS(clock_getres)
|
|
COMPAT_SYS(clock_nanosleep)
|
|
COMPAT_SYS(swapcontext)
|
|
COMPAT_SYS(tgkill)
|
|
COMPAT_SYS(utimes)
|
|
COMPAT_SYS(statfs64)
|
|
COMPAT_SYS(fstatfs64)
|
|
SYSX(sys_ni_syscall, ppc_fadvise64_64, ppc_fadvise64_64)
|
|
PPC_SYS(rtas)
|
|
OLDSYS(debug_setcontext)
|
|
SYSCALL(ni_syscall)
|
|
SYSCALL(ni_syscall)
|
|
COMPAT_SYS(mbind)
|
|
COMPAT_SYS(get_mempolicy)
|
|
COMPAT_SYS(set_mempolicy)
|
|
COMPAT_SYS(mq_open)
|
|
SYSCALL(mq_unlink)
|
|
COMPAT_SYS(mq_timedsend)
|
|
COMPAT_SYS(mq_timedreceive)
|
|
COMPAT_SYS(mq_notify)
|
|
COMPAT_SYS(mq_getsetattr)
|
|
COMPAT_SYS(kexec_load)
|
|
COMPAT_SYS(add_key)
|
|
COMPAT_SYS(request_key)
|
|
COMPAT_SYS(keyctl)
|
|
COMPAT_SYS(waitid)
|
|
COMPAT_SYS(ioprio_set)
|
|
COMPAT_SYS(ioprio_get)
|
|
SYSCALL(inotify_init)
|
|
SYSCALL(inotify_add_watch)
|
|
SYSCALL(inotify_rm_watch)
|
|
SYSCALL(spu_run)
|
|
SYSCALL(spu_create)
|