stdenv bootstrap: hack around glibc version mismatch

With this we shouldn't need other workarounds for the LTO problems.
This commit is contained in:
Vladimír Čunát 2021-06-30 19:47:13 +02:00
parent e9a1b2009e
commit 5a71fa8447
No known key found for this signature in database
GPG key ID: E747DF1F9575A3AA

View file

@ -258,6 +258,25 @@ in
# Rewrap the binutils with the new glibc, so both the next # Rewrap the binutils with the new glibc, so both the next
# stage's wrappers use it. # stage's wrappers use it.
libc = getLibc self; 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
'';
};
}; };
}; };
}) })