This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] MIPS, SPARC: fix wrong vfork aliases in libpthread.so


On 2016-06-22 07:24, Aurelien Jarno wrote:
> On 2016-06-17 16:21, Aurelien Jarno wrote:
> > With recent binutils versions the GNU libc fails to build on at least
> > MISP and SPARC, with this kind of error:
> > 
> >   /home/aurel32/glibc/glibc-build/nptl/libpthread.so:(*IND*+0x0): multiple definition of `vfork@GLIBC_2.0'
> >   /home/aurel32/glibc/glibc-build/nptl/libpthread.so::(.text+0xee50): first defined here
> > 
> > It appears that on these architectures pt-vfork.S includes vfork.S
> > (through the alpha version of pt-vfork.S) and that the __vfork aliases
> > are not conditionalized on IS_IN (libc) like on other architectures.
> > Therefore the aliases are also wrongly included in libpthread.so.
> > 
> > Fix this by properly conditionalizing the aliases like on other
> > architectures.
> 
> Unfortunately I failed to correctly run the testsuite and thus this
> commit broke the libpthread ABI. Sorry about that.
> 
> The patch below does the remaining changes to align the MIPS and SPARC
> vfork implementations with the other architectures. I have done a test
> built and run the testsuite on mips64el, sparc32 and sparc64.

David, does the patch below looks fine for SPARC?

> From: Aurelien Jarno <aurelien@aurel32.net>
> Date: Tue, 21 Jun 2016 23:59:37 +0200
> Subject: [PATCH] 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.
> ---
>  ChangeLog                                     |  9 +++++++++
>  sysdeps/unix/sysv/linux/mips/vfork.S          | 12 ++++++------
>  sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S |  8 ++++----
>  sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S |  8 ++++----
>  4 files changed, 23 insertions(+), 14 deletions(-)
> 
> diff --git a/ChangeLog b/ChangeLog
> index e418cc0..307f33e 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -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-21  Florian Weimer  <fweimer@redhat.com>
>  
>  	[BZ #20284]
> diff --git a/sysdeps/unix/sysv/linux/mips/vfork.S b/sysdeps/unix/sysv/linux/mips/vfork.S
> index c0c0ce6..1867c86 100644
> --- a/sysdeps/unix/sysv/linux/mips/vfork.S
> +++ b/sysdeps/unix/sysv/linux/mips/vfork.S
> @@ -31,13 +31,13 @@
>  LOCALSZ= 1
>  FRAMESZ= (((NARGSAVE+LOCALSZ)*SZREG)+ALSZ)&ALMASK
>  GPOFF= FRAMESZ-(1*SZREG)
> -NESTED(__vfork,FRAMESZ,sp)
> +NESTED(__libc_vfork,FRAMESZ,sp)
>  #ifdef __PIC__
>  	SETUP_GP
>  #endif
>  	PTR_SUBU sp, FRAMESZ
>  	cfi_adjust_cfa_offset (FRAMESZ)
> -	SETUP_GP64_REG (a5, __vfork)
> +	SETUP_GP64_REG (a5, __libc_vfork)
>  #ifdef __PIC__
>  	SAVE_GP (GPOFF)
>  #endif
> @@ -104,10 +104,10 @@ L(error):
>  	RESTORE_GP64_REG
>  	j		__syscall_error
>  #endif
> -	END(__vfork)
> +	END(__libc_vfork)
>  
>  #if IS_IN (libc)
> -libc_hidden_def(__vfork)
> -weak_alias (__vfork, vfork)
> -strong_alias (__vfork, __libc_vfork)
> +weak_alias (__libc_vfork, vfork)
> +strong_alias (__libc_vfork, __vfork)
> +libc_hidden_def (__vfork)
>  #endif
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S b/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S
> index 94f2c8d..0d0a3b5 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S
> @@ -21,7 +21,7 @@
>  
>  	.text
>  	.globl		__syscall_error
> -ENTRY(__vfork)
> +ENTRY(__libc_vfork)
>  	ld	[%g7 + PID], %o5
>  	cmp	%o5, 0
>  	bne	1f
> @@ -42,10 +42,10 @@ ENTRY(__vfork)
>  	 st	%o5, [%g7 + PID]
>  1:	retl
>  	 nop
> -END(__vfork)
> +END(__libc_vfork)
>  
>  #if IS_IN (libc)
> +weak_alias (__libc_vfork, vfork)
> +strong_alias (__libc_vfork, __vfork)
>  libc_hidden_def (__vfork)
> -weak_alias (__vfork, vfork)
> -strong_alias (__vfork, __libc_vfork)
>  #endif
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S b/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S
> index a7479e9..0818eba 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S
> @@ -21,7 +21,7 @@
>  
>  	.text
>  	.globl	__syscall_error
> -ENTRY(__vfork)
> +ENTRY(__libc_vfork)
>  	ld	[%g7 + PID], %o5
>  	sethi	%hi(0x80000000), %o3
>  	cmp	%o5, 0
> @@ -42,10 +42,10 @@ ENTRY(__vfork)
>  	 st	%o5, [%g7 + PID]
>  1:	retl
>  	 nop
> -END(__vfork)
> +END(__libc_vfork)
>  
>  #if IS_IN (libc)
> +weak_alias (__libc_vfork, vfork)
> +strong_alias (__libc_vfork, __vfork)
>  libc_hidden_def (__vfork)
> -weak_alias (__vfork, vfork)
> -strong_alias (__vfork, __libc_vfork)
>  #endif
> -- 
> 2.8.1
> 
> 
> -- 
> Aurelien Jarno                          GPG: 4096R/1DDD8C9B
> aurelien@aurel32.net                 http://www.aurel32.net
> 

-- 
Aurelien Jarno                          GPG: 4096R/1DDD8C9B
aurelien@aurel32.net                 http://www.aurel32.net


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]