unixsys.S revision 1.1.6.2 1 1.1.6.2 jym /* $NetBSD: unixsys.S,v 1.1.6.2 2009/05/13 17:18:55 jym Exp $ */
2 1.1.6.2 jym /* $OpenBSD: unixsys.S,v 1.6 2005/05/24 20:38:20 uwe Exp $ */
3 1.1.6.2 jym
4 1.1.6.2 jym /*
5 1.1.6.2 jym * Copyright (c) 2005 Uwe Stuehler <uwe (at) bsdx.de>
6 1.1.6.2 jym *
7 1.1.6.2 jym * Permission to use, copy, modify, and distribute this software for any
8 1.1.6.2 jym * purpose with or without fee is hereby granted, provided that the above
9 1.1.6.2 jym * copyright notice and this permission notice appear in all copies.
10 1.1.6.2 jym *
11 1.1.6.2 jym * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 1.1.6.2 jym * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 1.1.6.2 jym * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 1.1.6.2 jym * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 1.1.6.2 jym * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 1.1.6.2 jym * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 1.1.6.2 jym * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 1.1.6.2 jym */
19 1.1.6.2 jym
20 1.1.6.2 jym #include <machine/asm.h>
21 1.1.6.2 jym
22 1.1.6.2 jym #include "compat_linux.h"
23 1.1.6.2 jym
24 1.1.6.2 jym .text
25 1.1.6.2 jym
26 1.1.6.2 jym #define RSYSCALL(x) \
27 1.1.6.2 jym ENTRY(__CONCAT(u,x)) \
28 1.1.6.2 jym swi __CONCAT(__NR_,x); \
29 1.1.6.2 jym b 1f
30 1.1.6.2 jym
31 1.1.6.2 jym RSYSCALL(exit)
32 1.1.6.2 jym RSYSCALL(read)
33 1.1.6.2 jym RSYSCALL(write)
34 1.1.6.2 jym RSYSCALL(open)
35 1.1.6.2 jym RSYSCALL(close)
36 1.1.6.2 jym RSYSCALL(lseek32)
37 1.1.6.2 jym RSYSCALL(ioctl)
38 1.1.6.2 jym RSYSCALL(stat)
39 1.1.6.2 jym
40 1.1.6.2 jym 1:
41 1.1.6.2 jym cmn r0, #4096
42 1.1.6.2 jym movcc pc, lr
43 1.1.6.2 jym rsb r0, r0, #0
44 1.1.6.2 jym ldr r1, .Lerrno /* XXX clobbers arg1 */
45 1.1.6.2 jym str r0, [r1]
46 1.1.6.2 jym mvn r0, #0
47 1.1.6.2 jym mov pc, lr
48 1.1.6.2 jym
49 1.1.6.2 jym .Lerrno:
50 1.1.6.2 jym .word errno
51 1.1.6.2 jym
52 1.1.6.2 jym /* XXX only works for up to four arguments. */
53 1.1.6.2 jym ENTRY(syscall)
54 1.1.6.2 jym swi __NR_syscall
55 1.1.6.2 jym b 1b
56 1.1.6.2 jym
57 1.1.6.2 jym ENTRY(uselect)
58 1.1.6.2 jym str r4, [sp, #-4]!
59 1.1.6.2 jym ldr r4, [sp, #4]
60 1.1.6.2 jym swi __NR_select
61 1.1.6.2 jym ldr r4, [sp], #4
62 1.1.6.2 jym cmn r0, #4096
63 1.1.6.2 jym movcc pc, lr
64 1.1.6.2 jym rsb r0, r0, #0
65 1.1.6.2 jym str r1, [sp, #-4]!
66 1.1.6.2 jym ldr r1, .Lerrno
67 1.1.6.2 jym str r0, [r1]
68 1.1.6.2 jym ldr r1, [sp], #4
69 1.1.6.2 jym mvn r0, #0
70 1.1.6.2 jym mov pc, lr
71 1.1.6.2 jym
72 1.1.6.2 jym .data
73 1.1.6.2 jym
74 1.1.6.2 jym .global errno
75 1.1.6.2 jym errno:
76 1.1.6.2 jym .word 0
77