Unverified Commit 5a71fa84 authored by Vladimír Čunát's avatar Vladimír Čunát
Browse files

stdenv bootstrap: hack around glibc version mismatch

With this we shouldn't need other workarounds for the LTO problems.
parent e9a1b200
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -258,6 +258,25 @@ in
        # Rewrap the binutils with the new glibc, so both the next
        # stage's wrappers use it.
        libc = getLibc self;

        # Unfortunately, when building gcc in the next stage, its LTO plugin
        # would use the final libc but `ld` would use the bootstrap one,
        # and that can fail to load.  Therefore we upgrade `ld` to use newer libc;
        # apparently the interpreter needs to match libc, too.
        bintools = self.stdenvNoCC.mkDerivation {
          inherit (prevStage.bintools.bintools) name;
          dontUnpack = true;
          dontBuild = true;
          # We wouldn't need to *copy* all, but it's easier and the result is temporary anyway.
          installPhase = ''
            mkdir -p "$out"/bin
            cp -a '${prevStage.bintools.bintools}'/bin/* "$out"/bin/
            chmod +w "$out"/bin/ld.bfd
            patchelf --set-interpreter '${getLibc self}'/lib/ld*.so.? \
              --set-rpath "${getLibc self}/lib:$(patchelf --print-rpath "$out"/bin/ld.bfd)" \
              "$out"/bin/ld.bfd
          '';
        };
      };
    };
  })