sclow.S 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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/ptrace.h>
  9. #include <asm/asm_offsets.h>
  10. #include <asm/errno.h>
  11. #include <asm/winmacro.h>
  12. #include <asm/thread_info.h>
  13. #include <asm/psr.h>
  14. #include <asm/page.h>
  15. #define CC_AND_RETT \
  16. set PSR_C, %l4; \
  17. andn %l0, %l4, %l4; \
  18. wr %l4, 0x0, %psr; \
  19. nop; nop; nop; \
  20. jmp %l2; \
  21. rett %l2 + 4;
  22. #define SC_AND_RETT \
  23. set PSR_C, %l4; \
  24. or %l0, %l4, %l4; \
  25. wr %l4, 0x0, %psr; \
  26. nop; nop; nop; \
  27. jmp %l2; \
  28. rett %l2 + 4;
  29. #define LABEL(func) func##_low
  30. .globl LABEL(sunosnop)
  31. LABEL(sunosnop):
  32. CC_AND_RETT
  33. #if (ASIZ_task_uid == 2 && ASIZ_task_euid == 2)
  34. .globl LABEL(sunosgetuid)
  35. LABEL(sunosgetuid):
  36. LOAD_CURRENT(l4, l5)
  37. ld [%l4 + TI_TASK], %l4
  38. lduh [%l4 + AOFF_task_uid], %i0
  39. lduh [%l4 + AOFF_task_euid], %i1
  40. CC_AND_RETT
  41. #endif
  42. #if (ASIZ_task_gid == 2 && ASIZ_task_egid == 2)
  43. .globl LABEL(sunosgetgid)
  44. LABEL(sunosgetgid):
  45. LOAD_CURRENT(l4, l5)
  46. ld [%l4 + TI_TASK], %l4
  47. lduh [%l4 + AOFF_task_gid], %i0
  48. lduh [%l4 + AOFF_task_egid], %i1
  49. CC_AND_RETT
  50. #endif
  51. .globl LABEL(sunosmctl)
  52. LABEL(sunosmctl):
  53. mov 0, %i0
  54. CC_AND_RETT
  55. .globl LABEL(sunosgdtsize)
  56. LABEL(sunosgdtsize):
  57. mov 256, %i0
  58. CC_AND_RETT
  59. .globl LABEL(getpagesize)
  60. LABEL(getpagesize):
  61. set PAGE_SIZE, %i0
  62. CC_AND_RETT
  63. /* XXX sys_nice() XXX */
  64. /* XXX sys_setpriority() XXX */
  65. /* XXX sys_getpriority() XXX */
  66. /* XXX sys_setregid() XXX */
  67. /* XXX sys_setgid() XXX */
  68. /* XXX sys_setreuid() XXX */
  69. /* XXX sys_setuid() XXX */
  70. /* XXX sys_setfsuid() XXX */
  71. /* XXX sys_setfsgid() XXX */
  72. /* XXX sys_setpgid() XXX */
  73. /* XXX sys_getpgid() XXX */
  74. /* XXX sys_setsid() XXX */
  75. /* XXX sys_getsid() XXX */