]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - sysdeps/unix/sysv/linux/mips/vfork.S
Prefer https to http for gnu.org and fsf.org URLs
[thirdparty/glibc.git] / sysdeps / unix / sysv / linux / mips / vfork.S
index 6d2c65ad0b9416eaf810322f2661c9ce9fb18cb8..ec0f6bd376cf8f3959aff5cc6295ab7f4ce4dc31 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2005 Free Software Foundation, Inc.
+/* Copyright (C) 2005-2019 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -13,7 +13,7 @@
 
    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/>.  */
 
 /* vfork() is just a special case of clone().  */
 
 #include <sysdep.h>
 #include <asm/unistd.h>
 #include <sgidefs.h>
-
-#ifndef SAVE_PID
-#define SAVE_PID
-#endif
-
-#ifndef RESTORE_PID
-#define RESTORE_PID
-#endif
+#include <tls.h>
 
 
 /* int vfork() */
 
        .text
+       .set            nomips16
 LOCALSZ= 1
 FRAMESZ= (((NARGSAVE+LOCALSZ)*SZREG)+ALSZ)&ALMASK
 GPOFF= FRAMESZ-(1*SZREG)
-NESTED(__vfork,FRAMESZ,sp)
+NESTED(__libc_vfork,FRAMESZ,sp)
 #ifdef __PIC__
        SETUP_GP
 #endif
        PTR_SUBU sp, FRAMESZ
-       SETUP_GP64 (a5, __vfork)
+       cfi_adjust_cfa_offset (FRAMESZ)
+       SETUP_GP64_REG (a5, __libc_vfork)
 #ifdef __PIC__
        SAVE_GP (GPOFF)
 #endif
@@ -63,8 +58,7 @@ NESTED(__vfork,FRAMESZ,sp)
 #endif
 
        PTR_ADDU        sp, FRAMESZ
-
-       SAVE_PID
+       cfi_adjust_cfa_offset (-FRAMESZ)
 
        li              a0, 0x4112      /* CLONE_VM | CLONE_VFORK | SIGCHLD */
        move            a1, sp
@@ -73,25 +67,28 @@ NESTED(__vfork,FRAMESZ,sp)
        li              v0,__NR_clone
        syscall
 
-       RESTORE_PID
-
+       cfi_remember_state
        bnez            a3,L(error)
 
        /* Successful return from the parent or child.  */
-       RESTORE_GP64
+       RESTORE_GP64_REG
        ret
 
        /* Something bad happened -- no child created.  */
 L(error):
+       cfi_restore_state
 #ifdef __PIC__
        PTR_LA          t9, __syscall_error
-       RESTORE_GP64
+       RESTORE_GP64_REG
        jr              t9
 #else
-       RESTORE_GP64
+       RESTORE_GP64_REG
        j               __syscall_error
 #endif
-       END(__vfork)
+       END(__libc_vfork)
 
-libc_hidden_def(__vfork)
-weak_alias (__vfork, vfork)
+#if IS_IN (libc)
+weak_alias (__libc_vfork, vfork)
+strong_alias (__libc_vfork, __vfork)
+libc_hidden_def (__vfork)
+#endif