syscall-i386-sco-3.2v5.S
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:9k
源码类别:
MySQL数据库
开发平台:
Visual C++
- /* ==== syscall.S ============================================================
- * Copyright (c) 1990 The Regents of the University of California.
- * Copyright (c) 1995 Chris Provenzano, proven@mit.edu
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * William Jolitz.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * Description : Machine dependent syscalls for i386/i486/i586
- *
- */
- #ifndef lint
- .text
- .asciz "syscall-i386-sco-3.2v5.S,v 1.2 1995/05/26 07:44:29 proven Exp";
- #endif
- #if defined(SYSLIBC_SCCS) && !defined(lint)
- .asciz "@(#)syscall.s 5.1 (Berkeley) 4/23/90"
- #endif /* SYSLIBC_SCCS and not lint */
- #include <sys/errno.h>
- #include <sys/syscall.h>
- #ifdef _SCO_ELF
- #define NAME(X) machdep_sys_##X
- #define GETADDR(X)
- call 1f;
- 1:
- popl %ebx;
- addl $NAME(X)+[.-1b], %ebx
- #define END(X) 1: ; .type NAME(X),@function ; .size NAME(X),1b - NAME(X)
- #else
- #define NAME(X) _machdep_sys_##X
- #define END(X)
- #endif
- #ifdef __STDC__
- #define SYSCALL(x)
- .globl NAME(x);
- NAME(x):
- movl $(SYS_##x##), %eax;
- lcall $7, $0;
- jae 1f;
- cmp $(ERESTART), %eax;
- je NAME(x);
- neg %eax;
- 1:
- ret;
- END(x)
- #else
- #define SYSCALL(x)
- .globl NAME(x);
- NAME(x):
- movl $(SYS_/**/x), %eax;
- lcall $7, $0;
- jb 1b;
- ret;
- END(x)
- #endif
- /*
- * Initial asm stuff for all functions.
- */
- .text
- .align 2
- /* ==========================================================================
- * machdep_sys_fork()
- */
- .globl NAME(fork);
- NAME(fork):;
- movl $(SYS_fork), %eax
- lcall $7, $0
- jae 1f
- neg %eax
- ret
- 1:
- test %edx, %edx
- je 2f
- xor %eax, %eax
- 2:
- ret;
- END(fork)
- /* ==========================================================================
- * NAME(getdents)
- */
- .globl NAME(getdents);
- NAME(getdents):
- movl $(SYS_getdents), %eax;
- lcall $7, $0
- jae 1f
- neg %eax
- 1:
- ret;
- END(getdents)
- /* ==========================================================================
- * NAME(fxstat)
- */
- .globl NAME(fxstat);
- NAME(fxstat):;
- movl $(SYS_fxstat), %eax;
- lcall $7, $0
- jae 1f
- neg %eax;
- ret;
- 1:
- xor %eax, %eax;
- ret;
- END(fxstat)
- /* ==========================================================================
- * NAME(signal)
- */
- .globl NAME(signal);
- NAME(signal):;
- movl 4(%esp), %ecx
- movl $(SYS_signal),%eax
- #if 0
- call .L1
- .L1:
- popl %edx
- addl $(NAME(sigreturn)+[.-.L1]), %edx
- #else
- movl $NAME(sigreturn), %edx
- #endif
- lcall $7,$0
- jae 1f
- # movl %eax, 12(%esp)
- neg %eax
- ret
- 1:
- # xor %eax, %eax
- # movl %eax, 12(%esp)
- ret
- END(signal)
- /* ==========================================================================
- * NAME(sigaction)
- */
- .globl NAME(sigaction);
- NAME(sigaction):
- movl $(SYS_sigaction),%eax
- #if 0
- call .L2
- .L2:
- popl %edx
- addl $(NAME(sigreturn)+[.-.L2]), %edx
- #else
- movl $NAME(sigreturn), %edx
- #endif
- lcall $7, $0
- jb 1f
- xor %eax, %eax
- ret
- 1:
- neg %eax
- ret
- END(sigaction)
- .globl NAME(sigreturn)
- NAME(sigreturn):
- addl $4,%esp
- lcall $0xf, $0
- nop
- nop
- END(sigreturn)
- /* ==========================================================================
- * NAME(waitpid)
- */
- .globl NAME(waitpid);
- NAME(waitpid):
- .byte 0x9c
- popl %eax
- orl $0x8c4, %eax
- pushl %eax
- .byte 0x9d
- movl $(SYS_wait), %eax
- lcall $7, $0
- jae 2f
- cmpl $(ERESTART), %al
- je NAME(waitpid)
- neg %eax
- 3:
- ret
- 2:
- movl 8(%esp), %ecx
- test %ecx,%ecx
- je 3b
- mov %edx, (%ecx)
- ret
- END(waitpid)
- /* ==========================================================================
- * NAME(uname)
- */
- .globl NAME(uname);
- NAME(uname):
- pushl $0
- pushl $0
- pushl 12(%esp)
- subl $4, %esp
- movl $(SYS_utssys), %eax
- .byte 0x9a; .long 0; .word 7;
- jb 1f
- addl $16, %esp
- ret
- 1:
- addl $16, %esp
- neg %eax
- ret
- END(uname)
- /* ==========================================================================
- * machdep_sys_ftruncate
- */
- SYSCALL(ftruncate)
- /* ==========================================================================
- * machdep_sys_ftime
- */
- SYSCALL(ftime)
- /* ==========================================================================
- * machdep_sys_gettimeofday()
- */
- SYSCALL(gettimeofday)
- /* ==========================================================================
- * machdep_sys_kill()
- */
- SYSCALL(kill)
- /* ==========================================================================
- * pthread_sys_setitimer
- */
- .globl NAME(setitimer);
- NAME(setitimer):;
- movl $(SYS_setitimer), %eax;
- lcall $7, $0
- jae 1f
- neg %eax
- ret
- 1:
- xor %eax, %eax
- ret;
- END(setitimer)
- /* ==========================================================================
- * pthread_sys_sysconf
- */
- .globl NAME(sysconf);
- NAME(sysconf):;
- movl $(SYS_sysconf), %eax;
- lcall $7, $0
- jae 1f
- neg %eax
- 1:
- ret;
- END(sysconf)
- /* ==========================================================================
- * pthread_sys_sysi86()
- */
- .globl NAME(sysi86);
- NAME(sysi86):;
- movl $(SYS_sysi86), %eax
- lcall $7, $0
- jae 1f
- neg %eax
- 1:
- ret;
- END(sysi86)
- /* ==========================================================================
- * machdep_sys_brk()
- */
- .globl NAME(brk);
- NAME(brk):;
- movl $(SYS_break), %eax
- lcall $7, $0
- jae 1f
- neg %eax
- ret
- 1:
- xor %eax, %eax
- ret;
- END(brk)
- /* ==========================================================================
- * machdep_sys_pipe()
- */
- .globl NAME(pipe);
- NAME(pipe):;
- movl $(SYS_pipe), %eax;
- lcall $7, $0
- jae 1f
- neg %eax
- ret
- 1:
- movl 4(%esp), %ecx
- movl %eax, (%ecx)
- movl %edx, 4(%ecx)
- xor %eax, %eax
- ret;
- END(brk)
- /* ==========================================================================
- * machdep_sys_fcntl()
- */
- .globl NAME(fcntl);
- NAME(fcntl):;
- movl $(SYS_fcntl), %eax
- lcall $7, $0
- jae 1f
- neg %eax
- 1:
- ret
- END(fcntl)
- /* ==========================================================================
- * machdep_sys_select()
- */
- .globl NAME(select);
- NAME(select):;
- movl $(SYS_select), %eax
- lcall $7, $0
- jae 1f
- cmp $(ERESTART), %eax
- jne 2f
- movl $(EINTR), %eax
- 2:
- neg %eax
- 1:
- ret
- END(select)
- /* ==========================================================================
- * setjmp()
- */
- .globl setjmp;
- setjmp:
- movl 4(%esp),%eax
- movl %ebx,(%eax)
- movl %esi,4(%eax)
- movl %edi,8(%eax)
- movl %ebp,12(%eax)
- popl %edx
- movl %esp,16(%eax)
- movl %edx,20(%eax)
- subl %eax,%eax
- jmp *%edx
- 1: ; .type setjmp,@function ; .size setjmp,1b - setjmp
- /* ==========================================================================
- * longjmp()
- */
- .globl longjmp;
- longjmp:
- movl 4(%esp),%edx
- movl 8(%esp),%eax
- movl 0(%edx),%ebx
- movl 4(%edx),%esi
- movl 8(%edx),%edi
- movl 12(%edx),%ebp
- movl 16(%edx),%esp
- test %eax,%eax
- jne 1f
- inc %eax
- 1:
- jmp *20(%edx)
- 1: ; .type longjmp,@function ; .size longjmp,1b - longjmp