syscall_arch.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  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. #define SYSCALL_CLOBBERLIST \
  16. "$1", "$3", "$10", "$11", "$12", "$13", \
  17. "$14", "$15", "$24", "$25", "hi", "lo", "memory"
  18. static inline long __syscall0(long n)
  19. {
  20. register long r7 __asm__("$7");
  21. register long r2 __asm__("$2") = n;
  22. __asm__ __volatile__ (
  23. "syscall"
  24. : "+&r"(r2), "=r"(r7)
  25. :
  26. : SYSCALL_CLOBBERLIST);
  27. return r7 ? -r2 : r2;
  28. }
  29. static inline long __syscall1(long n, long a)
  30. {
  31. register long r4 __asm__("$4") = a;
  32. register long r7 __asm__("$7");
  33. register long r2 __asm__("$2") = n;
  34. __asm__ __volatile__ (
  35. "syscall"
  36. : "+&r"(r2), "=r"(r7)
  37. : "r"(r4)
  38. : SYSCALL_CLOBBERLIST);
  39. return r7 ? -r2 : r2;
  40. }
  41. static inline long __syscall2(long n, long a, long b)
  42. {
  43. register long r4 __asm__("$4") = a;
  44. register long r5 __asm__("$5") = b;
  45. register long r7 __asm__("$7");
  46. register long r2 __asm__("$2") = n;
  47. __asm__ __volatile__ (
  48. "syscall"
  49. : "+&r"(r2), "=r"(r7)
  50. : "r"(r4), "r"(r5)
  51. : SYSCALL_CLOBBERLIST);
  52. if (r7) return -r2;
  53. long ret = r2;
  54. if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat) __stat_fix(b);
  55. return ret;
  56. }
  57. static inline long __syscall3(long n, long a, long b, long c)
  58. {
  59. register long r4 __asm__("$4") = a;
  60. register long r5 __asm__("$5") = b;
  61. register long r6 __asm__("$6") = c;
  62. register long r7 __asm__("$7");
  63. register long r2 __asm__("$2") = n;
  64. __asm__ __volatile__ (
  65. "syscall"
  66. : "+&r"(r2), "=r"(r7)
  67. : "r"(r4), "r"(r5), "r"(r6)
  68. : SYSCALL_CLOBBERLIST);
  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") = n;
  81. __asm__ __volatile__ (
  82. "syscall"
  83. : "+&r"(r2), "+r"(r7)
  84. : "r"(r4), "r"(r5), "r"(r6)
  85. : SYSCALL_CLOBBERLIST);
  86. if (r7) return -r2;
  87. long ret = r2;
  88. if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat) __stat_fix(b);
  89. if (n == SYS_newfstatat) __stat_fix(c);
  90. return ret;
  91. }
  92. static inline long __syscall5(long n, long a, long b, long c, long d, long e)
  93. {
  94. register long r4 __asm__("$4") = a;
  95. register long r5 __asm__("$5") = b;
  96. register long r6 __asm__("$6") = c;
  97. register long r7 __asm__("$7") = d;
  98. register long r8 __asm__("$8") = e;
  99. register long r2 __asm__("$2") = n;
  100. __asm__ __volatile__ (
  101. "syscall"
  102. : "+&r"(r2), "+r"(r7)
  103. : "r"(r4), "r"(r5), "r"(r6), "r"(r8)
  104. : SYSCALL_CLOBBERLIST);
  105. if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat) __stat_fix(b);
  106. if (n == SYS_newfstatat) __stat_fix(c);
  107. return r2;
  108. }
  109. static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f)
  110. {
  111. register long r4 __asm__("$4") = a;
  112. register long r5 __asm__("$5") = b;
  113. register long r6 __asm__("$6") = c;
  114. register long r7 __asm__("$7") = d;
  115. register long r8 __asm__("$8") = e;
  116. register long r9 __asm__("$9") = f;
  117. register long r2 __asm__("$2") = n;
  118. __asm__ __volatile__ (
  119. "syscall"
  120. : "+&r"(r2), "+r"(r7)
  121. : "r"(r4), "r"(r5), "r"(r6), "r"(r8), "r"(r9)
  122. : SYSCALL_CLOBBERLIST);
  123. if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat) __stat_fix(b);
  124. if (n == SYS_newfstatat) __stat_fix(c);
  125. return r2;
  126. }
  127. #define VDSO_USEFUL
  128. #define VDSO_CGT_SYM "__vdso_clock_gettime"
  129. #define VDSO_CGT_VER "LINUX_2.6"