stdenv-bootstrap: force using new libc from stage2
This fix is needed to work around linker-errors such as undefined reference to `__libc_csu_fini' which I got in almost every derivation which is part of stage2. The reasoning behind this is that the startup-code was simplified[1] and thus `__libc_csu_fini` doesn't exist anymore. A workable solution is to use a newer libc which properly links in stage3. And actually this seems expected given the rationale for stage3: # Construct a third stdenv identical to the 2nd, except that this # one uses the rebuilt Glibc from stage2. It still uses the recent # binutils and rest of the bootstrap tools, including GCC. So this patch basically overrides the libraries inside `gcc-unwrapped` - which is basically the bootstrap tools and thus also contains the libc used in stage3 - with the shared objects from the freshly built libc from stage2. [1] https://sourceware.org/pipermail/libc-alpha/2021-March/123079.html
This commit is contained in:
parent
97acaf6d65
commit
7459a4021c
1 changed files with 14 additions and 1 deletions
|
@ -230,7 +230,7 @@ in
|
|||
overrides = self: super: {
|
||||
inherit (prevStage)
|
||||
ccWrapperStdenv
|
||||
gcc-unwrapped coreutils gnugrep
|
||||
coreutils gnugrep
|
||||
perl gnum4 bison;
|
||||
dejagnu = super.dejagnu.overrideAttrs (a: { doCheck = false; } );
|
||||
|
||||
|
@ -254,6 +254,19 @@ in
|
|||
'';
|
||||
});
|
||||
|
||||
gcc-unwrapped = self.stdenvNoCC.mkDerivation {
|
||||
inherit (prevStage.gcc-unwrapped) name;
|
||||
dontUnpack = true;
|
||||
dontBuild = true;
|
||||
installPhase = ''
|
||||
mkdir -p $out
|
||||
cp -ar ${prevStage.gcc-unwrapped}/* $out/
|
||||
chmod -R a+w $out/
|
||||
cp -a ${getLibc self}/lib/* $out/lib/
|
||||
chmod -R a-w $out/
|
||||
'';
|
||||
};
|
||||
|
||||
# This also contains the full, dynamically linked, final Glibc.
|
||||
binutils = prevStage.binutils.override {
|
||||
# Rewrap the binutils with the new glibc, so both the next
|
||||
|
|
Loading…
Reference in a new issue