1 1.2 nonaka /* $NetBSD: unixsys.S,v 1.2 2011/06/20 12:39:21 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.2 nonaka RSYSCALL(fstat) 40 1.1 nonaka 41 1.1 nonaka 1: 42 1.1 nonaka cmn r0, #4096 43 1.1 nonaka movcc pc, lr 44 1.1 nonaka rsb r0, r0, #0 45 1.1 nonaka ldr r1, .Lerrno /* XXX clobbers arg1 */ 46 1.1 nonaka str r0, [r1] 47 1.1 nonaka mvn r0, #0 48 1.1 nonaka mov pc, lr 49 1.1 nonaka 50 1.1 nonaka .Lerrno: 51 1.1 nonaka .word errno 52 1.1 nonaka 53 1.1 nonaka /* XXX only works for up to four arguments. */ 54 1.1 nonaka ENTRY(syscall) 55 1.1 nonaka swi __NR_syscall 56 1.1 nonaka b 1b 57 1.1 nonaka 58 1.1 nonaka ENTRY(uselect) 59 1.1 nonaka str r4, [sp, #-4]! 60 1.1 nonaka ldr r4, [sp, #4] 61 1.1 nonaka swi __NR_select 62 1.1 nonaka ldr r4, [sp], #4 63 1.1 nonaka cmn r0, #4096 64 1.1 nonaka movcc pc, lr 65 1.1 nonaka rsb r0, r0, #0 66 1.1 nonaka str r1, [sp, #-4]! 67 1.1 nonaka ldr r1, .Lerrno 68 1.1 nonaka str r0, [r1] 69 1.1 nonaka ldr r1, [sp], #4 70 1.1 nonaka mvn r0, #0 71 1.1 nonaka mov pc, lr 72 1.1 nonaka 73 1.1 nonaka .data 74 1.1 nonaka 75 1.1 nonaka .global errno 76 1.1 nonaka errno: 77 1.1 nonaka .word 0 78