linux-libc-headers-2.6.12.0-arm-eabi.patch 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. --- linux-libc-headers-2.6.12.0/include/asm-arm/unistd.h 2005-07-06 03:17:41.000000000 +0300
  2. +++ linux-libc-headers-2.6.12.0-arm-eabi/include/asm-arm/unistd.h 2006-06-05 17:14:09.000000000 +0300
  3. @@ -15,10 +15,12 @@
  4. #include <linux/linkage.h>
  5. -#if defined(__thumb__)
  6. +#define __NR_OABI_SYSCALL_BASE 0x900000
  7. +
  8. +#if defined(__thumb__) || defined(__ARM_EABI__)
  9. #define __NR_SYSCALL_BASE 0
  10. #else
  11. -#define __NR_SYSCALL_BASE 0x900000
  12. +#define __NR_SYSCALL_BASE __NR_OABI_SYSCALL_BASE
  13. #endif
  14. /*
  15. @@ -365,13 +375,13 @@
  16. #define __sys1(x) __sys2(x)
  17. #ifndef __syscall
  18. -#if defined(__thumb__)
  19. -#define __syscall(name) \
  20. - "push {r7}\n\t" \
  21. - "mov r7, #" __sys1(__NR_##name) "\n\t" \
  22. - "swi 0\n\t" \
  23. - "pop {r7}"
  24. +#if defined(__thumb__) || defined(__ARM_EABI__)
  25. +#define __SYS_REG(name) register long __sysreg __asm__("r7") = __NR_##name;
  26. +#define __SYS_REG_LIST(regs...) "r" (__sysreg) , ##regs
  27. +#define __syscall(name) "swi\t0"
  28. #else
  29. +#define __SYS_REG(name)
  30. +#define __SYS_REG_LIST(regs...) regs
  31. #define __syscall(name) "swi\t" __sys1(__NR_##name) ""
  32. #endif
  33. #endif
  34. @@ -387,33 +397,34 @@
  35. #define _syscall0(type,name) \
  36. type name(void) { \
  37. + __SYS_REG(name) \
  38. register long __res_r0 __asm__("r0"); \
  39. long __res; \
  40. __asm__ __volatile__ ( \
  41. __syscall(name) \
  42. : "=r" (__res_r0) \
  43. - : \
  44. - : "lr"); \
  45. + : __SYS_REG_LIST() ); \
  46. __res = __res_r0; \
  47. __syscall_return(type,__res); \
  48. }
  49. #define _syscall1(type,name,type1,arg1) \
  50. type name(type1 arg1) { \
  51. + __SYS_REG(name) \
  52. register long __r0 __asm__("r0") = (long)arg1; \
  53. register long __res_r0 __asm__("r0"); \
  54. long __res; \
  55. __asm__ __volatile__ ( \
  56. __syscall(name) \
  57. : "=r" (__res_r0) \
  58. - : "r" (__r0) \
  59. - : "lr"); \
  60. + : __SYS_REG_LIST( "0" (__r0) ) ); \
  61. __res = __res_r0; \
  62. __syscall_return(type,__res); \
  63. }
  64. #define _syscall2(type,name,type1,arg1,type2,arg2) \
  65. type name(type1 arg1,type2 arg2) { \
  66. + __SYS_REG(name) \
  67. register long __r0 __asm__("r0") = (long)arg1; \
  68. register long __r1 __asm__("r1") = (long)arg2; \
  69. register long __res_r0 __asm__("r0"); \
  70. @@ -421,8 +432,7 @@
  71. __asm__ __volatile__ ( \
  72. __syscall(name) \
  73. : "=r" (__res_r0) \
  74. - : "r" (__r0),"r" (__r1) \
  75. - : "lr"); \
  76. + : __SYS_REG_LIST( "0" (__r0), "r" (__r1) ) ); \
  77. __res = __res_r0; \
  78. __syscall_return(type,__res); \
  79. }
  80. @@ -430,6 +440,7 @@
  81. #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
  82. type name(type1 arg1,type2 arg2,type3 arg3) { \
  83. + __SYS_REG(name) \
  84. register long __r0 __asm__("r0") = (long)arg1; \
  85. register long __r1 __asm__("r1") = (long)arg2; \
  86. register long __r2 __asm__("r2") = (long)arg3; \
  87. @@ -438,8 +449,7 @@
  88. __asm__ __volatile__ ( \
  89. __syscall(name) \
  90. : "=r" (__res_r0) \
  91. - : "r" (__r0),"r" (__r1),"r" (__r2) \
  92. - : "lr"); \
  93. + : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2) ) ); \
  94. __res = __res_r0; \
  95. __syscall_return(type,__res); \
  96. }
  97. @@ -447,6 +457,7 @@
  98. #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4)\
  99. type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) { \
  100. + __SYS_REG(name) \
  101. register long __r0 __asm__("r0") = (long)arg1; \
  102. register long __r1 __asm__("r1") = (long)arg2; \
  103. register long __r2 __asm__("r2") = (long)arg3; \
  104. @@ -456,8 +467,7 @@
  105. __asm__ __volatile__ ( \
  106. __syscall(name) \
  107. : "=r" (__res_r0) \
  108. - : "r" (__r0),"r" (__r1),"r" (__r2),"r" (__r3) \
  109. - : "lr"); \
  110. + : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2), "r" (__r3) ) ); \
  111. __res = __res_r0; \
  112. __syscall_return(type,__res); \
  113. }
  114. @@ -465,6 +475,7 @@
  115. #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \
  116. type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) { \
  117. + __SYS_REG(name) \
  118. register long __r0 __asm__("r0") = (long)arg1; \
  119. register long __r1 __asm__("r1") = (long)arg2; \
  120. register long __r2 __asm__("r2") = (long)arg3; \
  121. @@ -475,14 +486,15 @@
  122. __asm__ __volatile__ ( \
  123. __syscall(name) \
  124. : "=r" (__res_r0) \
  125. - : "r" (__r0),"r" (__r1),"r" (__r2),"r" (__r3),"r" (__r4) \
  126. - : "lr"); \
  127. + : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2), \
  128. + "r" (__r3), "r" (__r4) ) ); \
  129. __res = __res_r0; \
  130. __syscall_return(type,__res); \
  131. }
  132. #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5,type6,arg6) \
  133. type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6) { \
  134. + __SYS_REG(name) \
  135. register long __r0 __asm__("r0") = (long)arg1; \
  136. register long __r1 __asm__("r1") = (long)arg2; \
  137. register long __r2 __asm__("r2") = (long)arg3; \
  138. @@ -494,14 +506,15 @@
  139. __asm__ __volatile__ ( \
  140. __syscall(name) \
  141. : "=r" (__res_r0) \
  142. - : "r" (__r0),"r" (__r1),"r" (__r2),"r" (__r3), "r" (__r4),"r" (__r5) \
  143. - : "lr"); \
  144. + : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2), \
  145. + "r" (__r3), "r" (__r4), "r" (__r5) ) ); \
  146. __res = __res_r0; \
  147. __syscall_return(type,__res); \
  148. }
  149. #ifdef __KERNEL_SYSCALLS__
  150. +#include <linux/compiler.h>
  151. #include <linux/types.h>
  152. #include <linux/syscalls.h>