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

MySQL数据库

开发平台:

Visual C++

  1. /* ==== syscall.S ============================================================
  2.  * Copyright (c) 1994 Chris Provenzano, proven@mit.edu
  3.  * All rights reserved.
  4.  *
  5.  * Description : Machine dependent syscalls for i386/i486/i586
  6.  *
  7.  *  1.00 93/08/26 proven
  8.  *      -Started coding this file.
  9.  *
  10.  * 1.01 93/11/13 proven
  11.  * -The functions readv() and writev() added.
  12.  *
  13.  * 1.16 94/01/30 proven
  14.  * -This file now requires gas version 2.0 or greater.
  15.  */
  16. #ifndef lint
  17. .text
  18. .asciz "$Id$";
  19. #endif
  20. #include <sys/syscall.h>
  21. #include <config.h>
  22. #ifdef __ELF__
  23. #define NAME(X)  machdep_sys_##X
  24. #define END(X) 1: ; .type NAME(X),@function ; .size NAME(X),1b - NAME(X)
  25. #else
  26. #define NAME(X) _machdep_sys_##X
  27. #define END(X)
  28. #endif
  29. #define SYSCALL0(x)
  30. .globl NAME(x) ;
  31. NAME(x):
  32. push %ebx;
  33. lea SYS_##x, %eax;
  34. int $0x80;
  35. pop %ebx;
  36. ret;
  37. END(x)
  38. #define SYSCALL1(x)
  39. .globl NAME(x) ;
  40. NAME(x):
  41. push %ebx;
  42. mov 8(%esp), %ebx;
  43. lea SYS_##x, %eax;
  44. int $0x80;
  45. pop %ebx;
  46. ret;
  47.     END(x)
  48. #define SYSCALL2(x)
  49. .globl NAME(x) ;
  50. NAME(x):
  51. push %ebx;
  52. mov 8(%esp), %ebx;
  53. mov 12(%esp), %ecx;
  54. lea SYS_##x, %eax;
  55. int $0x80;
  56. pop %ebx;
  57. ret;
  58.     END(x)
  59. #define STATCALL2(x)                
  60.    .globl NAME(x) ;   
  61.                                    
  62. NAME(x):
  63.                                    
  64. push %ebx;                      
  65. mov 8(%esp), %ebx;              
  66. mov 12(%esp), %ecx;             
  67. lea SYS_prev_##x, %eax;         
  68. int $0x80;                      
  69. pop %ebx;                       
  70. ret; 
  71. END(x)
  72. #define SYSCALL3(x)
  73. .globl NAME(x) ;
  74. NAME(x):
  75. push %ebx;
  76. mov 8(%esp), %ebx;
  77. mov 12(%esp), %ecx;
  78. mov 16(%esp), %edx;
  79. lea SYS_##x, %eax;
  80. int $0x80;
  81. pop %ebx;
  82. ret; 
  83. END(x)
  84. #define SYSCALL4(x)
  85. .globl NAME(x) ;
  86. NAME(x):
  87. push %ebx;
  88. push %esi;
  89. mov 12(%esp), %ebx;
  90. mov 16(%esp), %ecx;
  91. mov 20(%esp), %edx;
  92. mov 24(%esp), %esi;
  93. lea SYS_##x, %eax;
  94. int $0x80;
  95. pop %esi;
  96. pop %ebx;
  97. ret; 
  98. END(x)
  99. #define SYSCALL5(x)
  100. .globl NAME(x) ;
  101. NAME(x):
  102. push %ebx;
  103. push %esi;
  104. push %edi;
  105. mov 16(%esp), %ebx;
  106. mov 20(%esp), %ecx;
  107. mov 24(%esp), %edx;
  108. mov 28(%esp), %esi;
  109. mov 32(%esp), %edi;
  110. lea SYS_##x, %eax;
  111. int $0x80;
  112. pop %edi;
  113. pop %esi;
  114. pop %ebx;
  115. ret; 
  116. END(x)
  117. /* =========================================================================
  118.  * exit  1 select  82
  119.  * fork  2 fstatfs 100
  120.  * read  3 socketcall 102
  121.  * write  4 flock 143
  122.  * open  5 readv 145
  123.  * creat  8 writev 146
  124.  * link  9
  125.  * unlink 10
  126.  * execve 11
  127.  * chdir 12
  128.  * chmod 15
  129.  * chown 16
  130.  * lseek 19
  131.  * rename 38
  132.  * dup 41
  133.  * pipe 42
  134.  * ioctl 54
  135.  * fcntl 55
  136.  * dup2 63
  137.  * readdir 89
  138.  * ftruncate 93
  139.  * fchmod 94
  140.  * fchown 95
  141.  */
  142. /*
  143.  * Initial asm stuff for all functions.
  144.  */
  145. .text
  146. .align 2
  147. /* ==========================================================================
  148.  * machdep_sys_read()
  149.  */
  150. SYSCALL3(read)
  151. /* ==========================================================================
  152.  * machdep_sys_write()
  153.  */
  154. SYSCALL3(write)
  155. /* ==========================================================================
  156.  * machdep_sys_open()
  157.  */
  158. SYSCALL3(open)
  159. /* ==========================================================================
  160.  * machdep_sys_close()
  161.  */
  162. SYSCALL1(close)
  163. /* ==========================================================================
  164.  * machdep_sys_creat()
  165.  */
  166. SYSCALL2(creat)
  167. /* ==========================================================================
  168.  * machdep_sys_dup2()
  169.  */
  170. SYSCALL2(dup2)
  171. /* ==========================================================================
  172.  * machdep_sys_fcntl()
  173.  */
  174. SYSCALL3(fcntl)
  175. /* ==========================================================================
  176.  * machdep_sys_fchown()
  177.  */
  178. SYSCALL3(fchown)
  179. /* ==========================================================================
  180.  * machdep_sys_fchmod()
  181.  */
  182. SYSCALL2(fchmod)
  183. /* ==========================================================================
  184.  * machdep_sys_ioctl()
  185.  */
  186. SYSCALL3(ioctl)
  187. /* ==========================================================================
  188.  * machdep_sys_chown()
  189.  */
  190. SYSCALL3(chown)
  191. /* ==========================================================================
  192.  * machdep_sys_chmod()
  193.  */
  194. SYSCALL2(chmod)
  195. /* ==========================================================================
  196.  * machdep_sys_chdir()
  197.  */
  198. SYSCALL1(chdir)
  199. /* ==========================================================================
  200.  * machdep_sys_unlink()
  201.  */
  202. SYSCALL1(unlink)
  203. /* ==========================================================================
  204.  * machdep_sys_link()
  205.  */
  206. SYSCALL2(link)
  207. /* ==========================================================================
  208.  * machdep_sys_rename()
  209.  */
  210. SYSCALL2(rename)
  211. /* ==========================================================================
  212.  * machdep_sys_lseek()
  213.  */
  214. SYSCALL3(lseek)
  215. /* ==========================================================================
  216.  * machdep_sys_pipe()
  217.  */
  218. SYSCALL1(pipe)
  219. /* ==========================================================================
  220.  * machdep_sys_dup()
  221.  */
  222. SYSCALL1(dup)
  223. /* ==========================================================================
  224.  * machdep_sys_fork()
  225.  */
  226. SYSCALL0(fork)
  227. /* ==========================================================================
  228.  * machdep_sys_execve()
  229.  */
  230. SYSCALL3(execve)
  231. /* ==========================================================================
  232.  * machdep_sys_stat()
  233.  */
  234. #ifdef __ELF__
  235. STATCALL2(stat)
  236. #else
  237. SYSCALL2(stat)
  238. #endif
  239. /* ==========================================================================
  240.  * machdep_sys_fstat()
  241.  */
  242. #ifdef __ELF__
  243. STATCALL2(fstat)
  244. #else
  245. SYSCALL2(fstat)
  246. #endif
  247. /* ==========================================================================
  248.  * machdep_sys_lstat()
  249.  */
  250. #ifdef __ELF__
  251. STATCALL2(lstat)
  252. #else
  253. SYSCALL2(lstat)
  254. #endif
  255. /* ==========================================================================
  256.  * machdep_sys_fstatfs()
  257.  */
  258. SYSCALL2(fstatfs)
  259. /* ==========================================================================
  260.  * machdep_sys_ftruncate()
  261.  */
  262. SYSCALL2(ftruncate)
  263. /* ==========================================================================
  264.  * Nonstandard calls used to make the system work
  265.  *
  266.  * ==========================================================================
  267.  * machdep_sys_select()
  268.  */
  269. .globl NAME(select)
  270. NAME(select):
  271. push %ebx
  272. lea 8(%esp), %ebx
  273. lea SYS_select, %eax
  274. int $0x80
  275. pop %ebx
  276. ret
  277. END(select)
  278. /* ==========================================================================
  279.  * machdep_sys_wait4()
  280.  */
  281. SYSCALL4(wait4)
  282. /* ==========================================================================
  283.  * machdep_sys_readdir()
  284.  */
  285. SYSCALL3(readdir)
  286. /* ==========================================================================
  287.  * machdep_sys_socketcall()
  288.  */
  289. SYSCALL2(socketcall)
  290. SYSCALL1(exit)
  291. SYSCALL3(sigprocmask)
  292. /* ==========================================================================
  293.  * machdep_sys_sigsuspend()
  294.  */
  295. .globl NAME(sigsuspend)
  296. NAME(sigsuspend):
  297.     push %ebp
  298. mov %esp,%ebp
  299. push %edi
  300. push %esi
  301. push %ebx
  302. mov 8(%ebp), %edx
  303. mov (%edx), %edx
  304. lea SYS_sigsuspend, %eax
  305. int $0x80
  306. pop %ebx
  307. pop %esi
  308. pop %edi
  309. mov %ebp,%esp
  310.     pop %ebp
  311. ret
  312. END(sigsuspend)
  313. /* ==========================================================================
  314.  * machdep_sys_readv()
  315.  */
  316. #ifdef HAVE_SYSCALL_READV
  317. SYSCALL3(readv)
  318. #endif
  319. /* ==========================================================================
  320.  * machdep_sys_writev()
  321.  */
  322. #ifdef HAVE_SYSCALL_WRITEV 
  323. SYSCALL3(writev)
  324. #endif
  325. /* ==========================================================================
  326.  * machdep_sys_flock()
  327.  */
  328. #ifdef HAVE_SYSCALL_FLOCK
  329. SYSCALL2(flock)
  330. #endif