syscall-i386-sco-3.2v5.S
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:9k
源码类别:

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-sco-3.2v5.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/errno.h>
  49. #include <sys/syscall.h>
  50. #ifdef _SCO_ELF
  51. #define NAME(X)  machdep_sys_##X
  52. #define GETADDR(X) 
  53. call 1f; 
  54. 1: 
  55. popl %ebx; 
  56. addl $NAME(X)+[.-1b], %ebx
  57. #define END(X) 1: ; .type NAME(X),@function ; .size NAME(X),1b - NAME(X)
  58. #else
  59. #define NAME(X) _machdep_sys_##X
  60. #define END(X)
  61. #endif
  62. #ifdef __STDC__
  63. #define SYSCALL(x)
  64. .globl NAME(x);
  65. NAME(x):
  66. movl $(SYS_##x##), %eax;
  67. lcall $7, $0; 
  68. jae 1f;
  69. cmp $(ERESTART), %eax; 
  70. je NAME(x); 
  71. neg %eax;
  72. 1: 
  73. ret;
  74. END(x)
  75. #else
  76. #define SYSCALL(x)
  77. .globl NAME(x);
  78. NAME(x):
  79. movl $(SYS_/**/x), %eax;
  80. lcall $7, $0; 
  81. jb 1b;
  82. ret;
  83. END(x)
  84. #endif
  85. /*
  86.  * Initial asm stuff for all functions.
  87.  */
  88. .text
  89. .align 2
  90. /* ==========================================================================
  91.  * machdep_sys_fork()
  92.  */
  93. .globl NAME(fork);
  94. NAME(fork):;
  95. movl $(SYS_fork), %eax
  96. lcall $7, $0
  97. jae   1f
  98. neg %eax
  99. ret
  100. 1:
  101. test %edx, %edx
  102. je   2f
  103. xor  %eax, %eax
  104. 2:
  105. ret;
  106. END(fork)
  107. /* ==========================================================================
  108.  * NAME(getdents)
  109.  */
  110. .globl NAME(getdents);
  111. NAME(getdents):
  112. movl $(SYS_getdents), %eax;
  113. lcall $7, $0
  114. jae   1f
  115. neg   %eax
  116. 1:
  117. ret;
  118. END(getdents)
  119. /* ==========================================================================
  120.  * NAME(fxstat)
  121.  */
  122. .globl NAME(fxstat);
  123. NAME(fxstat):;
  124. movl $(SYS_fxstat), %eax;
  125. lcall $7, $0
  126. jae   1f
  127. neg   %eax;
  128. ret;
  129. 1:
  130. xor  %eax, %eax;
  131. ret;
  132. END(fxstat)
  133. /* ==========================================================================
  134.  * NAME(signal)
  135.  */
  136. .globl NAME(signal);
  137. NAME(signal):;
  138. movl 4(%esp), %ecx
  139. movl $(SYS_signal),%eax
  140. #if 0
  141. call .L1
  142. .L1:
  143. popl %edx
  144. addl $(NAME(sigreturn)+[.-.L1]), %edx
  145. #else
  146. movl $NAME(sigreturn), %edx
  147. #endif
  148. lcall $7,$0
  149. jae 1f
  150. # movl %eax, 12(%esp)
  151. neg %eax
  152. ret
  153. 1:
  154. # xor %eax, %eax
  155. # movl %eax, 12(%esp)
  156. ret
  157. END(signal)
  158. /* ==========================================================================
  159.  * NAME(sigaction)
  160.  */
  161. .globl NAME(sigaction);
  162. NAME(sigaction):
  163. movl $(SYS_sigaction),%eax
  164. #if 0
  165. call .L2
  166. .L2:
  167. popl %edx
  168. addl $(NAME(sigreturn)+[.-.L2]), %edx
  169. #else
  170. movl $NAME(sigreturn), %edx
  171. #endif
  172. lcall $7, $0
  173. jb 1f
  174. xor %eax, %eax
  175. ret
  176. 1:
  177. neg %eax
  178. ret
  179. END(sigaction)
  180. .globl NAME(sigreturn)
  181. NAME(sigreturn):
  182.         addl    $4,%esp
  183. lcall $0xf, $0
  184. nop
  185. nop
  186. END(sigreturn)
  187. /* ==========================================================================
  188.  * NAME(waitpid)
  189.  */
  190. .globl NAME(waitpid);
  191. NAME(waitpid):
  192.         .byte   0x9c
  193. popl %eax
  194. orl $0x8c4, %eax
  195. pushl %eax
  196. .byte 0x9d
  197. movl $(SYS_wait), %eax
  198. lcall $7, $0
  199. jae 2f
  200. cmpl $(ERESTART), %al
  201. je NAME(waitpid)
  202. neg %eax
  203. 3:
  204. ret
  205. 2:
  206. movl 8(%esp), %ecx
  207. test %ecx,%ecx
  208. je 3b
  209. mov %edx, (%ecx)
  210. ret
  211. END(waitpid)
  212. /* ==========================================================================
  213.  * NAME(uname)
  214.  */
  215. .globl NAME(uname);
  216. NAME(uname):
  217. pushl $0
  218. pushl $0
  219. pushl 12(%esp)
  220. subl $4, %esp
  221. movl $(SYS_utssys), %eax
  222. .byte 0x9a; .long 0; .word 7;
  223. jb 1f
  224. addl $16, %esp
  225. ret
  226. 1:
  227. addl $16, %esp
  228. neg %eax
  229.         ret
  230. END(uname)
  231. /* ==========================================================================
  232.  * machdep_sys_ftruncate
  233.  */
  234. SYSCALL(ftruncate)
  235. /* ==========================================================================
  236.  * machdep_sys_ftime
  237.  */
  238. SYSCALL(ftime)
  239. /* ==========================================================================
  240.  * machdep_sys_gettimeofday()
  241.  */
  242. SYSCALL(gettimeofday)
  243. /* ==========================================================================
  244.  * machdep_sys_kill()
  245.  */
  246. SYSCALL(kill)
  247. /* ==========================================================================
  248.  * pthread_sys_setitimer
  249.  */
  250. .globl NAME(setitimer);
  251. NAME(setitimer):;
  252. movl $(SYS_setitimer), %eax;
  253. lcall $7, $0
  254. jae   1f
  255. neg   %eax
  256. ret
  257. 1:
  258. xor  %eax, %eax
  259. ret;
  260. END(setitimer)
  261. /* ==========================================================================
  262.  * pthread_sys_sysconf
  263.  */
  264. .globl NAME(sysconf);
  265. NAME(sysconf):;
  266. movl $(SYS_sysconf), %eax;
  267. lcall $7, $0
  268. jae   1f
  269. neg   %eax
  270. 1:
  271. ret;
  272. END(sysconf)
  273. /* ==========================================================================
  274.  * pthread_sys_sysi86()
  275.  */
  276. .globl NAME(sysi86);
  277. NAME(sysi86):;
  278. movl $(SYS_sysi86), %eax
  279. lcall $7, $0
  280. jae   1f
  281. neg   %eax
  282. 1:
  283. ret;
  284. END(sysi86)
  285. /* ==========================================================================
  286.  * machdep_sys_brk()
  287.  */
  288. .globl NAME(brk);
  289. NAME(brk):;
  290. movl $(SYS_break), %eax
  291. lcall $7, $0
  292. jae   1f
  293. neg   %eax
  294. ret
  295. 1:
  296. xor %eax, %eax
  297. ret;
  298. END(brk)
  299. /* ==========================================================================
  300.  * machdep_sys_pipe()
  301.  */
  302. .globl NAME(pipe);
  303. NAME(pipe):;
  304. movl $(SYS_pipe), %eax;
  305. lcall $7, $0
  306. jae   1f
  307. neg   %eax
  308. ret
  309. 1:
  310. movl 4(%esp), %ecx
  311. movl %eax, (%ecx)
  312. movl %edx, 4(%ecx)
  313. xor %eax, %eax
  314. ret;
  315. END(brk)
  316. /* ==========================================================================
  317.  * machdep_sys_fcntl()
  318.  */
  319. .globl NAME(fcntl);
  320. NAME(fcntl):;
  321. movl $(SYS_fcntl), %eax
  322. lcall $7, $0
  323. jae   1f
  324. neg   %eax
  325. 1:
  326. ret
  327. END(fcntl)
  328. /* ==========================================================================
  329.  * machdep_sys_select()
  330.  */
  331. .globl NAME(select);
  332. NAME(select):;
  333. movl $(SYS_select), %eax
  334. lcall $7, $0
  335. jae   1f
  336. cmp   $(ERESTART), %eax
  337. jne   2f
  338. movl  $(EINTR), %eax
  339. 2:
  340. neg   %eax
  341. 1:
  342. ret
  343. END(select)
  344. /* ==========================================================================
  345.  * setjmp()
  346.  */
  347. .globl setjmp;
  348. setjmp:
  349. movl 4(%esp),%eax
  350. movl %ebx,(%eax)
  351. movl %esi,4(%eax)
  352. movl %edi,8(%eax)
  353. movl %ebp,12(%eax)
  354. popl %edx
  355. movl %esp,16(%eax)
  356. movl %edx,20(%eax)
  357. subl %eax,%eax
  358. jmp *%edx
  359. 1: ;  .type setjmp,@function ; .size setjmp,1b - setjmp
  360. /* ==========================================================================
  361.  * longjmp()
  362.  */
  363. .globl longjmp;
  364. longjmp:
  365. movl 4(%esp),%edx
  366. movl 8(%esp),%eax
  367. movl 0(%edx),%ebx
  368. movl 4(%edx),%esi
  369. movl 8(%edx),%edi
  370. movl 12(%edx),%ebp
  371. movl 16(%edx),%esp
  372. test %eax,%eax
  373. jne 1f
  374. inc %eax
  375. 1:
  376. jmp *20(%edx)
  377. 1: ;  .type longjmp,@function ; .size longjmp,1b - longjmp