linux/arch/mips/kernel/scall64-64.S
<<
>>
Prefs
   1/*
   2 * This file is subject to the terms and conditions of the GNU General Public
   3 * License.  See the file "COPYING" in the main directory of this archive
   4 * for more details.
   5 *
   6 * Copyright (C) 1995, 96, 97, 98, 99, 2000, 01, 02 by Ralf Baechle
   7 * Copyright (C) 1999, 2000 Silicon Graphics, Inc.
   8 * Copyright (C) 2001 MIPS Technologies, Inc.
   9 */
  10#include <linux/errno.h>
  11#include <asm/asm.h>
  12#include <asm/asmmacro.h>
  13#include <asm/irqflags.h>
  14#include <asm/mipsregs.h>
  15#include <asm/regdef.h>
  16#include <asm/stackframe.h>
  17#include <asm/asm-offsets.h>
  18#include <asm/sysmips.h>
  19#include <asm/thread_info.h>
  20#include <asm/unistd.h>
  21#include <asm/war.h>
  22
  23#ifndef CONFIG_BINFMT_ELF32
  24/* Neither O32 nor N32, so define handle_sys here */
  25#define handle_sys64 handle_sys
  26#endif
  27
  28        .align  5
  29NESTED(handle_sys64, PT_SIZE, sp)
  30#if !defined(CONFIG_MIPS32_O32) && !defined(CONFIG_MIPS32_N32)
  31        /*
  32         * When 32-bit compatibility is configured scall_o32.S
  33         * already did this.
  34         */
  35        .set    noat
  36        SAVE_SOME
  37        TRACE_IRQS_ON_RELOAD
  38        STI
  39        .set    at
  40#endif
  41
  42        dsubu   t0, v0, __NR_64_Linux   # check syscall number
  43        sltiu   t0, t0, __NR_64_Linux_syscalls + 1
  44#if !defined(CONFIG_MIPS32_O32) && !defined(CONFIG_MIPS32_N32)
  45        ld      t1, PT_EPC(sp)          # skip syscall on return
  46        daddiu  t1, 4                   # skip to next instruction
  47        sd      t1, PT_EPC(sp)
  48#endif
  49        beqz    t0, illegal_syscall
  50
  51        dsll    t0, v0, 3               # offset into table
  52        ld      t2, (sys_call_table - (__NR_64_Linux * 8))(t0)
  53                                        # syscall routine
  54
  55        sd      a3, PT_R26(sp)          # save a3 for syscall restarting
  56
  57        li      t1, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT
  58        LONG_L  t0, TI_FLAGS($28)       # syscall tracing enabled?
  59        and     t0, t1, t0
  60        bnez    t0, syscall_trace_entry
  61
  62        jalr    t2                      # Do The Real Thing (TM)
  63
  64        li      t0, -EMAXERRNO - 1      # error?
  65        sltu    t0, t0, v0
  66        sd      t0, PT_R7(sp)           # set error flag
  67        beqz    t0, 1f
  68
  69        ld      t1, PT_R2(sp)           # syscall number
  70        dnegu   v0                      # error
  71        sd      t1, PT_R0(sp)           # save it for syscall restarting
  721:      sd      v0, PT_R2(sp)           # result
  73
  74n64_syscall_exit:
  75        local_irq_disable               # make sure need_resched and
  76                                        # signals dont change between
  77                                        # sampling and return
  78        LONG_L  a2, TI_FLAGS($28)       # current->work
  79        li      t0, _TIF_ALLWORK_MASK
  80        and     t0, a2, t0
  81        bnez    t0, n64_syscall_exit_work
  82
  83        j       restore_partial
  84
  85n64_syscall_exit_work:
  86        j       syscall_exit_work_partial
  87
  88/* ------------------------------------------------------------------------ */
  89
  90syscall_trace_entry:
  91        SAVE_STATIC
  92        move    s0, t2
  93        move    a0, sp
  94        li      a1, 0
  95        jal     do_syscall_trace
  96
  97        move    t0, s0
  98        RESTORE_STATIC
  99        ld      a0, PT_R4(sp)           # Restore argument registers
 100        ld      a1, PT_R5(sp)
 101        ld      a2, PT_R6(sp)
 102        ld      a3, PT_R7(sp)
 103        ld      a4, PT_R8(sp)
 104        ld      a5, PT_R9(sp)
 105        jalr    t0
 106
 107        li      t0, -EMAXERRNO - 1      # error?
 108        sltu    t0, t0, v0
 109        sd      t0, PT_R7(sp)           # set error flag
 110        beqz    t0, 1f
 111
 112        ld      t1, PT_R2(sp)           # syscall number
 113        dnegu   v0                      # error
 114        sd      t1, PT_R0(sp)           # save it for syscall restarting
 1151:      sd      v0, PT_R2(sp)           # result
 116
 117        j       syscall_exit
 118
 119illegal_syscall:
 120        /* This also isn't a 64-bit syscall, throw an error.  */
 121        li      v0, ENOSYS                      # error
 122        sd      v0, PT_R2(sp)
 123        li      t0, 1                           # set error flag
 124        sd      t0, PT_R7(sp)
 125        j       n64_syscall_exit
 126        END(handle_sys64)
 127
 128        .align  3
 129sys_call_table:
 130        PTR     sys_read                        /* 5000 */
 131        PTR     sys_write
 132        PTR     sys_open
 133        PTR     sys_close
 134        PTR     sys_newstat
 135        PTR     sys_newfstat                    /* 5005 */
 136        PTR     sys_newlstat
 137        PTR     sys_poll
 138        PTR     sys_lseek
 139        PTR     sys_mips_mmap
 140        PTR     sys_mprotect                    /* 5010 */
 141        PTR     sys_munmap
 142        PTR     sys_brk
 143        PTR     sys_rt_sigaction
 144        PTR     sys_rt_sigprocmask
 145        PTR     sys_ioctl                       /* 5015 */
 146        PTR     sys_pread64
 147        PTR     sys_pwrite64
 148        PTR     sys_readv
 149        PTR     sys_writev
 150        PTR     sys_access                      /* 5020 */
 151        PTR     sysm_pipe
 152        PTR     sys_select
 153        PTR     sys_sched_yield
 154        PTR     sys_mremap
 155        PTR     sys_msync                       /* 5025 */
 156        PTR     sys_mincore
 157        PTR     sys_madvise
 158        PTR     sys_shmget
 159        PTR     sys_shmat
 160        PTR     sys_shmctl                      /* 5030 */
 161        PTR     sys_dup
 162        PTR     sys_dup2
 163        PTR     sys_pause
 164        PTR     sys_nanosleep
 165        PTR     sys_getitimer                   /* 5035 */
 166        PTR     sys_setitimer
 167        PTR     sys_alarm
 168        PTR     sys_getpid
 169        PTR     sys_sendfile64
 170        PTR     sys_socket                      /* 5040 */
 171        PTR     sys_connect
 172        PTR     sys_accept
 173        PTR     sys_sendto
 174        PTR     sys_recvfrom
 175        PTR     sys_sendmsg                     /* 5045 */
 176        PTR     sys_recvmsg
 177        PTR     sys_shutdown
 178        PTR     sys_bind
 179        PTR     sys_listen
 180        PTR     sys_getsockname                 /* 5050 */
 181        PTR     sys_getpeername
 182        PTR     sys_socketpair
 183        PTR     sys_setsockopt
 184        PTR     sys_getsockopt
 185        PTR     sys_clone                       /* 5055 */
 186        PTR     sys_fork
 187        PTR     sys_execve
 188        PTR     sys_exit
 189        PTR     sys_wait4
 190        PTR     sys_kill                        /* 5060 */
 191        PTR     sys_newuname
 192        PTR     sys_semget
 193        PTR     sys_semop
 194        PTR     sys_semctl
 195        PTR     sys_shmdt                       /* 5065 */
 196        PTR     sys_msgget
 197        PTR     sys_msgsnd
 198        PTR     sys_msgrcv
 199        PTR     sys_msgctl
 200        PTR     sys_fcntl                       /* 5070 */
 201        PTR     sys_flock
 202        PTR     sys_fsync
 203        PTR     sys_fdatasync
 204        PTR     sys_truncate
 205        PTR     sys_ftruncate                   /* 5075 */
 206        PTR     sys_getdents
 207        PTR     sys_getcwd
 208        PTR     sys_chdir
 209        PTR     sys_fchdir
 210        PTR     sys_rename                      /* 5080 */
 211        PTR     sys_mkdir
 212        PTR     sys_rmdir
 213        PTR     sys_creat
 214        PTR     sys_link
 215        PTR     sys_unlink                      /* 5085 */
 216        PTR     sys_symlink
 217        PTR     sys_readlink
 218        PTR     sys_chmod
 219        PTR     sys_fchmod
 220        PTR     sys_chown                       /* 5090 */
 221        PTR     sys_fchown
 222        PTR     sys_lchown
 223        PTR     sys_umask
 224        PTR     sys_gettimeofday
 225        PTR     sys_getrlimit                   /* 5095 */
 226        PTR     sys_getrusage
 227        PTR     sys_sysinfo
 228        PTR     sys_times
 229        PTR     sys_ptrace
 230        PTR     sys_getuid                      /* 5100 */
 231        PTR     sys_syslog
 232        PTR     sys_getgid
 233        PTR     sys_setuid
 234        PTR     sys_setgid
 235        PTR     sys_geteuid                     /* 5105 */
 236        PTR     sys_getegid
 237        PTR     sys_setpgid
 238        PTR     sys_getppid
 239        PTR     sys_getpgrp
 240        PTR     sys_setsid                      /* 5110 */
 241        PTR     sys_setreuid
 242        PTR     sys_setregid
 243        PTR     sys_getgroups
 244        PTR     sys_setgroups
 245        PTR     sys_setresuid                   /* 5115 */
 246        PTR     sys_getresuid
 247        PTR     sys_setresgid
 248        PTR     sys_getresgid
 249        PTR     sys_getpgid
 250        PTR     sys_setfsuid                    /* 5120 */
 251        PTR     sys_setfsgid
 252        PTR     sys_getsid
 253        PTR     sys_capget
 254        PTR     sys_capset
 255        PTR     sys_rt_sigpending               /* 5125 */
 256        PTR     sys_rt_sigtimedwait
 257        PTR     sys_rt_sigqueueinfo
 258        PTR     sys_rt_sigsuspend
 259        PTR     sys_sigaltstack
 260        PTR     sys_utime                       /* 5130 */
 261        PTR     sys_mknod
 262        PTR     sys_personality
 263        PTR     sys_ustat
 264        PTR     sys_statfs
 265        PTR     sys_fstatfs                     /* 5135 */
 266        PTR     sys_sysfs
 267        PTR     sys_getpriority
 268        PTR     sys_setpriority
 269        PTR     sys_sched_setparam
 270        PTR     sys_sched_getparam              /* 5140 */
 271        PTR     sys_sched_setscheduler
 272        PTR     sys_sched_getscheduler
 273        PTR     sys_sched_get_priority_max
 274        PTR     sys_sched_get_priority_min
 275        PTR     sys_sched_rr_get_interval       /* 5145 */
 276        PTR     sys_mlock
 277        PTR     sys_munlock
 278        PTR     sys_mlockall
 279        PTR     sys_munlockall
 280        PTR     sys_vhangup                     /* 5150 */
 281        PTR     sys_pivot_root
 282        PTR     sys_sysctl
 283        PTR     sys_prctl
 284        PTR     sys_adjtimex
 285        PTR     sys_setrlimit                   /* 5155 */
 286        PTR     sys_chroot
 287        PTR     sys_sync
 288        PTR     sys_acct
 289        PTR     sys_settimeofday
 290        PTR     sys_mount                       /* 5160 */
 291        PTR     sys_umount
 292        PTR     sys_swapon
 293        PTR     sys_swapoff
 294        PTR     sys_reboot
 295        PTR     sys_sethostname                 /* 5165 */
 296        PTR     sys_setdomainname
 297        PTR     sys_ni_syscall                  /* was create_module */
 298        PTR     sys_init_module
 299        PTR     sys_delete_module
 300        PTR     sys_ni_syscall                  /* 5170, was get_kernel_syms */
 301        PTR     sys_ni_syscall                  /* was query_module */
 302        PTR     sys_quotactl
 303        PTR     sys_nfsservctl
 304        PTR     sys_ni_syscall                  /* res. for getpmsg */
 305        PTR     sys_ni_syscall                  /* 5175  for putpmsg */
 306        PTR     sys_ni_syscall                  /* res. for afs_syscall */
 307        PTR     sys_ni_syscall                  /* res. for security */
 308        PTR     sys_gettid
 309        PTR     sys_readahead
 310        PTR     sys_setxattr                    /* 5180 */
 311        PTR     sys_lsetxattr
 312        PTR     sys_fsetxattr
 313        PTR     sys_getxattr
 314        PTR     sys_lgetxattr
 315        PTR     sys_fgetxattr                   /* 5185 */
 316        PTR     sys_listxattr
 317        PTR     sys_llistxattr
 318        PTR     sys_flistxattr
 319        PTR     sys_removexattr
 320        PTR     sys_lremovexattr                /* 5190 */
 321        PTR     sys_fremovexattr
 322        PTR     sys_tkill
 323        PTR     sys_ni_syscall
 324        PTR     sys_futex
 325        PTR     sys_sched_setaffinity           /* 5195 */
 326        PTR     sys_sched_getaffinity
 327        PTR     sys_cacheflush
 328        PTR     sys_cachectl
 329        PTR     sys_sysmips
 330        PTR     sys_io_setup                    /* 5200 */
 331        PTR     sys_io_destroy
 332        PTR     sys_io_getevents
 333        PTR     sys_io_submit
 334        PTR     sys_io_cancel
 335        PTR     sys_exit_group                  /* 5205 */
 336        PTR     sys_lookup_dcookie
 337        PTR     sys_epoll_create
 338        PTR     sys_epoll_ctl
 339        PTR     sys_epoll_wait
 340        PTR     sys_remap_file_pages            /* 5210 */
 341        PTR     sys_rt_sigreturn
 342        PTR     sys_set_tid_address
 343        PTR     sys_restart_syscall
 344        PTR     sys_semtimedop
 345        PTR     sys_fadvise64_64                /* 5215 */
 346        PTR     sys_timer_create
 347        PTR     sys_timer_settime
 348        PTR     sys_timer_gettime
 349        PTR     sys_timer_getoverrun
 350        PTR     sys_timer_delete                /* 5220 */
 351        PTR     sys_clock_settime
 352        PTR     sys_clock_gettime
 353        PTR     sys_clock_getres
 354        PTR     sys_clock_nanosleep
 355        PTR     sys_tgkill                      /* 5225 */
 356        PTR     sys_utimes
 357        PTR     sys_mbind
 358        PTR     sys_ni_syscall                  /* sys_get_mempolicy */
 359        PTR     sys_ni_syscall                  /* sys_set_mempolicy */
 360        PTR     sys_mq_open                     /* 5230 */
 361        PTR     sys_mq_unlink
 362        PTR     sys_mq_timedsend
 363        PTR     sys_mq_timedreceive
 364        PTR     sys_mq_notify
 365        PTR     sys_mq_getsetattr               /* 5235 */
 366        PTR     sys_ni_syscall                  /* sys_vserver */
 367        PTR     sys_waitid
 368        PTR     sys_ni_syscall                  /* available, was setaltroot */
 369        PTR     sys_add_key
 370        PTR     sys_request_key                 /* 5240 */
 371        PTR     sys_keyctl
 372        PTR     sys_set_thread_area
 373        PTR     sys_inotify_init
 374        PTR     sys_inotify_add_watch
 375        PTR     sys_inotify_rm_watch            /* 5245 */
 376        PTR     sys_migrate_pages
 377        PTR     sys_openat
 378        PTR     sys_mkdirat
 379        PTR     sys_mknodat
 380        PTR     sys_fchownat                    /* 5250 */
 381        PTR     sys_futimesat
 382        PTR     sys_newfstatat
 383        PTR     sys_unlinkat
 384        PTR     sys_renameat
 385        PTR     sys_linkat                      /* 5255 */
 386        PTR     sys_symlinkat
 387        PTR     sys_readlinkat
 388        PTR     sys_fchmodat
 389        PTR     sys_faccessat
 390        PTR     sys_pselect6                    /* 5260 */
 391        PTR     sys_ppoll
 392        PTR     sys_unshare
 393        PTR     sys_splice
 394        PTR     sys_sync_file_range
 395        PTR     sys_tee                         /* 5265 */
 396        PTR     sys_vmsplice
 397        PTR     sys_move_pages
 398        PTR     sys_set_robust_list
 399        PTR     sys_get_robust_list
 400        PTR     sys_kexec_load                  /* 5270 */
 401        PTR     sys_getcpu
 402        PTR     sys_epoll_pwait
 403        PTR     sys_ioprio_set
 404        PTR     sys_ioprio_get
 405        PTR     sys_utimensat                   /* 5275 */
 406        PTR     sys_signalfd
 407        PTR     sys_ni_syscall
 408        PTR     sys_eventfd
 409        PTR     sys_fallocate
 410        PTR     sys_timerfd_create              /* 5280 */
 411        PTR     sys_timerfd_gettime
 412        PTR     sys_timerfd_settime
 413        PTR     sys_signalfd4
 414        PTR     sys_eventfd2
 415        PTR     sys_epoll_create1               /* 5285 */
 416        PTR     sys_dup3
 417        PTR     sys_pipe2
 418        PTR     sys_inotify_init1
 419        PTR     sys_preadv
 420        PTR     sys_pwritev                     /* 5290 */
 421        PTR     sys_rt_tgsigqueueinfo
 422        PTR     sys_perf_event_open
 423        PTR     sys_accept4
 424        PTR     sys_recvmmsg
 425        PTR     sys_fanotify_init               /* 5295 */
 426        PTR     sys_fanotify_mark
 427        PTR     sys_prlimit64
 428        .size   sys_call_table,.-sys_call_table
 429
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.