source: chapter06/readjusting.xml@ 1ba726f

10.0 10.0-rc1 10.1 10.1-rc1 11.0 11.0-rc1 11.0-rc2 11.0-rc3 11.1 11.1-rc1 11.2 11.2-rc1 11.3 11.3-rc1 12.0 12.0-rc1 12.1 12.1-rc1 6.3 6.4 6.5 6.6 6.7 6.8 7.0 7.1 7.2 7.3 7.4 7.5 7.5-systemd 7.6 7.6-systemd 7.7 7.7-systemd 7.8 7.8-systemd 7.9 7.9-systemd 8.0 8.1 8.2 8.3 8.4 9.0 9.1 arm bdubbs/gcc13 ml-11.0 multilib renodr/libudev-from-systemd s6-init trunk xry111/arm64 xry111/arm64-12.0 xry111/clfs-ng xry111/lfs-next xry111/loongarch xry111/loongarch-12.0 xry111/loongarch-12.1 xry111/mips64el xry111/pip3 xry111/rust-wip-20221008 xry111/update-glibc
Last change on this file since 1ba726f was 1ba726f, checked in by Jeremy Huntwork <jhuntwork@…>, 18 years ago

Restore the use of *startfile_prefix_spec

git-svn-id: http://svn.linuxfromscratch.org/LFS/trunk/BOOK@7314 4aa44e1e-78dd-0310-a6d2-fbcd4c07a689

  • Property mode set to 100644
File size: 4.9 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-system-readjusting">
7<title>Re-adjusting the Toolchain</title>
8<?dbhtml filename="readjusting.html"?>
9
10<para>Now that the final C libraries have been installed, it is time to adjust
11the toolchain again. The toolchain will be adjusted so that it will link any
12newly compiled program against these new libraries. This is a similar process
13used in the <quote>Adjusting</quote> phase in the beginning of <xref
14linkend="chapter-temporary-tools"/>, but with the adjustments reversed. In <xref
15linkend="chapter-temporary-tools"/>, the chain was guided from the host's
16<filename class="directory">/{,usr/}lib</filename> directories to the new
17<filename class="directory">/tools/lib</filename> directory. Now, the chain will
18be guided from that same <filename class="directory">/tools/lib</filename>
19directory to the LFS <filename class="directory">/{,usr/}lib</filename>
20directories.</para>
21
22<para>First, backup the <filename class="directory">/tools</filename> linker, and
23replace it with the adjusted linker we made in chapter 5. We'll also create a
24link to its counterpart in <filename class="directory">/tools/$MACHTYPE/bin</filename></para>
25
26<screen><userinput>mv -v /tools/bin/{ld,ld-old}
27mv -v /tools/$MACHTYPE/bin/{ld,ld-old}
28mv -v /tools/bin/{ld-new,ld}
29ln -sv /tools/bin/ld /tools/$MACHTYPE/bin/ld</userinput></screen>
30
31<para>Next, amend the GCC specs file so that it points to the new
32dynamic linker, and so that GCC knows where to find its start files.
33A <command>perl</command> command accomplishes this:</para>
34
35<screen><userinput>gcc -dumpspecs | \
36perl -pi -e 's@/tools/lib/ld-linux.so.2@/lib/ld-linux.so.2@g;' \
37 -e 's@\*startfile_prefix_spec:\n@$_/usr/lib/ @g;' &gt; \
38 `dirname $(gcc --print-libgcc-file-name)`/specs
39</userinput></screen>
40
41<para>It is a good idea to visually inspect the specs file to verify the intended
42change was actually made.</para>
43
44<important><para>If working on a platform where the name of the
45dynamic linker is something other than
46<filename class="libraryfile">ld-linux.so.2</filename>, substitute
47<quote>ld-linux.so.2</quote> with the name of the platform's
48dynamic linker in the above commands. Refer back to <xref
49linkend="ch-tools-toolchaintechnotes" role=","/> if
50necessary.</para></important>
51
52<caution><para>It is imperative at this point to stop and ensure that
53the basic functions (compiling and linking) of the adjusted toolchain
54are working as expected. To do this, perform a sanity
55check:</para>
56
57<screen><userinput>echo 'main(){}' &gt; dummy.c
58cc dummy.c -Wl,--verbose &amp;&gt; dummy.log
59readelf -l a.out | grep ': /lib'</userinput></screen>
60
61<para>If everything is working correctly, there should be no errors,
62and the output of the last command will be (allowing for
63platform-specific differences in dynamic linker name):</para>
64
65<screen><computeroutput>[Requesting program interpreter: /lib/ld-linux.so.2]</computeroutput></screen>
66
67<para>Note that <filename class="directory">/lib</filename> is now
68the prefix of our dynamic linker.</para>
69
70<para>Now make sure that we're setup to use the correct start files:</para>
71
72<screen><userinput>grep "/usr/lib/crt.* " dummy.log</userinput></screen>
73
74<para>If everything is working correctly, there should be no errors,
75and the output of the last command will be:</para>
76
77<screen><computeroutput>attempt to open /usr/lib/crt1.o succeeded
78attempt to open /usr/lib/crti.o succeeded
79attempt to open /usr/lib/crtn.o succeeded</computeroutput></screen>
80
81<para>Next make sure that we're using the correct libc:</para>
82
83<screen><userinput>grep "/lib/libc.so.6 " dummy.log</userinput></screen>
84
85<para>If everything is working correctly, there should be no errors,
86and the output of the last command will be:</para>
87
88<screen><computeroutput>attempt to open /lib/libc.so.6 succeeded</computeroutput></screen>
89
90<para>Lastly, make sure GCC is using the correct dynamic linker:</para>
91
92<screen><userinput>grep found dummy.log</userinput></screen>
93
94<para>If everything is working correctly, there should be no errors,
95and the output of the last command will be (allowing for
96platform-specific differences in dynamic linker name):</para>
97
98<screen><computeroutput>found ld-linux.so.2 at /lib/ld-linux.so.2</computeroutput></screen>
99
100<para>If the output does not appear as shown above or is not received
101at all, then something is seriously wrong. Investigate and retrace the
102steps to find out where the problem is and correct it. The most likely
103reason is that something went wrong with the specs file amendment
104above. Any issues will need to be resolved before continuing on with
105the process.</para>
106
107<para>Once everything is working correctly, clean up the test
108files:</para>
109
110<screen><userinput>rm -v dummy.c a.out dummy.log</userinput></screen></caution>
111
112</sect1>
113
Note: See TracBrowser for help on using the repository browser.