ack/plat/linuxppc/libsys/_syscall.s

44 lines
609 B
ArmAsm
Raw Normal View History

#
! $Source: /cvsroot/tack/Ack/plat/linux386/libsys/_syscall.s,v $
! $State: Exp $
! $Revision: 1.1 $
! Declare segments (the order is important).
.sect .text
.sect .rom
.sect .data
.sect .bss
.sect .text
#define EINVAL 22
! Perform a Linux system call.
.define __syscall
__syscall:
lwz r0, 0(sp)
lwz r3, 4(sp)
lwz r4, 8(sp)
lwz r5, 12(sp)
sc 0
bnslr
! On error, r3 contains the errno.
! It just so happens that errnos 1-34 are the same in Linux as in ACK.
cmpwi r3, 1
blt 2f
cmpwi r3, 34
bgt 2f
3:
lis r4, ha16[_errno]
stw r3, lo16[_errno](r4)
li r3, -1
blr
2:
li r3, EINVAL
b 3b