syscall-i386-freebsd-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. #ifdef __ELF__
  51. #define NAME(X) machdep_sys_##X
  52. #else
  53. #define NAME(X) _machdep_sys_##X
  54. #endif
  55. #else
  56. #ifdef __ELF__
  57. #define NAME(X) machdep_sys_/**/X
  58. #else
  59. #define NAME(X) _machdep_sys_/**/X
  60. #endif
  61. #endif
  62. #ifdef __ELF__
  63. #define END(X) 5: ; .type NAME(X),@function ; .size NAME(X),5b - NAME(X)
  64. #define KERNCALL int $0x80
  65. #else
  66. #define END(X)
  67. #define KERNCALL .byte 0x9a; .long 0; .word 7;
  68. #endif
  69. /*
  70.  * Initial asm stuff for all functions.
  71.  */
  72. .text
  73. .align 2
  74. /* ==========================================================================
  75.  * error code for all syscalls. The error value is returned as the negative
  76.  * of the errno value.
  77.  */
  78. 1:
  79. neg %eax
  80. ret
  81. /* ==========================================================================
  82.  * machdep_sys_fork()
  83.  */
  84. .globl NAME(fork);
  85. NAME(fork):;
  86. movl $(SYS_fork), %eax;
  87. KERNCALL;
  88. cmpl $0, %edx
  89. je 2f
  90. movl $0, %eax
  91. 2:
  92. ret;
  93. END(fork)
  94. /* ==========================================================================
  95.  * machdep_sys___syscall()
  96.  */
  97. _machdep_sys___syscall:;
  98. movl $(SYS___syscall), %eax;
  99. KERNCALL;
  100. jb 3f;
  101. ret
  102. /* ==========================================================================
  103.  * machdep_sys_sigsuspend()
  104.  */
  105. .globl NAME(sigsuspend);
  106. NAME(sigsuspend):;
  107. movl    4(%esp),%eax            # fetch mask arg
  108. movl    (%eax),%eax             # indirect to mask arg
  109. movl    %eax,4(%esp)
  110. movl $(SYS_sigsuspend), %eax;
  111. KERNCALL;
  112. jb 3f;
  113. ret
  114. 3:
  115. neg %eax
  116. movl $0xffffffff,%edx
  117. ret
  118. END(sigsuspend)
  119. /* ==========================================================================
  120.  * machdep_sys_sigprocmask()
  121.  */
  122. .globl NAME(sigprocmask);
  123. NAME(sigprocmask):;
  124. movl    8(%esp),%ecx
  125. movl    (%ecx),%ecx
  126. movl    %ecx,8(%esp)
  127. movl    $ SYS_sigprocmask , %eax
  128. KERNCALL;
  129. jb 4f;
  130. ret
  131. 4:
  132. neg     %eax
  133. movl    $0xffffffff,%edx
  134. ret
  135. END(sigprocmask)
  136. /* ==========================================================================
  137.  * machdep_sys_lseek()
  138.  */
  139. .globl NAME(lseek);
  140. NAME(lseek):;
  141. pushl  %ebp;
  142. movl   %esp,%ebp;
  143. pushl  0x14(%ebp);
  144. pushl  0x10(%ebp);
  145. pushl  0xc(%ebp);
  146. pushl  $0x0;
  147. pushl  0x8(%ebp);
  148. pushl  $0x0;
  149. pushl $(SYS_lseek);
  150. call _machdep_sys___syscall;
  151. leave
  152. ret
  153. END(lseek)
  154. /* ==========================================================================
  155.  * machdep_sys_ftruncate() ; Added by Monty
  156.  */
  157.         .globl NAME(ftruncate);
  158.  
  159. NAME(ftruncate):;
  160.  
  161.         pushl  %ebp; 
  162.         movl   %esp,%ebp;
  163.         pushl  0x10(%ebp);
  164.         pushl  0xc(%ebp);
  165.         pushl  $0x0; # Why this?
  166.         pushl  0x8(%ebp);
  167.         pushl  $0x0; # And this?
  168.         pushl $(SYS_ftruncate);
  169.         call _machdep_sys___syscall;
  170.         leave
  171.         ret  
  172. END(ftruncate)
  173. /* ==========================================================================
  174.  * machdep_sys_setjmp()
  175.  */
  176. .globl NAME(setjmp);
  177. NAME(setjmp):;
  178. movl    4(%esp),%eax
  179. movl    0(%esp),%edx
  180. movl    %edx, 0(%eax)       /* rta */
  181. movl    %ebx, 4(%eax)
  182. movl    %esp, 8(%eax)
  183. movl    %ebp,12(%eax)
  184. movl    %esi,16(%eax)
  185. movl    %edi,20(%eax)
  186. xorl    %eax,%eax
  187. ret
  188. END(setjmp)
  189. /* ==========================================================================
  190.  * machdep_sys_longjmp()
  191.  */
  192.     .globl NAME(longjmp);
  193.     
  194. NAME(longjmp):;
  195. movl    4(%esp),%edx
  196. movl    8(%esp),%eax
  197. movl    0(%edx),%ecx
  198. movl    4(%edx),%ebx
  199. movl    8(%edx),%esp
  200. movl    12(%edx),%ebp
  201. movl    16(%edx),%esi
  202. movl    20(%edx),%edi
  203. testl   %eax,%eax
  204. jnz 1f
  205. incl    %eax
  206. 1:
  207. movl    %ecx,0(%esp)
  208. ret
  209. END(longjmp)