|
@@ -10,7 +10,24 @@
|
|
|
# include <unistd.h>
|
|
|
extern __typeof(vfork) __vfork attribute_hidden;
|
|
|
|
|
|
-# ifdef __NR_vfork
|
|
|
+# if defined __NR_clone && !defined __NR_vfork
|
|
|
+# include <signal.h>
|
|
|
+# include <sys/types.h>
|
|
|
+
|
|
|
+pid_t __vfork(void)
|
|
|
+{
|
|
|
+ pid_t pid = INLINE_SYSCALL(clone, 4, SIGCHLD,
|
|
|
+ NULL, NULL, NULL);
|
|
|
+
|
|
|
+ if (pid < 0)
|
|
|
+ return -1
|
|
|
+
|
|
|
+ return pid;
|
|
|
+}
|
|
|
+weak_alias(__vfork, vfork)
|
|
|
+libc_hidden_weak(vfork)
|
|
|
+
|
|
|
+# elif defined __NR_vfork
|
|
|
# define __NR___vfork __NR_vfork
|
|
|
_syscall0(pid_t, __vfork)
|
|
|
# else
|