__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>
.size __vfork,.-__vfork
weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)
#endif
* Fortunately, the Linux kernel preserves LR across system calls.
*/
-#include <features.h>
#include <sys/syscall.h>
.global __vfork
+ .hidden __vfork
.type __vfork,@function
.align 1
__vfork:
.size __vfork, . - __vfork
weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)
* 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>
+#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;
-#ifdef __NR_vfork
-
-# define __NR___vfork __NR_vfork
+# ifdef __NR_vfork
+# define __NR___vfork __NR_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 */
-
pid_t __vfork(void)
{
return fork();
}
-
-weak_alias(__vfork,vfork)
+# endif
+strong_alias(__vfork,vfork)
libc_hidden_weak(vfork)
-
#endif
.align ALIGNARG (2) @ \
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
#define END(name) \
ASM_SIZE_DIRECTIVE (C_SYMBOL_NAME (name))
* enclosing function
*/
-ENTRY(__vfork)
+HIDDEN_ENTRY(__vfork)
movu.w __NR_vfork,$r9
break 13
cmps.w -4096,$r10
PSEUDO_END(__vfork)
weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)
CTOR_TARGETS := $(TOPDIR)lib/crti.o $(TOPDIR)lib/crtn.o
# 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))
OBJ_LIST := ../../../obj.sysdeps.$(TARGET_ARCH)
+++ /dev/null
-/*
- * 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)
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
-#include <features.h>
-
-#include <asm/unistd.h>
-#define _ERRNO_H 1
-#include <bits/errno.h>
+#include <sys/syscall.h>
.text
.globl __vfork
.size __vfork,.-__vfork
weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)
-#include <asm/unistd.h>
+#include <sys/syscall.h>
#ifndef __NR_vfork
#define __NR_vfork __NR_fork /* uClinux-2.0 only has fork which is vfork */
#endif
.text
.align 2
- .globl _errno
.globl ___vfork
.hidden ___vfork
.type ___vfork,@function
jmp @er1 /* don't return, just jmp directly */
weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)
.size __vfork,.-__vfork
weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)
.globl ___vfork
.hidden ___vfork
+ .type ___vfork,@function
___vfork:
mov g13, r3
ldconst __NR_vfork, g13
ret
weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)
C_LABEL(name) \
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) \
.text; \
.align 32; \
/* pid_t vfork(void); */
/* Implemented as __clone_syscall(CLONE_VFORK | CLONE_VM | SIGCHLD, 0) */
-ENTRY(__vfork)
+HIDDEN_ENTRY(__vfork)
alloc r2=ar.pfs,0,0,2,0
mov out0=CLONE_VM+CLONE_VFORK+SIGCHLD
mov out1=0 /* Standard sp value. */
PSEUDO_END(__vfork)
weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)
* 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
#define __NR_vfork __NR_fork /* uClinux-2.0 only has fork which is vfork */
.text
.align 2
- .globl errno
.globl __vfork
.hidden __vfork
.type __vfork,@function
.size __vfork,.-__vfork
weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)
* 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.
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,
and the process ID of the new process to the old process. */
-.global C_SYMBOL_NAME(errno)
-
.globl __vfork
+ .hidden __vfork
.align 4
__vfork:
addi r12, r0, SYS_vfork
.size __vfork, .-__vfork
weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)
/* vfork() is just a special case of clone(). */
+#include <sys/syscall.h>
#include <sys/asm.h>
#include <sysdep.h>
/* int vfork() */
.text
+ .hidden __vfork
LOCALSZ= 1
FRAMESZ= (((NARGSAVE+LOCALSZ)*SZREG)+ALSZ)&ALMASK
GPOFF= FRAMESZ-(1*SZREG)
END(__vfork)
weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)
#endif
* Written by Wentao Xu <wentao@microtronix.com>
*/
-#include <features.h>
-
-#include <bits/errno.h>
#include <sys/syscall.h>
#include "NM_Macros.S"
.size __vfork,.-__vfork
weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)
* 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
#define __NR_vfork __NR_fork /* uClinux-2.0 only has fork which is vfork */
.size __vfork,.-__vfork
weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)
.size __vfork,.-__vfork
weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)
respective copyright holders.
*/
-#include <features.h>
#include <sys/syscall.h>
#define _ERRNO_H
#include <bits/errno.h>
-#include <bits/sysnum.h>
/* Clone the calling process, but without copying the whole address space.
The calling process is suspended until the new process exits or is
.size __vfork, .-__vfork
weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)
#include "syscall_error.S"
.size __vfork,.-__vfork
weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)
* 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>
/* Clone the calling process, but without copying the whole address space.
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. */
-.global C_SYMBOL_NAME(errno)
-
+/* this should be made hidden */
C_ENTRY (__vfork):
addi SYS_vfork, r0, r12
trap 0
jmp [lp] /* error return */
C_END(__vfork)
weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)
.size __vfork,.-__vfork
weak_alias(__vfork,vfork)
-libc_hidden_weak(vfork)
+libc_hidden_def(vfork)
entry sp, FRAMESIZE; \
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
#define END(name) ASM_SIZE_DIRECTIVE(name)
/* pid_t vfork(void);
Implemented as __clone_syscall(CLONE_VFORK | CLONE_VM | SIGCHLD, 0) */
-ENTRY (__vfork)
+HIDDEN_ENTRY (__vfork)
movi a6, .Ljumptable
extui a2, a0, 30, 2 /* call-size: call4/8/12 = 1/2/3 */
.Lpseudo_end:
retw
-libc_hidden_def (__vfork)
-
weak_alias (__vfork, vfork)
+libc_hidden_def(vfork)