Browse Source

vfork: make all archs consistent

__vfork is hidden.
__GI_vfork is strong (not weak as it was).
vfork is weak.
e1 can use the generic version.

Note: libc_hidden_def(x) has different meaning in .c and .S files.

Signed-off-by: Peter S. Mazinger <ps.m@gmx.net>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Peter S. Mazinger 13 years ago
parent
commit
0a043c30ee

+ 1 - 1
libc/sysdeps/linux/arm/vfork.S

@@ -104,5 +104,5 @@ __error:
 .size __vfork,.-__vfork
 .size __vfork,.-__vfork
 
 
 weak_alias(__vfork,vfork)
 weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)
 #endif
 #endif

+ 2 - 2
libc/sysdeps/linux/avr32/vfork.S

@@ -17,10 +17,10 @@
  * Fortunately, the Linux kernel preserves LR across system calls.
  * Fortunately, the Linux kernel preserves LR across system calls.
  */
  */
 
 
-#include <features.h>
 #include <sys/syscall.h>
 #include <sys/syscall.h>
 
 
 	.global	__vfork
 	.global	__vfork
+	.hidden __vfork
 	.type	__vfork,@function
 	.type	__vfork,@function
 	.align	1
 	.align	1
 __vfork:
 __vfork:
@@ -55,4 +55,4 @@ __vfork:
 	.size	__vfork, . - __vfork
 	.size	__vfork, . - __vfork
 
 
 weak_alias(__vfork,vfork)
 weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)

+ 7 - 15
libc/sysdeps/linux/common/vfork.c

@@ -4,30 +4,22 @@
  * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
  * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
  */
  */
 
 
-#include <unistd.h>
-#include <sys/types.h>
 #include <sys/syscall.h>
 #include <sys/syscall.h>
 
 
+#if (defined __NR_vfork || (defined __ARCH_USE_MMU__ && defined __NR_fork)) && (defined __USE_BSD || defined __USE_XOPEN_EXTENDED)
+# include <unistd.h>
 extern __typeof(vfork) __vfork attribute_hidden;
 extern __typeof(vfork) __vfork attribute_hidden;
 
 
-#ifdef __NR_vfork
-
-# define __NR___vfork __NR_vfork
+# ifdef __NR_vfork
+#  define __NR___vfork __NR_vfork
 _syscall0(pid_t, __vfork)
 _syscall0(pid_t, __vfork)
-
-weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
-
-#elif defined __ARCH_USE_MMU__ && defined __NR_fork
-
+# else
 /* Trivial implementation for arches that lack vfork */
 /* Trivial implementation for arches that lack vfork */
-
 pid_t __vfork(void)
 pid_t __vfork(void)
 {
 {
     return fork();
     return fork();
 }
 }
-
-weak_alias(__vfork,vfork)
+# endif
+strong_alias(__vfork,vfork)
 libc_hidden_weak(vfork)
 libc_hidden_weak(vfork)
-
 #endif
 #endif

+ 8 - 0
libc/sysdeps/linux/cris/sysdep.h

@@ -127,6 +127,14 @@
   .align ALIGNARG (2) 					@ \
   .align ALIGNARG (2) 					@ \
   C_LABEL(name)
   C_LABEL(name)
 
 
+#define HIDDEN_ENTRY(name) \
+  .text							@ \
+  ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (name) 		@ \
+  .hidden C_SYMBOL_NAME (name)				@ \
+  ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME (name), function)	@ \
+  .align ALIGNARG (2) 					@ \
+  C_LABEL(name)
+
 #undef END
 #undef END
 #define END(name) \
 #define END(name) \
   ASM_SIZE_DIRECTIVE (C_SYMBOL_NAME (name))
   ASM_SIZE_DIRECTIVE (C_SYMBOL_NAME (name))

+ 2 - 2
libc/sysdeps/linux/cris/vfork.S

@@ -16,7 +16,7 @@
  * enclosing function
  * enclosing function
  */
  */
 
 
-ENTRY(__vfork)
+HIDDEN_ENTRY(__vfork)
 	movu.w	__NR_vfork,$r9
 	movu.w	__NR_vfork,$r9
 	break	13
 	break	13
 	cmps.w	-4096,$r10
 	cmps.w	-4096,$r10
@@ -27,4 +27,4 @@ ENTRY(__vfork)
 PSEUDO_END(__vfork)
 PSEUDO_END(__vfork)
 
 
 weak_alias(__vfork,vfork)
 weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)

+ 1 - 1
libc/sysdeps/linux/e1/Makefile

@@ -17,7 +17,7 @@ CRT_OBJ := crt0.o
 CTOR_TARGETS := $(TOPDIR)lib/crti.o $(TOPDIR)lib/crtn.o
 CTOR_TARGETS := $(TOPDIR)lib/crti.o $(TOPDIR)lib/crtn.o
 
 
 # why is crt1.c listed in CSRC ?
 # why is crt1.c listed in CSRC ?
-CSRC := crt1.c syscalls.c longjmp.c setjmp.c vfork.c
+CSRC := crt1.c syscalls.c longjmp.c setjmp.c
 OBJS := $(patsubst %.c,%.o, $(CSRC))
 OBJS := $(patsubst %.c,%.o, $(CSRC))
 
 
 OBJ_LIST := ../../../obj.sysdeps.$(TARGET_ARCH)
 OBJ_LIST := ../../../obj.sysdeps.$(TARGET_ARCH)

+ 0 - 14
libc/sysdeps/linux/e1/vfork.c

@@ -1,14 +0,0 @@
-/*
- * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
- *
- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
- */
-
-#include <sys/types.h>
-#include <sys/syscall.h>
-#include <errno.h>
-
-#define __NR___vfork __NR_vfork
-attribute_hidden _syscall0(pid_t, __vfork)
-weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)

+ 2 - 6
libc/sysdeps/linux/frv/vfork.S

@@ -17,11 +17,7 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
    02111-1307 USA.  */
 
 
-#include <features.h>
-
-#include <asm/unistd.h>
-#define _ERRNO_H       1
-#include <bits/errno.h>
+#include <sys/syscall.h>
 
 
        .text
        .text
        .globl	__vfork
        .globl	__vfork
@@ -44,4 +40,4 @@ __vfork:
        .size   __vfork,.-__vfork
        .size   __vfork,.-__vfork
 
 
 weak_alias(__vfork,vfork)
 weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)

+ 2 - 3
libc/sysdeps/linux/h8300/vfork.S

@@ -1,5 +1,5 @@
 
 
-#include <asm/unistd.h>
+#include <sys/syscall.h>
 
 
 #ifndef __NR_vfork
 #ifndef __NR_vfork
 #define __NR_vfork __NR_fork /* uClinux-2.0 only has fork which is vfork */
 #define __NR_vfork __NR_fork /* uClinux-2.0 only has fork which is vfork */
@@ -12,7 +12,6 @@
 #endif
 #endif
 	.text
 	.text
 	.align 2
 	.align 2
-	.globl	_errno
 	.globl	___vfork
 	.globl	___vfork
 	.hidden	___vfork
 	.hidden	___vfork
 	.type	___vfork,@function
 	.type	___vfork,@function
@@ -38,4 +37,4 @@ fix_errno:
 	jmp	@er1                     /* don't return,  just jmp directly */
 	jmp	@er1                     /* don't return,  just jmp directly */
 
 
 weak_alias(__vfork,vfork)
 weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)

+ 1 - 1
libc/sysdeps/linux/i386/vfork.S

@@ -38,4 +38,4 @@ __vfork:
 .size __vfork,.-__vfork
 .size __vfork,.-__vfork
 
 
 weak_alias(__vfork,vfork)
 weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)

+ 2 - 1
libc/sysdeps/linux/i960/vfork.S

@@ -18,6 +18,7 @@
      
      
         .globl	___vfork
         .globl	___vfork
         .hidden	___vfork
         .hidden	___vfork
+	.type	___vfork,@function
 ___vfork:
 ___vfork:
         mov         g13, r3
         mov         g13, r3
         ldconst     __NR_vfork, g13
         ldconst     __NR_vfork, g13
@@ -30,4 +31,4 @@ ___vfork:
         ret
         ret
 
 
 weak_alias(__vfork,vfork)
 weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)

+ 9 - 0
libc/sysdeps/linux/ia64/sysdep.h

@@ -49,6 +49,15 @@
 	C_LABEL(name)				\
 	C_LABEL(name)				\
 	CALL_MCOUNT
 	CALL_MCOUNT
 
 
+#define HIDDEN_ENTRY(name)			\
+	.text;					\
+	.align 32;				\
+	.proc C_SYMBOL_NAME(name);		\
+	.global C_SYMBOL_NAME(name);		\
+	.hidden C_SYMBOL_NAME(name);		\
+	C_LABEL(name)				\
+	CALL_MCOUNT
+
 #define LEAF(name)				\
 #define LEAF(name)				\
   .text;					\
   .text;					\
   .align 32;					\
   .align 32;					\

+ 2 - 2
libc/sysdeps/linux/ia64/vfork.S

@@ -29,7 +29,7 @@
 /* pid_t vfork(void); */
 /* pid_t vfork(void); */
 /* Implemented as __clone_syscall(CLONE_VFORK | CLONE_VM | SIGCHLD, 0)	*/
 /* Implemented as __clone_syscall(CLONE_VFORK | CLONE_VM | SIGCHLD, 0)	*/
 
 
-ENTRY(__vfork)
+HIDDEN_ENTRY(__vfork)
 	alloc r2=ar.pfs,0,0,2,0
 	alloc r2=ar.pfs,0,0,2,0
 	mov out0=CLONE_VM+CLONE_VFORK+SIGCHLD
 	mov out0=CLONE_VM+CLONE_VFORK+SIGCHLD
 	mov out1=0		/* Standard sp value.			*/
 	mov out1=0		/* Standard sp value.			*/
@@ -41,4 +41,4 @@ ENTRY(__vfork)
 PSEUDO_END(__vfork)
 PSEUDO_END(__vfork)
 
 
 weak_alias(__vfork,vfork)
 weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)

+ 2 - 5
libc/sysdeps/linux/m68k/vfork.S

@@ -4,9 +4,7 @@
  * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
  * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
  */
  */
 
 
-#include <features.h>
-
-#include <asm/unistd.h>
+#include <sys/syscall.h>
 
 
 #ifndef __NR_vfork
 #ifndef __NR_vfork
 #define __NR_vfork __NR_fork /* uClinux-2.0 only has fork which is vfork */
 #define __NR_vfork __NR_fork /* uClinux-2.0 only has fork which is vfork */
@@ -16,7 +14,6 @@
 
 
 	.text
 	.text
 	.align 2
 	.align 2
-	.globl errno
 	.globl	__vfork
 	.globl	__vfork
 	.hidden	__vfork
 	.hidden	__vfork
 	.type	__vfork,@function
 	.type	__vfork,@function
@@ -42,4 +39,4 @@ fix_errno:
 
 
 .size __vfork,.-__vfork
 .size __vfork,.-__vfork
 weak_alias(__vfork,vfork)
 weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)

+ 3 - 9
libc/sysdeps/linux/microblaze/vfork.S

@@ -13,21 +13,15 @@
  * Microblaze port by John Williams
  * Microblaze port by John Williams
  */
  */
 
 
-#define _ERRNO_H	1
-#include <bits/errno.h>
-#define _SYSCALL_H
-#include <bits/sysnum.h>
-
-#include <libc-symbols.h>
+#include <sys/syscall.h>
 
 
 /* Clone the calling process, but without copying the whole address space.
 /* Clone the calling process, but without copying the whole address space.
    The calling process is suspended until the new process exits or is
    The calling process is suspended until the new process exits or is
    replaced by a call to `execve'.  Return -1 for errors, 0 to the new process,
    replaced by a call to `execve'.  Return -1 for errors, 0 to the new process,
    and the process ID of the new process to the old process.  */
    and the process ID of the new process to the old process.  */
 
 
-.global C_SYMBOL_NAME(errno)
-
 	.globl __vfork
 	.globl __vfork
+	.hidden __vfork
 	.align 4
 	.align 4
 __vfork:
 __vfork:
 	addi	r12, r0, SYS_vfork
 	addi	r12, r0, SYS_vfork
@@ -50,4 +44,4 @@ __vfork:
        .size   __vfork, .-__vfork
        .size   __vfork, .-__vfork
 
 
 weak_alias(__vfork,vfork)
 weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)

+ 3 - 1
libc/sysdeps/linux/mips/vfork.S

@@ -18,6 +18,7 @@
 
 
 /* vfork() is just a special case of clone().  */
 /* vfork() is just a special case of clone().  */
 
 
+#include <sys/syscall.h>
 #include <sys/asm.h>
 #include <sys/asm.h>
 #include <sysdep.h>
 #include <sysdep.h>
 
 
@@ -34,6 +35,7 @@
 /* int vfork() */
 /* int vfork() */
 
 
 	.text
 	.text
+	.hidden __vfork
 LOCALSZ= 1
 LOCALSZ= 1
 FRAMESZ= (((NARGSAVE+LOCALSZ)*SZREG)+ALSZ)&ALMASK
 FRAMESZ= (((NARGSAVE+LOCALSZ)*SZREG)+ALSZ)&ALMASK
 GPOFF= FRAMESZ-(1*SZREG)
 GPOFF= FRAMESZ-(1*SZREG)
@@ -96,6 +98,6 @@ L(error):
 	END(__vfork)
 	END(__vfork)
 
 
 weak_alias(__vfork,vfork)
 weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)
 
 
 #endif
 #endif

+ 1 - 4
libc/sysdeps/linux/nios/vfork.S

@@ -10,9 +10,6 @@
  * Written by Wentao Xu <wentao@microtronix.com>
  * Written by Wentao Xu <wentao@microtronix.com>
  */
  */
 
 
-#include <features.h>
-
-#include <bits/errno.h>
 #include <sys/syscall.h>
 #include <sys/syscall.h>
 #include "NM_Macros.S"
 #include "NM_Macros.S"
 
 
@@ -51,4 +48,4 @@ fix_errno:
 
 
 .size __vfork,.-__vfork
 .size __vfork,.-__vfork
 weak_alias(__vfork,vfork)
 weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)

+ 2 - 6
libc/sysdeps/linux/nios2/vfork.S

@@ -10,11 +10,7 @@
  * Written by Wentao Xu <wentao@microtronix.com>
  * Written by Wentao Xu <wentao@microtronix.com>
  */
  */
 
 
-#include <features.h>
-
-#define _ERRNO_H
-#include <bits/errno.h>
-#include <asm/unistd.h>
+#include <sys/syscall.h>
 
 
 #ifndef __NR_vfork
 #ifndef __NR_vfork
 #define __NR_vfork __NR_fork /* uClinux-2.0 only has fork which is vfork */
 #define __NR_vfork __NR_fork /* uClinux-2.0 only has fork which is vfork */
@@ -53,4 +49,4 @@ fix_errno:
 
 
 .size __vfork,.-__vfork
 .size __vfork,.-__vfork
 weak_alias(__vfork,vfork)
 weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)

+ 1 - 1
libc/sysdeps/linux/powerpc/vfork.S

@@ -27,4 +27,4 @@ __vfork:
 .size __vfork,.-__vfork
 .size __vfork,.-__vfork
 
 
 weak_alias(__vfork,vfork)
 weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)

+ 1 - 3
libc/sysdeps/linux/sh/vfork.S

@@ -20,11 +20,9 @@
  respective copyright holders.
  respective copyright holders.
 */
 */
 
 
-#include <features.h>
 #include <sys/syscall.h>
 #include <sys/syscall.h>
 #define _ERRNO_H
 #define _ERRNO_H
 #include <bits/errno.h>
 #include <bits/errno.h>
-#include <bits/sysnum.h>
 
 
 /* Clone the calling process, but without copying the whole address space.
 /* Clone the calling process, but without copying the whole address space.
    The calling process is suspended until the new process exits or is
    The calling process is suspended until the new process exits or is
@@ -109,6 +107,6 @@ __vfork:
 
 
 .size   __vfork, .-__vfork
 .size   __vfork, .-__vfork
 weak_alias(__vfork,vfork)
 weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)
 
 
 #include "syscall_error.S"
 #include "syscall_error.S"

+ 1 - 1
libc/sysdeps/linux/sparc/vfork.S

@@ -52,4 +52,4 @@ __vfork:
 .size __vfork,.-__vfork
 .size __vfork,.-__vfork
 
 
 weak_alias(__vfork,vfork)
 weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)

+ 3 - 9
libc/sysdeps/linux/v850/vfork.S

@@ -11,12 +11,7 @@
  * Written by Miles Bader <miles@gnu.org>
  * Written by Miles Bader <miles@gnu.org>
  */
  */
 
 
-#include <features.h>
-#define _ERRNO_H	1
-#include <bits/errno.h>
-#define _SYSCALL_H
-#include <bits/sysnum.h>
-
+#include <sys/syscall.h>
 #include <clinkage.h>
 #include <clinkage.h>
 
 
 /* Clone the calling process, but without copying the whole address space.
 /* Clone the calling process, but without copying the whole address space.
@@ -24,8 +19,7 @@
    replaced by a call to `execve'.  Return -1 for errors, 0 to the new process,
    replaced by a call to `execve'.  Return -1 for errors, 0 to the new process,
    and the process ID of the new process to the old process.  */
    and the process ID of the new process to the old process.  */
 
 
-.global C_SYMBOL_NAME(errno)
-
+/* this should be made hidden */
 C_ENTRY (__vfork):
 C_ENTRY (__vfork):
 	addi	SYS_vfork, r0, r12
 	addi	SYS_vfork, r0, r12
 	trap	0
 	trap	0
@@ -39,4 +33,4 @@ C_ENTRY (__vfork):
 	jmp	[lp]			/* error return */
 	jmp	[lp]			/* error return */
 C_END(__vfork)
 C_END(__vfork)
 weak_alias(__vfork,vfork)
 weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)

+ 1 - 1
libc/sysdeps/linux/x86_64/vfork.S

@@ -63,4 +63,4 @@ __vfork:
 .size __vfork,.-__vfork
 .size __vfork,.-__vfork
 
 
 weak_alias(__vfork,vfork)
 weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)

+ 10 - 0
libc/sysdeps/linux/xtensa/sysdep.h

@@ -38,6 +38,16 @@
   entry sp, FRAMESIZE;							\
   entry sp, FRAMESIZE;							\
   CALL_MCOUNT
   CALL_MCOUNT
 
 
+#define	HIDDEN_ENTRY(name)						\
+  ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(name);				\
+  .hidden C_SYMBOL_NAME(name);						\
+  ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name), @function);			\
+  .align ALIGNARG(2);							\
+  LITERAL_POSITION;							\
+  C_LABEL(name)								\
+  entry sp, FRAMESIZE;							\
+  CALL_MCOUNT
+
 #undef END
 #undef END
 #define END(name) ASM_SIZE_DIRECTIVE(name)
 #define END(name) ASM_SIZE_DIRECTIVE(name)
 
 

+ 2 - 3
libc/sysdeps/linux/xtensa/vfork.S

@@ -49,7 +49,7 @@
 /* pid_t vfork(void);
 /* pid_t vfork(void);
    Implemented as __clone_syscall(CLONE_VFORK | CLONE_VM | SIGCHLD, 0) */
    Implemented as __clone_syscall(CLONE_VFORK | CLONE_VM | SIGCHLD, 0) */
 
 
-ENTRY (__vfork)
+HIDDEN_ENTRY (__vfork)
 
 
 	movi	a6, .Ljumptable
 	movi	a6, .Ljumptable
 	extui	a2, a0, 30, 2		/* call-size: call4/8/12 = 1/2/3 */
 	extui	a2, a0, 30, 2		/* call-size: call4/8/12 = 1/2/3 */
@@ -165,6 +165,5 @@ ENTRY (__vfork)
 .Lpseudo_end:
 .Lpseudo_end:
 	retw
 	retw
 
 
-libc_hidden_def (__vfork)
-
 weak_alias (__vfork, vfork)
 weak_alias (__vfork, vfork)
+libc_hidden_def(vfork)