diff options
Diffstat (limited to 'linuxthreads/sysdeps/unix/sysv/linux/sh/vfork.S')
-rw-r--r-- | linuxthreads/sysdeps/unix/sysv/linux/sh/vfork.S | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/linuxthreads/sysdeps/unix/sysv/linux/sh/vfork.S b/linuxthreads/sysdeps/unix/sysv/linux/sh/vfork.S index f796e31088..b118ca34d7 100644 --- a/linuxthreads/sysdeps/unix/sysv/linux/sh/vfork.S +++ b/linuxthreads/sysdeps/unix/sysv/linux/sh/vfork.S @@ -26,8 +26,14 @@ and the process ID of the new process to the old process. */ ENTRY (__vfork) - SINGLE_THREAD_P - bf .Lhidden_fork +#ifdef SHARED + mov.l .Lpthread_func, r0 + mov.l @(r0,r12), r0 +#else + mov.l .Lpthread_fork, r0 +#endif + tst r0, r0 + bf .Lhidden_fork mov.w .L1, r3 trapa #0x10 @@ -42,6 +48,14 @@ ENTRY (__vfork) rts nop .L1: .word __NR_vfork + .align 2 +#ifdef SHARED +.Lpthread_func: + .long __libc_pthread_functions@GOTOFF +#else +.Lpthread_fork: + .long __pthread_fork +#endif .Lhidden_fork: mov.l .L2, r1 |