diff options
Diffstat (limited to 'ia64-syscall.S')
-rw-r--r-- | ia64-syscall.S | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/ia64-syscall.S b/ia64-syscall.S new file mode 100644 index 0000000000..ab073f22b9 --- /dev/null +++ b/ia64-syscall.S @@ -0,0 +1,32 @@ +/* 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 |