source: chapter05/adjusting.xml@ b48b8c5

Last change on this file since b48b8c5 was b48b8c5, checked in by Manuel Canales Esparcia <manuel@…>, 19 years ago

Removed beginpage tags.

git-svn-id: http://svn.linuxfromscratch.org/LFS/branches/multi-arch/BOOK@4688 4aa44e1e-78dd-0310-a6d2-fbcd4c07a689

  • Property mode set to 100644
File size: 5.6 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
3 <!ENTITY % general-entities SYSTEM "../general.ent">
4 %general-entities;
5]>
6<sect1 id="ch-tools-adjusting">
7<title>Adjusting the Toolchain</title>
8<?dbhtml filename="adjusting.html"?>
9
10<para>Now that the temporary C libraries have been installed, all
11tools compiled in the rest of this chapter should be linked against
12these libraries. In order to accomplish this, the linker and the
13compiler's specs file need to be adjusted.</para>
14
15<para>The linker, adjusted at the end of the first pass of Binutils,
16is installed by running the following command from within the
17<filename class="directory">binutils-build</filename> directory:</para>
18
19<screen><userinput>make -C ld install</userinput></screen>
20
21<para>From this point onwards, everything will link only
22against the libraries in <filename class="directory">/tools/lib</filename>.</para>
23
24<note><para>If the earlier warning to retain the Binutils source and
25build directories from the first pass was missed, ignore the above
26command. This results in a small chance that the subsequent testing
27programs will link against libraries on the host. This is not ideal,
28but it is not a major problem. The situation is corrected when the
29second pass of Binutils is installed later.</para></note>
30
31<para>Now that the adjusted linker is installed, the Binutils build and source
32directories should be removed.</para>
33
34<para>The next task is to amend the GCC specs file so that it points
35to the new dynamic linker. A simple sed script will accomplish this:</para>
36
37<!-- Ampersands are needed to allow copy and paste -->
38
39<screen arch="x86"><userinput>SPECFILE=`gcc --print-file specs` &amp;&amp;
40sed 's@ /lib/ld-linux.so.2@ /tools/lib/ld-linux.so.2@g' \
41 $SPECFILE &gt; tempspecfile &amp;&amp;
42mv -f tempspecfile $SPECFILE &amp;&amp;
43unset SPECFILE</userinput></screen>
44
45<screen arch="raq2"><userinput>SPECFILE=`gcc --print-file specs` &amp;&amp;
46sed 's@ /lib/ld.so.1@ /tools/lib/ld.so.1@g' \
47 $SPECFILE &gt; tempspecfile &amp;&amp;
48mv -f tempspecfile $SPECFILE &amp;&amp;
49unset SPECFILE</userinput></screen>
50
51<para><phrase condition="html">It is recommended that the above
52command be copy-and-pasted in order to ensure accuracy.</phrase>
53
54Alternatively, the specs file can be edited by hand. This is done by
55replacing every occurrence of <quote arch="x86">/lib/ld-linux.so.2</quote>
56<quote arch="raq2">/lib/ld.so.1</quote> with <quote arch="x86">/tools/lib/ld-linux.so.2</quote>
57<quote arch="raq2">/tools/lib/ld.so.2</quote></para>
58
59<para>Be sure to visually inspect the specs file in order to verify the
60intended changes have been made.</para>
61
62<!-- For specific arch books, the next para isn't needed, IMHO.
63
64<important><para>If working on a platform where the name of the
65dynamic linker is something other than
66<filename class="libraryfile">ld-linux.so.2</filename>, replace
67<quote>ld-linux.so.2</quote> with the name of the platform's
68dynamic linker in the above commands. Refer back to <xref
69linkend="ch-tools-toolchaintechnotes" role=","/> if
70necessary.</para></important>
71-->
72
73<para>There is a possibility that some include files from the host
74system have found their way into GCC's private include dir. This can
75happen as a result of GCC's <quote>fixincludes</quote> process, which runs as part
76of the GCC build. This is explained in more detail later in this
77chapter. Run the following command to eliminate this
78possibility:</para>
79
80<screen><userinput>rm -f /tools/lib/gcc/*/*/include/{pthread.h,bits/sigthread.h}</userinput></screen>
81
82
83
84<caution><para>At this point, it is imperative to stop and ensure that
85the basic functions (compiling and linking) of the new toolchain are
86working as expected. To perform a sanity check, run the following
87commands:</para>
88
89<screen><userinput>echo 'main(){}' &gt; dummy.c
90cc dummy.c
91readelf -l a.out | grep ': /tools'</userinput></screen>
92
93<para>If everything is working correctly, there should be no errors,
94and the output of the last command will be of the form:</para>
95
96<screen arch="x86"><computeroutput>[Requesting program interpreter:
97 /tools/lib/ld-linux.so.2]</computeroutput></screen>
98
99<screen arch="raq2"><computeroutput>[Requesting program interpreter:
100 /tools/lib/ld.so.1]</computeroutput></screen>
101
102<para>Note that <filename class="directory">/tools/lib</filename>
103appears as the prefix of the dynamic linker.</para>
104
105<para>If the output is not shown as above or there was no output at
106all, then something is wrong. Investigate and retrace the steps to
107find out where the problem is and correct it. This issue must be
108resolved before continuing on. First, perform the sanity check again,
109using <command>gcc</command> instead of <command>cc</command>. If this
110works, then the <filename class="symlink">/tools/bin/cc</filename> symlink is missing.
111Revisit <xref linkend="ch-tools-gcc-pass1" role=","/> and install the symlink.
112Next, ensure that the <envar>PATH</envar> is correct. This can be checked by running
113<command>echo $PATH</command> and verifying that <filename
114class="directory">/tools/bin</filename> is at the head of the list. If
115the <envar>PATH</envar> is wrong it could mean that you are not logged in as user
116<emphasis>lfs</emphasis> or that something went wrong back in <xref
117linkend="ch-tools-settingenviron" role="."/> Another option is that something
118may have gone wrong with the specs file amendment above. In this case,
119redo the specs file amendment<phrase condition="html">, being careful to copy-and-paste the
120commands</phrase>.</para>
121
122<para>Once all is well, clean up the test files:</para>
123
124<screen><userinput>rm dummy.c a.out</userinput></screen>
125</caution>
126
127</sect1>
128
Note: See TracBrowser for help on using the repository browser.