1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-28 00:21:52 +03:00

MIPS, SPARC: more fixes to the vfork aliases in libpthread.so

Commit 43c29487 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 in 82aab97c.

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.
This commit is contained in:
Aurelien Jarno
2016-06-21 23:59:37 +02:00
parent 76a0b73e81
commit b87c1ec3fa
4 changed files with 23 additions and 14 deletions

View File

@ -1,3 +1,12 @@
2016-06-21 Aurelien Jarno <aurelien@aurel32.net>
* 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.
2016-06-24 Torvald Riegel <triegel@redhat.com> 2016-06-24 Torvald Riegel <triegel@redhat.com>
* nscd/cache.c (cache_add): Use new C11-like atomic operation instead * nscd/cache.c (cache_add): Use new C11-like atomic operation instead

View File

@ -31,13 +31,13 @@
LOCALSZ= 1 LOCALSZ= 1
FRAMESZ= (((NARGSAVE+LOCALSZ)*SZREG)+ALSZ)&ALMASK FRAMESZ= (((NARGSAVE+LOCALSZ)*SZREG)+ALSZ)&ALMASK
GPOFF= FRAMESZ-(1*SZREG) GPOFF= FRAMESZ-(1*SZREG)
NESTED(__vfork,FRAMESZ,sp) NESTED(__libc_vfork,FRAMESZ,sp)
#ifdef __PIC__ #ifdef __PIC__
SETUP_GP SETUP_GP
#endif #endif
PTR_SUBU sp, FRAMESZ PTR_SUBU sp, FRAMESZ
cfi_adjust_cfa_offset (FRAMESZ) cfi_adjust_cfa_offset (FRAMESZ)
SETUP_GP64_REG (a5, __vfork) SETUP_GP64_REG (a5, __libc_vfork)
#ifdef __PIC__ #ifdef __PIC__
SAVE_GP (GPOFF) SAVE_GP (GPOFF)
#endif #endif
@ -104,10 +104,10 @@ L(error):
RESTORE_GP64_REG RESTORE_GP64_REG
j __syscall_error j __syscall_error
#endif #endif
END(__vfork) END(__libc_vfork)
#if IS_IN (libc) #if IS_IN (libc)
libc_hidden_def(__vfork) weak_alias (__libc_vfork, vfork)
weak_alias (__vfork, vfork) strong_alias (__libc_vfork, __vfork)
strong_alias (__vfork, __libc_vfork) libc_hidden_def (__vfork)
#endif #endif

View File

@ -21,7 +21,7 @@
.text .text
.globl __syscall_error .globl __syscall_error
ENTRY(__vfork) ENTRY(__libc_vfork)
ld [%g7 + PID], %o5 ld [%g7 + PID], %o5
cmp %o5, 0 cmp %o5, 0
bne 1f bne 1f
@ -42,10 +42,10 @@ ENTRY(__vfork)
st %o5, [%g7 + PID] st %o5, [%g7 + PID]
1: retl 1: retl
nop nop
END(__vfork) END(__libc_vfork)
#if IS_IN (libc) #if IS_IN (libc)
weak_alias (__libc_vfork, vfork)
strong_alias (__libc_vfork, __vfork)
libc_hidden_def (__vfork) libc_hidden_def (__vfork)
weak_alias (__vfork, vfork)
strong_alias (__vfork, __libc_vfork)
#endif #endif

View File

@ -21,7 +21,7 @@
.text .text
.globl __syscall_error .globl __syscall_error
ENTRY(__vfork) ENTRY(__libc_vfork)
ld [%g7 + PID], %o5 ld [%g7 + PID], %o5
sethi %hi(0x80000000), %o3 sethi %hi(0x80000000), %o3
cmp %o5, 0 cmp %o5, 0
@ -42,10 +42,10 @@ ENTRY(__vfork)
st %o5, [%g7 + PID] st %o5, [%g7 + PID]
1: retl 1: retl
nop nop
END(__vfork) END(__libc_vfork)
#if IS_IN (libc) #if IS_IN (libc)
weak_alias (__libc_vfork, vfork)
strong_alias (__libc_vfork, __vfork)
libc_hidden_def (__vfork) libc_hidden_def (__vfork)
weak_alias (__vfork, vfork)
strong_alias (__vfork, __libc_vfork)
#endif #endif