/* * This file is subject to the terms and conditions of the GNU General Public * License. See the file "COPYING" in the main directory of this archive * for more details. * * Copyright (C) 1995, 96, 97, 98, 99, 2000, 01, 02 by Ralf Baechle * Copyright (C) 1999, 2000 Silicon Graphics, Inc. * Copyright (C) 2001 MIPS Technologies, Inc. */ #include <linux/errno.h> #include <asm/asm.h> #include <asm/asmmacro.h> #include <asm/irqflags.h> #include <asm/mipsregs.h> #include <asm/regdef.h> #include <asm/stackframe.h> #include <asm/asm-offsets.h> #include <asm/sysmips.h> #include <asm/thread_info.h> #include <asm/unistd.h> #include <asm/war.h> #ifndef CONFIG_BINFMT_ELF32 /* Neither O32 nor N32, so define handle_sys here */ #define handle_sys64 handle_sys #endif .align 5 NESTED(handle_sys64, PT_SIZE, sp) #if !defined(CONFIG_MIPS32_O32) && !defined(CONFIG_MIPS32_N32) /* * When 32-bit compatibility is configured scall_o32.S * already did this. */ .set noat SAVE_SOME TRACE_IRQS_ON_RELOAD STI .set at #endif #if !defined(CONFIG_MIPS32_O32) && !defined(CONFIG_MIPS32_N32) ld t1, PT_EPC(sp) # skip syscall on return daddiu t1, 4 # skip to next instruction sd t1, PT_EPC(sp) #endif sd a3, PT_R26(sp) # save a3 for syscall restarting li t1, _TIF_WORK_SYSCALL_ENTRY LONG_L t0, TI_FLAGS($28) # syscall tracing enabled? and t0, t1, t0 bnez t0, syscall_trace_entry syscall_common: dsubu t2, v0, __NR_64_Linux sltiu t0, t2, __NR_64_Linux_syscalls + 1 beqz t0, illegal_syscall dsll t0, t2, 3 # offset into table dla t2, sys_call_table daddu t0, t2, t0 ld t2, (t0) # syscall routine beqz t2, illegal_syscall jalr t2 # Do The Real Thing (TM) li t0, -EMAXERRNO - 1 # error? sltu t0, t0, v0 sd t0, PT_R7(sp) # set error flag beqz t0, 1f ld t1, PT_R2(sp) # syscall number dnegu v0 # error sd t1, PT_R0(sp) # save it for syscall restarting 1: sd v0, PT_R2(sp) # result n64_syscall_exit: j syscall_exit_partial /* ------------------------------------------------------------------------ */ syscall_trace_entry: SAVE_STATIC move s0, v0 move a0, sp move a1, v0 jal syscall_trace_enter bltz v0, 1f # seccomp failed? Skip syscall move v0, s0 RESTORE_STATIC ld a0, PT_R4(sp) # Restore argument registers ld a1, PT_R5(sp) ld a2, PT_R6(sp) ld a3, PT_R7(sp) ld a4, PT_R8(sp) ld a5, PT_R9(sp) j syscall_common 1: j syscall_exit illegal_syscall: /* This also isn't a 64-bit syscall, throw an error. */ li v0, ENOSYS # error sd v0, PT_R2(sp) li t0, 1 # set error flag sd t0, PT_R7(sp) j n64_syscall_exit END(handle_sys64) .align 3 .type sys_call_table, @object EXPORT(sys_call_table) PTR sys_read /* 5000 */ PTR sys_write PTR sys_open PTR sys_close PTR sys_newstat PTR sys_newfstat /* 5005 */ PTR sys_newlstat PTR sys_poll PTR sys_lseek PTR sys_mips_mmap PTR sys_mprotect /* 5010 */ PTR sys_munmap PTR sys_brk PTR sys_rt_sigaction PTR sys_rt_sigprocmask PTR sys_ioctl /* 5015 */ PTR sys_pread64 PTR sys_pwrite64 PTR sys_readv PTR sys_writev PTR sys_access /* 5020 */ PTR sysm_pipe PTR sys_select PTR sys_sched_yield PTR sys_mremap PTR sys_msync /* 5025 */ PTR sys_mincore PTR sys_madvise PTR sys_shmget PTR sys_shmat PTR sys_shmctl /* 5030 */ PTR sys_dup PTR sys_dup2 PTR sys_pause PTR sys_nanosleep PTR sys_getitimer /* 5035 */ PTR sys_setitimer PTR sys_alarm PTR sys_getpid PTR sys_sendfile64 PTR sys_socket /* 5040 */ PTR sys_connect PTR sys_accept PTR sys_sendto PTR sys_recvfrom PTR sys_sendmsg /* 5045 */ PTR sys_recvmsg PTR sys_shutdown PTR sys_bind PTR sys_listen PTR sys_getsockname /* 5050 */ PTR sys_getpeername PTR sys_socketpair PTR sys_setsockopt PTR sys_getsockopt PTR __sys_clone /* 5055 */ PTR __sys_fork PTR sys_execve PTR sys_exit PTR sys_wait4 PTR sys_kill /* 5060 */ PTR sys_newuname PTR sys_semget PTR sys_semop PTR sys_semctl PTR sys_shmdt /* 5065 */ PTR sys_msgget PTR sys_msgsnd PTR sys_msgrcv PTR sys_msgctl PTR sys_fcntl /* 5070 */ PTR sys_flock PTR sys_fsync PTR sys_fdatasync PTR sys_truncate PTR sys_ftruncate /* 5075 */ PTR sys_getdents PTR sys_getcwd PTR sys_chdir PTR sys_fchdir PTR sys_rename /* 5080 */ PTR sys_mkdir PTR sys_rmdir PTR sys_creat PTR sys_link PTR sys_unlink /* 5085 */ PTR sys_symlink PTR sys_readlink PTR sys_chmod PTR sys_fchmod PTR sys_chown /* 5090 */ PTR sys_fchown PTR sys_lchown PTR sys_umask PTR sys_gettimeofday PTR sys_getrlimit /* 5095 */ PTR sys_getrusage PTR sys_sysinfo PTR sys_times PTR sys_ptrace PTR sys_getuid /* 5100 */ PTR sys_syslog PTR sys_getgid PTR sys_setuid PTR sys_setgid PTR sys_geteuid /* 5105 */ PTR sys_getegid PTR sys_setpgid PTR sys_getppid PTR sys_getpgrp PTR sys_setsid /* 5110 */ PTR sys_setreuid PTR sys_setregid PTR sys_getgroups PTR sys_setgroups PTR sys_setresuid /* 5115 */ PTR sys_getresuid PTR sys_setresgid PTR sys_getresgid PTR sys_getpgid PTR sys_setfsuid /* 5120 */ PTR sys_setfsgid PTR sys_getsid PTR sys_capget PTR sys_capset PTR sys_rt_sigpending /* 5125 */ PTR sys_rt_sigtimedwait PTR sys_rt_sigqueueinfo PTR sys_rt_sigsuspend PTR sys_sigaltstack PTR sys_utime /* 5130 */ PTR sys_mknod PTR sys_personality PTR sys_ustat PTR sys_statfs PTR sys_fstatfs /* 5135 */ PTR sys_sysfs PTR sys_getpriority PTR sys_setpriority PTR sys_sched_setparam PTR sys_sched_getparam /* 5140 */ PTR sys_sched_setscheduler PTR sys_sched_getscheduler PTR sys_sched_get_priority_max PTR sys_sched_get_priority_min PTR sys_sched_rr_get_interval /* 5145 */ PTR sys_mlock PTR sys_munlock PTR sys_mlockall PTR sys_munlockall PTR sys_vhangup /* 5150 */ PTR sys_pivot_root PTR sys_sysctl PTR sys_prctl PTR sys_adjtimex PTR sys_setrlimit /* 5155 */ PTR sys_chroot PTR sys_sync PTR sys_acct PTR sys_settimeofday PTR sys_mount /* 5160 */ PTR sys_umount PTR sys_swapon PTR sys_swapoff PTR sys_reboot PTR sys_sethostname /* 5165 */ PTR sys_setdomainname PTR sys_ni_syscall /* was create_module */ PTR sys_init_module PTR sys_delete_module PTR sys_ni_syscall /* 5170, was get_kernel_syms */ PTR sys_ni_syscall /* was query_module */ PTR sys_quotactl PTR sys_ni_syscall /* was nfsservctl */ PTR sys_ni_syscall /* res. for getpmsg */ PTR sys_ni_syscall /* 5175 for putpmsg */ PTR sys_ni_syscall /* res. for afs_syscall */ PTR sys_ni_syscall /* res. for security */ PTR sys_gettid PTR sys_readahead PTR sys_setxattr /* 5180 */ PTR sys_lsetxattr PTR sys_fsetxattr PTR sys_getxattr PTR sys_lgetxattr PTR sys_fgetxattr /* 5185 */ PTR sys_listxattr PTR sys_llistxattr PTR sys_flistxattr PTR sys_removexattr PTR sys_lremovexattr /* 5190 */ PTR sys_fremovexattr PTR sys_tkill PTR sys_ni_syscall PTR sys_futex PTR sys_sched_setaffinity /* 5195 */ PTR sys_sched_getaffinity PTR sys_cacheflush PTR sys_cachectl PTR sys_sysmips PTR sys_io_setup /* 5200 */ PTR sys_io_destroy PTR sys_io_getevents PTR sys_io_submit PTR sys_io_cancel PTR sys_exit_group /* 5205 */ PTR sys_lookup_dcookie PTR sys_epoll_create PTR sys_epoll_ctl PTR sys_epoll_wait PTR sys_remap_file_pages /* 5210 */ PTR sys_rt_sigreturn PTR sys_set_tid_address PTR sys_restart_syscall PTR sys_semtimedop PTR sys_fadvise64_64 /* 5215 */ PTR sys_timer_create PTR sys_timer_settime PTR sys_timer_gettime PTR sys_timer_getoverrun PTR sys_timer_delete /* 5220 */ PTR sys_clock_settime PTR sys_clock_gettime PTR sys_clock_getres PTR sys_clock_nanosleep PTR sys_tgkill /* 5225 */ PTR sys_utimes PTR sys_mbind PTR sys_get_mempolicy PTR sys_set_mempolicy PTR sys_mq_open /* 5230 */ PTR sys_mq_unlink PTR sys_mq_timedsend PTR sys_mq_timedreceive PTR sys_mq_notify PTR sys_mq_getsetattr /* 5235 */ PTR sys_ni_syscall /* sys_vserver */ PTR sys_waitid PTR sys_ni_syscall /* available, was setaltroot */ PTR sys_add_key PTR sys_request_key /* 5240 */ PTR sys_keyctl PTR sys_set_thread_area PTR sys_inotify_init PTR sys_inotify_add_watch PTR sys_inotify_rm_watch /* 5245 */ PTR sys_migrate_pages PTR sys_openat PTR sys_mkdirat PTR sys_mknodat PTR sys_fchownat /* 5250 */ PTR sys_futimesat PTR sys_newfstatat PTR sys_unlinkat PTR sys_renameat PTR sys_linkat /* 5255 */ PTR sys_symlinkat PTR sys_readlinkat PTR sys_fchmodat PTR sys_faccessat PTR sys_pselect6 /* 5260 */ PTR sys_ppoll PTR sys_unshare PTR sys_splice PTR sys_sync_file_range PTR sys_tee /* 5265 */ PTR sys_vmsplice PTR sys_move_pages PTR sys_set_robust_list PTR sys_get_robust_list PTR sys_kexec_load /* 5270 */ PTR sys_getcpu PTR sys_epoll_pwait PTR sys_ioprio_set PTR sys_ioprio_get PTR sys_utimensat /* 5275 */ PTR sys_signalfd PTR sys_ni_syscall /* was timerfd */ PTR sys_eventfd PTR sys_fallocate PTR sys_timerfd_create /* 5280 */ PTR sys_timerfd_gettime PTR sys_timerfd_settime PTR sys_signalfd4 PTR sys_eventfd2 PTR sys_epoll_create1 /* 5285 */ PTR sys_dup3 PTR sys_pipe2 PTR sys_inotify_init1 PTR sys_preadv PTR sys_pwritev /* 5290 */ PTR sys_rt_tgsigqueueinfo PTR sys_perf_event_open PTR sys_accept4 PTR sys_recvmmsg PTR sys_fanotify_init /* 5295 */ PTR sys_fanotify_mark PTR sys_prlimit64 PTR sys_name_to_handle_at PTR sys_open_by_handle_at PTR sys_clock_adjtime /* 5300 */ PTR sys_syncfs PTR sys_sendmmsg PTR sys_setns PTR sys_process_vm_readv PTR sys_process_vm_writev /* 5305 */ PTR sys_kcmp PTR sys_finit_module PTR sys_getdents64 PTR sys_sched_setattr PTR sys_sched_getattr /* 5310 */ PTR sys_renameat2 PTR sys_seccomp PTR sys_getrandom PTR sys_memfd_create PTR sys_bpf /* 5315 */ PTR sys_execveat PTR sys_userfaultfd PTR sys_membarrier PTR sys_mlock2 .size sys_call_table,.-sys_call_table