glibc/sysdeps/unix/sysv/linux/arm/vfork.S
Daniel Jacobowitz 02a9f771e3 * sysdeps/arm/bits/setjmp.h, sysdeps/arm/fpu/bits/setjmp.h: Update
include guards.

	* sysdeps/unix/arm/sysdep.S (syscall_error): Handle USE___THREAD and
	RTLD_PRIVATE_ERRNO.

	* sysdeps/unix/sysv/linux/arm/clone.S (__clone): Handle RESET_PID.
	Handle new arguments.
	* sysdeps/unix/sysv/linux/arm/vfork.S (__vfork): Use SAVE_PID and
	RESTORE_PID.  Use the right syscall error handler.

	* sysdeps/unix/sysv/linux/arm/eabi/sigrestorer.S
	(__default_sa_restorer, __default_rt_sa_restorer): Add unwind
	information.

	* sysdeps/unix/sysv/linux/arm/eabi/socket.S: Update formatting.
	Add unwind information.  Correct stack alignment typo.

	* sysdeps/unix/sysv/linux/arm/eabi/sysdep.h
	(INTERNAL_SYSCALL_NCS): Define.

	* sysdeps/unix/sysv/linux/arm/sigaction.c
	(__libc_sigaction): Remove never-valid handling for SA_ONSTACK.

	* sysdeps/unix/sysv/linux/arm/socket.S: Whitespace cleanup.

	* sysdeps/unix/sysv/linux/arm/sysdep.h (SYSCALL_ERROR_HANDLER): Handle
	RTLD_PRIVATE_ERRNO.
	(INTERNAL_SYSCALL_NCS): Implement.

	* sysdeps/arm/nptl/Makefile, sysdeps/arm/nptl/jmpbuf-unwind.h,
	sysdeps/arm/nptl/pthread_spin_lock.S,
	sysdeps/arm/nptl/pthread_spin_trylock.S,
	sysdeps/arm/nptl/pthreaddef.h, sysdeps/arm/nptl/tcb-offsets.sym,
	sysdeps/arm/nptl/tls.h, sysdeps/unix/sysv/linux/arm/eabi/Makefile,
	sysdeps/unix/sysv/linux/arm/eabi/nptl/Makefile,
	sysdeps/unix/sysv/linux/arm/eabi/nptl/configure,
	sysdeps/unix/sysv/linux/arm/eabi/nptl/configure.in,
	sysdeps/unix/sysv/linux/arm/eabi/nptl/nptl-aeabi_unwind_cpp_pr1.c,
	sysdeps/unix/sysv/linux/arm/eabi/nptl/rt-aeabi_unwind_cpp_pr1.c,
	sysdeps/unix/sysv/linux/arm/eabi/nptl/sysdep-cancel.h,
	sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-forcedunwind.c,
	sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-resume.c,
	sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind.h,
	sysdeps/unix/sysv/linux/arm/nptl/Versions,
	sysdeps/unix/sysv/linux/arm/nptl/bits/atomic.h,
	sysdeps/unix/sysv/linux/arm/nptl/bits/pthreadtypes.h,
	sysdeps/unix/sysv/linux/arm/nptl/clone.S,
	sysdeps/unix/sysv/linux/arm/nptl/createthread.c,
	sysdeps/unix/sysv/linux/arm/nptl/fork.c,
	sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.c,
	sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h,
	sysdeps/unix/sysv/linux/arm/nptl/pt-vfork.S,
	sysdeps/unix/sysv/linux/arm/nptl/pthread_once.c,
	sysdeps/unix/sysv/linux/arm/nptl/vfork.S: New files.
2005-11-16 19:03:42 +00:00

66 lines
1.9 KiB
ArmAsm

/* Copyright (C) 1999, 2002, 2003, 2005 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Philip Blundell <philb@gnu.org>.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#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
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. */
ENTRY (__vfork)
#ifdef __NR_vfork
#ifdef SAVE_PID
SAVE_PID
#endif
DO_CALL (vfork, 0)
#ifdef RESTORE_PID
RESTORE_PID
#endif
cmn a1, #4096
RETINSTR(cc, lr)
# ifdef __ASSUME_VFORK_SYSCALL
b PLTJMP(SYSCALL_ERROR)
# else
/* Check if vfork syscall is known at all. */
cmn a1, #ENOSYS
bne PLTJMP(SYSCALL_ERROR)
# endif
#endif
#ifndef __ASSUME_VFORK_SYSCALL
/* If we don't have vfork, fork is close enough. */
DO_CALL (fork, 0)
cmn a1, #4096
RETINSTR(cc, lr)
b PLTJMP(SYSCALL_ERROR)
#elif !defined __NR_vfork
# error "__NR_vfork not available and __ASSUME_VFORK_SYSCALL defined"
#endif
PSEUDO_END (__vfork)
libc_hidden_def (__vfork)
weak_alias (__vfork, vfork)