/* derived from glibc sysdeps/unix/sysv/linux/ia64/sysdep.S */ | |
#define __ASSEMBLY__ | |
#include <asm/asmmacro.h> | |
#include <asm/unistd.h> | |
ENTRY(__syscall_error) | |
.prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(0) | |
alloc r33=ar.pfs, 0, 4, 0, 0 | |
mov r32=rp | |
.body | |
mov r35=r8 | |
mov r34=r1 | |
;; | |
br.call.sptk.many b0 = __errno_location | |
.Lret0: /* force new bundle */ | |
st4 [r8]=r35 | |
mov r1=r34 | |
mov rp=r32 | |
mov r8=-1 | |
mov ar.pfs=r33 | |
br.ret.sptk.few b0 | |
END(__syscall_error) | |
GLOBAL_ENTRY(__ia64_syscall) | |
mov r15=r37 /* syscall number */ | |
break __BREAK_SYSCALL | |
cmp.eq p6,p0=-1,r10 /* r10 = -1 on error */ | |
(p6) br.cond.spnt.few __syscall_error | |
br.ret.sptk.few b0 | |
.endp __ia64_syscall |