syscall.inc 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. {
  2. This file is part of the Free Pascal run time library.
  3. Perform syscall with 0..6 arguments.
  4. If syscall return value is negative, negate it, set errno, and return -1.
  5. Written by Edmund Grimley Evans in 2015 and released into the public domain.
  6. }
  7. function FpSysCall(sysnr:TSysParam):TSysResult;
  8. assembler; nostackframe; [public,alias:'FPC_SYSCALL0'];
  9. asm
  10. addi x17, sysnr, 0
  11. scall
  12. bge x10,x0,.Ldone
  13. sw x1, -4(x2)
  14. addi x2, x2, -4
  15. sub x10, x0, x10
  16. jal x1, seterrno
  17. addi x2, x2, 4
  18. lw x1, -4(x2)
  19. addi x10,x0, -1
  20. .Ldone:
  21. end;
  22. function FpSysCall(sysnr,param1:TSysParam):TSysResult;
  23. assembler; nostackframe; [public,alias:'FPC_SYSCALL1'];
  24. asm
  25. addi x17, sysnr, 0
  26. addi x10, x11, 0
  27. scall
  28. bge x10,x0,.Ldone
  29. sw x1, -4(x2)
  30. addi x2, x2, -4
  31. sub x10, x0, x10
  32. jal x1, seterrno
  33. addi x2, x2, 4
  34. lw x1, -4(x2)
  35. addi x10,x0, -1
  36. .Ldone:
  37. end;
  38. function FpSysCall(sysnr,param1,param2:TSysParam):TSysResult;
  39. assembler; nostackframe; [public,alias:'FPC_SYSCALL2'];
  40. asm
  41. addi x17, sysnr, 0
  42. addi x10, x11, 0
  43. addi x11, x12, 0
  44. scall
  45. bge x10,x0,.Ldone
  46. sw x1, -4(x2)
  47. addi x2, x2, -4
  48. sub x10, x0, x10
  49. jal x1, seterrno
  50. addi x2, x2, 4
  51. lw x1, -4(x2)
  52. addi x10,x0, -1
  53. .Ldone:
  54. end;
  55. function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult;
  56. assembler; nostackframe; [public,alias:'FPC_SYSCALL3'];
  57. asm
  58. addi x17, sysnr, 0
  59. addi x10, x11, 0
  60. addi x11, x12, 0
  61. addi x12, x13, 0
  62. scall
  63. bge x10,x0,.Ldone
  64. sw x1, -4(x2)
  65. addi x2, x2, -4
  66. sub x10, x0, x10
  67. jal x1, seterrno
  68. addi x2, x2, 4
  69. lw x1, -4(x2)
  70. addi x10,x0, -1
  71. .Ldone:
  72. end;
  73. function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult;
  74. assembler; nostackframe; [public,alias:'FPC_SYSCALL4'];
  75. asm
  76. addi x17, sysnr, 0
  77. addi x10, x11, 0
  78. addi x11, x12, 0
  79. addi x12, x13, 0
  80. addi x13, x14, 0
  81. scall
  82. bge x10,x0,.Ldone
  83. sw x1, -4(x2)
  84. addi x2, x2, -4
  85. sub x10, x0, x10
  86. jal x1, seterrno
  87. addi x2, x2, 4
  88. lw x1, -4(x2)
  89. addi x10,x0, -1
  90. .Ldone:
  91. end;
  92. function FpSysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResult;
  93. assembler; nostackframe; [public,alias:'FPC_SYSCALL5'];
  94. asm
  95. addi x17, sysnr, 0
  96. addi x10, x11, 0
  97. addi x11, x12, 0
  98. addi x12, x13, 0
  99. addi x13, x14, 0
  100. addi x14, x15, 0
  101. scall
  102. bge x10,x0,.Ldone
  103. sw x1, -4(x2)
  104. addi x2, x2, -4
  105. sub x10, x0, x10
  106. jal x1, seterrno
  107. addi x2, x2, 4
  108. lw x1, -4(x2)
  109. addi x10,x0, -1
  110. .Ldone:
  111. end;
  112. function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6:TSysParam):TSysResult;
  113. assembler; nostackframe; [public,alias:'FPC_SYSCALL6'];
  114. asm
  115. addi x17, sysnr, 0
  116. addi x10, x11, 0
  117. addi x11, x12, 0
  118. addi x12, x13, 0
  119. addi x13, x14, 0
  120. addi x14, x15, 0
  121. addi x15, x16, 0
  122. scall
  123. bge x10,x0,.Ldone
  124. sw x1, -4(x2)
  125. addi x2, x2, -4
  126. sub x10, x0, x10
  127. jal x1, seterrno
  128. addi x2, x2, 4
  129. lw x1, -4(x2)
  130. addi x10,x0, -1
  131. .Ldone:
  132. end;