also update spec file ...
[linux-flexiantxendom0-3.2.10.git] / arch / mips64 / kernel / scall_n32.S
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 by Ralf Baechle
7  * Copyright (C) 1999, 2000 Silicon Graphics, Inc.
8  * Copyright (C) 2001 MIPS Technologies, Inc.
9  */
10 #include <linux/config.h>
11 #include <asm/asm.h>
12 #include <linux/errno.h>
13 #include <asm/mipsregs.h>
14 #include <asm/regdef.h>
15 #include <asm/stackframe.h>
16 #include <asm/unistd.h>
17
18 /* This duplicates the definition from <linux/sched.h> */
19 #define PT_TRACESYS     0x00000002      /* tracing system calls */
20
21 /* This duplicates the definition from <asm/signal.h> */
22 #define SIGILL          4               /* Illegal instruction (ANSI).  */
23
24 #ifndef CONFIG_MIPS32_O32
25 /* No O32, so define handle_sys here */
26 #define handle_sysn32 handle_sys
27 #endif
28
29         .align  5
30 NESTED(handle_sysn32, PT_SIZE, sp)
31 #ifndef CONFIG_MIPS32_O32
32         .set    noat
33         SAVE_SOME
34         STI
35         .set    at
36 #endif
37         ld      t1, PT_EPC(sp)          # skip syscall on return
38
39         subu    t0, v0, __NR_N32_Linux  # check syscall number
40         sltiu   t0, t0, __NR_N32_Linux_syscalls + 1
41         daddiu  t1, 4                   # skip to next instruction
42         beqz    t0, not_n32_scall
43         sd      t1, PT_EPC(sp)
44
45         dsll    t0, v0, 3               # offset into table
46         ld      t2, (sysn32_call_table - (__NR_N32_Linux * 8))(t0)
47
48         sd      a3, PT_R26(sp)          # save a3 for syscall restarting
49
50         LONG_L  t0, TI_FLAGS($28)       # syscall tracing enabled?
51         bltz    t0, n32_syscall_trace_entry
52
53         jalr    t2                      # Do The Real Thing (TM)
54
55         li      t0, -EMAXERRNO - 1      # error?
56         sltu    t0, t0, v0
57         sd      t0, PT_R7(sp)           # set error flag
58         beqz    t0, 1f
59
60         negu    v0                      # error
61         sd      v0, PT_R0(sp)           # set flag for syscall restarting
62 1:      sd      v0, PT_R2(sp)           # result
63
64 FEXPORT(n32_syscall_exit)
65         mfc0    t0, CP0_STATUS          # make sure need_resched and
66         xori    t0, t0, 1               # signals dont change between
67         ori     t0, t0, 1               # sampling and return
68         mtc0    t0, CP0_STATUS
69         SSNOP; SSNOP; SSNOP
70
71         LONG_L  a2, TI_FLAGS($28)       # current->work
72         bnez    a2, n32_syscall_exit_work
73
74 restore_all:
75         RESTORE_SOME
76         RESTORE_SP
77         eret
78
79 n32_syscall_exit_work:
80         SAVE_STATIC
81         j       syscall_exit_work
82
83 /* ------------------------------------------------------------------------ */
84
85 n32_syscall_trace_entry:
86         SAVE_STATIC
87         sd      t2,PT_R1(sp)
88         jal     do_syscall_trace
89         ld      t2,PT_R1(sp)
90
91         ld      a0, PT_R4(sp)           # Restore argument registers
92         ld      a1, PT_R5(sp)
93         ld      a2, PT_R6(sp)
94         ld      a3, PT_R7(sp)
95         jalr    t2
96
97         li      t0, -EMAXERRNO - 1      # error?
98         sltu    t0, t0, v0
99         sd      t0, PT_R7(sp)           # set error flag
100         beqz    t0, 1f
101
102         negu    v0                      # error
103         sd      v0, PT_R0(sp)           # set flag for syscall restarting
104 1:      sd      v0, PT_R2(sp)           # result
105
106         j       n32_syscall_exit
107
108 not_n32_scall:
109         /* This is not an n32 compatibility syscall, pass it on to
110            the n64 syscall handlers.  */
111         j       handle_sys64
112
113         END(handle_sysn32)
114
115 EXPORT(sysn32_call_table)
116         PTR     sys_read                        /* 6000 */
117         PTR     sys_write
118         PTR     sys_open
119         PTR     sys_close
120         PTR     sys_newstat
121         PTR     sys_newfstat                    /* 6005 */
122         PTR     sys_newlstat
123         PTR     sys_poll
124         PTR     sys_lseek
125         PTR     sys_mmap
126         PTR     sys_mprotect                    /* 6010 */
127         PTR     sys_munmap
128         PTR     sys_brk
129         PTR     sys32_rt_sigaction
130         PTR     sys32_rt_sigprocmask
131         PTR     compat_sys_ioctl                /* 6015 */
132         PTR     sys_pread64
133         PTR     sys_pwrite64
134         PTR     sys32_readv
135         PTR     sys32_writev
136         PTR     sys_access                      /* 6020 */
137         PTR     sys_pipe
138         PTR     sys32_select
139         PTR     sys_sched_yield
140         PTR     sys_mremap
141         PTR     sys_msync                       /* 6025 */
142         PTR     sys_mincore
143         PTR     sys_madvise
144         PTR     sys_shmget
145         PTR     sys_shmat
146         PTR     sys_shmctl                      /* 6030 */
147         PTR     sys_dup
148         PTR     sys_dup2
149         PTR     sys_pause
150         PTR     compat_sys_nanosleep
151         PTR     compat_sys_getitimer            /* 6035 */
152         PTR     compat_sys_setitimer
153         PTR     sys_alarm
154         PTR     sys_getpid
155         PTR     sys32_sendfile
156         PTR     sys_socket                      /* 6040 */
157         PTR     sys_connect
158         PTR     sys_accept
159         PTR     sys_sendto
160         PTR     sys_recvfrom
161         PTR     compat_sys_sendmsg              /* 6045 */
162         PTR     compat_sys_recvmsg
163         PTR     sys_shutdown
164         PTR     sys_bind
165         PTR     sys_listen
166         PTR     sys_getsockname                 /* 6050 */
167         PTR     sys_getpeername
168         PTR     sys_socketpair
169         PTR     compat_sys_setsockopt
170         PTR     sys_getsockopt
171         PTR     sys_clone                       /* 6055 */
172         PTR     sys_fork
173         PTR     sys32_execve
174         PTR     sys_exit
175         PTR     sys32_wait4
176         PTR     sys_kill                        /* 6060 */
177         PTR     sys32_newuname
178         PTR     sys_semget
179         PTR     sys_semop
180         PTR     sys_semctl
181         PTR     sys_shmdt                       /* 6065 */
182         PTR     sys_msgget
183         PTR     sys_msgsnd
184         PTR     sys_msgrcv
185         PTR     sys_msgctl
186         PTR     compat_sys_fcntl                /* 6070 */
187         PTR     sys_flock
188         PTR     sys_fsync
189         PTR     sys_fdatasync
190         PTR     sys_truncate
191         PTR     sys_ftruncate                   /* 6075 */
192         PTR     sys32_getdents
193         PTR     sys_getcwd
194         PTR     sys_chdir
195         PTR     sys_fchdir
196         PTR     sys_rename                      /* 6080 */
197         PTR     sys_mkdir
198         PTR     sys_rmdir
199         PTR     sys_creat
200         PTR     sys_link
201         PTR     sys_unlink                      /* 6085 */
202         PTR     sys_symlink
203         PTR     sys_readlink
204         PTR     sys_chmod
205         PTR     sys_fchmod
206         PTR     sys_chown                       /* 6090 */
207         PTR     sys_fchown
208         PTR     sys_lchown
209         PTR     sys_umask
210         PTR     sys32_gettimeofday
211         PTR     compat_sys_getrlimit            /* 6095 */
212         PTR     compat_sys_getrusage
213         PTR     sys32_sysinfo
214         PTR     compat_sys_times
215         PTR     sys_ptrace
216         PTR     sys_getuid                      /* 6100 */
217         PTR     sys_syslog
218         PTR     sys_getgid
219         PTR     sys_setuid
220         PTR     sys_setgid
221         PTR     sys_geteuid                     /* 6105 */
222         PTR     sys_getegid
223         PTR     sys_setpgid
224         PTR     sys_getppid
225         PTR     sys_getpgrp
226         PTR     sys_setsid                      /* 6110 */
227         PTR     sys_setreuid
228         PTR     sys_setregid
229         PTR     sys_getgroups
230         PTR     sys_setgroups
231         PTR     sys_setresuid                   /* 6115 */
232         PTR     sys_getresuid
233         PTR     sys_setresgid
234         PTR     sys_getresgid
235         PTR     sys_getpgid
236         PTR     sys_setfsuid                    /* 6120 */
237         PTR     sys_setfsgid
238         PTR     sys_getsid
239         PTR     sys_capget
240         PTR     sys_capset
241         PTR     sys32_rt_sigpending             /* 6125 */
242         PTR     sys32_rt_sigtimedwait
243         PTR     sys32_rt_sigqueueinfo
244         PTR     sys32_rt_sigsuspend
245         PTR     sys32_sigaltstack
246         PTR     compat_sys_utime                /* 6130 */
247         PTR     sys_mknod
248         PTR     sys32_personality
249         PTR     sys_ustat
250         PTR     compat_sys_statfs
251         PTR     compat_sys_fstatfs              /* 6135 */
252         PTR     sys_sysfs
253         PTR     sys_getpriority
254         PTR     sys_setpriority
255         PTR     sys_sched_setparam
256         PTR     sys_sched_getparam              /* 6140 */
257         PTR     sys_sched_setscheduler
258         PTR     sys_sched_getscheduler
259         PTR     sys_sched_get_priority_max
260         PTR     sys_sched_get_priority_min
261         PTR     sys32_sched_rr_get_interval     /* 6145 */
262         PTR     sys_mlock
263         PTR     sys_munlock
264         PTR     sys_mlockall
265         PTR     sys_munlockall
266         PTR     sys_vhangup                     /* 6150 */
267         PTR     sys_pivot_root
268         PTR     sys32_sysctl
269         PTR     sys_prctl
270         PTR     sys32_adjtimex
271         PTR     compat_sys_setrlimit            /* 6155 */
272         PTR     sys_chroot
273         PTR     sys_sync
274         PTR     sys_acct
275         PTR     sys32_settimeofday
276         PTR     sys_mount                       /* 6160 */
277         PTR     sys_umount
278         PTR     sys_swapon
279         PTR     sys_swapoff
280         PTR     sys_reboot
281         PTR     sys_sethostname                 /* 6165 */
282         PTR     sys_setdomainname
283         PTR     sys_ni_syscall                  /* was create_module */
284         PTR     sys_init_module
285         PTR     sys_delete_module
286         PTR     sys_ni_syscall                  /* 6170, was get_kernel_syms */
287         PTR     sys_ni_syscall                  /* was query_module */
288         PTR     sys_quotactl
289         PTR     sys_nfsservctl
290         PTR     sys_ni_syscall                  /* res. for getpmsg */
291         PTR     sys_ni_syscall                  /* 6175  for putpmsg */
292         PTR     sys_ni_syscall                  /* res. for afs_syscall */
293         PTR     sys_ni_syscall                  /* res. for security */
294         PTR     sys_gettid
295         PTR     sys32_readahead
296         PTR     sys_setxattr                    /* 6180 */
297         PTR     sys_lsetxattr
298         PTR     sys_fsetxattr
299         PTR     sys_getxattr
300         PTR     sys_lgetxattr
301         PTR     sys_fgetxattr                   /* 6185 */
302         PTR     sys_listxattr
303         PTR     sys_llistxattr
304         PTR     sys_flistxattr
305         PTR     sys_removexattr
306         PTR     sys_lremovexattr                /* 6190 */
307         PTR     sys_fremovexattr
308         PTR     sys_tkill
309         PTR     sys_time
310         PTR     compat_sys_futex
311         PTR     sys32_sched_setaffinity         /* 6195 */
312         PTR     sys32_sched_getaffinity
313         PTR     sys_cacheflush
314         PTR     sys_cachectl
315         PTR     sys_sysmips
316         PTR     sys_io_setup                    /* 6200 */
317         PTR     sys_io_destroy
318         PTR     sys_io_getevents
319         PTR     sys_io_submit
320         PTR     sys_io_cancel
321         PTR     sys_exit_group                  /* 6205 */
322         PTR     sys_lookup_dcookie
323         PTR     sys_epoll_create
324         PTR     sys_epoll_ctl
325         PTR     sys_epoll_wait
326         PTR     sys_remap_file_pages            /* 6210 */
327         PTR     sys_ni_syscall
328         PTR     sys_fcntl
329         PTR     sys_set_tid_address
330         PTR     sys_restart_syscall
331         PTR     sys_semtimedop                  /* 6215 */
332         PTR     sys_fadvise64
333         PTR     sys_statfs64
334         PTR     sys_fstatfs64