syscall.inc 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. {
  2. This file is part of the Free Pascal run time library.
  3. Copyright (c) 2002 Marco van de Voort
  4. member of the Free Pascal development team.
  5. i386 syscall headers for *BSD
  6. See the file COPYING.FPC, included in this distribution,
  7. for details about the copyright.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11. **********************************************************************}
  12. {These functions are the same over all three BSDs, except that some have a
  13. 32-bit Errno, and some a 16-bit}
  14. {$ifdef FPC_USE_SYSCALL}
  15. procedure actualsyscall; assembler; {inline requires a dummy push IIRC}
  16. asm
  17. int $0x80
  18. jb .LErrorcode
  19. ret
  20. .LErrorcode:
  21. call SetErrno
  22. movl $-1,%eax
  23. end;
  24. function FpSysCall(sysnr:TSysParam):TSysResult; oldfpccall; assembler; [public,alias:'FPC_DOSYS0'];
  25. asm
  26. movl sysnr,%eax
  27. call actualsyscall
  28. end;
  29. function FpSysCall(sysnr,param1:TSysParam):TSysResult; oldfpccall; assembler;[public,alias:'FPC_DOSYS1'];
  30. asm
  31. movl sysnr,%eax
  32. pushl Param1
  33. call actualsyscall
  34. addl $4,%esp
  35. end;
  36. function FpSysCall(sysnr,param1:integer):TSysResult; oldfpccall;assembler;[public,alias:'FPC_DOSYS1w'];
  37. asm
  38. movswl sysnr,%eax
  39. pushw Param1
  40. call actualsyscall
  41. add $2,%esp
  42. end;
  43. function FpSysCall(sysnr,param1,param2:TSysParam):TSysResult; oldfpccall;assembler; [public,alias:'FPC_DOSYS2'];
  44. asm
  45. movl sysnr,%eax
  46. pushl param2
  47. pushl Param1
  48. call actualsyscall
  49. addl $8,%esp
  50. end;
  51. function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; oldfpccall;assembler;[public,alias:'FPC_DOSYS3'];
  52. asm
  53. movl sysnr,%eax
  54. pushl param3
  55. pushl param2
  56. pushl Param1
  57. call actualsyscall
  58. addl $12,%esp
  59. end;
  60. function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult;oldfpccall; assembler;[public,alias:'FPC_DOSYS4'];
  61. asm
  62. movl sysnr,%eax
  63. pushl param4
  64. pushl param3
  65. pushl param2
  66. pushl Param1
  67. call actualsyscall
  68. addl $16,%esp
  69. end;
  70. function FpSysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResult;oldfpccall; assembler;[public,alias:'FPC_DOSYS5'];
  71. asm
  72. movl sysnr,%eax
  73. pushl param5
  74. pushl param4
  75. pushl param3
  76. pushl param2
  77. pushl Param1
  78. call actualsyscall
  79. addl $20,%esp
  80. end;
  81. function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6:TSysParam):int64; oldfpccall; assembler;[public,alias:'FPC_DOSYS6'];
  82. asm
  83. movl sysnr,%eax
  84. pushl param6
  85. pushl param5
  86. pushl param4
  87. pushl param3
  88. pushl param2
  89. pushl Param1
  90. call actualsyscall
  91. addl $24,%esp
  92. end;
  93. function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6,param7:TSysParam):int64;oldfpccall; assembler; [public,alias:'FPC_DOSYS7'];
  94. asm
  95. movl sysnr,%eax
  96. pushl param7
  97. pushl param6
  98. pushl param5
  99. pushl param4
  100. pushl param3
  101. pushl param2
  102. pushl Param1
  103. call actualsyscall
  104. addl $28,%esp
  105. end;
  106. function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6,param7,param8:TSysParam):int64;oldfpccall; assembler; [public,alias:'FPC_DOSYS8'];
  107. asm
  108. movl sysnr,%eax
  109. pushl param8
  110. pushl param7
  111. pushl param6
  112. pushl param5
  113. pushl param4
  114. pushl param3
  115. pushl param2
  116. pushl Param1
  117. call actualsyscall
  118. addl $32,%esp
  119. end;
  120. {$endif}