syscall-sparc-netbsd-1.3.S
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:3k
源码类别:
MySQL数据库
开发平台:
Visual C++
- /* ==== syscall.S ============================================================
- * Copyright (c) 1994 Chris Provenzano, proven@mit.edu
- * All rights reserved.
- *
- */
- #ifndef lint
- .text
- .asciz "$Id$";
- #endif
- #include <machine/asm.h>
- #include <sys/syscall.h>
- #define SYSCALL(x)
- .globl _C_LABEL(machdep_sys_##x);
- _C_LABEL(machdep_sys_##x):;
- mov SYS_##x, %g1;
- ta 0;
- bcs,a 2b;
- sub %r0,%o0,%o0;
- retl
- /*
- * Initial asm stuff for all functions.
- */
- .text
- .align 4
- /* ==========================================================================
- * error code for all syscalls. The error value is returned as the negative
- * of the errno value.
- */
- 1:
- sub %r0, %o0, %o0
- 2:
- retl
- nop
- /* ==========================================================================
- * machdep_sys_pipe()
- */
- .globl _C_LABEL(machdep_sys_pipe)
- _C_LABEL(machdep_sys_pipe):
- mov %o0, %o2
- mov SYS_pipe, %g1
- ta 0
- bcs 1b
- nop
- st %o0, [ %o2 ]
- st %o1, [ %o2 + 4 ]
- retl
- mov %g0, %o0
- /* ==========================================================================
- * machdep_sys_fork()
- */
- .globl _C_LABEL(machdep_sys_fork);
- _C_LABEL(machdep_sys_fork):;
- mov SYS_fork, %g1;
- ta 0;
- bcs 1b;
- nop;
- dec %o1;
- retl;
- and %o0, %o1, %o0; ! return 0 in child, pid in parent
- #ifndef SYS___sigprocmask14
- /* ==========================================================================
- * machdep_sys_sigprocmask()
- */
- .globl _C_LABEL(machdep_sys_sigprocmask);
- _C_LABEL(machdep_sys_sigprocmask):;
- ld [%o1], %o1;
- mov SYS_sigprocmask, %g1;
- ta 0;
- bcs 1b;
- nop;
- retl
- nop
- #endif
- #ifndef SYS___sigsuspend14
- /* ==========================================================================
- * machdep_sys_sigsuspend()
- */
- .globl _C_LABEL(machdep_sys_sigsuspend);
- _C_LABEL(machdep_sys_sigsuspend):;
- ld [%o0], %o0;
- mov SYS_sigsuspend, %g1;
- ta 0;
- bcs 1b;
- nop;
- retl
- nop
- #endif
- /* ==========================================================================
- * machdep_sys_fstat()
- */
- .globl _C_LABEL(machdep_sys_fstat);
- _C_LABEL(machdep_sys_fstat):;
- mov SYS___fstat13, %g1;
- ta 0;
- bcs 1b;
- nop;
- retl
- nop
- /* ==========================================================================
- * machdep_sys___syscall()
- */
- _machdep_sys___syscall:;
- mov SYS___syscall, %g1;
- ta 0;
- bcs 1b;
- nop;
- retl
- nop
- /* ==========================================================================
- * machdep_sys_lseek()
- */
- .global _C_LABEL(machdep_sys_lseek)
- _C_LABEL(machdep_sys_lseek):
- save %sp,-112,%sp
- mov %i1,%o4
- mov %i2,%o5
- st %i3,[%sp+92]
- mov 0,%o0
- mov SYS_lseek,%o1
- mov %i0,%o2
- call _machdep_sys___syscall,0
- mov 0,%o3
- mov %o0,%i0
- mov %o1,%i1
- ret
- restore
- /* ==========================================================================
- * machdep_sys_ftruncate()
- */
- .global _C_LABEL(machdep_sys_ftruncate)
- _C_LABEL(machdep_sys_ftruncate):
- save %sp,-104,%sp
- mov %i1,%o4
- mov %i2,%o5
- mov 0,%o0
- mov SYS_ftruncate,%o1
- mov %i0,%o2
- call _machdep_sys___syscall,0
- mov 0,%o3
- mov %o0,%o1
- sra %o0,31,%o0
- ret
- restore %g0,%o1,%o0