]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - sysdeps/unix/sysv/linux/aarch64/vfork.S
Prefer https to http for gnu.org and fsf.org URLs
[thirdparty/glibc.git] / sysdeps / unix / sysv / linux / aarch64 / vfork.S
index 316cb65e9b34d2ffac3d1b47f55856b9275e06da..6a51c4394d7fc9ca3c13ea01317796df8be8e154 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999-2014 Free Software Foundation, Inc.
+/* Copyright (C) 1999-2019 Free Software Foundation, Inc.
 
    This file is part of the GNU C Library.
 
 
    You should have received a copy of the GNU Lesser General Public
    License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
+   <https://www.gnu.org/licenses/>.  */
 
 #include <sysdep.h>
 #define _ERRNO_H       1
 #include <bits/errno.h>
-#include <kernel-features.h>
 
 /* Clone the calling process, but without copying the whole address space.
    The calling process is suspended until the new process exits or is
 
 ENTRY (__vfork)
 
-       /* Save the TCB-cached PID away in w3, and then negate the TCB
-           field.  But if it's zero, set it to 0x80000000 instead.  See
-           raise.c for the logic that relies on this value.  */
-       mrs     x2, tpidr_el0
-       sub     x2, x2, #PTHREAD_SIZEOF
-       ldr     w3, [x2, #PTHREAD_PID_OFFSET]
-       mov     w1, #0x80000000
-       negs    w0, w3
-       csel    w0, w1, w0, eq
-       str     w0, [x2, #PTHREAD_PID_OFFSET]
-
        mov     x0, #0x4111     /* CLONE_VM | CLONE_VFORK | SIGCHLD */
        mov     x1, sp
        DO_CALL (clone, 2)
 
-       /* Restore the original value of the TCB cache of the PID, if we're
-          the parent.  But in the child (syscall return value equals zero),
-          leave things as they are.  */
-       cbz     x0, 1f
-       str     w3, [x2, #PTHREAD_PID_OFFSET]
-1:
        cmn     x0, #4095
        b.cs    .Lsyscall_error
        RET