syscall-i386-openbsd-2.0.S
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:6k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* ==== syscall.S ============================================================
  2.  * Copyright (c) 1990 The Regents of the University of California.
  3.  * Copyright (c) 1995 Chris Provenzano, proven@mit.edu
  4.  * All rights reserved.
  5.  *
  6.  * This code is derived from software contributed to Berkeley by
  7.  * William Jolitz.
  8.  *
  9.  * Redistribution and use in source and binary forms, with or without
  10.  * modification, are permitted provided that the following conditions
  11.  * are met:
  12.  * 1. Redistributions of source code must retain the above copyright
  13.  *    notice, this list of conditions and the following disclaimer.
  14.  * 2. Redistributions in binary form must reproduce the above copyright
  15.  *    notice, this list of conditions and the following disclaimer in the
  16.  *    documentation and/or other materials provided with the distribution.
  17.  * 3. All advertising materials mentioning features or use of this software
  18.  *    must display the following acknowledgement:
  19.  * This product includes software developed by the University of
  20.  * California, Berkeley and its contributors.
  21.  * 4. Neither the name of the University nor the names of its contributors
  22.  *    may be used to endorse or promote products derived from this software
  23.  *    without specific prior written permission.
  24.  *
  25.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  26.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  27.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  28.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  29.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  30.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  31.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  32.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  33.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  34.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  35.  * SUCH DAMAGE.
  36.  *
  37.  * Description : Machine dependent syscalls for i386/i486/i586
  38.  *
  39.  */
  40. #ifndef lint
  41. .text
  42. .asciz "syscall-i386-freebsd-2.0.S,v 1.2 1995/05/26 07:44:29 proven Exp";
  43. #endif
  44.  
  45. #if defined(SYSLIBC_SCCS) && !defined(lint)
  46.         .asciz "@(#)syscall.s   5.1 (Berkeley) 4/23/90"
  47. #endif /* SYSLIBC_SCCS and not lint */
  48. #include <sys/syscall.h>
  49. #ifdef __STDC__
  50. #define SYSCALL(x)
  51. .globl _machdep_sys_##x##;
  52. _machdep_sys_##x##:;
  53. movl $(SYS_##x##), %eax;
  54. .byte 0x9a; .long 0; .word 7;
  55. jb 1b;
  56. ret;
  57. #else
  58. #define SYSCALL(x)
  59. .globl _machdep_sys_/**/x;
  60. _machdep_sys_/**/x:;
  61. movl $(SYS_/**/x), %eax;
  62. .byte 0x9a; .long 0; .word 7;
  63. jb 1b;
  64. ret;
  65. #endif
  66. /*
  67.  * Initial asm stuff for all functions.
  68.  */
  69. .text
  70. .align 2
  71. /* ==========================================================================
  72.  * error code for all syscalls. The error value is returned as the negative
  73.  * of the errno value.
  74.  */
  75. 1:
  76. neg %eax
  77. ret
  78. /* ==========================================================================
  79.  * machdep_sys_fork()
  80.  */
  81. .globl _machdep_sys_fork;
  82. _machdep_sys_fork:;
  83. movl $(SYS_fork), %eax;
  84. .byte 0x9a; .long 0; .word 7;
  85. cmpl $0, %edx
  86. je 2f
  87. movl $0, %eax
  88. 2:
  89. ret;
  90. /* ==========================================================================
  91.  * machdep_sys___syscall()
  92.  */
  93. _machdep_sys___syscall:;
  94. movl $(SYS___syscall), %eax;
  95. .byte 0x9a; .long 0; .word 7;
  96. jb 3f;
  97. ret
  98. /* ==========================================================================
  99.  * machdep_sys_sigsuspend()
  100.  */
  101. .globl _machdep_sys_sigsuspend;
  102. _machdep_sys_sigsuspend:;
  103. movl    4(%esp),%eax            # fetch mask arg
  104.     movl    (%eax),%eax             # indirect to mask arg
  105.     movl    %eax,4(%esp)
  106. movl $(SYS_sigsuspend), %eax;
  107. .byte 0x9a; .long 0; .word 7;
  108. jb 3f;
  109. ret
  110. 3:
  111. neg %eax
  112. movl $0xffffffff,%edx
  113. ret
  114. /* ==========================================================================
  115.  * machdep_sys_sigprocmask()
  116.  */
  117. .globl _machdep_sys_sigprocmask;
  118. _machdep_sys_sigprocmask:;
  119. movl    8(%esp),%ecx
  120. movl    (%ecx),%ecx
  121. movl    %ecx,8(%esp)
  122. movl    $ SYS_sigprocmask , %eax
  123. .byte 0x9a; .long 0; .word 7;
  124. jb 4f;
  125. ret
  126. 4:
  127. neg     %eax
  128. movl    $0xffffffff,%edx
  129. ret
  130. /* ==========================================================================
  131.  * machdep_sys_lseek()
  132.  */
  133. .globl _machdep_sys_lseek;
  134. _machdep_sys_lseek:;
  135. pushl  %ebp;
  136. movl   %esp,%ebp;
  137. pushl  0x14(%ebp);
  138. pushl  0x10(%ebp);
  139. pushl  0xc(%ebp);
  140. pushl  $0x0;
  141. pushl  0x8(%ebp);
  142. pushl  $0x0;
  143. pushl $(SYS_lseek);
  144. call _machdep_sys___syscall;
  145. leave
  146. ret
  147. /* ==========================================================================
  148.  * machdep_sys_ftruncate() ; Added by Monty
  149.  */
  150.         .globl _machdep_sys_ftruncate;
  151.  
  152. _machdep_sys_ftruncate:;
  153.  
  154.         pushl  %ebp; 
  155.         movl   %esp,%ebp;
  156.         pushl  0x10(%ebp);
  157.         pushl  0xc(%ebp);
  158.         pushl  $0x0; # Why this?
  159.         pushl  0x8(%ebp);
  160.         pushl  $0x0; # And this?
  161.         pushl $(SYS_ftruncate);
  162.         call _machdep_sys___syscall;
  163.         leave
  164.         ret  
  165. /* ==========================================================================
  166.  * machdep_sys_setjmp()
  167.  */
  168. .globl _machdep_sys_setjmp;
  169. _machdep_sys_setjmp:;
  170.     movl    4(%esp),%eax
  171.     movl    0(%esp),%edx
  172.     movl    %edx, 0(%eax)       /* rta */
  173.     movl    %ebx, 4(%eax)
  174.     movl    %esp, 8(%eax)
  175.     movl    %ebp,12(%eax)
  176.     movl    %esi,16(%eax)
  177.     movl    %edi,20(%eax)
  178.     xorl    %eax,%eax
  179.     ret
  180. /* ==========================================================================
  181.  * machdep_sys_longjmp()
  182.  */
  183.     .globl _machdep_sys_longjmp;
  184.     
  185. _machdep_sys_longjmp:;
  186.     movl    4(%esp),%edx
  187.     movl    8(%esp),%eax
  188.     movl    0(%edx),%ecx
  189.     movl    4(%edx),%ebx
  190.     movl    8(%edx),%esp
  191.     movl    12(%edx),%ebp
  192.     movl    16(%edx),%esi
  193.     movl    20(%edx),%edi
  194.     testl   %eax,%eax
  195.     jnz 1f
  196.     incl    %eax
  197. 1:  movl    %ecx,0(%esp)
  198.     ret