aboutsummaryrefslogtreecommitdiffstats
path: root/chapter06/adjustingtoolchain.xml
blob: f302cd014b7069c150c7fe0118c3258a78cbd4d4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<sect1 id="ch06-adjustingtoolchain">
<title>Adjusting toolchain</title>
<?dbhtml filename="adjustingtoolchain.html" dir="chapter06"?>

<para>Now that we have compiled all the necessary tools, it is time to
re-adjust our toolchain. We will set it up so that it will link any newly
compiled program against the new Glibc. Basically, this is the reverse of
what we did in the "Locking in" stage in the beginning of chapter 5.</para>

<para>The first thing to do is to adjust the linker scripts. For this we
retained the <filename class="directory">binutils-build</filename>
directory from the second pass over Binutils. Run the following:</para>

<para><screen><userinput>cd binutils-build
make -C ld INSTALL=/stage1/bin/install install-data-local</userinput></screen></para>

<para>This installs the adjusted linker scripts. The linker scripts contain
no mention of <filename class="directory">/stage1/lib</filename> anymore.
From now on every compiled program will link <emphasis>only</emphasis>
against the libraries in <filename>/usr/lib</filename> and
<filename>/lib</filename>. The extra
<userinput>INSTALL=/stage1/bin/install</userinput> is needed because the
Makefile created during the second pass still contains the reference to
<filename>/usr/bin/install</filename>, which we obviously haven't installed
yet.</para>

<para>You can now remove the Binutils source and build directories.</para>

<para>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:</para>

<para><screen><userinput>SPECFILE=/stage1/lib/gcc-lib/*/*/specs
sed -e 's@/stage1/lib/ld.so.1@/lib/ld.so.1@g' \
&nbsp;&nbsp;&nbsp;&nbsp;-e 's@/stage1/lib/ld-linux.so.2@/lib/ld-linux.so.2@g' $SPECFILE > XX
mv XX $SPECFILE
unset SPECFILE</userinput></screen></para>

<para>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 o
ensure the intended changes were actually made.</para>

<para>Note that the linker scripts will still contain a reference to
<filename class="directory">/stage1/i686-pc-linux-gnu/lib</filename>. 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 <filename class="directory">/stage1/lib</filename>.</para>

</sect1>