commit:     589ce025faee90c57c76c0da6f8534f707132d8f
Author:     Andreas K. Hüttel <dilfridge <AT> gentoo <DOT> org>
AuthorDate: Tue May  1 20:18:52 2018 +0000
Commit:     Andreas Hüttel <dilfridge <AT> gentoo <DOT> org>
CommitDate: Tue May  1 20:19:17 2018 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=589ce025

sys-libs/glibc: Add new bootstrap files from stages, bug 647070

See https://github.com/gentoo/gcc-multilib-bootstrap/ for the source.
This is as good as we can do at the moment. Tested by building an
x32 glibc on a normal amd64 system.

For the glibc-2.26 stabilization we still need new files for PowerPC.

Current status:
* amd64, x32, x86: Files from gcc-6.4
* s390, s390x: Files from gcc-5.4 (does this work?)
* ppc, ppc64: no files, since only gcc-4.9 available
* n32, n64, o32: no files, last mips stages are years old, not useful

Bug: https://bugs.gentoo.org/647070
Package-Manager: Portage-2.3.31, Repoman-2.3.9

 sys-libs/glibc/Manifest                            |   1 +
 .../{glibc-9999.ebuild => glibc-2.26-r7.ebuild}    | 829 ++++-----------------
 .../{glibc-9999.ebuild => glibc-2.27-r2.ebuild}    |  20 +-
 sys-libs/glibc/glibc-9999.ebuild                   |   8 +-
 4 files changed, 148 insertions(+), 710 deletions(-)

diff --git a/sys-libs/glibc/Manifest b/sys-libs/glibc/Manifest
index 71fdce7bee9..767c577845d 100644
--- a/sys-libs/glibc/Manifest
+++ b/sys-libs/glibc/Manifest
@@ -1,4 +1,5 @@
 DIST gcc-4.7.3-r1-multilib-bootstrap.tar.bz2 8064097 BLAKE2B 
3cc5c82cd57d0fbd26d9a376ee8ca02f119fe9d653311cbe4d2b7b93aec2290adac3be271be19a7fdedae2e11e4b6e32360184e557204e100ad64357f5575d4b
 SHA512 
40b93e194ad41a75d649d84d1c49070680f253a13f0617803243bc61c44fed1ca2d0a7572a97ebb79353f312b58b5f6360be916dd7435928cc53935082e15269
+DIST gcc-multilib-bootstrap-20180501.tar.xz 2128700 BLAKE2B 
edeb5447bf397dfeee1295beb10b0e34253da8b3e1816720b6cfc3300a1c685fa022c3b809402a86340bbd7b9488d22cfba4c042d530dcb05ec971a2b1580d34
 SHA512 
eb289c44c5dcabaa727612dd685801b61e1fbe94b39024ecb3e14c73f9eaff68e05949a8f277a86c7471955cc8ec6e0127623b9861be7ac85f63226618b6c9c2
 DIST glibc-2.18-patches-4.tar.bz2 95165 BLAKE2B 
70280e0f5fd0b1ee13cd0464aafaa9c9324528d0bee8024e6529d67d908991012066db6d8257b66983a1f52e32b3aad7718612fdab9ea199fef845db93347168
 SHA512 
d881c9c5fe32b967694d4ca5185ff5ffc964449f2ed49fd062e5d57a3c6d9f16eef2f591d2d8e98a1a95a6487f3436ef031839ed8766fd085404b288340b7933
 DIST glibc-2.18.tar.xz 11150148 BLAKE2B 
7848a5a50abedbd17085e05b6f6835959adb5e55a424d95fa8a49eeec999a6dd81a9382db85ef7e852ef1d7743c5d312dccbf42024e95edf0e802eb32928dfe5
 SHA512 
27218d2e7dd3bf3908d7af171c490933680e958c579ebd27b43b661e223fd5de2219cc1cf699170405280808c84de476d0ad86dbba35a488ef404e9438552327
 DIST glibc-2.19-patches-3.tar.bz2 80664 BLAKE2B 
fb348c711941c1bd4dadd905e172dc4f239d8b63af1a1d14dcf4ec45c504bd47e10e9b24b38f9e01796016f2e97caeeb693213ae08147274ed0a4d9501293be0
 SHA512 
d281d6a2757920124cf8a3f02b97e75192598b08d96ae48840df34c7ffdcb212952d171f233e6f12a429b19437d0a296212fe1f2eae164d6a1c6793cb3cb69f0

diff --git a/sys-libs/glibc/glibc-9999.ebuild 
b/sys-libs/glibc/glibc-2.26-r7.ebuild
similarity index 50%
copy from sys-libs/glibc/glibc-9999.ebuild
copy to sys-libs/glibc/glibc-2.26-r7.ebuild
index ca23762e8d4..dad9a620a2c 100644
--- a/sys-libs/glibc/glibc-9999.ebuild
+++ b/sys-libs/glibc/glibc-2.26-r7.ebuild
@@ -3,40 +3,40 @@
 
 EAPI=6
 
-inherit prefix eutils versionator toolchain-funcs flag-o-matic gnuconfig \
-       multilib systemd multiprocessing
+inherit prefix toolchain-glibc
 
 DESCRIPTION="GNU libc C library"
 HOMEPAGE="https://www.gnu.org/software/libc/";
+
 LICENSE="LGPL-2.1+ BSD HPND ISC inner-net rc PCRE"
 RESTRICT="strip" # Strip ourself #46186
-SLOT="2.2"
-
 EMULTILIB_PKG="true"
 
+# Configuration variables
+
 if [[ ${PV} == 9999* ]]; then
-       EGIT_REPO_URI="https://sourceware.org/git/glibc.git";
+       EGIT_REPO_URI="git://sourceware.org/git/glibc.git"
        inherit git-r3
 else
-       # KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc 
~ppc64 ~s390 ~sh ~sparc ~x86"
+       #KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc 
~ppc64 ~s390 ~sh ~sparc ~x86"
        KEYWORDS=""
        SRC_URI="mirror://gnu/glibc/${P}.tar.xz"
 fi
 
 RELEASE_VER=${PV}
 
-GCC_BOOTSTRAP_VER="4.7.3-r1"
+GCC_BOOTSTRAP_VER=20180501
 
 # Gentoo patchset
-PATCH_VER=5
+PATCH_VER=7
 
 SRC_URI+=" 
https://dev.gentoo.org/~dilfridge/distfiles/${P}-patches-${PATCH_VER}.tar.bz2";
-SRC_URI+=" multilib? ( 
https://dev.gentoo.org/~dilfridge/distfiles/gcc-${GCC_BOOTSTRAP_VER}-multilib-bootstrap.tar.bz2
 )"
+SRC_URI+=" multilib? ( 
https://dev.gentoo.org/~dilfridge/distfiles/gcc-multilib-bootstrap-${GCC_BOOTSTRAP_VER}.tar.xz
 )"
 
-IUSE="audit caps compile-locales doc gd hardened headers-only multilib nscd 
profile selinux suid systemtap vanilla"
+IUSE="audit caps debug doc gd hardened multilib nscd selinux systemtap profile 
suid vanilla headers-only"
 
-# Minimum kernel version that glibc requires
-MIN_KERN_VER="3.2.0"
+# Min kernel version glibc requires
+: ${NPTL_KERN_VER:="3.2.0"}
 
 # Here's how the cross-compile logic breaks down ...
 #  CTARGET - machine that will target the binaries
@@ -51,7 +51,7 @@ MIN_KERN_VER="3.2.0"
 # For install paths:
 #  CHOST = CTARGET  - install into /
 #  CHOST != CTARGET - install into /usr/CTARGET/
-#
+
 export CBUILD=${CBUILD:-${CHOST}}
 export CTARGET=${CTARGET:-${CHOST}}
 if [[ ${CTARGET} == ${CHOST} ]] ; then
@@ -60,8 +60,14 @@ if [[ ${CTARGET} == ${CHOST} ]] ; then
        fi
 fi
 
-# We need a new-enough binutils/gcc to match upstream baseline.
-# Also we need to make sure our binutils/gcc supports TLS.
+is_crosscompile() {
+       [[ ${CHOST} != ${CTARGET} ]]
+}
+
+SLOT="2.2"
+
+# General: We need a new-enough binutils/gcc to match upstream baseline.
+# arch: we need to make sure our binutils/gcc supports TLS.
 COMMON_DEPEND="
        nscd? ( selinux? (
                audit? ( sys-process/audit )
@@ -75,12 +81,11 @@ DEPEND="${COMMON_DEPEND}
        >=app-misc/pax-utils-0.1.10
        !<sys-apps/sandbox-1.6
        !<sys-apps/portage-2.1.2
-       !<sys-devel/bison-2.7
        doc? ( sys-apps/texinfo )
 "
 RDEPEND="${COMMON_DEPEND}
-       sys-apps/gentoo-functions
        !sys-kernel/ps3-sources
+       sys-apps/gentoo-functions
        !sys-libs/nss-db
 "
 
@@ -101,495 +106,10 @@ else
 fi
 
 #
-# Small helper functions
+# the phases
 #
 
-is_crosscompile() {
-       [[ ${CHOST} != ${CTARGET} ]]
-}
-
-just_headers() {
-       is_crosscompile && use headers-only
-}
-
-alt_prefix() {
-       is_crosscompile && echo /usr/${CTARGET}
-}
-
-# We need to be able to set alternative headers for compiling for non-native
-# platform. Will also become useful for testing kernel-headers without screwing
-# up the whole system.
-alt_headers() {
-       echo ${ALT_HEADERS:=$(alt_prefix)/usr/include}
-}
-
-alt_build_headers() {
-       if [[ -z ${ALT_BUILD_HEADERS} ]] ; then
-               ALT_BUILD_HEADERS="${EPREFIX}$(alt_headers)"
-               if tc-is-cross-compiler ; then
-                       ALT_BUILD_HEADERS=${SYSROOT}$(alt_headers)
-                       if [[ ! -e ${ALT_BUILD_HEADERS}/linux/version.h ]] ; 
then
-                               local header_path=$(echo '#include 
<linux/version.h>' | $(tc-getCPP ${CTARGET}) ${CFLAGS} 2>&1 | grep -o 
'[^"]*linux/version.h')
-                               
ALT_BUILD_HEADERS=${header_path%/linux/version.h}
-                       fi
-               fi
-       fi
-       echo "${ALT_BUILD_HEADERS}"
-}
-
-alt_libdir() {
-       echo $(alt_prefix)/$(get_libdir)
-}
-alt_usrlibdir() {
-       echo $(alt_prefix)/usr/$(get_libdir)
-}
-
-builddir() {
-       echo "${WORKDIR}/build-${ABI}-${CTARGET}-$1"
-}
-
-do_compile_test() {
-       local ret save_cflags=${CFLAGS}
-       CFLAGS+=" $1"
-       shift
-
-       pushd "${T}" >/dev/null
-
-       rm -f glibc-test*
-       printf '%b' "$*" > glibc-test.c
-
-       nonfatal emake -s glibc-test
-       ret=$?
-
-       popd >/dev/null
-
-       CFLAGS=${save_cflags}
-       return ${ret}
-}
-
-do_run_test() {
-       local ret
-
-       if [[ ${MERGE_TYPE} == "binary" ]] ; then
-               # ignore build failures when installing a binary package #324685
-               do_compile_test "" "$@" 2>/dev/null || return 0
-       else
-               if ! do_compile_test "" "$@" ; then
-                       ewarn "Simple build failed ... assuming this is desired 
#324685"
-                       return 0
-               fi
-       fi
-
-       pushd "${T}" >/dev/null
-
-       ./glibc-test
-       ret=$?
-       rm -f glibc-test*
-
-       popd >/dev/null
-
-       return ${ret}
-}
-
-setup_target_flags() {
-       # This largely mucks with compiler flags.  None of which should matter
-       # when building up just the headers.
-       just_headers && return 0
-
-       case $(tc-arch) in
-               x86)
-                       # -march needed for #185404 #199334
-                       # TODO: When creating the first glibc cross-compile, 
this test will
-                       # always fail as it does a full link which in turn 
requires glibc.
-                       # Probably also applies when changing multilib profile 
settings (e.g.
-                       # enabling x86 when the profile was amd64-only 
previously).
-                       # We could change main to _start and pass -nostdlib 
here so that we
-                       # only test the gcc code compilation.  Or we could do a 
compile and
-                       # then look for the symbol via scanelf.
-                       if ! do_compile_test "" 'void f(int i, void *p) {if 
(__sync_fetch_and_add(&i, 1)) f(i, p);}\nint main(){return 0;}\n' 2>/dev/null ; 
then
-                               local t=${CTARGET_OPT:-${CTARGET}}
-                               t=${t%%-*}
-                               filter-flags '-march=*'
-                               export CFLAGS="-march=${t} ${CFLAGS}"
-                               einfo "Auto adding -march=${t} to CFLAGS 
#185404"
-                       fi
-               ;;
-               amd64)
-                       # -march needed for #185404 #199334
-                       # Note: This test only matters when the x86 ABI is 
enabled, so we could
-                       # optimize a bit and elide it.
-                       # TODO: See cross-compile issues listed above for x86.
-                       if ! do_compile_test "${CFLAGS_x86}" 'void f(int i, 
void *p) {if (__sync_fetch_and_add(&i, 1)) f(i, p);}\nint main(){return 0;}\n' 
2>/dev/null ; then
-                               local t=${CTARGET_OPT:-${CTARGET}}
-                               t=${t%%-*}
-                               # Normally the target is x86_64-xxx, so turn 
that into the -march that
-                               # gcc actually accepts. #528708
-                               [[ ${t} == "x86_64" ]] && t="x86-64"
-                               filter-flags '-march=*'
-                               # ugly, ugly, ugly.  ugly.
-                               CFLAGS_x86=$(CFLAGS=${CFLAGS_x86} filter-flags 
'-march=*'; echo "${CFLAGS}")
-                               export CFLAGS_x86="${CFLAGS_x86} -march=${t}"
-                               einfo "Auto adding -march=${t} to CFLAGS_x86 
#185404"
-                       fi
-               ;;
-               mips)
-                       # The mips abi cannot support the GNU style hashes. 
#233233
-                       filter-ldflags -Wl,--hash-style=gnu 
-Wl,--hash-style=both
-               ;;
-               sparc)
-                       # Both sparc and sparc64 can use -fcall-used-g6.  -g7 
is bad, though.
-                       filter-flags "-fcall-used-g7"
-                       append-flags "-fcall-used-g6"
-
-                       # If the CHOST is the basic one (e.g. not sparcv9-xxx 
already),
-                       # try to pick a better one so glibc can use 
cpu-specific .S files.
-                       # We key off the CFLAGS to get a good value.  Also need 
to handle
-                       # version skew.
-                       # We can't force users to set their CHOST to their 
exact machine
-                       # as many of these are not recognized by config.sub/gcc 
and such :(.
-                       # Note: If the mcpu values don't scale, we might try 
probing CPP defines.
-                       # Note: Should we factor in -Wa,-AvXXX flags too ?  Or 
-mvis/etc... ?
-
-                       local cpu
-                       case ${CTARGET} in
-                       sparc64-*)
-                               case $(get-flag mcpu) in
-                               niagara[234])
-                                       if version_is_at_least 2.8 ; then
-                                               cpu="sparc64v2"
-                                       elif version_is_at_least 2.4 ; then
-                                               cpu="sparc64v"
-                                       elif version_is_at_least 2.2.3 ; then
-                                               cpu="sparc64b"
-                                       fi
-                                       ;;
-                               niagara)
-                                       if version_is_at_least 2.4 ; then
-                                               cpu="sparc64v"
-                                       elif version_is_at_least 2.2.3 ; then
-                                               cpu="sparc64b"
-                                       fi
-                                       ;;
-                               ultrasparc3)
-                                       cpu="sparc64b"
-                                       ;;
-                               *)
-                                       # We need to force at least v9a because 
the base build doesn't
-                                       # work with just v9.
-                                       # 
https://sourceware.org/bugzilla/show_bug.cgi?id=19477
-                                       [[ -z ${cpu} ]] && append-flags 
"-Wa,-xarch=v9a"
-                                       ;;
-                               esac
-                               ;;
-                       sparc-*)
-                               case $(get-flag mcpu) in
-                               niagara[234])
-                                       if version_is_at_least 2.8 ; then
-                                               cpu="sparcv9v2"
-                                       elif version_is_at_least 2.4 ; then
-                                               cpu="sparcv9v"
-                                       elif version_is_at_least 2.2.3 ; then
-                                               cpu="sparcv9b"
-                                       else
-                                               cpu="sparcv9"
-                                       fi
-                                       ;;
-                               niagara)
-                                       if version_is_at_least 2.4 ; then
-                                               cpu="sparcv9v"
-                                       elif version_is_at_least 2.2.3 ; then
-                                               cpu="sparcv9b"
-                                       else
-                                               cpu="sparcv9"
-                                       fi
-                                       ;;
-                               ultrasparc3)
-                                       cpu="sparcv9b"
-                                       ;;
-                               v9|ultrasparc)
-                                       cpu="sparcv9"
-                                       ;;
-                               v8|supersparc|hypersparc|leon|leon3)
-                                       cpu="sparcv8"
-                                       ;;
-                               esac
-                       ;;
-                       esac
-                       [[ -n ${cpu} ]] && CTARGET_OPT="${cpu}-${CTARGET#*-}"
-               ;;
-       esac
-}
-
-setup_flags() {
-       # Make sure host make.conf doesn't pollute us
-       if is_crosscompile || tc-is-cross-compiler ; then
-               CHOST=${CTARGET} strip-unsupported-flags
-       fi
-
-       # Store our CFLAGS because it's changed depending on which CTARGET
-       # we are building when pulling glibc on a multilib profile
-       CFLAGS_BASE=${CFLAGS_BASE-${CFLAGS}}
-       CFLAGS=${CFLAGS_BASE}
-       CXXFLAGS_BASE=${CXXFLAGS_BASE-${CXXFLAGS}}
-       CXXFLAGS=${CXXFLAGS_BASE}
-       ASFLAGS_BASE=${ASFLAGS_BASE-${ASFLAGS}}
-       ASFLAGS=${ASFLAGS_BASE}
-
-       # Over-zealous CFLAGS can often cause problems.  What may work for one
-       # person may not work for another.  To avoid a large influx of bugs
-       # relating to failed builds, we strip most CFLAGS out to ensure as few
-       # problems as possible.
-       strip-flags
-       strip-unsupported-flags
-       filter-flags -m32 -m64 '-mabi=*'
-
-       # glibc aborts if rpath is set by LDFLAGS
-       filter-ldflags '-Wl,-rpath=*'
-
-       # #492892
-       filter-flags -frecord-gcc-switches
-
-       unset CBUILD_OPT CTARGET_OPT
-       if use multilib ; then
-               CTARGET_OPT=$(get_abi_CTARGET)
-               [[ -z ${CTARGET_OPT} ]] && CTARGET_OPT=$(get_abi_CHOST)
-       fi
-
-       setup_target_flags
-
-       if [[ -n ${CTARGET_OPT} && ${CBUILD} == ${CHOST} ]] && ! 
is_crosscompile; then
-               CBUILD_OPT=${CTARGET_OPT}
-       fi
-
-       # Lock glibc at -O2; we want to be conservative here.
-       # -fno-strict-aliasing is to work around #155906.
-       filter-flags '-O?'
-       append-flags -O2 -fno-strict-aliasing
-
-       filter-flags '-fstack-protector*'
-
-       # Starting with gcc-6 (and fully upstreamed pie patches) we control
-       # default enabled/disabled pie via use flags. So nothing to do
-       # here then. #618160
-       if [[ $(gcc-major-version) -lt 6 ]]; then
-               if use hardened && tc-enables-pie ; then
-                       # Force PIC macro definition for all compilations since 
they're all
-                       # either -fPIC or -fPIE with the default-PIE compiler.
-                       append-cppflags -DPIC
-               else
-                       # Don't build -fPIE without the default-PIE compiler 
and the
-                       # hardened-pie patch
-                       filter-flags -fPIE
-               fi
-       fi
-}
-
-want_tls() {
-       # Archs that can use TLS (Thread Local Storage)
-       case $(tc-arch) in
-               x86)
-                       # requires i486 or better #106556
-                       [[ ${CTARGET} == i[4567]86* ]] && return 0
-                       return 1
-               ;;
-       esac
-       return 0
-}
-
-want__thread() {
-       want_tls || return 1
-
-       # For some reason --with-tls --with__thread is causing segfaults on 
sparc32.
-       [[ ${PROFILE_ARCH} == "sparc" ]] && return 1
-
-       [[ -n ${WANT__THREAD} ]] && return ${WANT__THREAD}
-
-       # only test gcc -- can't test linking yet
-       tc-has-tls -c ${CTARGET}
-       WANT__THREAD=$?
-
-       return ${WANT__THREAD}
-}
-
-use_multiarch() {
-       # Make sure binutils is new enough to support indirect functions,
-       # #336792. This funky sed supports gold and bfd linkers.
-       local bver nver
-       bver=$($(tc-getLD ${CTARGET}) -v | sed -n -r 
'1{s:[^0-9]*::;s:^([0-9.]*).*:\1:;p}')
-       case $(tc-arch ${CTARGET}) in
-       amd64|x86) nver="2.20" ;;
-       arm)       nver="2.22" ;;
-       hppa)      nver="2.23" ;;
-       ppc|ppc64) nver="2.20" ;;
-       # ifunc support was added in 2.23, but glibc also needs
-       # machinemode which is in 2.24.
-       s390)      nver="2.24" ;;
-       sparc)     nver="2.21" ;;
-       *)         return 1 ;;
-       esac
-       version_is_at_least ${nver} ${bver}
-}
-
-# Setup toolchain variables that had historically been defined in the
-# profiles for these archs.
-setup_env() {
-       # silly users
-       unset LD_RUN_PATH
-       unset LD_ASSUME_KERNEL
-
-       if is_crosscompile || tc-is-cross-compiler ; then
-               multilib_env ${CTARGET_OPT:-${CTARGET}}
-
-               if ! use multilib ; then
-                       MULTILIB_ABIS=${DEFAULT_ABI}
-               else
-                       MULTILIB_ABIS=${MULTILIB_ABIS:-${DEFAULT_ABI}}
-               fi
-
-               # If the user has CFLAGS_<CTARGET> in their make.conf, use that,
-               # and fall back on CFLAGS.
-               local VAR=CFLAGS_${CTARGET//[-.]/_}
-               CFLAGS=${!VAR-${CFLAGS}}
-               einfo " $(printf '%15s' 'Manual CFLAGS:')   ${CFLAGS}"
-       fi
-
-       setup_flags
-
-       export ABI=${ABI:-${DEFAULT_ABI:-default}}
-
-       if use headers-only ; then
-               # Avoid mixing host's CC and target's CFLAGS_${ABI}:
-               # At this bootstrap stage we have only binutils for
-               # target but not compiler yet.
-               einfo "Skip CC ABI injection. We can't use (cross-)compiler 
yet."
-               return 0
-       fi
-       local VAR=CFLAGS_${ABI}
-       # We need to export CFLAGS with abi information in them because glibc's
-       # configure script checks CFLAGS for some targets (like mips).  Keep
-       # around the original clean value to avoid appending multiple ABIs on
-       # top of each other.
-       : ${__GLIBC_CC:=$(tc-getCC ${CTARGET_OPT:-${CTARGET}})}
-       export __GLIBC_CC CC="${__GLIBC_CC} ${!VAR}"
-       einfo " $(printf '%15s' 'Manual CC:')   ${CC}"
-}
-
-foreach_abi() {
-       setup_env
-
-       local ret=0
-       local abilist=""
-       if use multilib ; then
-               abilist=$(get_install_abis)
-       else
-               abilist=${DEFAULT_ABI}
-       fi
-       local -x ABI
-       for ABI in ${abilist:-default} ; do
-               setup_env
-               einfo "Running $1 for ABI ${ABI}"
-               $1
-               : $(( ret |= $? ))
-       done
-       return ${ret}
-}
-
-glibc_banner() {
-       local b="Gentoo ${PVR}"
-       [[ -n ${PATCH_VER} ]] && ! use vanilla && b+=" p${PATCH_VER}"
-       echo "${b}"
-}
-
-check_devpts() {
-       # Make sure devpts is mounted correctly for use w/out setuid pt_chown.
-
-       # If merely building the binary package, then there's nothing to verify.
-       [[ ${MERGE_TYPE} == "buildonly" ]] && return
-
-       # Only sanity check when installing the native glibc.
-       [[ ${ROOT} != "/" ]] && return
-
-       # If they're opting in to the old suid code, then no need to check.
-       use suid && return
-
-       if awk '$3 == "devpts" && $4 ~ /[, ]gid=5[, ]/ { exit 1 }' /proc/mounts 
; then
-               eerror "In order to use glibc with USE=-suid, you must make 
sure that"
-               eerror "you have devpts mounted at /dev/pts with the gid=5 
option."
-               eerror "Openrc should do this for you, so you should check 
/etc/fstab"
-               eerror "and make sure you do not have any invalid settings 
there."
-               die "mount & fix your /dev/pts settings"
-       fi
-}
-
-# The following Kernel version handling functions are mostly copied from 
portage
-# source. It's better not to use linux-info.eclass here since a) it adds too
-# much magic, see bug 326693 for some of the arguments, and b) some of the
-# functions are just not provided.
-
-g_get_running_KV() {
-       uname -r
-       return $?
-}
-
-g_KV_major() {
-       [[ -z $1 ]] && return 1
-       local KV=$@
-       echo "${KV%%.*}"
-}
-
-g_KV_minor() {
-       [[ -z $1 ]] && return 1
-       local KV=$@
-       KV=${KV#*.}
-       echo "${KV%%.*}"
-}
-
-g_KV_micro() {
-       [[ -z $1 ]] && return 1
-       local KV=$@
-       KV=${KV#*.*.}
-       echo "${KV%%[^[:digit:]]*}"
-}
-
-g_KV_to_int() {
-       [[ -z $1 ]] && return 1
-       local KV_MAJOR=$(g_KV_major "$1")
-       local KV_MINOR=$(g_KV_minor "$1")
-       local KV_MICRO=$(g_KV_micro "$1")
-       local KV_int=$(( KV_MAJOR * 65536 + KV_MINOR * 256 + KV_MICRO ))
-
-       # We make version 2.2.0 the minimum version we will handle as
-       # a sanity check ... if its less, we fail ...
-       if [[ ${KV_int} -ge 131584 ]] ; then
-               echo "${KV_int}"
-               return 0
-       fi
-       return 1
-}
-
-g_int_to_KV() {
-       local version=$1 major minor micro
-       major=$((version / 65536))
-       minor=$(((version % 65536) / 256))
-       micro=$((version % 256))
-       echo ${major}.${minor}.${micro}
-}
-
-eend_KV() {
-       [[ $(g_KV_to_int $1) -ge $(g_KV_to_int $2) ]]
-       eend $?
-}
-
-get_kheader_version() {
-       printf '#include <linux/version.h>\nLINUX_VERSION_CODE\n' | \
-       $(tc-getCPP ${CTARGET}) -I "${EPREFIX}/$(alt_build_headers)" - | \
-       tail -n 1
-}
-
-# We collect all sanity checks here. Consistency is not guranteed between
-# pkg_ and src_ phases, so we call this function both in pkg_pretend and in
-# src_unpack.
-sanity_prechecks() {
+pkg_pretend() {
        # Make sure devpts is mounted correctly for use w/out setuid pt_chown
        check_devpts
 
@@ -598,21 +118,30 @@ sanity_prechecks() {
           [[ ${ROOT} == "/" ]] && \
           [[ ${CBUILD} == ${CHOST} ]] && \
           [[ ${CHOST} == ${CTARGET} ]] ; then
-
-               # The high rev # is to allow people to downgrade between -r#
-               # versions. We want to block 2.20->2.19, but 2.20-r3->2.20-r2
-               # should be fine. Hopefully we never actually use a r# this
-               # high.
+               # The high rev # is to allow people to downgrade between -r# 
versions.
+               # We want to block 2.20->2.19, but 2.20-r3->2.20-r2 should be 
fine.
+               # Hopefully we never actually use a r# this high.
                if has_version ">${CATEGORY}/${P}-r10000" ; then
                        eerror "Sanity check to keep you from breaking your 
system:"
-                       eerror " Downgrading glibc is not supported and a sure 
way to destruction."
-                       die "Aborting to save your system."
+                       eerror " Downgrading glibc is not supported and a sure 
way to destruction"
+                       die "Aborting to save your system"
+               fi
+
+               if ! glibc_run_test '#include <pwd.h>\nint main(){return 
getpwuid(0)==0;}\n'
+               then
+                       eerror "Your patched vendor kernel is broken.  You need 
to get an"
+                       eerror "update from whoever is providing the kernel to 
you."
+                       eerror 
"https://sourceware.org/bugzilla/show_bug.cgi?id=5227";
+                       eerror "https://bugs.gentoo.org/262698";
+                       die "Keeping your system alive, say thank you"
                fi
 
-               if ! do_run_test '#include <unistd.h>\n#include 
<sys/syscall.h>\nint main(){return syscall(1000)!=-1;}\n' ; then
-                       eerror "Your old kernel is broken. You need to update 
it to a newer"
-                       eerror "version as syscall(<bignum>) will break. See 
bug 279260."
-                       die "Old and broken kernel."
+               if ! glibc_run_test '#include <unistd.h>\n#include 
<sys/syscall.h>\nint main(){return syscall(1000)!=-1;}\n'
+               then
+                       eerror "Your old kernel is broken.  You need to update 
it to"
+                       eerror "a newer version as syscall(<bignum>) will 
break."
+                       eerror "https://bugs.gentoo.org/279260";
+                       die "Keeping your system alive, say thank you"
                fi
        fi
 
@@ -639,6 +168,30 @@ sanity_prechecks() {
        use hardened && ! tc-enables-pie && \
                ewarn "PIE hardening not applied, as your compiler doesn't 
default to PIE"
 
+       # Make sure host system is up to date #394453
+       if has_version '<sys-libs/glibc-2.13' && \
+          [[ -n $(scanelf -qys__guard -F'#s%F' "${EROOT}"/lib*/l*-*.so) ]]
+       then
+               ebegin "Scanning system for __guard to see if you need to 
rebuild first ..."
+               local files=$(
+                       scanelf -qys__guard -F'#s%F' \
+                               "${EROOT}"/*bin/ \
+                               "${EROOT}"/lib* \
+                               "${EROOT}"/usr/*bin/ \
+                               "${EROOT}"/usr/lib* | \
+                               egrep -v \
+                                       -e "^${EROOT}/lib.*/(libc|ld)-2.*.so$" \
+                                       -e "^${EROOT}/sbin/(ldconfig|sln)$"
+               )
+               [[ -z ${files} ]]
+               if ! eend $? ; then
+                       eerror "Your system still has old SSP __guard symbols.  
You need to"
+                       eerror "rebuild all the packages that provide these 
files first:"
+                       eerror "${files}"
+                       die "old __guard detected"
+               fi
+       fi
+
        # Check for sanity of /etc/nsswitch.conf
        if [[ -e ${EROOT}/etc/nsswitch.conf ]] ; then
                local entry
@@ -653,97 +206,26 @@ sanity_prechecks() {
                        fi
                done
        fi
-
-       # ABI-specific checks follow here. Hey, we have a lot more specific 
conditions that
-       # we test for...
-       if ! is_crosscompile ; then
-               if use amd64 && use multilib && [[ ${MERGE_TYPE} != "binary" ]] 
; then
-                       ebegin "Checking that IA32 emulation is enabled in the 
running kernel"
-                       echo 'int main(){return 0;}' > 
"${T}/check-ia32-emulation.c"
-                       local STAT
-                       if "${CC-${CHOST}-gcc}" ${CFLAGS_x86} 
"${T}/check-ia32-emulation.c" -o "${T}/check-ia32-emulation.elf32"; then
-                               "${T}/check-ia32-emulation.elf32"
-                               STAT=$?
-                       else
-                               # Don't fail here to allow single->multi ABI 
switch
-                               # or recover from breakage like bug #646424
-                               ewarn "Failed to compile the ABI test. Broken 
host glibc?"
-                               STAT=0
-                       fi
-                       rm -f "${T}/check-ia32-emulation.elf32"
-                       eend $STAT
-                       [[ $STAT -eq 0 ]] || die "CONFIG_IA32_EMULATION must be 
enabled in the kernel to compile a multilib glibc."
-               fi
-
-       fi
-
-       # When we actually have to compile something...
-       if ! just_headers ; then
-               local run_kv build_kv want_kv
-
-               run_kv=$(g_get_running_KV)
-               build_kv=$(g_int_to_KV $(get_kheader_version))
-               want_kv=${MIN_KERN_VER}
-
-               ebegin "Checking gcc for __thread support"
-               if ! eend $(want__thread ; echo $?) ; then
-                       echo
-                       eerror "Could not find a gcc that supports the __thread 
directive!"
-                       eerror "Please update your binutils/gcc and try again."
-                       die "No __thread support in gcc!"
-               fi
-
-               if ! is_crosscompile && ! tc-is-cross-compiler ; then
-                       # Building fails on an non-supporting kernel
-                       ebegin "Checking running kernel version (${run_kv} >= 
${want_kv})"
-                       if ! eend_KV ${run_kv} ${want_kv} ; then
-                               echo
-                               eerror "You need a kernel of at least 
${want_kv}!"
-                               die "Kernel version too low!"
-                       fi
-               fi
-
-               ebegin "Checking linux-headers version (${build_kv} >= 
${want_kv})"
-               if ! eend_KV ${build_kv} ${want_kv} ; then
-                       echo
-                       eerror "You need linux-headers of at least ${want_kv}!"
-                       die "linux-headers version too low!"
-               fi
-       fi
-}
-
-#
-# the phases
-#
-
-# pkg_pretend
-
-pkg_pretend() {
-       # All the checks...
-       einfo "Checking general environment sanity."
-       sanity_prechecks
 }
 
-# src_unpack
-
 src_unpack() {
-       # Consistency is not guaranteed between pkg_ and src_ ...
-       sanity_prechecks
-
-       use multilib && unpack 
gcc-${GCC_BOOTSTRAP_VER}-multilib-bootstrap.tar.bz2
+       use multilib && unpack 
gcc-multilib-bootstrap-${GCC_BOOTSTRAP_VER}.tar.xz
 
        setup_env
 
+       # Check NPTL support _before_ we unpack things to save some time
+       check_nptl_support
+
        if [[ -n ${EGIT_REPO_URI} ]] ; then
                git-r3_src_unpack
        else
                unpack ${P}.tar.xz
        fi
 
-       cd "${S}" || die
-       touch locale/C-translit.h || die #185476 #218003
+       cd "${S}"
+       touch locale/C-translit.h #185476 #218003
 
-       cd "${WORKDIR}" || die
+       cd "${WORKDIR}"
        unpack glibc-${RELEASE_VER}-patches-${PATCH_VER}.tar.bz2
 }
 
@@ -754,6 +236,16 @@ src_prepare() {
                einfo "Done."
        fi
 
+       if just_headers ; then
+               if [[ -e ports/sysdeps/mips/preconfigure ]] ; then
+                       # mips peeps like to screw with us.  if building 
headers,
+                       # we don't have a real compiler, so we can't let them
+                       # insert -mabi on us.
+                       sed -i '/CPPFLAGS=.*-mabi/s|.*|:|' 
ports/sysdeps/mips/preconfigure || die
+                       find ports/sysdeps/mips/ -name Makefile -exec sed -i 
'/^CC.*-mabi=/s:-mabi=.*:-D_MIPS_SZPTR=32:' {} +
+               fi
+       fi
+
        default
 
        gnuconfig_update
@@ -775,6 +267,14 @@ src_prepare() {
                einfo "Installing Hardened Gentoo SSP and FORTIFY_SOURCE 
handler"
                cp "${FILESDIR}"/2.20/glibc-2.20-gentoo-stack_chk_fail.c 
debug/stack_chk_fail.c || die
                cp "${FILESDIR}"/2.25/glibc-2.25-gentoo-chk_fail.c 
debug/chk_fail.c || die
+
+               if use debug ; then
+                       # Allow SIGABRT to dump core on non-hardened systems, 
or when debug is requested.
+                       sed -i \
+                               -e '/^CFLAGS-backtrace.c/ 
iCPPFLAGS-stack_chk_fail.c = -DSSP_SMASH_DUMPS_CORE' \
+                               -e '/^CFLAGS-backtrace.c/ iCPPFLAGS-chk_fail.c 
= -DSSP_SMASH_DUMPS_CORE' \
+                               debug/Makefile || die
+               fi
        fi
 }
 
@@ -786,7 +286,7 @@ glibc_do_configure() {
        # we accumulate crap across abis
        unset CXX
 
-       einfo "Configuring glibc for nptl"
+       einfo "Configuring glibc for $1"
 
        if use doc ; then
                export MAKEINFO=makeinfo
@@ -811,6 +311,18 @@ glibc_do_configure() {
 
        local myconf=()
 
+       # set addons
+       pushd "${S}" > /dev/null
+       local addons=$(echo */configure | sed \
+               -e 's:/configure::g' \
+               -e 's:\(linuxthreads\|nptl\|rtkaio\|glibc-compat\)\( \|$\)::g' \
+               -e 's: \+$::' \
+               -e 's! !,!g' \
+               -e 's!^!,!' \
+               -e '/^,\*$/d')
+       [[ -d ports ]] && addons+=",ports"
+       popd > /dev/null
+
        case ${CTARGET} in
                powerpc-*)
                        # Currently gcc on powerpc32 generates invalid code for
@@ -839,7 +351,12 @@ glibc_do_configure() {
 
        [[ $(tc-is-softfloat) == "yes" ]] && myconf+=( --without-fp )
 
-       myconf+=( --enable-kernel=${MIN_KERN_VER} )
+       if [[ $1 == "nptl" ]] ; then
+               myconf+=( --enable-kernel=${NPTL_KERN_VER} )
+       else
+               die "invalid pthread option"
+       fi
+       myconf+=( --enable-add-ons="${addons#,}" )
 
        # Since SELinux support is only required for nscd, only enable it if:
        # 1. USE selinux
@@ -908,7 +425,7 @@ glibc_do_configure() {
        # this overriding check.  #347761
        export libc_cv_hashstyle=no
 
-       local builddir=$(builddir nptl)
+       local builddir=$(builddir "$1")
        mkdir -p "${builddir}"
        cd "${builddir}"
        set -- "${S}"/configure "${myconf[@]}"
@@ -929,11 +446,10 @@ glibc_do_configure() {
        # to lie and use a local copy of gcc.  Like if the system
        # is built with MULTILIB_ABIS="amd64 x86" but we want to
        # add x32 to it, gcc/glibc don't yet support x32.
-       #
        if [[ -n ${GCC_BOOTSTRAP_VER} ]] && use multilib ; then
                echo 'main(){}' > "${T}"/test.c
                if ! $(tc-getCC ${CTARGET}) ${CFLAGS} ${LDFLAGS} "${T}"/test.c 
-Wl,-emain -lgcc 2>/dev/null ; then
-                       sed -i -e '/^CC = /s:$: 
-B$(objdir)/../'"gcc-${GCC_BOOTSTRAP_VER}/${ABI}:" config.make || die
+                       sed -i -e '/^CC = /s:$: 
-B$(objdir)/../'"gcc-multilib-bootstrap-${GCC_BOOTSTRAP_VER}/${ABI}:" 
config.make || die
                fi
        fi
 }
@@ -954,7 +470,6 @@ glibc_headers_configure() {
                libc_cv_asm_cfi_directives=yes
                libc_cv_broken_visibility_attribute=no
                libc_cv_c_cleanup=yes
-               libc_cv_compiler_powerpc64le_binary128_ok=yes
                libc_cv_forced_unwind=yes
                libc_cv_gcc___thread=yes
                libc_cv_mlong_double_128=yes
@@ -962,7 +477,6 @@ glibc_headers_configure() {
                libc_cv_ppc_machine=yes
                libc_cv_ppc_rel16=yes
                libc_cv_predef_fortify_source=no
-               libc_cv_target_power8_ok=yes
                libc_cv_visibility_attribute=yes
                libc_cv_z_combreloc=yes
                libc_cv_z_execstack=yes
@@ -983,8 +497,6 @@ glibc_headers_configure() {
                export ${v}
        done
 
-       local headers_only_arch_CPPFLAGS=()
-
        # Blow away some random CC settings that screw things up. #550192
        if [[ -d ${S}/sysdeps/mips ]]; then
                pushd "${S}"/sysdeps/mips >/dev/null
@@ -1001,25 +513,6 @@ glibc_headers_configure() {
                popd >/dev/null
        fi
 
-       case ${CTARGET} in
-       riscv*)
-               # RISC-V interrogates the compiler to determine which target to
-               # build.  If building the headers then we don't strictly need a
-               # RISC-V compiler, so the built-in definitions that are provided
-               # along with all RISC-V compiler might not exist.  This causes
-               # glibc's RISC-V preconfigure script to blow up.  Since we're 
just
-               # building the headers any value will actually work here, so 
just
-               # pick the standard one (rv64g/lp64d) to make the build scripts
-               # happy for now -- the headers are all the same anyway so it
-               # doesn't matter.
-               headers_only_arch_CPPFLAGS+=(
-                       -D__riscv_xlen=64
-                       -D__riscv_flen=64
-                       -D__riscv_float_abi_double=1
-                       -D__riscv_atomic=1
-               ) ;;
-       esac
-
        local myconf=()
        myconf+=(
                --disable-sanity-checks
@@ -1034,11 +527,15 @@ glibc_headers_configure() {
                ${EXTRA_ECONF}
        )
 
+       local addons
+       [[ -d ${S}/ports ]] && addons+=",ports"
+       myconf+=( --enable-add-ons="${addons#,}" )
+
        # Nothing is compiled here which would affect the headers for the 
target.
        # So forcing CC/CFLAGS is sane.
        local headers_only_CC=$(tc-getBUILD_CC)
        local headers_only_CFLAGS="-O1 -pipe"
-       local headers_only_CPPFLAGS="-U_FORTIFY_SOURCE 
${headers_only_arch_CPPFLAGS[*]}"
+       local headers_only_CPPFLAGS="-U_FORTIFY_SOURCE"
        local headers_only_LDFLAGS=""
        set -- "${S}"/configure "${myconf[@]}"
        echo \
@@ -1079,14 +576,14 @@ src_compile() {
 }
 
 glibc_src_test() {
-       cd "$(builddir nptl)"
+       cd "$(builddir $1)"
        emake check
 }
 
 do_src_test() {
        local ret=0
 
-       glibc_src_test
+       glibc_src_test nptl
        : $(( ret |= $? ))
 
        return ${ret}
@@ -1096,26 +593,12 @@ src_test() {
        if just_headers ; then
                return
        fi
-
        # Give tests more time to complete.
        export TIMEOUTFACTOR=5
 
        foreach_abi do_src_test || die "tests failed"
 }
 
-run_locale_gen() {
-       # if the host locales.gen contains no entries, we'll install everything
-       local root="$1"
-       local locale_list="${root}/etc/locale.gen"
-       if [[ -z $(locale-gen --list --config "${locale_list}") ]] ; then
-               ewarn "Generating all locales; edit /etc/locale.gen to save 
time/space"
-               locale_list="${root}/usr/share/i18n/SUPPORTED"
-       fi
-
-       locale-gen --jobs $(makeopts_jobs) --config "${locale_list}" \
-               --destdir "${root}"
-}
-
 glibc_do_src_install() {
        local builddir=$(builddir nptl)
        cd "${builddir}"
@@ -1274,19 +757,13 @@ glibc_do_src_install() {
        echo 'LDPATH="include ld.so.conf.d/*.conf"' > "${T}"/00glibc
        doenvd "${T}"/00glibc
 
-       for d in BUGS ChangeLog CONFORMANCE FAQ NEWS NOTES PROJECTS README* ; do
+       for d in BUGS ChangeLog* CONFORMANCE FAQ NEWS NOTES PROJECTS README* ; 
do
                [[ -s ${d} ]] && dodoc ${d}
        done
-       dodoc -r ChangeLog.old
 
        # Prevent overwriting of the /etc/localtime symlink.  We'll handle the
        # creation of the "factory" symlink in pkg_postinst().
        rm -f "${ED}"/etc/localtime
-
-       # Generate all locales if this is a native build as locale generation
-       if use compile-locales && ! is_crosscompile ; then
-               run_locale_gen "${ED}"
-       fi
 }
 
 glibc_headers_install() {
@@ -1303,23 +780,6 @@ glibc_headers_install() {
        dosym usr/include $(alt_prefix)/sys-include
 }
 
-src_strip() {
-       # gdb is lame and requires some debugging information to remain in
-       # libpthread, so we need to strip it by hand.  libthread_db makes no
-       # sense stripped as it is only used when debugging.
-       local pthread=$(has splitdebug ${FEATURES} && echo "libthread_db" || 
echo "lib{pthread,thread_db}")
-       env \
-               -uRESTRICT \
-               CHOST=${CTARGET} \
-               STRIP_MASK="/*/{,tls/}${pthread}*" \
-               prepallstrip
-       # if user has stripping enabled and does not have split debug turned on,
-       # then leave the debugging sections in libpthread.
-       if ! has nostrip ${FEATURES} && ! has splitdebug ${FEATURES} ; then
-               ${STRIP:-${CTARGET}-strip} --strip-debug 
"${ED}"$(alt_prefix)/*/libpthread-*.so
-       fi
-}
-
 src_install() {
        if just_headers ; then
                export ABI=default
@@ -1331,43 +791,6 @@ src_install() {
        src_strip
 }
 
-# Simple test to make sure our new glibc isn't completely broken.
-# Make sure we don't test with statically built binaries since
-# they will fail.  Also, skip if this glibc is a cross compiler.
-#
-# If coreutils is built with USE=multicall, some of these files
-# will just be wrapper scripts, not actual ELFs we can test.
-glibc_sanity_check() {
-       cd / #228809
-
-       # We enter ${ED} so to avoid trouble if the path contains
-       # special characters; for instance if the path contains the
-       # colon character (:), then the linker will try to split it
-       # and look for the libraries in an unexpected place. This can
-       # lead to unsafe code execution if the generated prefix is
-       # within a world-writable directory.
-       # (e.g. /var/tmp/portage:${HOSTNAME})
-       pushd "${ED}"/$(get_libdir) >/dev/null
-
-       local x striptest
-       for x in cal date env free ls true uname uptime ; do
-               x=$(type -p ${x})
-               [[ -z ${x} || ${x} != ${EPREFIX}/* ]] && continue
-               striptest=$(LC_ALL="C" file -L ${x} 2>/dev/null) || continue
-               case ${striptest} in
-               *"statically linked"*) continue;;
-               *"ASCII text"*) continue;;
-               esac
-               # We need to clear the locale settings as the upgrade might want
-               # incompatible locale data.  This test is not for verifying 
that.
-               LC_ALL=C \
-               ./ld-*.so --library-path . ${x} > /dev/null \
-                       || die "simple run test (${x}) failed"
-       done
-
-       popd >/dev/null
-}
-
 pkg_preinst() {
        # nothing to do if just installing headers
        just_headers && return
@@ -1400,7 +823,13 @@ pkg_postinst() {
                # errors from this step #253697
                /sbin/telinit U 2>/dev/null
 
-               use compile-locales || run_locale_gen "${EROOT}"
+               # if the host locales.gen contains no entries, we'll install 
everything
+               local locale_list="${EROOT}etc/locale.gen"
+               if [[ -z $(locale-gen --list --config "${locale_list}") ]] ; 
then
+                       ewarn "Generating all locales; edit /etc/locale.gen to 
save time/space"
+                       locale_list="${EROOT}usr/share/i18n/SUPPORTED"
+               fi
+               locale-gen -j $(makeopts_jobs) --config "${locale_list}"
        fi
 
        # Check for sanity of /etc/nsswitch.conf, take 2

diff --git a/sys-libs/glibc/glibc-9999.ebuild 
b/sys-libs/glibc/glibc-2.27-r2.ebuild
similarity index 98%
copy from sys-libs/glibc/glibc-9999.ebuild
copy to sys-libs/glibc/glibc-2.27-r2.ebuild
index ca23762e8d4..b45dd3a4921 100644
--- a/sys-libs/glibc/glibc-9999.ebuild
+++ b/sys-libs/glibc/glibc-2.27-r2.ebuild
@@ -25,15 +25,15 @@ fi
 
 RELEASE_VER=${PV}
 
-GCC_BOOTSTRAP_VER="4.7.3-r1"
+GCC_BOOTSTRAP_VER=20180501
 
 # Gentoo patchset
-PATCH_VER=5
+PATCH_VER=1
 
 SRC_URI+=" 
https://dev.gentoo.org/~dilfridge/distfiles/${P}-patches-${PATCH_VER}.tar.bz2";
-SRC_URI+=" multilib? ( 
https://dev.gentoo.org/~dilfridge/distfiles/gcc-${GCC_BOOTSTRAP_VER}-multilib-bootstrap.tar.bz2
 )"
+SRC_URI+=" multilib? ( 
https://dev.gentoo.org/~dilfridge/distfiles/gcc-multilib-bootstrap-${GCC_BOOTSTRAP_VER}.tar.xz
 )"
 
-IUSE="audit caps compile-locales doc gd hardened headers-only multilib nscd 
profile selinux suid systemtap vanilla"
+IUSE="audit caps compile-locales debug doc gd hardened headers-only multilib 
nscd profile selinux suid systemtap vanilla"
 
 # Minimum kernel version that glibc requires
 MIN_KERN_VER="3.2.0"
@@ -730,7 +730,7 @@ src_unpack() {
        # Consistency is not guaranteed between pkg_ and src_ ...
        sanity_prechecks
 
-       use multilib && unpack 
gcc-${GCC_BOOTSTRAP_VER}-multilib-bootstrap.tar.bz2
+       use multilib && unpack 
gcc-multilib-bootstrap-${GCC_BOOTSTRAP_VER}.tar.xz
 
        setup_env
 
@@ -775,6 +775,14 @@ src_prepare() {
                einfo "Installing Hardened Gentoo SSP and FORTIFY_SOURCE 
handler"
                cp "${FILESDIR}"/2.20/glibc-2.20-gentoo-stack_chk_fail.c 
debug/stack_chk_fail.c || die
                cp "${FILESDIR}"/2.25/glibc-2.25-gentoo-chk_fail.c 
debug/chk_fail.c || die
+
+               if use debug ; then
+                       # Allow SIGABRT to dump core on non-hardened systems, 
or when debug is requested.
+                       sed -i \
+                               -e '/^CFLAGS-backtrace.c/ 
iCPPFLAGS-stack_chk_fail.c = -DSSP_SMASH_DUMPS_CORE' \
+                               -e '/^CFLAGS-backtrace.c/ iCPPFLAGS-chk_fail.c 
= -DSSP_SMASH_DUMPS_CORE' \
+                               debug/Makefile || die
+               fi
        fi
 }
 
@@ -933,7 +941,7 @@ glibc_do_configure() {
        if [[ -n ${GCC_BOOTSTRAP_VER} ]] && use multilib ; then
                echo 'main(){}' > "${T}"/test.c
                if ! $(tc-getCC ${CTARGET}) ${CFLAGS} ${LDFLAGS} "${T}"/test.c 
-Wl,-emain -lgcc 2>/dev/null ; then
-                       sed -i -e '/^CC = /s:$: 
-B$(objdir)/../'"gcc-${GCC_BOOTSTRAP_VER}/${ABI}:" config.make || die
+                       sed -i -e '/^CC = /s:$: 
-B$(objdir)/../'"gcc-multilib-bootstrap-${GCC_BOOTSTRAP_VER}/${ABI}:" 
config.make || die
                fi
        fi
 }

diff --git a/sys-libs/glibc/glibc-9999.ebuild b/sys-libs/glibc/glibc-9999.ebuild
index ca23762e8d4..7c5d09ab85a 100644
--- a/sys-libs/glibc/glibc-9999.ebuild
+++ b/sys-libs/glibc/glibc-9999.ebuild
@@ -25,13 +25,13 @@ fi
 
 RELEASE_VER=${PV}
 
-GCC_BOOTSTRAP_VER="4.7.3-r1"
+GCC_BOOTSTRAP_VER=20180501
 
 # Gentoo patchset
 PATCH_VER=5
 
 SRC_URI+=" 
https://dev.gentoo.org/~dilfridge/distfiles/${P}-patches-${PATCH_VER}.tar.bz2";
-SRC_URI+=" multilib? ( 
https://dev.gentoo.org/~dilfridge/distfiles/gcc-${GCC_BOOTSTRAP_VER}-multilib-bootstrap.tar.bz2
 )"
+SRC_URI+=" multilib? ( 
https://dev.gentoo.org/~dilfridge/distfiles/gcc-multilib-bootstrap-${GCC_BOOTSTRAP_VER}.tar.xz
 )"
 
 IUSE="audit caps compile-locales doc gd hardened headers-only multilib nscd 
profile selinux suid systemtap vanilla"
 
@@ -730,7 +730,7 @@ src_unpack() {
        # Consistency is not guaranteed between pkg_ and src_ ...
        sanity_prechecks
 
-       use multilib && unpack 
gcc-${GCC_BOOTSTRAP_VER}-multilib-bootstrap.tar.bz2
+       use multilib && unpack 
gcc-multilib-bootstrap-${GCC_BOOTSTRAP_VER}.tar.xz
 
        setup_env
 
@@ -933,7 +933,7 @@ glibc_do_configure() {
        if [[ -n ${GCC_BOOTSTRAP_VER} ]] && use multilib ; then
                echo 'main(){}' > "${T}"/test.c
                if ! $(tc-getCC ${CTARGET}) ${CFLAGS} ${LDFLAGS} "${T}"/test.c 
-Wl,-emain -lgcc 2>/dev/null ; then
-                       sed -i -e '/^CC = /s:$: 
-B$(objdir)/../'"gcc-${GCC_BOOTSTRAP_VER}/${ABI}:" config.make || die
+                       sed -i -e '/^CC = /s:$: 
-B$(objdir)/../'"gcc-multilib-bootstrap-${GCC_BOOTSTRAP_VER}/${ABI}:" 
config.make || die
                fi
        fi
 }

Reply via email to