glibc: disable stack protector on ARCH=ppc
authorSergei Trofimovich <slyfox@gentoo.org>
Sun, 10 Sep 2017 09:45:39 +0000 (10:45 +0100)
committerSergei Trofimovich <slyfox@gentoo.org>
Sun, 10 Sep 2017 10:12:18 +0000 (11:12 +0100)
Currently gcc on powerpc32 generates invalid code for
__builtin_return_address(0) calls. Normally programs
don't do that but malloc() hooks in glibc do:

Bug: https://gcc.gnu.org/PR81996
Bug: https://bugs.gentoo.org/629054
Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
eclass/toolchain-glibc.eclass
sys-libs/glibc/glibc-2.26-r1.ebuild

index 33f27ccf46eb94007e3ec052ffa25e11bde53f9d..98e394659cf8ba1124538c6fa5b14588331cadaf 100644 (file)
@@ -795,7 +795,19 @@ glibc_do_configure() {
        fi
 
        if version_is_at_least 2.25 ; then
-               myconf+=( --enable-stack-protector=all )
+               case ${CTARGET} in
+                       powerpc-*)
+                               # Currently gcc on powerpc32 generates invalid code for
+                               # __builtin_return_address(0) calls. Normally programs
+                               # don't do that but malloc hooks in glibc do:
+                               # https://gcc.gnu.org/PR81996
+                               # https://bugs.gentoo.org/629054
+                               myconf+=( --enable-stack-protector=no )
+                               ;;
+                       *)
+                               myconf+=( --enable-stack-protector=all )
+                               ;;
+               esac
        fi
 
        if version_is_at_least 2.25 ; then
index fbe7444f9488d5188cf224bc880079658a3eb70c..b852aba96bc6a14491a11b18554d8c07171187b1 100644 (file)
@@ -315,7 +315,19 @@ glibc_do_configure() {
        [[ -d ports ]] && addons+=",ports"
        popd > /dev/null
 
-       myconf+=( --enable-stack-protector=all )
+       case ${CTARGET} in
+               powerpc-*)
+                       # Currently gcc on powerpc32 generates invalid code for
+                       # __builtin_return_address(0) calls. Normally programs
+                       # don't do that but malloc hooks in glibc do:
+                       # https://gcc.gnu.org/PR81996
+                       # https://bugs.gentoo.org/629054
+                       myconf+=( --enable-stack-protector=no )
+                       ;;
+               *)
+                       myconf+=( --enable-stack-protector=all )
+                       ;;
+       esac
        myconf+=( --enable-stackguard-randomization )
 
        [[ $(tc-is-softfloat) == "yes" ]] && myconf+=( --without-fp )