| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* $Id: sunos_asm.S,v 1.15 2000/01/11 17:33:21 jj Exp $ | 
|  | 2 | * sunos_asm.S: SunOS system calls which must have a low-level | 
|  | 3 | *              entry point to operate correctly. | 
|  | 4 | * | 
|  | 5 | * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) | 
|  | 6 | * | 
|  | 7 | * Based upon preliminary work which is: | 
|  | 8 | * | 
|  | 9 | * Copyright (C) 1995 Adrian M. Rodriguez (adrian@remus.rutgers.edu) | 
|  | 10 | */ | 
|  | 11 |  | 
|  | 12 | #include <asm/ptrace.h> | 
|  | 13 |  | 
|  | 14 | .text | 
|  | 15 | .align 4 | 
|  | 16 |  | 
|  | 17 | /* When calling ret_sys_call, %o0 should contain the same | 
|  | 18 | * value as in [%sp + STACKFRAME_SZ + PT_I0] */ | 
|  | 19 |  | 
|  | 20 | /* SunOS getpid() returns pid in %o0 and ppid in %o1 */ | 
|  | 21 | .globl	sunos_getpid | 
|  | 22 | sunos_getpid: | 
|  | 23 | call	sys_getppid | 
|  | 24 | nop | 
|  | 25 |  | 
|  | 26 | call	sys_getpid | 
|  | 27 | st	%o0, [%sp + STACKFRAME_SZ + PT_I1] | 
|  | 28 |  | 
|  | 29 | b	ret_sys_call | 
|  | 30 | st	%o0, [%sp + STACKFRAME_SZ + PT_I0] | 
|  | 31 |  | 
|  | 32 | /* SunOS getuid() returns uid in %o0 and euid in %o1 */ | 
|  | 33 | .globl	sunos_getuid | 
|  | 34 | sunos_getuid: | 
|  | 35 | call	sys_geteuid16 | 
|  | 36 | nop | 
|  | 37 |  | 
|  | 38 | call	sys_getuid16 | 
|  | 39 | st	%o0, [%sp + STACKFRAME_SZ + PT_I1] | 
|  | 40 |  | 
|  | 41 | b	ret_sys_call | 
|  | 42 | st	%o0, [%sp + STACKFRAME_SZ + PT_I0] | 
|  | 43 |  | 
|  | 44 | /* SunOS getgid() returns gid in %o0 and egid in %o1 */ | 
|  | 45 | .globl	sunos_getgid | 
|  | 46 | sunos_getgid: | 
|  | 47 | call	sys_getegid16 | 
|  | 48 | nop | 
|  | 49 |  | 
|  | 50 | call	sys_getgid16 | 
|  | 51 | st	%o0, [%sp + STACKFRAME_SZ + PT_I1] | 
|  | 52 |  | 
|  | 53 | b	ret_sys_call | 
|  | 54 | st	%o0, [%sp + STACKFRAME_SZ + PT_I0] | 
|  | 55 |  | 
|  | 56 | /* SunOS's execv() call only specifies the argv argument, the | 
|  | 57 | * environment settings are the same as the calling processes. | 
|  | 58 | */ | 
|  | 59 | .globl	sunos_execv | 
|  | 60 | sunos_execv: | 
|  | 61 | st	%g0, [%sp + STACKFRAME_SZ + PT_I2] | 
|  | 62 |  | 
|  | 63 | call	sparc_execve | 
|  | 64 | add	%sp, STACKFRAME_SZ, %o0 | 
|  | 65 |  | 
|  | 66 | b	ret_sys_call | 
|  | 67 | ld	[%sp + STACKFRAME_SZ + PT_I0], %o0 |