summaryrefslogtreecommitdiff
path: root/libc/sysdeps/linux/sparc/fork.S
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2003-01-02 16:48:42 +0000
committerEric Andersen <andersen@codepoet.org>2003-01-02 16:48:42 +0000
commitf980a783a335d83330e832ed92c0aa8f1abb93b8 (patch)
tree69d00c1eaffd1e8c808ffbf66ac0d4565ee34e80 /libc/sysdeps/linux/sparc/fork.S
parentd4b37495fb022640b1db8c0aa8615392c8969684 (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.S51
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;