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