summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/sparc/fork.S
diff options
context:
space:
mode:
Diffstat (limited to 'mdk-stage1/dietlibc/sparc/fork.S')
-rw-r--r--mdk-stage1/dietlibc/sparc/fork.S20
1 files changed, 13 insertions, 7 deletions
diff --git a/mdk-stage1/dietlibc/sparc/fork.S b/mdk-stage1/dietlibc/sparc/fork.S
index 150839971..869c9b30c 100644
--- a/mdk-stage1/dietlibc/sparc/fork.S
+++ b/mdk-stage1/dietlibc/sparc/fork.S
@@ -1,19 +1,25 @@
#include "syscalls.h"
.text
-.global fork
+.weak fork
fork:
+.global __libc_fork
+__libc_fork:
mov 2, %g1
ta 0x10
bcc,a 1f
nop
-
- sethi %hi(errno), %o3
- or %o3, %lo(errno), %o3
- st %i0, [%o3]
-
+ save %sp, -96, %sp
+#ifdef WANT_THREAD_SAVE
+ call __errno_location
+ nop
+#else
+ sethi %hi(errno), %o0
+ or %o0, %lo(errno), %o0
+#endif
+ st %i0, [ %o0 ]
retl
- mov -1, %o0
+ restore %g0, -1, %o0
1: dec %o1
retl
and %o0, %o1, %o0