aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc/kernel/sys32.S
diff options
context:
space:
mode:
authorSam Ravnborg <sam@ravnborg.org>2008-12-03 06:11:52 -0500
committerDavid S. Miller <davem@davemloft.net>2008-12-04 12:17:21 -0500
commita88b5ba8bd8ac18aad65ee6c6a254e2e74876db3 (patch)
treeeb3d0ffaf53c3f7ec6083752c2097cecd1cb892a /arch/sparc/kernel/sys32.S
parentd670bd4f803c8b646acd20f3ba21e65458293faf (diff)
sparc,sparc64: unify kernel/
o Move all files from sparc64/kernel/ to sparc/kernel - rename as appropriate o Update sparc/Makefile to the changes o Update sparc/kernel/Makefile to include the sparc64 files NOTE: This commit changes link order on sparc64! Link order had to change for either of sparc32 and sparc64. And assuming sparc64 see more testing than sparc32 change link order on sparc64 where issues will be caught faster. Signed-off-by: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc/kernel/sys32.S')
-rw-r--r--arch/sparc/kernel/sys32.S367
1 files changed, 367 insertions, 0 deletions
diff --git a/arch/sparc/kernel/sys32.S b/arch/sparc/kernel/sys32.S
new file mode 100644
index 000000000000..f061c4dda9ef
--- /dev/null
+++ b/arch/sparc/kernel/sys32.S
@@ -0,0 +1,367 @@
1/*
2 * sys32.S: I-cache tricks for 32-bit compatibility layer simple
3 * conversions.
4 *
5 * Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu)
6 * Copyright (C) 1998 Jakub Jelinek (jj@ultra.linux.cz)
7 */
8
9#include <asm/errno.h>
10
11/* NOTE: call as jump breaks return stack, we have to avoid that */
12
13 .text
14
15#define SIGN1(STUB,SYSCALL,REG1) \
16 .align 32; \
17 .globl STUB; \
18STUB: sethi %hi(SYSCALL), %g1; \
19 jmpl %g1 + %lo(SYSCALL), %g0; \
20 sra REG1, 0, REG1
21
22#define SIGN2(STUB,SYSCALL,REG1,REG2) \
23 .align 32; \
24 .globl STUB; \
25STUB: sethi %hi(SYSCALL), %g1; \
26 sra REG1, 0, REG1; \
27 jmpl %g1 + %lo(SYSCALL), %g0; \
28 sra REG2, 0, REG2
29
30#define SIGN3(STUB,SYSCALL,REG1,REG2,REG3) \
31 .align 32; \
32 .globl STUB; \
33STUB: sra REG1, 0, REG1; \
34 sethi %hi(SYSCALL), %g1; \
35 sra REG2, 0, REG2; \
36 jmpl %g1 + %lo(SYSCALL), %g0; \
37 sra REG3, 0, REG3
38
39#define SIGN4(STUB,SYSCALL,REG1,REG2,REG3,REG4) \
40 .align 32; \
41 .globl STUB; \
42STUB: sra REG1, 0, REG1; \
43 sethi %hi(SYSCALL), %g1; \
44 sra REG2, 0, REG2; \
45 sra REG3, 0, REG3; \
46 jmpl %g1 + %lo(SYSCALL), %g0; \
47 sra REG4, 0, REG4
48
49SIGN1(sys32_exit, sparc_exit, %o0)
50SIGN1(sys32_exit_group, sys_exit_group, %o0)
51SIGN1(sys32_wait4, compat_sys_wait4, %o2)
52SIGN1(sys32_creat, sys_creat, %o1)
53SIGN1(sys32_mknod, sys_mknod, %o1)
54SIGN1(sys32_perfctr, sys_perfctr, %o0)
55SIGN1(sys32_umount, sys_umount, %o1)
56SIGN1(sys32_signal, sys_signal, %o0)
57SIGN1(sys32_access, sys_access, %o1)
58SIGN1(sys32_msync, sys_msync, %o2)
59SIGN2(sys32_reboot, sys_reboot, %o0, %o1)
60SIGN1(sys32_setitimer, compat_sys_setitimer, %o0)
61SIGN1(sys32_getitimer, compat_sys_getitimer, %o0)
62SIGN1(sys32_sethostname, sys_sethostname, %o1)
63SIGN1(sys32_swapon, sys_swapon, %o1)
64SIGN1(sys32_sigaction, compat_sys_sigaction, %o0)
65SIGN1(sys32_rt_sigaction, compat_sys_rt_sigaction, %o0)
66SIGN1(sys32_sigprocmask, compat_sys_sigprocmask, %o0)
67SIGN1(sys32_rt_sigprocmask, compat_sys_rt_sigprocmask, %o0)
68SIGN2(sys32_rt_sigqueueinfo, compat_sys_rt_sigqueueinfo, %o0, %o1)
69SIGN1(sys32_getrusage, compat_sys_getrusage, %o0)
70SIGN1(sys32_setxattr, sys_setxattr, %o4)
71SIGN1(sys32_lsetxattr, sys_lsetxattr, %o4)
72SIGN1(sys32_fsetxattr, sys_fsetxattr, %o4)
73SIGN1(sys32_fgetxattr, sys_fgetxattr, %o0)
74SIGN1(sys32_flistxattr, sys_flistxattr, %o0)
75SIGN1(sys32_fremovexattr, sys_fremovexattr, %o0)
76SIGN2(sys32_tkill, sys_tkill, %o0, %o1)
77SIGN1(sys32_epoll_create, sys_epoll_create, %o0)
78SIGN3(sys32_epoll_ctl, sys_epoll_ctl, %o0, %o1, %o2)
79SIGN3(sys32_epoll_wait, sys_epoll_wait, %o0, %o2, %o3)
80SIGN1(sys32_readahead, compat_sys_readahead, %o0)
81SIGN2(sys32_fadvise64, compat_sys_fadvise64, %o0, %o4)
82SIGN2(sys32_fadvise64_64, compat_sys_fadvise64_64, %o0, %o5)
83SIGN2(sys32_bdflush, sys_bdflush, %o0, %o1)
84SIGN1(sys32_mlockall, sys_mlockall, %o0)
85SIGN1(sys32_nfsservctl, compat_sys_nfsservctl, %o0)
86SIGN1(sys32_clock_nanosleep, compat_sys_clock_nanosleep, %o1)
87SIGN1(sys32_timer_settime, compat_sys_timer_settime, %o1)
88SIGN1(sys32_io_submit, compat_sys_io_submit, %o1)
89SIGN1(sys32_mq_open, compat_sys_mq_open, %o1)
90SIGN1(sys32_select, compat_sys_select, %o0)
91SIGN1(sys32_mkdir, sys_mkdir, %o1)
92SIGN3(sys32_futex, compat_sys_futex, %o1, %o2, %o5)
93SIGN1(sys32_sysfs, compat_sys_sysfs, %o0)
94SIGN2(sys32_sendfile, compat_sys_sendfile, %o0, %o1)
95SIGN2(sys32_sendfile64, compat_sys_sendfile64, %o0, %o1)
96SIGN1(sys32_prctl, sys_prctl, %o0)
97SIGN1(sys32_sched_rr_get_interval, compat_sys_sched_rr_get_interval, %o0)
98SIGN2(sys32_waitpid, sys_waitpid, %o0, %o2)
99SIGN1(sys32_getgroups, sys_getgroups, %o0)
100SIGN1(sys32_getpgid, sys_getpgid, %o0)
101SIGN2(sys32_getpriority, sys_getpriority, %o0, %o1)
102SIGN1(sys32_getsid, sys_getsid, %o0)
103SIGN2(sys32_kill, sys_kill, %o0, %o1)
104SIGN1(sys32_nice, sys_nice, %o0)
105SIGN1(sys32_lseek, sys_lseek, %o1)
106SIGN2(sys32_open, sparc32_open, %o1, %o2)
107SIGN1(sys32_readlink, sys_readlink, %o2)
108SIGN1(sys32_sched_get_priority_max, sys_sched_get_priority_max, %o0)
109SIGN1(sys32_sched_get_priority_min, sys_sched_get_priority_min, %o0)
110SIGN1(sys32_sched_getparam, sys_sched_getparam, %o0)
111SIGN1(sys32_sched_getscheduler, sys_sched_getscheduler, %o0)
112SIGN1(sys32_sched_setparam, sys_sched_setparam, %o0)
113SIGN2(sys32_sched_setscheduler, sys_sched_setscheduler, %o0, %o1)
114SIGN1(sys32_getdomainname, sys_getdomainname, %o1)
115SIGN1(sys32_setdomainname, sys_setdomainname, %o1)
116SIGN1(sys32_setgroups, sys_setgroups, %o0)
117SIGN2(sys32_setpgid, sys_setpgid, %o0, %o1)
118SIGN3(sys32_setpriority, sys_setpriority, %o0, %o1, %o2)
119SIGN1(sys32_ssetmask, sys_ssetmask, %o0)
120SIGN2(sys32_syslog, sys_syslog, %o0, %o2)
121SIGN1(sys32_umask, sys_umask, %o0)
122SIGN3(sys32_tgkill, sys_tgkill, %o0, %o1, %o2)
123SIGN1(sys32_sendto, sys_sendto, %o0)
124SIGN1(sys32_recvfrom, sys_recvfrom, %o0)
125SIGN3(sys32_socket, sys_socket, %o0, %o1, %o2)
126SIGN2(sys32_connect, sys_connect, %o0, %o2)
127SIGN2(sys32_bind, sys_bind, %o0, %o2)
128SIGN2(sys32_listen, sys_listen, %o0, %o1)
129SIGN1(sys32_recvmsg, compat_sys_recvmsg, %o0)
130SIGN1(sys32_sendmsg, compat_sys_sendmsg, %o0)
131SIGN2(sys32_shutdown, sys_shutdown, %o0, %o1)
132SIGN3(sys32_socketpair, sys_socketpair, %o0, %o1, %o2)
133SIGN1(sys32_getpeername, sys_getpeername, %o0)
134SIGN1(sys32_getsockname, sys_getsockname, %o0)
135SIGN2(sys32_ioprio_get, sys_ioprio_get, %o0, %o1)
136SIGN3(sys32_ioprio_set, sys_ioprio_set, %o0, %o1, %o2)
137SIGN2(sys32_splice, sys_splice, %o0, %o1)
138SIGN2(sys32_sync_file_range, compat_sync_file_range, %o0, %o5)
139SIGN2(sys32_tee, sys_tee, %o0, %o1)
140SIGN1(sys32_vmsplice, compat_sys_vmsplice, %o0)
141
142 .globl sys32_mmap2
143sys32_mmap2:
144 sethi %hi(sys_mmap), %g1
145 jmpl %g1 + %lo(sys_mmap), %g0
146 sllx %o5, 12, %o5
147
148 .align 32
149 .globl sys32_socketcall
150sys32_socketcall: /* %o0=call, %o1=args */
151 cmp %o0, 1
152 bl,pn %xcc, do_einval
153 cmp %o0, 18
154 bg,pn %xcc, do_einval
155 sub %o0, 1, %o0
156 sllx %o0, 5, %o0
157 sethi %hi(__socketcall_table_begin), %g2
158 or %g2, %lo(__socketcall_table_begin), %g2
159 jmpl %g2 + %o0, %g0
160 nop
161do_einval:
162 retl
163 mov -EINVAL, %o0
164
165 .align 32
166__socketcall_table_begin:
167
168 /* Each entry is exactly 32 bytes. */
169do_sys_socket: /* sys_socket(int, int, int) */
1701: ldswa [%o1 + 0x0] %asi, %o0
171 sethi %hi(sys_socket), %g1
1722: ldswa [%o1 + 0x8] %asi, %o2
173 jmpl %g1 + %lo(sys_socket), %g0
1743: ldswa [%o1 + 0x4] %asi, %o1
175 nop
176 nop
177 nop
178do_sys_bind: /* sys_bind(int fd, struct sockaddr *, int) */
1794: ldswa [%o1 + 0x0] %asi, %o0
180 sethi %hi(sys_bind), %g1
1815: ldswa [%o1 + 0x8] %asi, %o2
182 jmpl %g1 + %lo(sys_bind), %g0
1836: lduwa [%o1 + 0x4] %asi, %o1
184 nop
185 nop
186 nop
187do_sys_connect: /* sys_connect(int, struct sockaddr *, int) */
1887: ldswa [%o1 + 0x0] %asi, %o0
189 sethi %hi(sys_connect), %g1
1908: ldswa [%o1 + 0x8] %asi, %o2
191 jmpl %g1 + %lo(sys_connect), %g0
1929: lduwa [%o1 + 0x4] %asi, %o1
193 nop
194 nop
195 nop
196do_sys_listen: /* sys_listen(int, int) */
19710: ldswa [%o1 + 0x0] %asi, %o0
198 sethi %hi(sys_listen), %g1
199 jmpl %g1 + %lo(sys_listen), %g0
20011: ldswa [%o1 + 0x4] %asi, %o1
201 nop
202 nop
203 nop
204 nop
205do_sys_accept: /* sys_accept(int, struct sockaddr *, int *) */
20612: ldswa [%o1 + 0x0] %asi, %o0
207 sethi %hi(sys_accept), %g1
20813: lduwa [%o1 + 0x8] %asi, %o2
209 jmpl %g1 + %lo(sys_accept), %g0
21014: lduwa [%o1 + 0x4] %asi, %o1
211 nop
212 nop
213 nop
214do_sys_getsockname: /* sys_getsockname(int, struct sockaddr *, int *) */
21515: ldswa [%o1 + 0x0] %asi, %o0
216 sethi %hi(sys_getsockname), %g1
21716: lduwa [%o1 + 0x8] %asi, %o2
218 jmpl %g1 + %lo(sys_getsockname), %g0
21917: lduwa [%o1 + 0x4] %asi, %o1
220 nop
221 nop
222 nop
223do_sys_getpeername: /* sys_getpeername(int, struct sockaddr *, int *) */
22418: ldswa [%o1 + 0x0] %asi, %o0
225 sethi %hi(sys_getpeername), %g1
22619: lduwa [%o1 + 0x8] %asi, %o2
227 jmpl %g1 + %lo(sys_getpeername), %g0
22820: lduwa [%o1 + 0x4] %asi, %o1
229 nop
230 nop
231 nop
232do_sys_socketpair: /* sys_socketpair(int, int, int, int *) */
23321: ldswa [%o1 + 0x0] %asi, %o0
234 sethi %hi(sys_socketpair), %g1
23522: ldswa [%o1 + 0x8] %asi, %o2
23623: lduwa [%o1 + 0xc] %asi, %o3
237 jmpl %g1 + %lo(sys_socketpair), %g0
23824: ldswa [%o1 + 0x4] %asi, %o1
239 nop
240 nop
241do_sys_send: /* sys_send(int, void *, size_t, unsigned int) */
24225: ldswa [%o1 + 0x0] %asi, %o0
243 sethi %hi(sys_send), %g1
24426: lduwa [%o1 + 0x8] %asi, %o2
24527: lduwa [%o1 + 0xc] %asi, %o3
246 jmpl %g1 + %lo(sys_send), %g0
24728: lduwa [%o1 + 0x4] %asi, %o1
248 nop
249 nop
250do_sys_recv: /* sys_recv(int, void *, size_t, unsigned int) */
25129: ldswa [%o1 + 0x0] %asi, %o0
252 sethi %hi(sys_recv), %g1
25330: lduwa [%o1 + 0x8] %asi, %o2
25431: lduwa [%o1 + 0xc] %asi, %o3
255 jmpl %g1 + %lo(sys_recv), %g0
25632: lduwa [%o1 + 0x4] %asi, %o1
257 nop
258 nop
259do_sys_sendto: /* sys_sendto(int, u32, compat_size_t, unsigned int, u32, int) */
26033: ldswa [%o1 + 0x0] %asi, %o0
261 sethi %hi(sys_sendto), %g1
26234: lduwa [%o1 + 0x8] %asi, %o2
26335: lduwa [%o1 + 0xc] %asi, %o3
26436: lduwa [%o1 + 0x10] %asi, %o4
26537: ldswa [%o1 + 0x14] %asi, %o5
266 jmpl %g1 + %lo(sys_sendto), %g0
26738: lduwa [%o1 + 0x4] %asi, %o1
268do_sys_recvfrom: /* sys_recvfrom(int, u32, compat_size_t, unsigned int, u32, u32) */
26939: ldswa [%o1 + 0x0] %asi, %o0
270 sethi %hi(sys_recvfrom), %g1
27140: lduwa [%o1 + 0x8] %asi, %o2
27241: lduwa [%o1 + 0xc] %asi, %o3
27342: lduwa [%o1 + 0x10] %asi, %o4
27443: lduwa [%o1 + 0x14] %asi, %o5
275 jmpl %g1 + %lo(sys_recvfrom), %g0
27644: lduwa [%o1 + 0x4] %asi, %o1
277do_sys_shutdown: /* sys_shutdown(int, int) */
27845: ldswa [%o1 + 0x0] %asi, %o0
279 sethi %hi(sys_shutdown), %g1
280 jmpl %g1 + %lo(sys_shutdown), %g0
28146: ldswa [%o1 + 0x4] %asi, %o1
282 nop
283 nop
284 nop
285 nop
286do_sys_setsockopt: /* compat_sys_setsockopt(int, int, int, char *, int) */
28747: ldswa [%o1 + 0x0] %asi, %o0
288 sethi %hi(compat_sys_setsockopt), %g1
28948: ldswa [%o1 + 0x8] %asi, %o2
29049: lduwa [%o1 + 0xc] %asi, %o3
29150: ldswa [%o1 + 0x10] %asi, %o4
292 jmpl %g1 + %lo(compat_sys_setsockopt), %g0
29351: ldswa [%o1 + 0x4] %asi, %o1
294 nop
295do_sys_getsockopt: /* compat_sys_getsockopt(int, int, int, u32, u32) */
29652: ldswa [%o1 + 0x0] %asi, %o0
297 sethi %hi(compat_sys_getsockopt), %g1
29853: ldswa [%o1 + 0x8] %asi, %o2
29954: lduwa [%o1 + 0xc] %asi, %o3
30055: lduwa [%o1 + 0x10] %asi, %o4
301 jmpl %g1 + %lo(compat_sys_getsockopt), %g0
30256: ldswa [%o1 + 0x4] %asi, %o1
303 nop
304do_sys_sendmsg: /* compat_sys_sendmsg(int, struct compat_msghdr *, unsigned int) */
30557: ldswa [%o1 + 0x0] %asi, %o0
306 sethi %hi(compat_sys_sendmsg), %g1
30758: lduwa [%o1 + 0x8] %asi, %o2
308 jmpl %g1 + %lo(compat_sys_sendmsg), %g0
30959: lduwa [%o1 + 0x4] %asi, %o1
310 nop
311 nop
312 nop
313do_sys_recvmsg: /* compat_sys_recvmsg(int, struct compat_msghdr *, unsigned int) */
31460: ldswa [%o1 + 0x0] %asi, %o0
315 sethi %hi(compat_sys_recvmsg), %g1
31661: lduwa [%o1 + 0x8] %asi, %o2
317 jmpl %g1 + %lo(compat_sys_recvmsg), %g0
31862: lduwa [%o1 + 0x4] %asi, %o1
319 nop
320 nop
321 nop
322do_sys_accept4: /* sys_accept4(int, struct sockaddr *, int *, int) */
32363: ldswa [%o1 + 0x0] %asi, %o0
324 sethi %hi(sys_accept4), %g1
32564: lduwa [%o1 + 0x8] %asi, %o2
32665: ldswa [%o1 + 0xc] %asi, %o3
327 jmpl %g1 + %lo(sys_accept4), %g0
32866: lduwa [%o1 + 0x4] %asi, %o1
329 nop
330 nop
331
332 .section __ex_table,"a"
333 .align 4
334 .word 1b, __retl_efault, 2b, __retl_efault
335 .word 3b, __retl_efault, 4b, __retl_efault
336 .word 5b, __retl_efault, 6b, __retl_efault
337 .word 7b, __retl_efault, 8b, __retl_efault
338 .word 9b, __retl_efault, 10b, __retl_efault
339 .word 11b, __retl_efault, 12b, __retl_efault
340 .word 13b, __retl_efault, 14b, __retl_efault
341 .word 15b, __retl_efault, 16b, __retl_efault
342 .word 17b, __retl_efault, 18b, __retl_efault
343 .word 19b, __retl_efault, 20b, __retl_efault
344 .word 21b, __retl_efault, 22b, __retl_efault
345 .word 23b, __retl_efault, 24b, __retl_efault
346 .word 25b, __retl_efault, 26b, __retl_efault
347 .word 27b, __retl_efault, 28b, __retl_efault
348 .word 29b, __retl_efault, 30b, __retl_efault
349 .word 31b, __retl_efault, 32b, __retl_efault
350 .word 33b, __retl_efault, 34b, __retl_efault
351 .word 35b, __retl_efault, 36b, __retl_efault
352 .word 37b, __retl_efault, 38b, __retl_efault
353 .word 39b, __retl_efault, 40b, __retl_efault
354 .word 41b, __retl_efault, 42b, __retl_efault
355 .word 43b, __retl_efault, 44b, __retl_efault
356 .word 45b, __retl_efault, 46b, __retl_efault
357 .word 47b, __retl_efault, 48b, __retl_efault
358 .word 49b, __retl_efault, 50b, __retl_efault
359 .word 51b, __retl_efault, 52b, __retl_efault
360 .word 53b, __retl_efault, 54b, __retl_efault
361 .word 55b, __retl_efault, 56b, __retl_efault
362 .word 57b, __retl_efault, 58b, __retl_efault
363 .word 59b, __retl_efault, 60b, __retl_efault
364 .word 61b, __retl_efault, 62b, __retl_efault
365 .word 63b, __retl_efault, 64b, __retl_efault
366 .word 65b, __retl_efault, 66b, __retl_efault
367 .previous