syscall-sparc-sunos4.S
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:2k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* ==== syscall.S ============================================================
  2.  * Copyright (c) 1994 Chris Provenzano, proven@mit.edu
  3.  * All rights reserved.
  4.  *
  5.  */
  6. #ifndef lint
  7. .text
  8. .asciz "$Id$";
  9. #endif
  10.  
  11. #include <sys/syscall.h>
  12. #define SYSCALL(x)
  13. .globl _machdep_sys_##x;
  14. _machdep_sys_##x:;
  15. mov SYS_##x, %g1;   
  16. ta 0;
  17. bcs,a 2b;
  18. sub %r0,%o0,%o0;
  19. retl
  20. /*
  21.  * Initial asm stuff for all functions.
  22.  */
  23. .text
  24. .align 4
  25. /* ==========================================================================
  26.  * error code for all syscalls. The error value is returned as the negative
  27.  * of the errno value.
  28.  */
  29. 1:
  30. sub %r0, %o0, %o0
  31. 2:
  32. retl
  33. nop
  34. /* ==========================================================================
  35.  * machdep_sys_pipe()
  36.  */
  37.     .globl _machdep_sys_pipe
  38. _machdep_sys_pipe:
  39.     mov  %o0, %o2
  40.     mov  SYS_pipe, %g1
  41.     ta  0
  42.     bcs 1b
  43.     nop
  44.     st  %o0, [ %o2 ]
  45.     st  %o1, [ %o2 + 4 ]
  46.     retl 
  47.     mov  %g0, %o0
  48. /* ==========================================================================
  49.  * machdep_sys_fork()
  50.  */
  51.     .globl _machdep_sys_fork;
  52. _machdep_sys_fork:;
  53.     mov SYS_fork, %g1;
  54.     ta 0;
  55.     bcs 1b;
  56.     nop;
  57.     tst %o1
  58.     bne,a __fork_parent
  59.     mov  %g0, %o0
  60. __fork_parent:;
  61.     retl
  62. /* POSIX-compliant getpgrp() takes no arguments.  The SunOS syscall wants
  63.    one, and gives the POSIXy result if that argument is zero.  */
  64. .globl _getpgrp
  65. _getpgrp:
  66. mov SYS_getpgrp, %g1
  67. mov 0, %i0
  68. ta 0
  69. bcs 1b
  70. nop
  71. retl
  72. nop
  73. #if 0
  74. /* I think this bit of magic will do the right thing for other syscalls.
  75.    We get here with the new `errno' code in %o0.  It should get stored in
  76.    *__error(), and -1 returned to the caller.  */
  77. .globl cerror
  78. cerror:
  79. save %sp,-104,%sp
  80. /* Now value is in %i0.  Store it in *__error().  */
  81. call ___error
  82. nop
  83. st %i0,[%o0]
  84. /* Now also store a copy in global variable errno, for routines
  85.    like isatty that want to examine it and which haven't been
  86.    converted yet.  */
  87. sethi %hi(_errno), %o0
  88. st %i0,[%o0+%lo(_errno)]
  89. #if 0 /* use this if you want -errno returned */
  90. sub %r0,%i0,%i0
  91. #else /* return -1 */
  92. mov -1,%i0
  93. #endif
  94. retl
  95. restore
  96. #endif