syscall-r2000-ultrix-4.2.S
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:5k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* ==== syscall.S ============================================================
  2.  * Copyright (c) 1993 by Chris Provenzano, proven@mit.edu
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  *  This product includes software developed by Chris Provenzano.
  16.  * 4. The name of Chris Provenzano may not be used to endorse or promote 
  17.  *   products derived from this software without specific prior written
  18.  *   permission.
  19.  *
  20.  * THIS SOFTWARE IS PROVIDED BY CHRIS PROVENZANO ``AS IS'' AND
  21.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  22.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  23.  * ARE DISCLAIMED.  IN NO EVENT SHALL CHRIS PROVENZANO BE LIABLE FOR ANY 
  24.  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  25.  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
  26.  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  27.  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
  28.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  29.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
  30.  * SUCH DAMAGE.
  31.  *
  32.  * Description : Machine dependent syscalls for decstation with r2000/r3000
  33.  *
  34.  *  1.00 93/08/14 proven
  35.  *      -Started coding this file.
  36.  */
  37. .text
  38.     .ascii "$Id$";
  39. #include <syscall.h>
  40. #include <machine/regdef.h>
  41. /*
  42.  * Initial asm stuff for all functions.
  43.  */
  44. .text
  45. .align 2
  46. /* ==========================================================================
  47.  * error code for all syscalls. The error value is returned as the negative
  48.  * of the errno value. Eventually I want to load the errno value directly
  49.  * into pthread_run->error but until then ...
  50.  */
  51. machdep_error:
  52. negu v0, v0 /* Return negative of errno value. */
  53. j ra
  54. /* ==========================================================================
  55.  * Syscalls already done,
  56.  * Standard   Other important BSD sockets
  57.  * fork  =   2 select =  93 socket =  97
  58.  * read  =   3 readv = 120 connect =  98
  59.  * write  =   4 writev = 121 accept =  99
  60.  * open =  5   getdirentries =     send = 101
  61.  * close =   6 recv = 102
  62.  * creat = 8 bind = 104
  63.  * link =   9 listen = 106
  64.  * unlink =  10 recvmsg = 113
  65.  * chdir =  12 sendmsg = 114
  66.  * chmod =  15 getsockopt  = 118
  67.  * chown =  16 recvfrom    = 125
  68.  * lseek   =  19 sendto = 133
  69.  * stat =  38 shutdown = 134
  70.  * dup  =  41 getpeername = 141
  71.  * pipe  =  42  
  72.  * execve =  59  
  73.  * fstat  =  62
  74.  * wait3 =  84
  75.  * dup2 =  90
  76.  * fcntl =  92
  77.  * fchown = 123
  78.  * fchmod = 124
  79.  * rename = 128
  80.  * waitpid = 189
  81.  * ======================================================================= */
  82. /* ==========================================================================
  83.  * machdep_sys_fork()
  84.  */
  85. .globl machdep_sys_fork
  86. .ent machdep_sys_fork
  87. machdep_sys_fork:
  88. .frame sp,0,ra /* No frame, return address in ra */
  89. li v0,SYS_fork /* Load fork syscall # into v0 */
  90. syscall
  91. bne a3,zero,machdep_error /* Error if a3 != 0 */
  92. beqz v1,__fork_parent /* Second return value = 0, if parent */
  93. li v0,0
  94. __fork_parent:
  95. j ra
  96. .end machdep_sys_fork
  97. /* ==========================================================================
  98.  * machdep_sys_pipe()
  99.  */
  100. .globl machdep_sys_pipe
  101. .ent machdep_sys_pipe
  102. machdep_sys_pipe:
  103. .frame sp,0,ra /* No frame, return address in ra */
  104. li v0,SYS_pipe /* Load pipe syscall # into v0 */
  105. syscall
  106. bne a3,zero,machdep_error /* Error if a3 != 0 */
  107. sw v0, 0(a0)
  108. sw v1, 4(a0)
  109. li v0, 0
  110. j ra
  111. .end machdep_sys_pipe
  112. /* ==========================================================================
  113.  * Other important asm routines.
  114.  * ======================================================================= */
  115. /* ==========================================================================
  116.  * fake_setjmp()
  117.  */
  118. .globl fake_setjmp
  119. .ent fake_setjmp
  120. fake_setjmp:
  121. .frame sp,0,ra /* No frame, return address in ra */
  122. /* Save all the important registers */
  123. sw ra,8(a0)
  124. sw gp,124(a0)
  125. sw sp,128(a0)
  126. sw s0,76(a0)
  127. /* More registers needed. */
  128. j ra
  129. .end fake_longjmp
  130. /* ==========================================================================
  131.  * machdep_sys_longjmp()
  132.  */
  133. .globl machdep_sys_longjmp
  134. .ent machdep_sys_longjmp
  135. machdep_sys_longjmp:
  136. .frame sp,0,ra /* No frame, return address in ra */
  137. li a1,1 /* Load 1 into reg a1 */
  138. sw a1, 20(a0); /* Load a1 into address a0 + 20 */
  139. li v0,SYS_sigreturn /* Load sigreturn syscall # into v0 */
  140. syscall /* Do syscall to do longjmp */
  141. j ra
  142. .end machdep_sys_longjmp