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