linux-syscalls 0.4.0

A library to easily invoke linux system calls.
Documentation
# Syscall registers
# +-------+------+------+------+------+------+------+--------+
# | sysno | arg0 | arg1 | arg2 | arg3 | arg4 | arg5 | return |
# +-------+------+------+------+------+------+------+--------+
# |  r0   |  r3  |  r4  |  r5  |  r6  |  r7  |  r8  |   r3   |
# +-------+------+------+------+------+------+------+--------+
#
# sysv calling convention
# +----------+---------------------------------+-------------------+
# |  return  |             params              | additional params |
# +----------+---------------------------------+-------------------+
# |    r3    | r3, r4, r5, r6, r7, r8, r9, r10 |    stack RTL      |
# +----------+---------------------------------+-------------------+
#
# We can pass syscall's parameters as a normal call and move the last
# parameter to r0.

.macro SYSCALL reg
  mr      0, \reg
  sc
  bnslr
  neg     3, 3
  blr
.endm

  .section .text

  .globl linux_syscalls_rs_syscall0
linux_syscalls_rs_syscall0:
  SYSCALL 3

  .globl linux_syscalls_rs_syscall1
linux_syscalls_rs_syscall1:
  SYSCALL 4

  .globl linux_syscalls_rs_syscall1_noreturn
linux_syscalls_rs_syscall1_noreturn:
  mr    0, 4
  sc
  trap

  .globl linux_syscalls_rs_syscall2
linux_syscalls_rs_syscall2:
  SYSCALL 5

  .globl linux_syscalls_rs_syscall3
linux_syscalls_rs_syscall3:
  SYSCALL 6

  .globl linux_syscalls_rs_syscall4
linux_syscalls_rs_syscall4:
  SYSCALL 7

  .globl linux_syscalls_rs_syscall5
linux_syscalls_rs_syscall5:
  SYSCALL 8

  .globl linux_syscalls_rs_syscall6
linux_syscalls_rs_syscall6:
  SYSCALL 9