syscall.inc 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  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. ldr r7,[sp],#4
  28. cmn r0,#126
  29. ldr r7,[sp],#4
  30. movls pc,lr
  31. stmfd sp!,{lr}
  32. rsb r0,r0,#0
  33. bl seterrno
  34. mvn r0,#0
  35. ldmfd sp!,{pc}
  36. end;
  37. function FpSysCall(sysnr,param1:TSysParam):TSysResult; assembler; nostackframe; [public,alias:'FPC_SYSCALL1'];
  38. {
  39. Perform syscall and set errno variable if needed.
  40. }
  41. asm
  42. str r7,[sp,#-4]!
  43. mov r7,r0
  44. mov r0,r1
  45. swi #0x0
  46. cmn r0,#126
  47. ldr r7,[sp],#4
  48. movls pc,lr
  49. stmfd sp!,{lr}
  50. rsb r0,r0,#0
  51. bl seterrno
  52. mvn r0,#0
  53. ldmfd sp!,{pc}
  54. end;
  55. function FpSysCall(sysnr,param1,param2:TSysParam):TSysResult; assembler; nostackframe; [public,alias:'FPC_SYSCALL2'];
  56. {
  57. Perform syscall and set errno variable if needed.
  58. }
  59. asm
  60. str r7,[sp,#-4]!
  61. mov r7,r0
  62. mov r0,r1
  63. mov r1,r2
  64. swi #0x0
  65. cmn r0,#126
  66. ldr r7,[sp],#4
  67. movls pc,lr
  68. stmfd sp!,{lr}
  69. rsb r0,r0,#0
  70. bl seterrno
  71. mvn r0,#0
  72. ldmfd sp!,{pc}
  73. end;
  74. function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; assembler; nostackframe; [public,alias:'FPC_SYSCALL3'];
  75. {
  76. Perform syscall and set errno variable if needed.
  77. }
  78. asm
  79. str r7,[sp,#-4]!
  80. mov r7,r0
  81. mov r0,r1
  82. mov r1,r2
  83. mov r2,r3
  84. swi #0x0
  85. cmn r0,#126
  86. ldr r7,[sp],#4
  87. movls pc,lr
  88. stmfd sp!,{lr}
  89. rsb r0,r0,#0
  90. bl seterrno
  91. mvn r0,#0
  92. ldmfd sp!,{pc}
  93. end;
  94. function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; assembler; [public,alias:'FPC_SYSCALL4'];
  95. {
  96. Perform syscall and set errno variable if needed.
  97. }
  98. asm
  99. str r7,[sp,#-4]!
  100. mov r7,r0
  101. mov r0,r1
  102. mov r1,r2
  103. mov r2,r3
  104. ldr r3,param4
  105. swi #0x0
  106. cmn r0,#126
  107. ldr r7,[sp],#4
  108. movls pc,lr
  109. stmfd sp!,{lr}
  110. rsb r0,r0,#0
  111. bl seterrno
  112. mvn r0,#0
  113. ldmfd sp!,{pc}
  114. end;
  115. function FpSysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL5'];
  116. {
  117. Perform syscall and set errno variable if needed.
  118. }
  119. asm
  120. stmfd sp!,{r4,r7}
  121. mov r7,r0
  122. mov r0,r1
  123. mov r1,r2
  124. mov r2,r3
  125. ldr r3,param4
  126. ldr r4,param5
  127. swi #0x0
  128. cmn r0,#126
  129. ldmfd sp!,{r4,r7}
  130. movls pc,lr
  131. stmfd sp!,{lr}
  132. rsb r0,r0,#0
  133. bl seterrno
  134. mvn r0,#0
  135. ldmfd sp!,{pc}
  136. end;
  137. function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL6'];
  138. {
  139. Perform syscall and set errno variable if needed.
  140. }
  141. asm
  142. stmfd sp!,{r4,r5,r7}
  143. mov r7,r0
  144. mov r0,r1
  145. mov r1,r2
  146. mov r2,r3
  147. ldr r3,param4
  148. ldr r4,param5
  149. ldr r5,param6
  150. swi #0x0
  151. cmn r0,#126
  152. ldmfd sp!,{r4,r5,r7}
  153. movls pc,lr
  154. stmfd sp!,{lr}
  155. rsb r0,r0,#0
  156. bl seterrno
  157. mvn r0,#0
  158. ldmfd sp!,{pc}
  159. end;
  160. {$else FPC_ABI_EABI}
  161. function FpSysCall(sysnr:TSysParam):TSysResult; assembler; nostackframe; [public,alias:'FPC_SYSCALL0'];
  162. {
  163. Perform syscall and set errno variable if needed.
  164. }
  165. asm
  166. swi #0x900071
  167. cmn r0,#126
  168. movls pc,lr
  169. stmfd sp!,{lr}
  170. rsb r0,r0,#0
  171. bl seterrno
  172. mvn r0,#0
  173. ldmfd sp!,{pc}
  174. end;
  175. procedure FPC_SYSCALL; external name 'FPC_SYSCALL0';
  176. function FpSysCall(sysnr,param1:TSysParam):TSysResult; assembler; nostackframe; [public,alias:'FPC_SYSCALL1'];
  177. {
  178. Jump to FPC_SYSCALL0 because code for FPC_SYSCALL0-FPC_SYSCALL3 is the same.
  179. }
  180. asm
  181. b FPC_SYSCALL
  182. end;
  183. function FpSysCall(sysnr,param1,param2:TSysParam):TSysResult; assembler; nostackframe; [public,alias:'FPC_SYSCALL2'];
  184. {
  185. Jump to FPC_SYSCALL0 because code for FPC_SYSCALL0-FPC_SYSCALL3 is the same.
  186. }
  187. asm
  188. b FPC_SYSCALL
  189. end;
  190. function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; assembler; nostackframe; [public,alias:'FPC_SYSCALL3'];
  191. {
  192. Jump to FPC_SYSCALL0 because code for FPC_SYSCALL0-FPC_SYSCALL3 is the same.
  193. }
  194. asm
  195. b FPC_SYSCALL
  196. end;
  197. function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; assembler; [public,alias:'FPC_SYSCALL4'];
  198. {
  199. This function loads some parameters from stack and calls FPC_SYSCALL0.
  200. }
  201. asm
  202. stmfd sp!,{r4}
  203. ldr r4,param4
  204. bl FPC_SYSCALL
  205. ldmfd sp!,{r4}
  206. end;
  207. function FpSysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL5'];
  208. {
  209. This function loads some parameters from stack and calls FPC_SYSCALL0.
  210. }
  211. asm
  212. stmfd sp!,{r4,r5}
  213. ldr r4,param4
  214. ldr r5,param5
  215. bl FPC_SYSCALL
  216. ldmfd sp!,{r4,r5}
  217. end;
  218. function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL6'];
  219. {
  220. This function loads some parameters from stack and calls FPC_SYSCALL0.
  221. }
  222. asm
  223. stmfd sp!,{r4,r5,r6}
  224. ldr r4,param4
  225. ldr r5,param5
  226. ldr r6,param6
  227. bl FPC_SYSCALL
  228. ldmfd sp!,{r4,r5,r6}
  229. end;
  230. {$endif FPC_ABI_EABI}