Re-adjusting the toolchain
Now that the new C libraries have been installed, it's time to re-adjust
our toolchain. We'll adjust it so that it will link any newly compiled program
against the new C libraries. Basically, this is the reverse of what we did
in the "Locking in" stage in the beginning of the previous chapter.
The first thing to do is to adjust the linker scripts. For this we
retained the source and build directories from the second pass over Binutils.
Install the adjusted linker scripts by running the following from within the
binutils-build directory:
make -C ld INSTALL=/stage1/bin/install install-data-local
The linker scripts now contain
no mention of /stage1/lib anymore.
From now on every compiled program will link only
against the libraries in /usr/lib and
/lib. The extra
INSTALL=/stage1/bin/install is needed because the
Makefile created during the second pass still contains the reference to
/usr/bin/install, which we obviously haven't installed
yet.
You can now remove the Binutils source and build directories.
The next thing to do is to amend our GCC specs file so that it points
to the new dynamic linker. Just like earlier on, we use a sed to accomplish
this:
SPECFILE=/stage1/lib/gcc-lib/*/*/specs
sed -e 's@/stage1/lib/ld.so.1@/lib/ld.so.1@g' \
-e 's@/stage1/lib/ld-linux.so.2@/lib/ld-linux.so.2@g'
$SPECFILE > newspecfile
mv newspecfile $SPECFILE
unset SPECFILE
Again, cutting and pasting the above is recommended. And just like
before, it is a good idea to check the linker scripts and the specs file to
ensure the intended changes were actually made.
Note that the linker scripts will still contain a reference to
/stage1/i686-pc-linux-gnu/lib. This
is unavoidable, but luckily does not present a problem. There are no
libraries in that location as all the temporary stage1 libraries are
located in /stage1/lib.