syscall.inc 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. {
  2. This file is part of the Free Pascal run time library.
  3. Copyright (c) 2003 by Florian Klaempfl,
  4. member of the Free Pascal development team.
  5. See the file COPYING.FPC, included in this distribution,
  6. for details about the copyright.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  10. **********************************************************************}
  11. {No debugging for syslinux include !}
  12. {$IFDEF SYS_LINUX}
  13. {$UNDEF SYSCALL_DEBUG}
  14. {$ENDIF SYS_LINUX}
  15. {*****************************************************************************
  16. --- Main:The System Call Self ---
  17. *****************************************************************************}
  18. {$ifdef FPC_ABI_EABI}
  19. function FpSysCall(sysnr:TSysParam):TSysResult; assembler; nostackframe; [public,alias:'FPC_SYSCALL0'];
  20. {
  21. Perform syscall and set errno variable if needed.
  22. }
  23. asm
  24. str r7,[sp,#-4]!
  25. mov r7,r0
  26. swi #0x0
  27. cmn r0,#126
  28. ldr r7,[sp],#4
  29. movls pc,lr
  30. stmfd sp!,{lr}
  31. rsb r0,r0,#0
  32. bl seterrno
  33. mvn r0,#0
  34. ldmfd sp!,{pc}
  35. end;
  36. function FpSysCall(sysnr,param1:TSysParam):TSysResult; assembler; nostackframe; [public,alias:'FPC_SYSCALL1'];
  37. {
  38. Perform syscall and set errno variable if needed.
  39. }
  40. asm
  41. str r7,[sp,#-4]!
  42. mov r7,r0
  43. mov r0,r1
  44. swi #0x0
  45. cmn r0,#126
  46. ldr r7,[sp],#4
  47. movls pc,lr
  48. stmfd sp!,{lr}
  49. rsb r0,r0,#0
  50. bl seterrno
  51. mvn r0,#0
  52. ldmfd sp!,{pc}
  53. end;
  54. function FpSysCall(sysnr,param1,param2:TSysParam):TSysResult; assembler; nostackframe; [public,alias:'FPC_SYSCALL2'];
  55. {
  56. Perform syscall and set errno variable if needed.
  57. }
  58. asm
  59. str r7,[sp,#-4]!
  60. mov r7,r0
  61. mov r0,r1
  62. mov r1,r2
  63. swi #0x0
  64. cmn r0,#126
  65. ldr r7,[sp],#4
  66. movls pc,lr
  67. stmfd sp!,{lr}
  68. rsb r0,r0,#0
  69. bl seterrno
  70. mvn r0,#0
  71. ldmfd sp!,{pc}
  72. end;
  73. function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; assembler; nostackframe; [public,alias:'FPC_SYSCALL3'];
  74. {
  75. Perform syscall and set errno variable if needed.
  76. }
  77. asm
  78. str r7,[sp,#-4]!
  79. mov r7,r0
  80. mov r0,r1
  81. mov r1,r2
  82. mov r2,r3
  83. swi #0x0
  84. cmn r0,#126
  85. ldr r7,[sp],#4
  86. movls pc,lr
  87. stmfd sp!,{lr}
  88. rsb r0,r0,#0
  89. bl seterrno
  90. mvn r0,#0
  91. ldmfd sp!,{pc}
  92. end;
  93. function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; assembler; [public,alias:'FPC_SYSCALL4'];
  94. {
  95. Perform syscall and set errno variable if needed.
  96. }
  97. asm
  98. str r7,[sp,#-4]!
  99. mov r7,r0
  100. mov r0,r1
  101. mov r1,r2
  102. mov r2,r3
  103. ldr r3,param4
  104. swi #0x0
  105. cmn r0,#126
  106. ldr r7,[sp],#4
  107. movls pc,lr
  108. stmfd sp!,{lr}
  109. rsb r0,r0,#0
  110. bl seterrno
  111. mvn r0,#0
  112. ldmfd sp!,{pc}
  113. end;
  114. function FpSysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL5'];
  115. {
  116. Perform syscall and set errno variable if needed.
  117. }
  118. asm
  119. stmfd sp!,{r4,r7}
  120. mov r7,r0
  121. mov r0,r1
  122. mov r1,r2
  123. mov r2,r3
  124. ldr r3,param4
  125. ldr r4,param5
  126. swi #0x0
  127. cmn r0,#126
  128. ldmfd sp!,{r4,r7}
  129. movls pc,lr
  130. stmfd sp!,{lr}
  131. rsb r0,r0,#0
  132. bl seterrno
  133. mvn r0,#0
  134. ldmfd sp!,{pc}
  135. end;
  136. function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL6'];
  137. {
  138. Perform syscall and set errno variable if needed.
  139. }
  140. asm
  141. stmfd sp!,{r4,r5,r7}
  142. mov r7,r0
  143. mov r0,r1
  144. mov r1,r2
  145. mov r2,r3
  146. ldr r3,param4
  147. ldr r4,param5
  148. ldr r5,param6
  149. swi #0x0
  150. cmn r0,#126
  151. ldmfd sp!,{r4,r5,r7}
  152. movls pc,lr
  153. stmfd sp!,{lr}
  154. rsb r0,r0,#0
  155. bl seterrno
  156. mvn r0,#0
  157. ldmfd sp!,{pc}
  158. end;
  159. {$else FPC_ABI_EABI}
  160. function FpSysCall(sysnr:TSysParam):TSysResult; assembler; nostackframe; [public,alias:'FPC_SYSCALL0'];
  161. {
  162. Perform syscall and set errno variable if needed.
  163. }
  164. asm
  165. swi #0x900071
  166. cmn r0,#126
  167. movls pc,lr
  168. stmfd sp!,{lr}
  169. rsb r0,r0,#0
  170. bl seterrno
  171. mvn r0,#0
  172. ldmfd sp!,{pc}
  173. end;
  174. procedure FPC_SYSCALL; external name 'FPC_SYSCALL0';
  175. function FpSysCall(sysnr,param1:TSysParam):TSysResult; assembler; nostackframe; [public,alias:'FPC_SYSCALL1'];
  176. {
  177. Jump to FPC_SYSCALL0 because code for FPC_SYSCALL0-FPC_SYSCALL3 is the same.
  178. }
  179. asm
  180. b FPC_SYSCALL
  181. end;
  182. function FpSysCall(sysnr,param1,param2:TSysParam):TSysResult; assembler; nostackframe; [public,alias:'FPC_SYSCALL2'];
  183. {
  184. Jump to FPC_SYSCALL0 because code for FPC_SYSCALL0-FPC_SYSCALL3 is the same.
  185. }
  186. asm
  187. b FPC_SYSCALL
  188. end;
  189. function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; assembler; nostackframe; [public,alias:'FPC_SYSCALL3'];
  190. {
  191. Jump to FPC_SYSCALL0 because code for FPC_SYSCALL0-FPC_SYSCALL3 is the same.
  192. }
  193. asm
  194. b FPC_SYSCALL
  195. end;
  196. function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; assembler; [public,alias:'FPC_SYSCALL4'];
  197. {
  198. This function loads some parameters from stack and calls FPC_SYSCALL0.
  199. }
  200. asm
  201. stmfd sp!,{r4}
  202. ldr r4,param4
  203. bl FPC_SYSCALL
  204. ldmfd sp!,{r4}
  205. end;
  206. function FpSysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL5'];
  207. {
  208. This function loads some parameters from stack and calls FPC_SYSCALL0.
  209. }
  210. asm
  211. stmfd sp!,{r4,r5}
  212. ldr r4,param4
  213. ldr r5,param5
  214. bl FPC_SYSCALL
  215. ldmfd sp!,{r4,r5}
  216. end;
  217. function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL6'];
  218. {
  219. This function loads some parameters from stack and calls FPC_SYSCALL0.
  220. }
  221. asm
  222. stmfd sp!,{r4,r5,r6}
  223. ldr r4,param4
  224. ldr r5,param5
  225. ldr r6,param6
  226. bl FPC_SYSCALL
  227. ldmfd sp!,{r4,r5,r6}
  228. end;
  229. {$endif FPC_ABI_EABI}