summaryrefslogtreecommitdiffstats
path: root/libc/sysdeps/linux/arm/vfork.S
diff options
context:
space:
mode:
Diffstat (limited to 'libc/sysdeps/linux/arm/vfork.S')
-rw-r--r--libc/sysdeps/linux/arm/vfork.S17
1 files changed, 13 insertions, 4 deletions
diff --git a/libc/sysdeps/linux/arm/vfork.S b/libc/sysdeps/linux/arm/vfork.S
index 68798995a..5092023a8 100644
--- a/libc/sysdeps/linux/arm/vfork.S
+++ b/libc/sysdeps/linux/arm/vfork.S
@@ -2,7 +2,7 @@
/* vfork for uClibc
*
* Copyright (C) 2000 by Lineo, inc. and Erik Andersen
- * Copyright (C) 2000,2001 by Erik Andersen <andersen@uclibc.org>
+ * Copyright (C) 2000-2006 by Erik Andersen <andersen@uclibc.org>
* Written by Erik Andersen <andersen@uclibc.org>
*
* Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
@@ -24,9 +24,13 @@
__vfork:
#ifdef __NR_vfork
- swi __NR_vfork
+ DO_CALL (vfork)
cmn r0, #4096
+#if defined(__USE_BX__)
+ bxcc lr
+#else
movcc pc, lr
+#endif
/* Check if vfork even exists. */
ldr r1, =-ENOSYS
@@ -35,15 +39,20 @@ __vfork:
#endif
/* If we don't have vfork, use fork. */
- swi __NR_fork
+ DO_CALL (fork)
cmn r0, #4096
/* Syscall worked. Return to child/parent */
+#if defined(__USE_BX__)
+ bxcc lr
+#else
movcc pc, lr
+#endif
__error:
b __syscall_error
.size __vfork,.-__vfork
-strong_alias(__vfork,vfork)
+weak_alias(__vfork,vfork)
+libc_hidden_weak(vfork)
#endif