fa1b4f91d6
ARM entry-common.S needs to know syscall table size; in itself that would not be a problem, but there's an additional constraint - some of the instructions using it want a constant that would be a multiple of 4. So we have to pad syscall table with sys_ni_syscall and that's where the trouble begins. .rept pseudo-op wants a constant expression for number of repetitions and subtraction of two labels (before and after syscall table) doesn't always get simplified to constant early enough for .rept. If labels end up in different frags, we lose. And while the frag size is large enough (slightly below 4Kb), the syscall table is about 1/3 of that. We used to get away with that, but the recent changes had been enough to trigger the breakage. Proper fix is simple: have a macro (CALL(x)) to populate the table instead of using explicit .long x and the first time we include calls.S have it defined to .equ NR_syscalls,NR_syscalls+1. Then we can find the proper amount of padding on the first inclusion simply by looking at NR_syscalls at that time. And that will be constant, no matter what. Moreover, the same trick kills the need of having an estimate of padded NR_syscalls - it will be calculated for free at the same time. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
341 lines
9.1 KiB
ArmAsm
341 lines
9.1 KiB
ArmAsm
/*
|
|
* linux/arch/arm/kernel/calls.S
|
|
*
|
|
* Copyright (C) 1995-2005 Russell King
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This file is included thrice in entry-common.S
|
|
*/
|
|
/* 0 */ CALL(sys_restart_syscall)
|
|
CALL(sys_exit)
|
|
CALL(sys_fork_wrapper)
|
|
CALL(sys_read)
|
|
CALL(sys_write)
|
|
/* 5 */ CALL(sys_open)
|
|
CALL(sys_close)
|
|
CALL(sys_ni_syscall) /* was sys_waitpid */
|
|
CALL(sys_creat)
|
|
CALL(sys_link)
|
|
/* 10 */ CALL(sys_unlink)
|
|
CALL(sys_execve_wrapper)
|
|
CALL(sys_chdir)
|
|
CALL(OBSOLETE(sys_time)) /* used by libc4 */
|
|
CALL(sys_mknod)
|
|
/* 15 */ CALL(sys_chmod)
|
|
CALL(sys_lchown16)
|
|
CALL(sys_ni_syscall) /* was sys_break */
|
|
CALL(sys_ni_syscall) /* was sys_stat */
|
|
CALL(sys_lseek)
|
|
/* 20 */ CALL(sys_getpid)
|
|
CALL(sys_mount)
|
|
CALL(OBSOLETE(sys_oldumount)) /* used by libc4 */
|
|
CALL(sys_setuid16)
|
|
CALL(sys_getuid16)
|
|
/* 25 */ CALL(OBSOLETE(sys_stime))
|
|
CALL(sys_ptrace)
|
|
CALL(OBSOLETE(sys_alarm)) /* used by libc4 */
|
|
CALL(sys_ni_syscall) /* was sys_fstat */
|
|
CALL(sys_pause)
|
|
/* 30 */ CALL(OBSOLETE(sys_utime)) /* used by libc4 */
|
|
CALL(sys_ni_syscall) /* was sys_stty */
|
|
CALL(sys_ni_syscall) /* was sys_getty */
|
|
CALL(sys_access)
|
|
CALL(sys_nice)
|
|
/* 35 */ CALL(sys_ni_syscall) /* was sys_ftime */
|
|
CALL(sys_sync)
|
|
CALL(sys_kill)
|
|
CALL(sys_rename)
|
|
CALL(sys_mkdir)
|
|
/* 40 */ CALL(sys_rmdir)
|
|
CALL(sys_dup)
|
|
CALL(sys_pipe)
|
|
CALL(sys_times)
|
|
CALL(sys_ni_syscall) /* was sys_prof */
|
|
/* 45 */ CALL(sys_brk)
|
|
CALL(sys_setgid16)
|
|
CALL(sys_getgid16)
|
|
CALL(sys_ni_syscall) /* was sys_signal */
|
|
CALL(sys_geteuid16)
|
|
/* 50 */ CALL(sys_getegid16)
|
|
CALL(sys_acct)
|
|
CALL(sys_umount)
|
|
CALL(sys_ni_syscall) /* was sys_lock */
|
|
CALL(sys_ioctl)
|
|
/* 55 */ CALL(sys_fcntl)
|
|
CALL(sys_ni_syscall) /* was sys_mpx */
|
|
CALL(sys_setpgid)
|
|
CALL(sys_ni_syscall) /* was sys_ulimit */
|
|
CALL(sys_ni_syscall) /* was sys_olduname */
|
|
/* 60 */ CALL(sys_umask)
|
|
CALL(sys_chroot)
|
|
CALL(sys_ustat)
|
|
CALL(sys_dup2)
|
|
CALL(sys_getppid)
|
|
/* 65 */ CALL(sys_getpgrp)
|
|
CALL(sys_setsid)
|
|
CALL(sys_sigaction)
|
|
CALL(sys_ni_syscall) /* was sys_sgetmask */
|
|
CALL(sys_ni_syscall) /* was sys_ssetmask */
|
|
/* 70 */ CALL(sys_setreuid16)
|
|
CALL(sys_setregid16)
|
|
CALL(sys_sigsuspend_wrapper)
|
|
CALL(sys_sigpending)
|
|
CALL(sys_sethostname)
|
|
/* 75 */ CALL(sys_setrlimit)
|
|
CALL(OBSOLETE(sys_old_getrlimit)) /* used by libc4 */
|
|
CALL(sys_getrusage)
|
|
CALL(sys_gettimeofday)
|
|
CALL(sys_settimeofday)
|
|
/* 80 */ CALL(sys_getgroups16)
|
|
CALL(sys_setgroups16)
|
|
CALL(OBSOLETE(old_select)) /* used by libc4 */
|
|
CALL(sys_symlink)
|
|
CALL(sys_ni_syscall) /* was sys_lstat */
|
|
/* 85 */ CALL(sys_readlink)
|
|
CALL(sys_uselib)
|
|
CALL(sys_swapon)
|
|
CALL(sys_reboot)
|
|
CALL(OBSOLETE(old_readdir)) /* used by libc4 */
|
|
/* 90 */ CALL(OBSOLETE(old_mmap)) /* used by libc4 */
|
|
CALL(sys_munmap)
|
|
CALL(sys_truncate)
|
|
CALL(sys_ftruncate)
|
|
CALL(sys_fchmod)
|
|
/* 95 */ CALL(sys_fchown16)
|
|
CALL(sys_getpriority)
|
|
CALL(sys_setpriority)
|
|
CALL(sys_ni_syscall) /* was sys_profil */
|
|
CALL(sys_statfs)
|
|
/* 100 */ CALL(sys_fstatfs)
|
|
CALL(sys_ni_syscall)
|
|
CALL(OBSOLETE(sys_socketcall))
|
|
CALL(sys_syslog)
|
|
CALL(sys_setitimer)
|
|
/* 105 */ CALL(sys_getitimer)
|
|
CALL(sys_newstat)
|
|
CALL(sys_newlstat)
|
|
CALL(sys_newfstat)
|
|
CALL(sys_ni_syscall) /* was sys_uname */
|
|
/* 110 */ CALL(sys_ni_syscall) /* was sys_iopl */
|
|
CALL(sys_vhangup)
|
|
CALL(sys_ni_syscall)
|
|
CALL(OBSOLETE(sys_syscall)) /* call a syscall */
|
|
CALL(sys_wait4)
|
|
/* 115 */ CALL(sys_swapoff)
|
|
CALL(sys_sysinfo)
|
|
CALL(OBSOLETE(ABI(sys_ipc, sys_oabi_ipc)))
|
|
CALL(sys_fsync)
|
|
CALL(sys_sigreturn_wrapper)
|
|
/* 120 */ CALL(sys_clone_wrapper)
|
|
CALL(sys_setdomainname)
|
|
CALL(sys_newuname)
|
|
CALL(sys_ni_syscall)
|
|
CALL(sys_adjtimex)
|
|
/* 125 */ CALL(sys_mprotect)
|
|
CALL(sys_sigprocmask)
|
|
CALL(sys_ni_syscall) /* was sys_create_module */
|
|
CALL(sys_init_module)
|
|
CALL(sys_delete_module)
|
|
/* 130 */ CALL(sys_ni_syscall) /* was sys_get_kernel_syms */
|
|
CALL(sys_quotactl)
|
|
CALL(sys_getpgid)
|
|
CALL(sys_fchdir)
|
|
CALL(sys_bdflush)
|
|
/* 135 */ CALL(sys_sysfs)
|
|
CALL(sys_personality)
|
|
CALL(sys_ni_syscall) /* CALL(_sys_afs_syscall) */
|
|
CALL(sys_setfsuid16)
|
|
CALL(sys_setfsgid16)
|
|
/* 140 */ CALL(sys_llseek)
|
|
CALL(sys_getdents)
|
|
CALL(sys_select)
|
|
CALL(sys_flock)
|
|
CALL(sys_msync)
|
|
/* 145 */ CALL(sys_readv)
|
|
CALL(sys_writev)
|
|
CALL(sys_getsid)
|
|
CALL(sys_fdatasync)
|
|
CALL(sys_sysctl)
|
|
/* 150 */ CALL(sys_mlock)
|
|
CALL(sys_munlock)
|
|
CALL(sys_mlockall)
|
|
CALL(sys_munlockall)
|
|
CALL(sys_sched_setparam)
|
|
/* 155 */ CALL(sys_sched_getparam)
|
|
CALL(sys_sched_setscheduler)
|
|
CALL(sys_sched_getscheduler)
|
|
CALL(sys_sched_yield)
|
|
CALL(sys_sched_get_priority_max)
|
|
/* 160 */ CALL(sys_sched_get_priority_min)
|
|
CALL(sys_sched_rr_get_interval)
|
|
CALL(sys_nanosleep)
|
|
CALL(sys_arm_mremap)
|
|
CALL(sys_setresuid16)
|
|
/* 165 */ CALL(sys_getresuid16)
|
|
CALL(sys_ni_syscall)
|
|
CALL(sys_ni_syscall) /* was sys_query_module */
|
|
CALL(sys_poll)
|
|
CALL(sys_nfsservctl)
|
|
/* 170 */ CALL(sys_setresgid16)
|
|
CALL(sys_getresgid16)
|
|
CALL(sys_prctl)
|
|
CALL(sys_rt_sigreturn_wrapper)
|
|
CALL(sys_rt_sigaction)
|
|
/* 175 */ CALL(sys_rt_sigprocmask)
|
|
CALL(sys_rt_sigpending)
|
|
CALL(sys_rt_sigtimedwait)
|
|
CALL(sys_rt_sigqueueinfo)
|
|
CALL(sys_rt_sigsuspend_wrapper)
|
|
/* 180 */ CALL(ABI(sys_pread64, sys_oabi_pread64))
|
|
CALL(ABI(sys_pwrite64, sys_oabi_pwrite64))
|
|
CALL(sys_chown16)
|
|
CALL(sys_getcwd)
|
|
CALL(sys_capget)
|
|
/* 185 */ CALL(sys_capset)
|
|
CALL(sys_sigaltstack_wrapper)
|
|
CALL(sys_sendfile)
|
|
CALL(sys_ni_syscall)
|
|
CALL(sys_ni_syscall)
|
|
/* 190 */ CALL(sys_vfork_wrapper)
|
|
CALL(sys_getrlimit)
|
|
CALL(sys_mmap2)
|
|
CALL(ABI(sys_truncate64, sys_oabi_truncate64))
|
|
CALL(ABI(sys_ftruncate64, sys_oabi_ftruncate64))
|
|
/* 195 */ CALL(ABI(sys_stat64, sys_oabi_stat64))
|
|
CALL(ABI(sys_lstat64, sys_oabi_lstat64))
|
|
CALL(ABI(sys_fstat64, sys_oabi_fstat64))
|
|
CALL(sys_lchown)
|
|
CALL(sys_getuid)
|
|
/* 200 */ CALL(sys_getgid)
|
|
CALL(sys_geteuid)
|
|
CALL(sys_getegid)
|
|
CALL(sys_setreuid)
|
|
CALL(sys_setregid)
|
|
/* 205 */ CALL(sys_getgroups)
|
|
CALL(sys_setgroups)
|
|
CALL(sys_fchown)
|
|
CALL(sys_setresuid)
|
|
CALL(sys_getresuid)
|
|
/* 210 */ CALL(sys_setresgid)
|
|
CALL(sys_getresgid)
|
|
CALL(sys_chown)
|
|
CALL(sys_setuid)
|
|
CALL(sys_setgid)
|
|
/* 215 */ CALL(sys_setfsuid)
|
|
CALL(sys_setfsgid)
|
|
CALL(sys_getdents64)
|
|
CALL(sys_pivot_root)
|
|
CALL(sys_mincore)
|
|
/* 220 */ CALL(sys_madvise)
|
|
CALL(ABI(sys_fcntl64, sys_oabi_fcntl64))
|
|
CALL(sys_ni_syscall) /* TUX */
|
|
CALL(sys_ni_syscall)
|
|
CALL(sys_gettid)
|
|
/* 225 */ CALL(ABI(sys_readahead, sys_oabi_readahead))
|
|
CALL(sys_setxattr)
|
|
CALL(sys_lsetxattr)
|
|
CALL(sys_fsetxattr)
|
|
CALL(sys_getxattr)
|
|
/* 230 */ CALL(sys_lgetxattr)
|
|
CALL(sys_fgetxattr)
|
|
CALL(sys_listxattr)
|
|
CALL(sys_llistxattr)
|
|
CALL(sys_flistxattr)
|
|
/* 235 */ CALL(sys_removexattr)
|
|
CALL(sys_lremovexattr)
|
|
CALL(sys_fremovexattr)
|
|
CALL(sys_tkill)
|
|
CALL(sys_sendfile64)
|
|
/* 240 */ CALL(sys_futex)
|
|
CALL(sys_sched_setaffinity)
|
|
CALL(sys_sched_getaffinity)
|
|
CALL(sys_io_setup)
|
|
CALL(sys_io_destroy)
|
|
/* 245 */ CALL(sys_io_getevents)
|
|
CALL(sys_io_submit)
|
|
CALL(sys_io_cancel)
|
|
CALL(sys_exit_group)
|
|
CALL(sys_lookup_dcookie)
|
|
/* 250 */ CALL(sys_epoll_create)
|
|
CALL(ABI(sys_epoll_ctl, sys_oabi_epoll_ctl))
|
|
CALL(ABI(sys_epoll_wait, sys_oabi_epoll_wait))
|
|
CALL(sys_remap_file_pages)
|
|
CALL(sys_ni_syscall) /* sys_set_thread_area */
|
|
/* 255 */ CALL(sys_ni_syscall) /* sys_get_thread_area */
|
|
CALL(sys_set_tid_address)
|
|
CALL(sys_timer_create)
|
|
CALL(sys_timer_settime)
|
|
CALL(sys_timer_gettime)
|
|
/* 260 */ CALL(sys_timer_getoverrun)
|
|
CALL(sys_timer_delete)
|
|
CALL(sys_clock_settime)
|
|
CALL(sys_clock_gettime)
|
|
CALL(sys_clock_getres)
|
|
/* 265 */ CALL(sys_clock_nanosleep)
|
|
CALL(sys_statfs64_wrapper)
|
|
CALL(sys_fstatfs64_wrapper)
|
|
CALL(sys_tgkill)
|
|
CALL(sys_utimes)
|
|
/* 270 */ CALL(sys_arm_fadvise64_64)
|
|
CALL(sys_pciconfig_iobase)
|
|
CALL(sys_pciconfig_read)
|
|
CALL(sys_pciconfig_write)
|
|
CALL(sys_mq_open)
|
|
/* 275 */ CALL(sys_mq_unlink)
|
|
CALL(sys_mq_timedsend)
|
|
CALL(sys_mq_timedreceive)
|
|
CALL(sys_mq_notify)
|
|
CALL(sys_mq_getsetattr)
|
|
/* 280 */ CALL(sys_waitid)
|
|
CALL(sys_socket)
|
|
CALL(sys_bind)
|
|
CALL(sys_connect)
|
|
CALL(sys_listen)
|
|
/* 285 */ CALL(sys_accept)
|
|
CALL(sys_getsockname)
|
|
CALL(sys_getpeername)
|
|
CALL(sys_socketpair)
|
|
CALL(sys_send)
|
|
/* 290 */ CALL(sys_sendto)
|
|
CALL(sys_recv)
|
|
CALL(sys_recvfrom)
|
|
CALL(sys_shutdown)
|
|
CALL(sys_setsockopt)
|
|
/* 295 */ CALL(sys_getsockopt)
|
|
CALL(sys_sendmsg)
|
|
CALL(sys_recvmsg)
|
|
CALL(ABI(sys_semop, sys_oabi_semop))
|
|
CALL(sys_semget)
|
|
/* 300 */ CALL(sys_semctl)
|
|
CALL(sys_msgsnd)
|
|
CALL(sys_msgrcv)
|
|
CALL(sys_msgget)
|
|
CALL(sys_msgctl)
|
|
/* 305 */ CALL(sys_shmat)
|
|
CALL(sys_shmdt)
|
|
CALL(sys_shmget)
|
|
CALL(sys_shmctl)
|
|
CALL(sys_add_key)
|
|
/* 310 */ CALL(sys_request_key)
|
|
CALL(sys_keyctl)
|
|
CALL(ABI(sys_semtimedop, sys_oabi_semtimedop))
|
|
/* vserver */ CALL(sys_ni_syscall)
|
|
CALL(sys_ioprio_set)
|
|
/* 315 */ CALL(sys_ioprio_get)
|
|
CALL(sys_inotify_init)
|
|
CALL(sys_inotify_add_watch)
|
|
CALL(sys_inotify_rm_watch)
|
|
CALL(sys_mbind)
|
|
/* 320 */ CALL(sys_get_mempolicy)
|
|
CALL(sys_set_mempolicy)
|
|
#ifndef syscalls_counted
|
|
.equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls
|
|
#define syscalls_counted
|
|
#endif
|
|
.rept syscalls_padding
|
|
CALL(sys_ni_syscall)
|
|
.endr
|