syscall_arch.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. #define __SYSCALL_LL_E(x) (x)
  2. #define __SYSCALL_LL_O(x) (x)
  3. #define SYSCALL_RLIM_INFINITY (-1UL/2)
  4. #if _MIPSEL || __MIPSEL || __MIPSEL__
  5. #define __stat_fix(st) ((st),(void)0)
  6. #else
  7. #include <sys/stat.h>
  8. static inline void __stat_fix(long p)
  9. {
  10. struct stat *st = (struct stat *)p;
  11. st->st_dev >>= 32;
  12. st->st_rdev >>= 32;
  13. }
  14. #endif
  15. static inline long __syscall0(long n)
  16. {
  17. register long r7 __asm__("$7");
  18. register long r2 __asm__("$2");
  19. __asm__ __volatile__ (
  20. "addu $2,$0,%2 ; syscall"
  21. : "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7)
  22. : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
  23. "$14", "$15", "$24", "$25", "hi", "lo", "memory");
  24. return r7 ? -r2 : r2;
  25. }
  26. static inline long __syscall1(long n, long a)
  27. {
  28. register long r4 __asm__("$4") = a;
  29. register long r7 __asm__("$7");
  30. register long r2 __asm__("$2");
  31. __asm__ __volatile__ (
  32. "addu $2,$0,%2 ; syscall"
  33. : "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7),
  34. "r"(r4)
  35. : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
  36. "$14", "$15", "$24", "$25", "hi", "lo", "memory");
  37. return r7 ? -r2 : r2;
  38. }
  39. static inline long __syscall2(long n, long a, long b)
  40. {
  41. register long r4 __asm__("$4") = a;
  42. register long r5 __asm__("$5") = b;
  43. register long r7 __asm__("$7");
  44. register long r2 __asm__("$2");
  45. __asm__ __volatile__ (
  46. "addu $2,$0,%2 ; syscall"
  47. : "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7),
  48. "r"(r4), "r"(r5)
  49. : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
  50. "$14", "$15", "$24", "$25", "hi", "lo", "memory");
  51. if (r7) return -r2;
  52. long ret = r2;
  53. if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat) __stat_fix(b);
  54. return ret;
  55. }
  56. static inline long __syscall3(long n, long a, long b, long c)
  57. {
  58. register long r4 __asm__("$4") = a;
  59. register long r5 __asm__("$5") = b;
  60. register long r6 __asm__("$6") = c;
  61. register long r7 __asm__("$7");
  62. register long r2 __asm__("$2");
  63. __asm__ __volatile__ (
  64. "addu $2,$0,%2 ; syscall"
  65. : "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7),
  66. "r"(r4), "r"(r5), "r"(r6)
  67. : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
  68. "$14", "$15", "$24", "$25", "hi", "lo", "memory");
  69. if (r7) return -r2;
  70. long ret = r2;
  71. if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat) __stat_fix(b);
  72. return ret;
  73. }
  74. static inline long __syscall4(long n, long a, long b, long c, long d)
  75. {
  76. register long r4 __asm__("$4") = a;
  77. register long r5 __asm__("$5") = b;
  78. register long r6 __asm__("$6") = c;
  79. register long r7 __asm__("$7") = d;
  80. register long r2 __asm__("$2");
  81. __asm__ __volatile__ (
  82. "addu $2,$0,%2 ; syscall"
  83. : "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7),
  84. "r"(r4), "r"(r5), "r"(r6)
  85. : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
  86. "$14", "$15", "$24", "$25", "hi", "lo", "memory");
  87. if (r7) return -r2;
  88. long ret = r2;
  89. if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat) __stat_fix(b);
  90. if (n == SYS_newfstatat) __stat_fix(c);
  91. return ret;
  92. }
  93. static inline long __syscall5(long n, long a, long b, long c, long d, long e)
  94. {
  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") = d;
  99. register long r8 __asm__("$8") = e;
  100. register long r2 __asm__("$2");
  101. __asm__ __volatile__ (
  102. "addu $2,$0,%2 ; syscall"
  103. : "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7),
  104. "r"(r4), "r"(r5), "r"(r6), "r"(r8)
  105. : "$1", "$3", "$9", "$10", "$11", "$12", "$13",
  106. "$14", "$15", "$24", "$25", "hi", "lo", "memory");
  107. if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat) __stat_fix(b);
  108. if (n == SYS_newfstatat) __stat_fix(c);
  109. return r2;
  110. }
  111. static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f)
  112. {
  113. register long r4 __asm__("$4") = a;
  114. register long r5 __asm__("$5") = b;
  115. register long r6 __asm__("$6") = c;
  116. register long r7 __asm__("$7") = d;
  117. register long r8 __asm__("$8") = e;
  118. register long r8 __asm__("$9") = f;
  119. register long r2 __asm__("$2");
  120. __asm__ __volatile__ (
  121. "addu $2,$0,%2 ; syscall"
  122. : "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7),
  123. "r"(r4), "r"(r5), "r"(r6), "r"(r8), "r"(r9)
  124. : "$1", "$3", "$10", "$11", "$12", "$13",
  125. "$14", "$15", "$24", "$25", "hi", "lo", "memory");
  126. if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat) __stat_fix(b);
  127. if (n == SYS_newfstatat) __stat_fix(c);
  128. return r2;
  129. }
  130. #define VDSO_USEFUL
  131. #define VDSO_CGT_SYM "__vdso_clock_gettime"
  132. #define VDSO_CGT_VER "LINUX_2.6"