glibc/ports/sysdeps/unix/sysv/linux/arm/clone.S

105 lines
2.5 KiB
ArmAsm
Raw Normal View History

2012-04-21 17:03:39 +00:00
/* Copyright (C) 1996-2012 Free Software Foundation, Inc.
1997-05-21 01:44:03 +00:00
This file is part of the GNU C Library.
1998-07-27 17:54:21 +00:00
Contributed by Pat Beirne <patb@corelcomputer.com>
1997-05-21 01:44:03 +00:00
The GNU C Library is free software; you can redistribute it and/or
2001-07-06 04:56:23 +00:00
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.
1997-05-21 01:44:03 +00:00
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
2001-07-06 04:56:23 +00:00
Lesser General Public License for more details.
1997-05-21 01:44:03 +00:00
2001-07-06 04:56:23 +00:00
You should have received a copy of the GNU Lesser General Public
2012-03-09 23:56:38 +00:00
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
1997-05-21 01:44:03 +00:00
/* clone() is even more special than fork() as it mucks with stacks
and invokes a function in the right context after its all over. */
#include <sysdep.h>
#define _ERRNO_H 1
1997-06-21 01:37:20 +00:00
#include <bits/errno.h>
1997-05-21 01:44:03 +00:00
* 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
#define CLONE_VM 0x00000100
#define CLONE_THREAD 0x00010000
/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg,
pid_t *ptid, struct user_desc *tls, pid_t *ctid); */
1997-05-21 01:44:03 +00:00
.text
ENTRY(__clone)
1998-07-27 17:54:21 +00:00
@ sanity check args
cmp r0, #0
cmpne r1, #0
moveq r0, #-EINVAL
beq PLTJMP(syscall_error)
@ insert the args onto the new stack
2002-12-21 18:36:55 +00:00
str r3, [r1, #-4]!
str r0, [r1, #-4]!
1998-07-27 17:54:21 +00:00
@ do the system call
1999-01-25 09:27:19 +00:00
@ get flags
1998-07-27 17:54:21 +00:00
mov r0, r2
* 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
#ifdef RESET_PID
mov ip, r2
#endif
1998-07-27 17:54:21 +00:00
@ new sp is already in r1
* 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
stmfd sp!, {r4, r7}
cfi_adjust_cfa_offset (8)
cfi_rel_offset (r4, 0)
cfi_rel_offset (r7, 4)
* 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
ldr r2, [sp, #8]
ldr r3, [sp, #12]
ldr r4, [sp, #16]
ldr r7, =SYS_ify(clone)
swi 0x0
cfi_endproc
* 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
cmp r0, #0
beq 1f
ldmfd sp!, {r4, r7}
1999-01-25 09:27:19 +00:00
blt PLTJMP(C_SYMBOL_NAME(__syscall_error))
* 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
RETINSTR(, lr)
1998-07-27 17:54:21 +00:00
cfi_startproc
2011-08-02 15:32:10 +00:00
PSEUDO_END (__clone)
* 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
1:
2011-08-02 15:32:10 +00:00
.fnstart
.cantunwind
* 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
#ifdef RESET_PID
tst ip, #CLONE_THREAD
bne 3f
mov r0, #0xffff0fff
mov lr, pc
sub pc, r0, #31
mov r1, r0
tst ip, #CLONE_VM
movne r0, #-1
ldr r7, =SYS_ify(getpid)
swieq 0x0
str r0, [r1, #PID_OFFSET]
str r0, [r1, #TID_OFFSET]
3:
#endif
1998-07-27 17:54:21 +00:00
@ pick the function arg and call address off the stack and execute
ldr r0, [sp, #4]
#if defined(__ARM_ARCH_4T__) && defined(__THUMB_INTERWORK__)
ldr ip, [sp], #8
mov lr, pc
bx ip
#else
1998-07-27 17:54:21 +00:00
mov lr, pc
* 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
ldr pc, [sp], #8
#endif
1998-07-27 17:54:21 +00:00
@ and we are done, passing the return value through r0
b PLTJMP(HIDDEN_JUMPTARGET(_exit))
1998-07-27 17:54:21 +00:00
2011-08-02 15:32:10 +00:00
.fnend
1997-05-21 01:44:03 +00:00
weak_alias (__clone, clone)