mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-31 22:10:34 +03:00 
			
		
		
		
	Commit43c29487tried 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
 | |
| 	sethi	%hi(0x80000000), %o3
 | |
| 	cmp	%o5, 0
 | |
| 	sub	%g0, %o5, %o4
 | |
| 	move	%icc, %o3, %o4
 | |
| 	st	%o4, [%g7 + PID]
 | |
| 
 | |
| 	LOADSYSCALL(vfork)
 | |
| 	ta	0x6d
 | |
| 	bcc,pt	%xcc, 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,pt %icc, 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
 |