syscall-powerpc-netbsd.S
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:4k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. #include <machine/asm.h>
  2. #define COMPAT_43
  3. #include <sys/syscall.h>
  4. #ifndef __CONCAT
  5. #include <sys/cdefs.h>
  6. #endif
  7. #define        CONCAT          __CONCAT
  8. #undef SYSCALL
  9. /* Kernel syscall interface:
  10.    Input:
  11.        0   - system call number
  12.        3-8 - arguments, as in C
  13.    Output:
  14.        so - (summary overflow) clear iff successful
  15.    This macro is similar to SYSCALL in asm.h, but not completely.
  16.    There's room for optimization, if we assume this will continue to
  17.    be assembled as one file.
  18.    This macro expansions does not include the return instruction.
  19.    If there's no other work to be done, use something like:
  20.        SYSCALL(foo) ; ret
  21.    If there is other work to do (in fork, maybe?), do it after the
  22.    SYSCALL invocation.  */
  23. ENTRY(machdep_cerror)
  24. mflr    0 # Save LR in 0
  25. stwu 1,-16(1) # allocate new stack frame
  26. stw 0,20(1) # Stash 0 in stack
  27. stw 31,8(1) # Stash 31 in stack (since it's callee-saved
  28. mr 31,3 # and we stash return there)
  29. bl PIC_PLT(_C_LABEL(__errno))
  30. stw 31,0(3) # *errno() = err
  31. lwz 0,20(1) # Restore LR from stack to 0
  32. neg 3,31 # return -errno to 3
  33. lwz 31,8(1) # Restore 31 from stack
  34. mtlr 0
  35. la 1,16(1) # Restore stack frame
  36. li 4,-1 # Put -1 in r4 for those syscalls that return
  37. blr # two values
  38. /* The fork system call is special...  */
  39. ENTRY(machdep_sys_fork)
  40. li 0, SYS_fork
  41. sc
  42. bso PIC_PLT(_C_LABEL(machdep_cerror))
  43. addi  4,4,-1
  44. blr
  45. /* The pipe system call is special... */
  46. ENTRY(machdep_sys_pipe)
  47. mr 5,3
  48. li 0,SYS_pipe
  49. sc
  50. bso PIC_PLT(_C_LABEL(machdep_cerror))
  51. stw 3,0(5) # Success, store fds
  52. stw 4,4(5)
  53. li 3,0
  54. blr # And return 0
  55. #ifndef SYS___sigsuspend14
  56. /* The sigsuspend system call is special... */
  57. ENTRY(machdep_sys_sigsuspend)
  58. lwz 3,0(3)
  59. li 0,SYS_compat_13_sigsuspend13
  60. sc
  61. b PIC_PLT(_C_LABEL(machdep_cerror))
  62. #endif /* SYS_sigsuspend14 */
  63. #ifndef SYS___sigprocmask14
  64. /* The sigprocmask system call is special... */
  65. ENTRY(machdep_sys_sigprocmask)
  66. or. 4,4,4 # Set == NULL ?
  67. li 6,1 # how = SIG_BLOCK
  68. beq Ldoit
  69. lwz 4,0(4) # if not, replace it in r4 with #set
  70. mr 6,3
  71. Ldoit: mr 3,6 # ... using sigprocmask(SIG_BLOCK)
  72. li 0,SYS_compat_13_sigprocmask13
  73. sc
  74. bso PIC_PLT(_C_LABEL(machdep_cerror))
  75. or. 5,5,5 # Check to see if oset requested
  76. beq Ldone # if oset != NULL
  77. stw 3,0(5) #   *oset = oldmask
  78. Ldone:
  79. li 3,0 # return 0
  80. blr
  81. #endif /* SYS_sigprocmask14 */
  82. /* More stuff ... */
  83. /* For fstat() we actually syscall fstat13. */
  84. ENTRY(machdep_sys_fstat)
  85. li 0, SYS___fstat13
  86. sc
  87. bnslr
  88. b PIC_PLT(_C_LABEL(machdep_cerror))
  89. /* Do we need to save the entire floating point state?  I think so... */
  90. ENTRY(__machdep_save_fp_state)
  91. stwu  1,-8(1)
  92. stw  3,4(1)
  93. stfd  0,0(3)
  94. stfdu  1,8(3)
  95. stfdu  2,8(3)
  96. stfdu  3,8(3)
  97. stfdu  4,8(3)
  98. stfdu  5,8(3)
  99. stfdu  6,8(3)
  100. stfdu  7,8(3)
  101. stfdu  8,8(3)
  102. stfdu  9,8(3)
  103. stfdu 10,8(3)
  104. stfdu 11,8(3)
  105. stfdu 12,8(3)
  106. stfdu 13,8(3)
  107. stfdu 14,8(3)
  108. stfdu 15,8(3)
  109. stfdu 16,8(3)
  110. stfdu 17,8(3)
  111. stfdu 18,8(3)
  112. stfdu 19,8(3)
  113. stfdu 20,8(3)
  114. stfdu 21,8(3)
  115. stfdu 22,8(3)
  116. stfdu 23,8(3)
  117. stfdu 24,8(3)
  118. stfdu 25,8(3)
  119. stfdu 26,8(3)
  120. stfdu 27,8(3)
  121. stfdu 28,8(3)
  122. stfdu 29,8(3)
  123. stfdu 30,8(3)
  124. stfdu 31,8(3)
  125. mffs 0
  126. stfdu 0,8(3)
  127. lwz 3,4(1)
  128. lwz 1,0(1)
  129. blr
  130. ENTRY(__machdep_restore_fp_state)
  131. stwu  1,-12(1)
  132. stw  3,4(1)
  133. stw  4,8(1)
  134. mr  4,3
  135. lfdu  1,8(3)
  136. lfdu  2,8(3)
  137. lfdu  3,8(3)
  138. lfdu  4,8(3)
  139. lfdu  5,8(3)
  140. lfdu  6,8(3)
  141. lfdu  7,8(3)
  142. lfdu  8,8(3)
  143. lfdu  9,8(3)
  144. lfdu 10,8(3)
  145. lfdu 11,8(3)
  146. lfdu 12,8(3)
  147. lfdu 13,8(3)
  148. lfdu 14,8(3)
  149. lfdu 15,8(3)
  150. lfdu 16,8(3)
  151. lfdu 17,8(3)
  152. lfdu 18,8(3)
  153. lfdu 19,8(3)
  154. lfdu 20,8(3)
  155. lfdu 21,8(3)
  156. lfdu 22,8(3)
  157. lfdu 23,8(3)
  158. lfdu 24,8(3)
  159. lfdu 25,8(3)
  160. lfdu 26,8(3)
  161. lfdu 27,8(3)
  162. lfdu 28,8(3)
  163. lfdu 29,8(3)
  164. lfdu 30,8(3)
  165. lfdu 31,8(3)
  166. lfdu 0,8(3)
  167. mtfsf 127,0
  168. lfd 0,0(4)
  169. lwz 3,4(1)
  170. lwz 4,8(1)
  171. lwz 1,0(1)
  172. blr