Home | History | Annotate | Line # | Download | only in zboot
      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