(__vfork): Allow __fork to be far away from __vfork ifndef SHARED.
authordrepper <drepper>
Wed, 15 Jan 2003 01:05:07 +0000 (01:05 +0000)
committerdrepper <drepper>
Wed, 15 Jan 2003 01:05:07 +0000 (01:05 +0000)
linuxthreads/sysdeps/unix/sysv/linux/alpha/vfork.S
linuxthreads/sysdeps/unix/sysv/linux/powerpc/powerpc32/vfork.S
linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S

index c057bd2..2481de9 100644 (file)
@@ -27,11 +27,25 @@ __LABEL(__vfork)
        .prologue 1
        PSEUDO_PROF
        SINGLE_THREAD_P(t0)
+#ifdef SHARED
        bne     t0, HIDDEN_JUMPTARGET (__fork) !samegp
+#else
+       bne     t0, $hidden_fork
+#endif
        lda     v0, SYS_ify(vfork)
        call_pal PAL_callsys
+#ifdef SHARED
        bne     a3, __syscall_error !samegp
+#else
+       bne     a3, $syscall_error
+#endif
        ret
+#ifndef SHARED
+$hidden_fork:
+       jmp     zero, HIDDEN_JUMPTARGET (__fork)
+$syscall_error:
+       jmp     zero, __syscall_error
+#endif
 PSEUDO_END(__vfork)
 libc_hidden_def (__vfork)
 
index f62d3f4..1759005 100644 (file)
@@ -31,7 +31,11 @@ ENTRY (__vfork)
 #ifdef __NR_vfork
 
        SINGLE_THREAD_P
+# ifdef SHARED
        bne-    HIDDEN_JUMPTARGET(__fork)
+# else
+       bne-    .Lhidden_fork
+# endif
 
        DO_CALL (SYS_ify (vfork));
 
@@ -41,7 +45,11 @@ ENTRY (__vfork)
        bnslr+
        /* Check if vfork syscall is known at all.  */
        cmpwi   r3,ENOSYS
+#  ifdef SHARED
        bne     JUMPTARGET(__syscall_error)
+#  else
+       bne     .Lsyscall_error
+#  endif
 
 # endif
 #endif
@@ -53,6 +61,13 @@ ENTRY (__vfork)
        PSEUDO_RET
 #endif
 
+# ifndef SHARED
+.Lhidden_fork:
+       b       HIDDEN_JUMPTARGET(__fork)
+.Lsyscall_error:
+       b       JUMPTARGET(__syscall_error)
+# endif
+
 PSEUDO_END (__vfork)
 libc_hidden_def (__vfork)
 
index adf7b22..9378bd8 100644 (file)
 ENTRY(__vfork)
        ld      [%g6 + MULTIPLE_THREADS_OFFSET], %o0
        cmp     %o0, 0
+#ifdef SHARED
        bne     HIDDEN_JUMPTARGET(__fork)
+#else
+       bne     1f
+#endif
         mov    __NR_vfork, %g1
        ta 0x10;
        bcs     __syscall_error_handler
@@ -31,6 +35,11 @@ ENTRY(__vfork)
        sub     %o1, 1, %o1
        retl
         and    %o0, %o1, %o0
+#ifndef SHARED
+1:     mov     %o7, %g1
+       call    HIDDEN_JUMPTARGET(__fork)
+        mov    %g1, %o7
+#endif
        SYSCALL_ERROR_HANDLER
 PSEUDO_END (__vfork)
 libc_hidden_def (__vfork)