syscall.inc 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. {
  2. $Id$
  3. Copyright (c) 2002 by Marco van de Voort
  4. Syscall functions for i386 *BSD.
  5. This program is free software; you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License as published by
  7. the Free Software Foundation; either version 2 of the License, or
  8. (at your option) any later version.
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. GNU General Public License for more details.
  13. You should have received a copy of the GNU General Public License
  14. along with this program; if not, write to the Free Software
  15. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  16. ****************************************************************************
  17. These functions are the same over all three BSDs, except that some have a
  18. 32-bit Errno, and some a 16-bit}
  19. {$ifdef NetBSD}
  20. {$UNDEF ErrnoWord}
  21. {$endif}
  22. {$ifdef FreeBSD}
  23. {$DEFINE ErrnoWord}
  24. {$endif}
  25. procedure actualsyscall; assembler; {inline requires a dummy push IIRC}
  26. asm
  27. int $0x80
  28. jb .LErrorcode
  29. xor %ebx,%ebx
  30. ret
  31. .LErrorcode:
  32. mov %eax,%ebx
  33. mov $-1,%eax
  34. end;
  35. function Do_SysCall(sysnr:LONGINT):longint; assembler;
  36. asm
  37. movl sysnr,%eax
  38. call actualsyscall
  39. {$ifdef ErrnoWord}
  40. movw %bx,Errno
  41. {$else}
  42. movl %ebx,Errno
  43. {$endif}
  44. end;
  45. function Do_SysCall(sysnr,param1:longint):longint; assembler;
  46. asm
  47. movl sysnr,%eax
  48. pushl Param1
  49. call actualsyscall
  50. addl $4,%esp
  51. {$ifdef ErrnoWord}
  52. movw %bx,Errno
  53. {$else}
  54. movl %ebx,Errno
  55. {$endif}
  56. end;
  57. function Do_SysCall(sysnr,param1:integer):longint; assembler;
  58. asm
  59. movl sysnr,%eax
  60. pushw Param1
  61. call actualsyscall
  62. add $2,%esp
  63. {$ifdef ErrnoWord}
  64. movw %bx,Errno
  65. {$else}
  66. movl %ebx,Errno
  67. {$endif}
  68. end;
  69. function Do_SysCall(sysnr,param1,param2:LONGINT):longint; assembler;
  70. asm
  71. movl sysnr,%eax
  72. pushl param2
  73. pushl Param1
  74. call actualsyscall
  75. addl $8,%esp
  76. {$ifdef ErrnoWord}
  77. movw %bx,Errno
  78. {$else}
  79. movl %ebx,Errno
  80. {$endif}
  81. end;
  82. function Do_SysCall(sysnr,param1,param2,param3:LONGINT):longint; assembler;
  83. asm
  84. movl sysnr,%eax
  85. pushl param3
  86. pushl param2
  87. pushl Param1
  88. call actualsyscall
  89. addl $12,%esp
  90. {$ifdef ErrnoWord}
  91. movw %bx,Errno
  92. {$else}
  93. movl %ebx,Errno
  94. {$endif}
  95. end;
  96. function Do_SysCall(sysnr,param1,param2,param3,param4:LONGINT):longint; assembler;
  97. asm
  98. movl sysnr,%eax
  99. pushl param4
  100. pushl param3
  101. pushl param2
  102. pushl Param1
  103. call actualsyscall
  104. addl $16,%esp
  105. {$ifdef ErrnoWord}
  106. movw %bx,Errno
  107. {$else}
  108. movl %ebx,Errno
  109. {$endif}
  110. end;
  111. function Do_SysCall(sysnr,param1,param2,param3,param4,param5:LONGINT):longint; assembler;
  112. asm
  113. movl sysnr,%eax
  114. pushl param5
  115. pushl param4
  116. pushl param3
  117. pushl param2
  118. pushl Param1
  119. call actualsyscall
  120. addl $20,%esp
  121. {$ifdef ErrnoWord}
  122. movw %bx,Errno
  123. {$else}
  124. movl %ebx,Errno
  125. {$endif}
  126. end;
  127. function Do_SysCall(sysnr,param1,param2,param3,param4,param5,param6:LONGINT):longint; assembler;
  128. asm
  129. movl sysnr,%eax
  130. pushl param6
  131. pushl param5
  132. pushl param4
  133. pushl param3
  134. pushl param2
  135. pushl Param1
  136. call actualsyscall
  137. addl $24,%esp
  138. {$ifdef ErrnoWord}
  139. movw %bx,Errno
  140. {$else}
  141. movl %ebx,Errno
  142. {$endif}
  143. end;
  144. function Do_SysCall(sysnr,param1,param2,param3,param4,param5,param6,param7:LONGINT):longint; assembler;
  145. asm
  146. movl sysnr,%eax
  147. pushl param7
  148. pushl param6
  149. pushl param5
  150. pushl param4
  151. pushl param3
  152. pushl param2
  153. pushl Param1
  154. call actualsyscall
  155. addl $28,%esp
  156. {$ifdef ErrnoWord}
  157. movw %bx,Errno
  158. {$else}
  159. movl %ebx,Errno
  160. {$endif}
  161. end;