syscall.inc 3.0 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. ori $a7, $a0, 0
  11. syscall 0
  12. bge $a0, $zero, .Ldone
  13. addi.d $sp, $sp, -16
  14. st.d $ra, $sp, 8
  15. sub.d $a0, $zero, $a0
  16. bl seterrno
  17. addi.d $a0, $zero, -1
  18. ld.d $ra, $sp, 8
  19. addi.d $sp, $sp, 16
  20. .Ldone:
  21. end;
  22. function FpSysCall(sysnr,param1:TSysParam):TSysResult;
  23. assembler; nostackframe; [public,alias:'FPC_SYSCALL1'];
  24. asm
  25. ori $a7, $a0, 0
  26. ori $a0, $a1, 0
  27. syscall 0
  28. bge $a0, $zero, .Ldone
  29. addi.d $sp, $sp, -16
  30. st.d $ra, $sp, 8
  31. sub.d $a0, $zero, $a0
  32. bl seterrno
  33. addi.d $a0, $zero, -1
  34. ld.d $ra, $sp, 8
  35. addi.d $sp, $sp, 16
  36. .Ldone:
  37. end;
  38. function FpSysCall(sysnr,param1,param2:TSysParam):TSysResult;
  39. assembler; nostackframe; [public,alias:'FPC_SYSCALL2'];
  40. asm
  41. ori $a7, $a0, 0
  42. ori $a0, $a1, 0
  43. ori $a1, $a2, 0
  44. syscall 0
  45. bge $a0, $zero, .Ldone
  46. addi.d $sp, $sp, -16
  47. st.d $ra, $sp, 8
  48. sub.d $a0, $zero, $a0
  49. bl seterrno
  50. addi.d $a0, $zero, -1
  51. ld.d $ra, $sp, 8
  52. addi.d $sp, $sp, 16
  53. .Ldone:
  54. end;
  55. function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult;
  56. assembler; nostackframe; [public,alias:'FPC_SYSCALL3'];
  57. asm
  58. ori $a7, $a0, 0
  59. ori $a0, $a1, 0
  60. ori $a1, $a2, 0
  61. ori $a2, $a3, 0
  62. syscall 0
  63. bge $a0, $zero, .Ldone
  64. addi.d $sp, $sp, -16
  65. st.d $ra, $sp, 8
  66. sub.d $a0, $zero, $a0
  67. bl seterrno
  68. addi.d $a0, $zero, -1
  69. ld.d $ra, $sp, 8
  70. addi.d $sp, $sp, 16
  71. .Ldone:
  72. end;
  73. function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult;
  74. assembler; nostackframe; [public,alias:'FPC_SYSCALL4'];
  75. asm
  76. ori $a7, $a0, 0
  77. ori $a0, $a1, 0
  78. ori $a1, $a2, 0
  79. ori $a2, $a3, 0
  80. ori $a3, $a4, 0
  81. syscall 0
  82. bge $a0, $zero, .Ldone
  83. addi.d $sp, $sp, -16
  84. st.d $ra, $sp, 8
  85. sub.d $a0, $zero, $a0
  86. bl seterrno
  87. addi.d $a0, $zero, -1
  88. ld.d $ra, $sp, 8
  89. addi.d $sp, $sp, 16
  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. ori $a7, $a0, 0
  96. ori $a0, $a1, 0
  97. ori $a1, $a2, 0
  98. ori $a2, $a3, 0
  99. ori $a3, $a4, 0
  100. ori $a4, $a5, 0
  101. syscall 0
  102. bge $a0, $zero, .Ldone
  103. addi.d $sp, $sp, -16
  104. st.d $ra, $sp, 8
  105. sub.d $a0, $zero, $a0
  106. bl seterrno
  107. addi.d $a0, $zero, -1
  108. ld.d $ra, $sp, 8
  109. addi.d $sp, $sp, 16
  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. ori $a7, $a0, 0
  116. ori $a0, $a1, 0
  117. ori $a1, $a2, 0
  118. ori $a2, $a3, 0
  119. ori $a3, $a4, 0
  120. ori $a4, $a5, 0
  121. ori $a5, $a6, 0
  122. syscall 0
  123. bge $a0, $zero, .Ldone
  124. addi.d $sp, $sp, -16
  125. st.d $ra, $sp, 8
  126. sub.d $a0, $zero, $a0
  127. bl seterrno
  128. addi.d $a0, $zero, -1
  129. ld.d $ra, $sp, 8
  130. addi.d $sp, $sp, 16
  131. .Ldone:
  132. end;