dl-syscalls.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. /*
  2. * This file contains the system call macros and syscall
  3. * numbers used by the shared library loader. Taken from
  4. * Linux/MIPS 2.4.17 version kernel.
  5. */
  6. #ifndef _SYS_STAT_H
  7. #define _SYS_STAT_H
  8. #define new_stat stat
  9. #include <asm/stat.h>
  10. #define __NR_SYSCALL_BASE 4000
  11. #define __NR_exit (__NR_SYSCALL_BASE + 1)
  12. #define __NR_read (__NR_SYSCALL_BASE + 3)
  13. #define __NR_write (__NR_SYSCALL_BASE + 4)
  14. #define __NR_open (__NR_SYSCALL_BASE + 5)
  15. #define __NR_close (__NR_SYSCALL_BASE + 6)
  16. #define __NR_getuid (__NR_SYSCALL_BASE + 24)
  17. #define __NR_getgid (__NR_SYSCALL_BASE + 47)
  18. #define __NR_geteuid (__NR_SYSCALL_BASE + 49)
  19. #define __NR_getegid (__NR_SYSCALL_BASE + 50)
  20. #define __NR_readlink (__NR_SYSCALL_BASE + 85)
  21. #define __NR_mmap (__NR_SYSCALL_BASE + 90)
  22. #define __NR_munmap (__NR_SYSCALL_BASE + 91)
  23. #define __NR_stat (__NR_SYSCALL_BASE + 106)
  24. #define __NR_mprotect (__NR_SYSCALL_BASE + 125)
  25. /* Here are the macros which define how this platform makes
  26. * system calls. This particular variant does _not_ set
  27. * errno (note how it is disabled in __syscall_return) since
  28. * these will get called before the errno symbol is dynamicly
  29. * linked. */
  30. #define _syscall0(type,name) \
  31. type name(void) \
  32. { \
  33. register unsigned long __v0 asm("$2") = __NR_##name; \
  34. register unsigned long __a3 asm("$7"); \
  35. \
  36. __asm__ volatile ( \
  37. ".set\tnoreorder\n\t" \
  38. "li\t$2, %2\t\t\t# " #name "\n\t" \
  39. "syscall\n\t" \
  40. ".set\treorder" \
  41. : "=&r" (__v0), "=r" (__a3) \
  42. : "i" (__NR_##name) \
  43. : "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24"); \
  44. \
  45. if (__a3 == 0) \
  46. return (type) __v0; \
  47. return -1; \
  48. }
  49. #define _syscall1(type,name,atype,a) \
  50. type name(atype a) \
  51. { \
  52. register unsigned long __v0 asm("$2") = __NR_##name; \
  53. register unsigned long __a0 asm("$4") = (unsigned long) a; \
  54. register unsigned long __a3 asm("$7"); \
  55. \
  56. __asm__ volatile ( \
  57. ".set\tnoreorder\n\t" \
  58. "li\t$2, %3\t\t\t# " #name "\n\t" \
  59. "syscall\n\t" \
  60. ".set\treorder" \
  61. : "=&r" (__v0), "=r" (__a3) \
  62. : "r" (__a0), "i" (__NR_##name) \
  63. : "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24"); \
  64. \
  65. if (__a3 == 0) \
  66. return (type) __v0; \
  67. return (type) -1; \
  68. }
  69. #define _syscall2(type,name,atype,a,btype,b) \
  70. type name(atype a, btype b) \
  71. { \
  72. register unsigned long __v0 asm("$2") = __NR_##name; \
  73. register unsigned long __a0 asm("$4") = (unsigned long) a; \
  74. register unsigned long __a1 asm("$5") = (unsigned long) b; \
  75. register unsigned long __a3 asm("$7"); \
  76. \
  77. __asm__ volatile ( \
  78. ".set\tnoreorder\n\t" \
  79. "li\t$2, %4\t\t\t# " #name "\n\t" \
  80. "syscall\n\t" \
  81. ".set\treorder" \
  82. : "=&r" (__v0), "=r" (__a3) \
  83. : "r" (__a0), "r" (__a1), "i" (__NR_##name) \
  84. : "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24"); \
  85. \
  86. if (__a3 == 0) \
  87. return (type) __v0; \
  88. return (type) -1; \
  89. }
  90. #define _syscall3(type,name,atype,a,btype,b,ctype,c) \
  91. type name(atype a, btype b, ctype c) \
  92. { \
  93. register unsigned long __v0 asm("$2") = __NR_##name; \
  94. register unsigned long __a0 asm("$4") = (unsigned long) a; \
  95. register unsigned long __a1 asm("$5") = (unsigned long) b; \
  96. register unsigned long __a2 asm("$6") = (unsigned long) c; \
  97. register unsigned long __a3 asm("$7"); \
  98. \
  99. __asm__ volatile ( \
  100. ".set\tnoreorder\n\t" \
  101. "li\t$2, %5\t\t\t# " #name "\n\t" \
  102. "syscall\n\t" \
  103. ".set\treorder" \
  104. : "=&r" (__v0), "=r" (__a3) \
  105. : "r" (__a0), "r" (__a1), "r" (__a2), "i" (__NR_##name) \
  106. : "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24"); \
  107. \
  108. if (__a3 == 0) \
  109. return (type) __v0; \
  110. return (type) -1; \
  111. }
  112. #define _syscall4(type,name,atype,a,btype,b,ctype,c,dtype,d) \
  113. type name(atype a, btype b, ctype c, dtype d) \
  114. { \
  115. register unsigned long __v0 asm("$2") = __NR_##name; \
  116. register unsigned long __a0 asm("$4") = (unsigned long) a; \
  117. register unsigned long __a1 asm("$5") = (unsigned long) b; \
  118. register unsigned long __a2 asm("$6") = (unsigned long) c; \
  119. register unsigned long __a3 asm("$7") = (unsigned long) d; \
  120. \
  121. __asm__ volatile ( \
  122. ".set\tnoreorder\n\t" \
  123. "li\t$2, %5\t\t\t# " #name "\n\t" \
  124. "syscall\n\t" \
  125. ".set\treorder" \
  126. : "=&r" (__v0), "+r" (__a3) \
  127. : "r" (__a0), "r" (__a1), "r" (__a2), "i" (__NR_##name) \
  128. : "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24"); \
  129. \
  130. if (__a3 == 0) \
  131. return (type) __v0; \
  132. return (type) -1; \
  133. }
  134. #endif