ld_syscalls.h 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. /*
  2. * This file contains the system call macros and syscall
  3. * numbers used by the shared library loader.
  4. */
  5. #define __NR_exit 1
  6. #define __NR_read 3
  7. #define __NR_write 4
  8. #define __NR_open 5
  9. #define __NR_close 6
  10. #define __NR_getuid 24
  11. #define __NR_getgid 47
  12. #define __NR_geteuid 49
  13. #define __NR_getegid 50
  14. #define __NR_readlink 58
  15. #define __NR_mmap 71
  16. #define __NR_munmap 73
  17. #define __NR_stat 38
  18. #define __NR_mprotect 74
  19. /* Here are the macros which define how this platform makes
  20. * system calls. This particular variant does _not_ set
  21. * errno (note how it is disabled in __syscall_return) since
  22. * these will get called before the errno symbol is dynamicly
  23. * linked. */
  24. #define _syscall0(type,name) \
  25. type name(void) \
  26. { \
  27. long __res; \
  28. register long __g1 __asm__ ("g1") = __NR_##name; \
  29. __asm__ __volatile__ ("t 0x10\n\t" \
  30. "bcc 1f\n\t" \
  31. "mov %%o0, %0\n\t" \
  32. "sub %%g0, %%o0, %0\n\t" \
  33. "1:\n\t" \
  34. : "=r" (__res)\
  35. : "r" (__g1) \
  36. : "o0", "cc"); \
  37. if (__res < -255 || __res >= 0) \
  38. return (type) __res; \
  39. /*errno = -__res; */\
  40. return -1; \
  41. }
  42. #define _syscall1(type,name,type1,arg1) \
  43. type name(type1 arg1) \
  44. { \
  45. long __res; \
  46. register long __g1 __asm__ ("g1") = __NR_##name; \
  47. register long __o0 __asm__ ("o0") = (long)(arg1); \
  48. __asm__ __volatile__ ("t 0x10\n\t" \
  49. "bcc 1f\n\t" \
  50. "mov %%o0, %0\n\t" \
  51. "sub %%g0, %%o0, %0\n\t" \
  52. "1:\n\t" \
  53. : "=r" (__res), "=&r" (__o0) \
  54. : "1" (__o0), "r" (__g1) \
  55. : "cc"); \
  56. if (__res < -255 || __res >= 0) \
  57. return (type) __res; \
  58. /*errno = -__res;*/ \
  59. return -1; \
  60. }
  61. #define _syscall2(type,name,type1,arg1,type2,arg2) \
  62. type name(type1 arg1,type2 arg2) \
  63. { \
  64. long __res; \
  65. register long __g1 __asm__ ("g1") = __NR_##name; \
  66. register long __o0 __asm__ ("o0") = (long)(arg1); \
  67. register long __o1 __asm__ ("o1") = (long)(arg2); \
  68. __asm__ __volatile__ ("t 0x10\n\t" \
  69. "bcc 1f\n\t" \
  70. "mov %%o0, %0\n\t" \
  71. "sub %%g0, %%o0, %0\n\t" \
  72. "1:\n\t" \
  73. : "=r" (__res), "=&r" (__o0) \
  74. : "1" (__o0), "r" (__o1), "r" (__g1) \
  75. : "cc"); \
  76. if (__res < -255 || __res >= 0) \
  77. return (type) __res; \
  78. /*errno = -__res;*/ \
  79. return -1; \
  80. }
  81. #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
  82. type name(type1 arg1,type2 arg2,type3 arg3) \
  83. { \
  84. long __res; \
  85. register long __g1 __asm__ ("g1") = __NR_##name; \
  86. register long __o0 __asm__ ("o0") = (long)(arg1); \
  87. register long __o1 __asm__ ("o1") = (long)(arg2); \
  88. register long __o2 __asm__ ("o2") = (long)(arg3); \
  89. __asm__ __volatile__ ("t 0x10\n\t" \
  90. "bcc 1f\n\t" \
  91. "mov %%o0, %0\n\t" \
  92. "sub %%g0, %%o0, %0\n\t" \
  93. "1:\n\t" \
  94. : "=r" (__res), "=&r" (__o0) \
  95. : "1" (__o0), "r" (__o1), "r" (__o2), "r" (__g1) \
  96. : "cc"); \
  97. if (__res < -255 || __res>=0) \
  98. return (type) __res; \
  99. /*errno = -__res;*/ \
  100. return -1; \
  101. }
  102. #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
  103. type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
  104. { \
  105. long __res; \
  106. register long __g1 __asm__ ("g1") = __NR_##name; \
  107. register long __o0 __asm__ ("o0") = (long)(arg1); \
  108. register long __o1 __asm__ ("o1") = (long)(arg2); \
  109. register long __o2 __asm__ ("o2") = (long)(arg3); \
  110. register long __o3 __asm__ ("o3") = (long)(arg4); \
  111. __asm__ __volatile__ ("t 0x10\n\t" \
  112. "bcc 1f\n\t" \
  113. "mov %%o0, %0\n\t" \
  114. "sub %%g0, %%o0, %0\n\t" \
  115. "1:\n\t" \
  116. : "=r" (__res), "=&r" (__o0) \
  117. : "1" (__o0), "r" (__o1), "r" (__o2), "r" (__o3), "r" (__g1) \
  118. : "cc"); \
  119. if (__res < -255 || __res>=0) \
  120. return (type) __res; \
  121. /*errno = -__res;*/ \
  122. return -1; \
  123. }
  124. #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
  125. type5,arg5) \
  126. type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \
  127. { \
  128. long __res; \
  129. register long __g1 __asm__ ("g1") = __NR_##name; \
  130. register long __o0 __asm__ ("o0") = (long)(arg1); \
  131. register long __o1 __asm__ ("o1") = (long)(arg2); \
  132. register long __o2 __asm__ ("o2") = (long)(arg3); \
  133. register long __o3 __asm__ ("o3") = (long)(arg4); \
  134. register long __o4 __asm__ ("o4") = (long)(arg5); \
  135. __asm__ __volatile__ ("t 0x10\n\t" \
  136. "bcc 1f\n\t" \
  137. "mov %%o0, %0\n\t" \
  138. "sub %%g0, %%o0, %0\n\t" \
  139. "1:\n\t" \
  140. : "=r" (__res), "=&r" (__o0) \
  141. : "1" (__o0), "r" (__o1), "r" (__o2), "r" (__o3), "r" (__o4), "r" (__g1) \
  142. : "cc"); \
  143. if (__res < -255 || __res>=0) \
  144. return (type) __res; \
  145. /*errno = -__res; */\
  146. return -1; \
  147. }