syscall_arch.h 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. #define __SYSCALL_LL_E(x) (x)
  2. #define __SYSCALL_LL_O(x) (x)
  3. #define SYSCALL_RLIM_INFINITY (-1UL/2)
  4. #include <sys/stat.h>
  5. struct kernel_stat {
  6. unsigned int st_dev;
  7. unsigned int __pad1[3];
  8. unsigned long long st_ino;
  9. unsigned int st_mode;
  10. unsigned int st_nlink;
  11. int st_uid;
  12. int st_gid;
  13. unsigned int st_rdev;
  14. unsigned int __pad2[3];
  15. long long st_size;
  16. unsigned int st_atime_sec;
  17. unsigned int st_atime_nsec;
  18. unsigned int st_mtime_sec;
  19. unsigned int st_mtime_nsec;
  20. unsigned int st_ctime_sec;
  21. unsigned int st_ctime_nsec;
  22. unsigned int st_blksize;
  23. unsigned int __pad3;
  24. unsigned long long st_blocks;
  25. };
  26. static void __stat_fix(struct kernel_stat *kst, struct stat *st)
  27. {
  28. st->st_dev = kst->st_dev;
  29. st->st_ino = kst->st_ino;
  30. st->st_mode = kst->st_mode;
  31. st->st_nlink = kst->st_nlink;
  32. st->st_uid = kst->st_uid;
  33. st->st_gid = kst->st_gid;
  34. st->st_rdev = kst->st_rdev;
  35. st->st_size = kst->st_size;
  36. st->st_atim.tv_sec = kst->st_atime_sec;
  37. st->st_atim.tv_nsec = kst->st_atime_nsec;
  38. st->st_mtim.tv_sec = kst->st_mtime_sec;
  39. st->st_mtim.tv_nsec = kst->st_mtime_nsec;
  40. st->st_ctim.tv_sec = kst->st_ctime_sec;
  41. st->st_ctim.tv_nsec = kst->st_ctime_nsec;
  42. st->st_blksize = kst->st_blksize;
  43. st->st_blocks = kst->st_blocks;
  44. }
  45. static inline long __syscall0(long n)
  46. {
  47. register long r7 __asm__("$7");
  48. register long r2 __asm__("$2");
  49. __asm__ __volatile__ (
  50. "daddu $2,$0,%2 ; syscall"
  51. : "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7)
  52. : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
  53. "$14", "$15", "$24", "$25", "hi", "lo", "memory");
  54. return r7 ? -r2 : r2;
  55. }
  56. static inline long __syscall1(long n, long a)
  57. {
  58. register long r4 __asm__("$4") = a;
  59. register long r7 __asm__("$7");
  60. register long r2 __asm__("$2");
  61. __asm__ __volatile__ (
  62. "daddu $2,$0,%2 ; syscall"
  63. : "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7),
  64. "r"(r4)
  65. : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
  66. "$14", "$15", "$24", "$25", "hi", "lo", "memory");
  67. return r7 ? -r2 : r2;
  68. }
  69. static inline long __syscall2(long n, long a, long b)
  70. {
  71. struct kernel_stat kst;
  72. long ret;
  73. register long r4 __asm__("$4") = a;
  74. register long r5 __asm__("$5") = b;
  75. register long r7 __asm__("$7");
  76. register long r2 __asm__("$2");
  77. if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat)
  78. r5 = (long) &kst;
  79. __asm__ __volatile__ (
  80. "daddu $2,$0,%2 ; syscall"
  81. : "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7),
  82. "r"(r4), "r"(r5)
  83. : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
  84. "$14", "$15", "$24", "$25", "hi", "lo", "memory");
  85. if (r7) return -r2;
  86. ret = r2;
  87. if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat)
  88. __stat_fix(&kst, (struct stat *)b);
  89. return ret;
  90. }
  91. static inline long __syscall3(long n, long a, long b, long c)
  92. {
  93. struct kernel_stat kst;
  94. long ret;
  95. register long r4 __asm__("$4") = a;
  96. register long r5 __asm__("$5") = b;
  97. register long r6 __asm__("$6") = c;
  98. register long r7 __asm__("$7");
  99. register long r2 __asm__("$2");
  100. if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat)
  101. r5 = (long) &kst;
  102. __asm__ __volatile__ (
  103. "daddu $2,$0,%2 ; syscall"
  104. : "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7),
  105. "r"(r4), "r"(r5), "r"(r6)
  106. : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
  107. "$14", "$15", "$24", "$25", "hi", "lo", "memory");
  108. if (r7) return -r2;
  109. ret = r2;
  110. if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat)
  111. __stat_fix(&kst, (struct stat *)b);
  112. return ret;
  113. }
  114. static inline long __syscall4(long n, long a, long b, long c, long d)
  115. {
  116. struct kernel_stat kst;
  117. long ret;
  118. register long r4 __asm__("$4") = a;
  119. register long r5 __asm__("$5") = b;
  120. register long r6 __asm__("$6") = c;
  121. register long r7 __asm__("$7") = d;
  122. register long r2 __asm__("$2");
  123. if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat)
  124. r5 = (long) &kst;
  125. if (n == SYS_newfstatat)
  126. r6 = (long) &kst;
  127. __asm__ __volatile__ (
  128. "daddu $2,$0,%2 ; syscall"
  129. : "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7),
  130. "r"(r4), "r"(r5), "r"(r6)
  131. : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
  132. "$14", "$15", "$24", "$25", "hi", "lo", "memory");
  133. if (r7) return -r2;
  134. ret = r2;
  135. if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat)
  136. __stat_fix(&kst, (struct stat *)b);
  137. if (n == SYS_newfstatat)
  138. __stat_fix(&kst, (struct stat *)c);
  139. return ret;
  140. }
  141. static inline long __syscall5(long n, long a, long b, long c, long d, long e)
  142. {
  143. struct kernel_stat kst;
  144. long ret;
  145. register long r4 __asm__("$4") = a;
  146. register long r5 __asm__("$5") = b;
  147. register long r6 __asm__("$6") = c;
  148. register long r7 __asm__("$7") = d;
  149. register long r8 __asm__("$8") = e;
  150. register long r2 __asm__("$2");
  151. if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat)
  152. r5 = (long) &kst;
  153. if (n == SYS_newfstatat)
  154. r6 = (long) &kst;
  155. __asm__ __volatile__ (
  156. "daddu $2,$0,%2 ; syscall"
  157. : "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7),
  158. "r"(r4), "r"(r5), "r"(r6), "r"(r8)
  159. : "$1", "$3", "$9", "$10", "$11", "$12", "$13",
  160. "$14", "$15", "$24", "$25", "hi", "lo", "memory");
  161. if (r7) return -r2;
  162. ret = r2;
  163. if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat)
  164. __stat_fix(&kst, (struct stat *)b);
  165. if (n == SYS_newfstatat)
  166. __stat_fix(&kst, (struct stat *)c);
  167. return ret;
  168. }
  169. static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f)
  170. {
  171. struct kernel_stat kst;
  172. long ret;
  173. register long r4 __asm__("$4") = a;
  174. register long r5 __asm__("$5") = b;
  175. register long r6 __asm__("$6") = c;
  176. register long r7 __asm__("$7") = d;
  177. register long r8 __asm__("$8") = e;
  178. register long r9 __asm__("$9") = f;
  179. register long r2 __asm__("$2");
  180. if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat)
  181. r5 = (long) &kst;
  182. if (n == SYS_newfstatat)
  183. r6 = (long) &kst;
  184. __asm__ __volatile__ (
  185. "daddu $2,$0,%2 ; syscall"
  186. : "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7),
  187. "r"(r4), "r"(r5), "r"(r6), "r"(r8), "r"(r9)
  188. : "$1", "$3", "$10", "$11", "$12", "$13",
  189. "$14", "$15", "$24", "$25", "hi", "lo", "memory");
  190. if (r7) return -r2;
  191. ret = r2;
  192. if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat)
  193. __stat_fix(&kst, (struct stat *)b);
  194. if (n == SYS_newfstatat)
  195. __stat_fix(&kst, (struct stat *)c);
  196. return ret;
  197. }
  198. #define VDSO_USEFUL
  199. #define VDSO_CGT_SYM "__vdso_clock_gettime"
  200. #define VDSO_CGT_VER "LINUX_2.6"