toolchain.eclass: disallow USE="ssp -libssp" on mingw targets
authorSergei Trofimovich <slyfox@gentoo.org>
Sat, 5 May 2018 11:35:47 +0000 (12:35 +0100)
committerSergei Trofimovich <slyfox@gentoo.org>
Sat, 5 May 2018 11:46:04 +0000 (12:46 +0100)
gcc-8 added --disable-libssp flag. It used to be gentoo-specific
flag up to gcc-5.4.0 and gentoo was passing --disable-libssp on
all targets except solaris.

On gcc-6 gentoo stopped providing --disable-libssp flag (it became
no-op). USE=ssp became the default with gcc-6.

gcc-8 reintroduced --disable-libssp and that broke mingw. mingw
libc does not provide stack_check_*() functions and USE=ssp forces
compiler to emit those calls.

This change disallows disabling libssp on mingw if USE=ssp is set.

Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
eclass/toolchain.eclass

index 2cac026eefa8ab12acad4da3684121a193d0b1ed..47ee5495739cde91242208aa0e3dc9ea8259c8ab 100644 (file)
@@ -1207,7 +1207,17 @@ toolchain_src_configure() {
                        if hardened_gcc_is_stable ssp; then
                                export gcc_cv_libc_provides_ssp=yes
                        fi
-                       confgcc+=( --disable-libssp )
+                       if use_if_iuse ssp; then
+                               # On some targets USE="ssp -libssp" is an invalid
+                               # configuration as target libc does not provide
+                               # stack_chk_* functions. Do not disable libssp there.
+                               case ${CTARGET} in
+                                       mingw*|*-mingw*) ewarn "Not disabling libssp" ;;
+                                       *) confgcc+=( --disable-libssp ) ;;
+                               esac
+                       else
+                               confgcc+=( --disable-libssp )
+                       fi
                fi
        fi