about summary refs log tree commit diff
path: root/linuxthreads/sysdeps/unix/sysv/linux/i386/vfork.S
diff options
context:
space:
mode:
Diffstat (limited to 'linuxthreads/sysdeps/unix/sysv/linux/i386/vfork.S')
-rw-r--r--linuxthreads/sysdeps/unix/sysv/linux/i386/vfork.S14
1 files changed, 13 insertions, 1 deletions
diff --git a/linuxthreads/sysdeps/unix/sysv/linux/i386/vfork.S b/linuxthreads/sysdeps/unix/sysv/linux/i386/vfork.S
index 298aedcf43..f4a56a54bf 100644
--- a/linuxthreads/sysdeps/unix/sysv/linux/i386/vfork.S
+++ b/linuxthreads/sysdeps/unix/sysv/linux/i386/vfork.S
@@ -31,7 +31,19 @@ ENTRY (__vfork)
 
 #ifdef __NR_vfork
 
-	SINGLE_THREAD_P
+# ifdef SHARED
+#  if !defined HAVE_HIDDEN || !USE___THREAD
+	SETUP_PIC_REG (cx)
+#  else
+	call	__i686.get_pc_thunk.cx
+#  endif
+	addl	$_GLOBAL_OFFSET_TABLE_, %ecx
+	cmpl	$0, __libc_pthread_functions@GOTOFF(%ecx)
+# else
+	.weak	__pthread_fork
+	movl	$__pthread_fork, %eax
+	testl	%eax, %eax
+# endif
 	jne	HIDDEN_JUMPTARGET (__fork)
 
 	/* Pop the return PC value into ECX.  */