|  | /* $Id: sunos_asm.S,v 1.15 2000/01/11 17:33:21 jj Exp $ | 
|  | * sunos_asm.S: SunOS system calls which must have a low-level | 
|  | *              entry point to operate correctly. | 
|  | * | 
|  | * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) | 
|  | * | 
|  | * Based upon preliminary work which is: | 
|  | * | 
|  | * Copyright (C) 1995 Adrian M. Rodriguez (adrian@remus.rutgers.edu) | 
|  | */ | 
|  |  | 
|  | #include <asm/ptrace.h> | 
|  |  | 
|  | .text | 
|  | .align 4 | 
|  |  | 
|  | /* When calling ret_sys_call, %o0 should contain the same | 
|  | * value as in [%sp + STACKFRAME_SZ + PT_I0] */ | 
|  |  | 
|  | /* SunOS getpid() returns pid in %o0 and ppid in %o1 */ | 
|  | .globl	sunos_getpid | 
|  | sunos_getpid: | 
|  | call	sys_getppid | 
|  | nop | 
|  |  | 
|  | call	sys_getpid | 
|  | st	%o0, [%sp + STACKFRAME_SZ + PT_I1] | 
|  |  | 
|  | b	ret_sys_call | 
|  | st	%o0, [%sp + STACKFRAME_SZ + PT_I0] | 
|  |  | 
|  | /* SunOS getuid() returns uid in %o0 and euid in %o1 */ | 
|  | .globl	sunos_getuid | 
|  | sunos_getuid: | 
|  | call	sys_geteuid16 | 
|  | nop | 
|  |  | 
|  | call	sys_getuid16 | 
|  | st	%o0, [%sp + STACKFRAME_SZ + PT_I1] | 
|  |  | 
|  | b	ret_sys_call | 
|  | st	%o0, [%sp + STACKFRAME_SZ + PT_I0] | 
|  |  | 
|  | /* SunOS getgid() returns gid in %o0 and egid in %o1 */ | 
|  | .globl	sunos_getgid | 
|  | sunos_getgid: | 
|  | call	sys_getegid16 | 
|  | nop | 
|  |  | 
|  | call	sys_getgid16 | 
|  | st	%o0, [%sp + STACKFRAME_SZ + PT_I1] | 
|  |  | 
|  | b	ret_sys_call | 
|  | st	%o0, [%sp + STACKFRAME_SZ + PT_I0] | 
|  |  | 
|  | /* SunOS's execv() call only specifies the argv argument, the | 
|  | * environment settings are the same as the calling processes. | 
|  | */ | 
|  | .globl	sunos_execv | 
|  | sunos_execv: | 
|  | st	%g0, [%sp + STACKFRAME_SZ + PT_I2] | 
|  |  | 
|  | call	sparc_execve | 
|  | add	%sp, STACKFRAME_SZ, %o0 | 
|  |  | 
|  | b	ret_sys_call | 
|  | ld	[%sp + STACKFRAME_SZ + PT_I0], %o0 |