mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-02 01:40:07 +00:00
b87c1ec3fa
Commit43c29487
tried to fix the vfork aliases in libpthread.so on MIPS and SPARC, but failed to do it correctly, introducing an ABI change. This patch does the remaining changes needed to align the MIPS and SPARC vfork implementations with the other architectures. That way the the alpha version of pt-vfork.S works correctly for MIPS and SPARC. The changes for alpha were done in82aab97c
. Changelog: * sysdeps/unix/sysv/linux/mips/vfork.S (__vfork): Rename into __libc_vfork. (__vfork) [IS_IN (libc)]: Remove alias. (__libc_vfork) [IS_IN (libc)]: Define as an alias. * sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S: Likewise.
52 lines
1.4 KiB
ArmAsm
52 lines
1.4 KiB
ArmAsm
/* Copyright (C) 2004-2016 Free Software Foundation, Inc.
|
|
This file is part of the GNU C Library.
|
|
Contributed by Jakub Jelinek <jakub@redhat.com>, 2004.
|
|
|
|
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, see
|
|
<http://www.gnu.org/licenses/>. */
|
|
|
|
#include <sysdep.h>
|
|
#include <tcb-offsets.h>
|
|
|
|
.text
|
|
.globl __syscall_error
|
|
ENTRY(__libc_vfork)
|
|
ld [%g7 + PID], %o5
|
|
cmp %o5, 0
|
|
bne 1f
|
|
sub %g0, %o5, %o4
|
|
sethi %hi(0x80000000), %o4
|
|
1: st %o4, [%g7 + PID]
|
|
|
|
LOADSYSCALL(vfork)
|
|
ta 0x10
|
|
bcc 2f
|
|
mov %o7, %g1
|
|
st %o5, [%g7 + PID]
|
|
call __syscall_error
|
|
mov %g1, %o7
|
|
2: sub %o1, 1, %o1
|
|
andcc %o0, %o1, %o0
|
|
bne,a 1f
|
|
st %o5, [%g7 + PID]
|
|
1: retl
|
|
nop
|
|
END(__libc_vfork)
|
|
|
|
#if IS_IN (libc)
|
|
weak_alias (__libc_vfork, vfork)
|
|
strong_alias (__libc_vfork, __vfork)
|
|
libc_hidden_def (__vfork)
|
|
#endif
|