sclow.S
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:2k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /* sclow.S: Low level special syscall handling.
  2.  *          Basically these are cases where we can completely
  3.  *          handle the system call without saving any state
  4.  *          because we know that the process will not sleep.
  5.  *
  6.  * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
  7.  */
  8. #include <asm/cprefix.h>
  9. #include <asm/ptrace.h>
  10. #include <asm/errno.h>
  11. #include <asm/winmacro.h>
  12. #include <asm/psr.h>
  13. #include <asm/page.h>
  14. #define CC_AND_RETT  
  15. set PSR_C, %l4; 
  16. andn %l0, %l4, %l4; 
  17. wr %l4, 0x0, %psr; 
  18. nop; nop; nop; 
  19. jmp %l2; 
  20. rett %l2 + 4;
  21. #define SC_AND_RETT  
  22. set PSR_C, %l4; 
  23. or %l0, %l4, %l4; 
  24. wr %l4, 0x0, %psr; 
  25. nop; nop; nop; 
  26. jmp %l2; 
  27. rett %l2 + 4;
  28. #define LABEL(func)  CONCAT(func, _low)
  29. .globl LABEL(sunosnop)
  30. LABEL(sunosnop):
  31. CC_AND_RETT
  32. #if 0
  33. /* Not SMP safe */
  34. .globl LABEL(sunosgetpid)
  35. LABEL(sunosgetpid):
  36. LOAD_CURRENT(l4, l5)
  37. ld [%l4 + AOFF_task_pid], %i0
  38. ld [%l4 + AOFF_task_p_opptr], %l5
  39. ld [%l5 + AOFF_task_pid], %i1
  40. CC_AND_RETT
  41. #endif
  42. #if (ASIZ_task_uid == 2 && ASIZ_task_euid == 2)
  43. .globl LABEL(sunosgetuid)
  44. LABEL(sunosgetuid):
  45. LOAD_CURRENT(l4, l5)
  46. lduh [%l4 + AOFF_task_uid], %i0
  47. lduh [%l4 + AOFF_task_euid], %i1
  48. CC_AND_RETT
  49. #endif
  50. #if (ASIZ_task_gid == 2 && ASIZ_task_egid == 2)
  51. .globl LABEL(sunosgetgid)
  52. LABEL(sunosgetgid):
  53. LOAD_CURRENT(l4, l5)
  54. lduh [%l4 + AOFF_task_gid], %i0
  55. lduh [%l4 + AOFF_task_egid], %i1
  56. CC_AND_RETT
  57. #endif
  58. .globl LABEL(sunosmctl)
  59. LABEL(sunosmctl):
  60. mov 0, %i0
  61. CC_AND_RETT
  62. .globl LABEL(sunosgdtsize)
  63. LABEL(sunosgdtsize):
  64. mov 256, %i0
  65. CC_AND_RETT
  66. .globl LABEL(sunossblock)
  67. LABEL(sunossblock):
  68. LOAD_CURRENT(l4, l5)
  69. set -65793, %l5
  70. and %i0, %l5, %l5
  71. ld [%l4 + AOFF_task_blocked], %i0
  72. or %i0, %l5, %l5
  73. st %l5, [%l4 + AOFF_task_blocked]
  74. CC_AND_RETT
  75. .globl LABEL(sunossmask)
  76. LABEL(sunossmask):
  77. LOAD_CURRENT(l4, l5)
  78. set -65793, %l5
  79. and %i0, %l5, %l5
  80. ld [%l4 + AOFF_task_blocked], %i0
  81. st %l5, [%l4 + AOFF_task_blocked]
  82. CC_AND_RETT
  83. .globl LABEL(getpagesize)
  84. LABEL(getpagesize):
  85. set PAGE_SIZE, %i0
  86. CC_AND_RETT
  87. /* XXX sys_nice() XXX */
  88. /* XXX sys_setpriority() XXX */
  89. /* XXX sys_getpriority() XXX */
  90. /* XXX sys_setregid() XXX */
  91. /* XXX sys_setgid() XXX */
  92. /* XXX sys_setreuid() XXX */
  93. /* XXX sys_setuid() XXX */
  94. /* XXX sys_setfsuid() XXX */
  95. /* XXX sys_setfsgid() XXX */
  96. /* XXX sys_setpgid() XXX */
  97. /* XXX sys_getpgid() XXX */
  98. /* XXX sys_setsid() XXX */
  99. /* XXX sys_getsid() XXX */