commit:     3e3d3f661fa3df6911db31e7496951aa23497389
Author:     Sergei Trofimovich <slyfox <AT> gentoo <DOT> org>
AuthorDate: Sun Aug 23 10:19:03 2020 +0000
Commit:     Sergei Trofimovich <slyfox <AT> gentoo <DOT> org>
CommitDate: Sun Aug 23 10:19:16 2020 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=3e3d3f66

sys-libs/glibc: disable multiarch on ppc32

By default glibc does not enable multiarch on
powerpc-unknown-linux-gnu targets.

Bug triggers only when CFLAGS= enables power4
or above (like, CFLAGS=-mcpu=7450).

multiarch does not work on ppc with cache-block not equal to
128 bytes and breaks memset implementations. There 'dcbz'
instruction is used for optimization to zero out cache-block
with zeros at a time. memset implementation assumes
cache-block=128.

G4 hardware and qemu-ppc both have cache-block=32.

This means memset() zero-initializes only 32 of each 128-byte
block including .sbss and .bss sections. This breaks glibc's
locks and many other things.

The change disables multiarch for pps32 in Gentoo until
glibc is fixed upstream.

Reported-by: Daniel Gurney
Bug: https://sourceware.org/PR26522
Closes:https://bugs.gentoo.org/737996

Package-Manager: Portage-3.0.4, Repoman-3.0.1
Signed-off-by: Sergei Trofimovich <slyfox <AT> gentoo.org>

 sys-libs/glibc/glibc-2.31-r6.ebuild | 5 +++++
 sys-libs/glibc/glibc-2.32.ebuild    | 5 +++++
 sys-libs/glibc/glibc-9999.ebuild    | 5 +++++
 3 files changed, 15 insertions(+)

diff --git a/sys-libs/glibc/glibc-2.31-r6.ebuild 
b/sys-libs/glibc/glibc-2.31-r6.ebuild
index c010b578953..73a26abf452 100644
--- a/sys-libs/glibc/glibc-2.31-r6.ebuild
+++ b/sys-libs/glibc/glibc-2.31-r6.ebuild
@@ -420,6 +420,11 @@ want__thread() {
 use_multiarch() {
        # Allow user to disable runtime arch detection in multilib.
        use multiarch || return 1
+       # multiarch does not work on ppc with cache-block not equal to 128 bytes
+       # and breaks memset:
+       # https://sourceware.org/PR26522
+       # https://bugs.gentoo.org/737996
+       [[ $(tc-arch ${CTARGET}) == ppc ]] && return 1
        # Make sure binutils is new enough to support indirect functions,
        # #336792. This funky sed supports gold and bfd linkers.
        local bver nver

diff --git a/sys-libs/glibc/glibc-2.32.ebuild b/sys-libs/glibc/glibc-2.32.ebuild
index 2a750041ae4..a53946fa562 100644
--- a/sys-libs/glibc/glibc-2.32.ebuild
+++ b/sys-libs/glibc/glibc-2.32.ebuild
@@ -420,6 +420,11 @@ want__thread() {
 use_multiarch() {
        # Allow user to disable runtime arch detection in multilib.
        use multiarch || return 1
+       # multiarch does not work on ppc with cache-block not equal to 128 bytes
+       # and breaks memset:
+       # https://sourceware.org/PR26522
+       # https://bugs.gentoo.org/737996
+       [[ $(tc-arch ${CTARGET}) == ppc ]] && return 1
        # Make sure binutils is new enough to support indirect functions,
        # #336792. This funky sed supports gold and bfd linkers.
        local bver nver

diff --git a/sys-libs/glibc/glibc-9999.ebuild b/sys-libs/glibc/glibc-9999.ebuild
index ef9ad2c0051..8430fbb242d 100644
--- a/sys-libs/glibc/glibc-9999.ebuild
+++ b/sys-libs/glibc/glibc-9999.ebuild
@@ -421,6 +421,11 @@ want__thread() {
 use_multiarch() {
        # Allow user to disable runtime arch detection in multilib.
        use multiarch || return 1
+       # multiarch does not work on ppc with cache-block not equal to 128 bytes
+       # and breaks memset:
+       # https://sourceware.org/PR26522
+       # https://bugs.gentoo.org/737996
+       [[ $(tc-arch ${CTARGET}) == ppc ]] && return 1
        # Make sure binutils is new enough to support indirect functions,
        # #336792. This funky sed supports gold and bfd linkers.
        local bver nver

Reply via email to