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