MIPS, SPARC: fix wrong vfork aliases in libpthread.so
Commit Message
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.
Changelog:
* sysdeps/unix/sysv/linux/mips/vfork.S (__vfork): Conditionalize
hidden_def, weak_alias and strong_alias on [IS_IN (libc)].
* sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S: Likewise.
---
ChangeLog | 7 +++++++
sysdeps/unix/sysv/linux/mips/vfork.S | 2 ++
sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S | 2 ++
sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S | 2 ++
4 files changed, 13 insertions(+)
Notes:
- this has been initially reported in this Debian bug report:
https://bugs.debian.org/827477
- the issue has been found on mips, sparc32 and sparc64, but the fix
has only been tested on mips
- microblaze is likely impacted too, but I have no way to very it
Comments
On Fri, 17 Jun 2016, Aurelien Jarno wrote:
> * sysdeps/unix/sysv/linux/mips/vfork.S (__vfork): Conditionalize
> hidden_def, weak_alias and strong_alias on [IS_IN (libc)].
OK for MIPS.
From: Aurelien Jarno <aurelien@aurel32.net>
Date: Fri, 17 Jun 2016 16:21:03 +0200
> 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.
>
> Changelog:
> * sysdeps/unix/sysv/linux/mips/vfork.S (__vfork): Conditionalize
> hidden_def, weak_alias and strong_alias on [IS_IN (libc)].
> * sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S: Likewise.
> * sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S: Likewise.
Sparc bits look fine to me.
@@ -1,3 +1,10 @@
+2016-06-17 Aurelien Jarno <aurelien@aurel32.net>
+
+ * sysdeps/unix/sysv/linux/mips/vfork.S (__vfork): Conditionalize
+ hidden_def, weak_alias and strong_alias on [IS_IN (libc)].
+ * sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S: Likewise.
+ * sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S: Likewise.
+
2016-06-16 Rajalakshmi Srinivasaraghavan <raji@linux.vnet.ibm.com>
* NEWS: Mention addition of nextup and nextdown.
@@ -106,6 +106,8 @@ L(error):
#endif
END(__vfork)
+#if IS_IN (libc)
libc_hidden_def(__vfork)
weak_alias (__vfork, vfork)
strong_alias (__vfork, __libc_vfork)
+#endif
@@ -44,6 +44,8 @@ ENTRY(__vfork)
nop
END(__vfork)
+#if IS_IN (libc)
libc_hidden_def (__vfork)
weak_alias (__vfork, vfork)
strong_alias (__vfork, __libc_vfork)
+#endif
@@ -44,6 +44,8 @@ ENTRY(__vfork)
nop
END(__vfork)
+#if IS_IN (libc)
libc_hidden_def (__vfork)
weak_alias (__vfork, vfork)
strong_alias (__vfork, __libc_vfork)
+#endif