From patchwork Fri Jun 17 14:21:03 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aurelien Jarno X-Patchwork-Id: 13164 Received: (qmail 61943 invoked by alias); 17 Jun 2016 14:21:27 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 61931 invoked by uid 89); 17 Jun 2016 14:21:27 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.4 required=5.0 tests=BAYES_20, KAM_LAZY_DOMAIN_SECURITY, RP_MATCHES_RCVD autolearn=ham version=3.3.2 spammy=sk:raji@li, sk:rajili, U*raji, rajilinuxvnetibmcom X-HELO: hall.aurel32.net From: Aurelien Jarno To: libc-alpha@sourceware.org Cc: Joseph Myers , David Miller , David Holsgrove , Aurelien Jarno Subject: [PATCH] MIPS, SPARC: fix wrong vfork aliases in libpthread.so Date: Fri, 17 Jun 2016 16:21:03 +0200 Message-Id: <1466173263-16155-1-git-send-email-aurelien@aurel32.net> 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 diff --git a/ChangeLog b/ChangeLog index e72ffb8..643aee8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2016-06-17 Aurelien Jarno + + * 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 * NEWS: Mention addition of nextup and nextdown. diff --git a/sysdeps/unix/sysv/linux/mips/vfork.S b/sysdeps/unix/sysv/linux/mips/vfork.S index 8c66151..c0c0ce6 100644 --- a/sysdeps/unix/sysv/linux/mips/vfork.S +++ b/sysdeps/unix/sysv/linux/mips/vfork.S @@ -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 diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S b/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S index dc32e0a..94f2c8d 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S @@ -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 diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S b/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S index 05be3c2..a7479e9 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S @@ -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