体验新版 GitCode,发现更多精彩内容 >>
/* 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