Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gcc: if isPower64, add --with-long-double-64 --without-long-double-128 #170857

Closed
wants to merge 7 commits into from
Closed

gcc: if isPower64, add --with-long-double-64 --without-long-double-128 #170857

wants to merge 7 commits into from

Commits on Apr 20, 2022

  1. stdenv: force gmp to rebuild in stage4 of the bootstrap

    As explained in the comment, this ensures that stage4-coreutils does
    not leak a reference to the bootstrap-files by way of libgmp.  This
    will allow the next patch in this series to build stage4-coreutils
    using a dynamically-linked (rather than statically-linked) libgmp.
    Adam Joseph committed Apr 20, 2022
    Configuration menu
    Copy the full SHA
    c527af1 View commit details
    Browse the repository at this point in the history
  2. stdenv: cause makeStaticLibraries usage to agree with usage spec

    The usage of `makeStaticLibraries` in stdenv/linux/default.nix is
    prefaced by this comment:
    
      # Link GCC statically against GMP etc.  This makes sense because
      # these builds of the libraries are only used by GCC, so it
      # reduces the size of the stdenv closure.
    
    However "these builds of the libraries are only used by GCC" is not
    actually true.  As currently written, the stage4 coreutils links
    against these customized, static-ified libraries.
    
    Beside the fact that the code doesn't actually do what it says, this
    causes other problems as well.  One example is #168983, which arises
    because have a dynamically-linked binary (coreutils) which is built
    from statically-linked libraries (libgmp.a); doing this causes mayhem
    on platforms where `-fstack-protector` needs an auxiliary
    `libssp.{so,a}` library; we end up with link failures because some
    parts of the resulting binary want `libssp.so` and other parts want
    `libssp_nonshared.a`.
    
    Let's make the code actually do what the comment says, by moving these
    definitions into the `gcc-unwrapped` override.  This will cause the
    stage4-coreutils to link against libgmp dynamically, rather than
    statically.  For this reason this commit depends on the previous
    commit, which allows that to be done without creating a forbidden
    reference from stdenv-final to the bootstrap-files.
    Adam Joseph committed Apr 20, 2022
    Configuration menu
    Copy the full SHA
    cad68ef View commit details
    Browse the repository at this point in the history
  3. stdenv: label the ephemeral coreutils-stage4 package

    During stdenv bootstrapping, coreutils is built twice.  This makes
    troubleshooting very difficult, because both packages have
    name="coreutils", so it is a hassle to figure out "which coreutils am
    I using / is not building"?
    
    The first of these builds is used only in stage4, and is not part of
    the final stdenv.  Let's label that one with a different `name`
    attribute to make it obvious which is which.
    Adam Joseph committed Apr 20, 2022
    Configuration menu
    Copy the full SHA
    9dd7908 View commit details
    Browse the repository at this point in the history
  4. Update pkgs/stdenv/linux/default.nix

    Co-authored-by: sternenseemann <[email protected]>
    Adam Joseph and sternenseemann authored Apr 20, 2022
    Configuration menu
    Copy the full SHA
    502d902 View commit details
    Browse the repository at this point in the history

Commits on Apr 27, 2022

  1. Configuration menu
    Copy the full SHA
    5d2aa78 View commit details
    Browse the repository at this point in the history

Commits on Apr 29, 2022

  1. gcc: backport cda41ce0 from gcc 11.1.0 if isPower64 && isMusl

    A bug in libgcc which manifests when building static binaries using
    musl-libc was fixed in gcc 11.1.0, but the fix has not been backported
    to gcc 10.  This commit cherry-picks the commit from upstream and
    applies it in the case (isPower64 && isMusl) where it matters:
    
      https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=cda41ce0e8414aec59e6b9fbe645d96e6e8193e2
    Adam Joseph committed Apr 29, 2022
    Configuration menu
    Copy the full SHA
    fde903a View commit details
    Browse the repository at this point in the history
  2. gcc: if isPower64, add --with-long-double-64 --without-long-double-128

    This commit causes powerpc*-*-gnu to be configured with 64-bit
    IEEE-compliant `long double` (the same as ordinary `double`) rather
    than the nonstandard, non-IEEE "IBM double" format from AIX.  Support
    for using only IEEE 128-bit doubles in glibc is not yet ready.
    
    This resolves several package test failures caused by weird
    nonstandard floating-point semantics.  It also eliminates a lot of
    difficulties that arise when using glibc-linked tools to compile for
    musl-libc and vice versa.
    
    There is a long comment included in gcc/common/platform-flags.nix
    explaining the situation and the reasoning.
    Adam Joseph committed Apr 29, 2022
    Configuration menu
    Copy the full SHA
    14af95e View commit details
    Browse the repository at this point in the history