syscall.inc 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  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. ecall
  12. bge x10,x0,.Ldone
  13. sd x1, -8(x2)
  14. addi x2, x2, -8
  15. sub x10, x0, x10
  16. .Ll1:
  17. auipc x1, %pcrel_hi(seterrno)
  18. jalr x1, x1, %pcrel_lo(.Ll1)
  19. addi x2, x2, 8
  20. ld x1, -8(x2)
  21. addi x10,x0, -1
  22. .Ldone:
  23. end;
  24. function FpSysCall(sysnr,param1:TSysParam):TSysResult;
  25. assembler; nostackframe; [public,alias:'FPC_SYSCALL1'];
  26. asm
  27. addi x17, sysnr, 0
  28. addi x10, x11, 0
  29. ecall
  30. bge x10,x0,.Ldone
  31. sd x1, -8(x2)
  32. addi x2, x2, -8
  33. sub x10, x0, x10
  34. .Ll1:
  35. auipc x1, %pcrel_hi(seterrno)
  36. jalr x1, x1, %pcrel_lo(.Ll1)
  37. addi x2, x2, 8
  38. ld x1, -8(x2)
  39. addi x10,x0, -1
  40. .Ldone:
  41. end;
  42. function FpSysCall(sysnr,param1,param2:TSysParam):TSysResult;
  43. assembler; nostackframe; [public,alias:'FPC_SYSCALL2'];
  44. asm
  45. addi x17, sysnr, 0
  46. addi x10, x11, 0
  47. addi x11, x12, 0
  48. ecall
  49. bge x10,x0,.Ldone
  50. sd x1, -8(x2)
  51. addi x2, x2, -8
  52. sub x10, x0, x10
  53. .Ll1:
  54. auipc x1, %pcrel_hi(seterrno)
  55. jalr x1, x1, %pcrel_lo(.Ll1)
  56. addi x2, x2, 8
  57. ld x1, -8(x2)
  58. addi x10,x0, -1
  59. .Ldone:
  60. end;
  61. function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult;
  62. assembler; nostackframe; [public,alias:'FPC_SYSCALL3'];
  63. asm
  64. addi x17, sysnr, 0
  65. addi x10, x11, 0
  66. addi x11, x12, 0
  67. addi x12, x13, 0
  68. ecall
  69. bge x10,x0,.Ldone
  70. sd x1, -8(x2)
  71. addi x2, x2, -8
  72. sub x10, x0, x10
  73. .Ll1:
  74. auipc x1, %pcrel_hi(seterrno)
  75. jalr x1, x1, %pcrel_lo(.Ll1)
  76. addi x2, x2, 8
  77. ld x1, -8(x2)
  78. addi x10,x0, -1
  79. .Ldone:
  80. end;
  81. function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult;
  82. assembler; nostackframe; [public,alias:'FPC_SYSCALL4'];
  83. asm
  84. addi x17, sysnr, 0
  85. addi x10, x11, 0
  86. addi x11, x12, 0
  87. addi x12, x13, 0
  88. addi x13, x14, 0
  89. ecall
  90. bge x10,x0,.Ldone
  91. sd x1, -8(x2)
  92. addi x2, x2, -8
  93. sub x10, x0, x10
  94. .Ll1:
  95. auipc x1, %pcrel_hi(seterrno)
  96. jalr x1, x1, %pcrel_lo(.Ll1)
  97. addi x2, x2, 8
  98. ld x1, -8(x2)
  99. addi x10,x0, -1
  100. .Ldone:
  101. end;
  102. function FpSysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResult;
  103. assembler; nostackframe; [public,alias:'FPC_SYSCALL5'];
  104. asm
  105. addi x17, sysnr, 0
  106. addi x10, x11, 0
  107. addi x11, x12, 0
  108. addi x12, x13, 0
  109. addi x13, x14, 0
  110. addi x14, x15, 0
  111. ecall
  112. bge x10,x0,.Ldone
  113. sd x1, -8(x2)
  114. addi x2, x2, -8
  115. sub x10, x0, x10
  116. .Ll1:
  117. auipc x1, %pcrel_hi(seterrno)
  118. jalr x1, x1, %pcrel_lo(.Ll1)
  119. addi x2, x2, 8
  120. ld x1, -8(x2)
  121. addi x10,x0, -1
  122. .Ldone:
  123. end;
  124. function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6:TSysParam):TSysResult;
  125. assembler; nostackframe; [public,alias:'FPC_SYSCALL6'];
  126. asm
  127. addi x17, sysnr, 0
  128. addi x10, x11, 0
  129. addi x11, x12, 0
  130. addi x12, x13, 0
  131. addi x13, x14, 0
  132. addi x14, x15, 0
  133. addi x15, x16, 0
  134. ecall
  135. bge x10,x0,.Ldone
  136. sd x1, -8(x2)
  137. addi x2, x2, -8
  138. sub x10, x0, x10
  139. .Ll1:
  140. auipc x1, %pcrel_hi(seterrno)
  141. jalr x1, x1, %pcrel_lo(.Ll1)
  142. addi x2, x2, 8
  143. ld x1, -8(x2)
  144. addi x10,x0, -1
  145. .Ldone:
  146. end;