diff options
author | Eric Andersen <andersen@codepoet.org> | 2003-01-02 16:48:42 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2003-01-02 16:48:42 +0000 |
commit | f980a783a335d83330e832ed92c0aa8f1abb93b8 (patch) | |
tree | 69d00c1eaffd1e8c808ffbf66ac0d4565ee34e80 /libc/sysdeps/linux/sparc/fork.S | |
parent | d4b37495fb022640b1db8c0aa8615392c8969684 (diff) |
Rework sparc architecture support so it will compile
and run. Seems to be working...
-Erik
Diffstat (limited to 'libc/sysdeps/linux/sparc/fork.S')
-rw-r--r-- | libc/sysdeps/linux/sparc/fork.S | 51 |
1 files changed, 26 insertions, 25 deletions
diff --git a/libc/sysdeps/linux/sparc/fork.S b/libc/sysdeps/linux/sparc/fork.S index 6bab58c81..c66856bef 100644 --- a/libc/sysdeps/linux/sparc/fork.S +++ b/libc/sysdeps/linux/sparc/fork.S @@ -1,5 +1,6 @@ -/* Copyright (C) 1991, 92, 94, 95, 97, 99 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1999 Free Software Foundation, Inc. This file is part of the GNU C Library. + Contributed by Miguel de Icaza <miguel@gnu.ai.mit.edu>, 1997. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -16,31 +17,31 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#include <sysdep.h> +/* Code taken from glibc2.2.2/sysdeps/unix/sysv/linux/sparc/vfork.S */ + +#include <sys/syscall.h> .text; -.global fork; -.align 4; -fork: ; -.type fork ,@function; ; - - mov 2, %g1 ; - ta 0x10; - bcc,a 9000f; - nop; - save %sp,-96,%sp; - call __errno_location; - nop; - st %i0,[%o0]; - jmpl %i7+8,%g0; - restore %g0,-1,%o0; ; - 9000:; - - /* %o1 is now 0 for the parent and 1 for the child. Decrement it to - make it -1 (all bits set) for the parent, and 0 (no bits set) - for the child. Then AND it with %o0, so the parent gets - %o0&-1==pid, and the child gets %o0&0==0. */ - sub %o1, 1, %o1 +.global fork; +.align 4; +.type fork,@function; + +fork: + mov __NR_fork, %g1 + ta 0x10 + bcc,a 9000f + nop + save %sp,-96,%sp + call __errno_location + nop + st %i0,[%o0] + jmpl %i7+8,%g0 + restore %g0,-1,%o0 + +9000: + sub %o1, 1, %o1 retl - and %o0, %o1, %o0 + and %o0, %o1, %o0 + +.size fork,.-fork; |