aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chapter01/changelog.xml104
-rw-r--r--chapter03/packages.xml2
-rw-r--r--chapter03/patches.xml58
-rw-r--r--chapter05/adjusting.xml28
-rw-r--r--chapter05/gcc-pass2.xml79
-rw-r--r--chapter05/glibc.xml9
-rw-r--r--chapter05/tar.xml5
-rw-r--r--chapter06/gcc.xml19
-rw-r--r--chapter06/glibc.xml31
-rw-r--r--chapter06/grub.xml9
-rw-r--r--chapter06/inetutils.xml4
-rw-r--r--chapter06/kbd.xml5
-rw-r--r--chapter06/readjusting.xml9
-rw-r--r--chapter06/tar.xml5
-rw-r--r--chapter08/kernel.xml2
-rw-r--r--general.ent6
-rw-r--r--patches.ent13
17 files changed, 293 insertions, 95 deletions
diff --git a/chapter01/changelog.xml b/chapter01/changelog.xml
index 71e607baa..e5a93dfae 100644
--- a/chapter01/changelog.xml
+++ b/chapter01/changelog.xml
@@ -89,12 +89,18 @@ First a summary, then a detailed log.</para>
<itemizedlist>
<listitem><para>&bzip2-bzgrep-patch;</para></listitem>
<listitem><para>&bzip2-docs-patch;</para></listitem>
-<listitem><para>&gcc-linkonce-patch;</para></listitem>
-<listitem><para>&gcc-no_fixincludes-patch;</para></listitem>
<listitem><para>&gcc-specs-patch;</para></listitem>
+<listitem><para>&glibc-gcc4_elf-patch;</para></listitem>
+<listitem><para>&glibc-gcc4_iconvdata-patch;</para></listitem>
+<listitem><para>&glibc-gcc4_mathtest-patch;</para></listitem>
+<listitem><para>&glibc-gcc4_string-patch;</para></listitem>
+<listitem><para>&glibc-gcc4_symbols-patch;</para></listitem>
<listitem><para>&glibc-testfix-patch;</para></listitem>
-<listitem><para>&perl-libc-patch;</para></listitem>
+<listitem><para>&inetutils-gcc4_fixes-patch;</para></listitem>
+<listitem><para>&kbd-gcc4_fixes-patch;</para></listitem>
<listitem><para>&mktemp-tempfile-patch;</para></listitem>
+<listitem><para>&perl-libc-patch;</para></listitem>
+<listitem><para>&tar-gcc4_fix-patch;</para></listitem>
<listitem><para>&util-linux-reiser_crash-patch;</para></listitem>
<listitem><para>&vim-security_fix-patch;</para></listitem>
</itemizedlist>
@@ -118,6 +124,12 @@ First a summary, then a detailed log.</para>
<listitem><para>September 8, 2005 [jhuntwork]: Upgrade to groff-1.19.2</para>
</listitem>
+<listitem><para>September 6, 2005 [ken]: Reworded the glibc text to expect
+test failures.</para></listitem>
+
+<listitem><para>September 5, 2005 [ken]: Add patch to fix some of the math
+tests in glibc.</para></listitem>
+
<listitem><para>September 4, 2005 [matt]: Add patch to stop
<command>cfdisk</command> segfaulting when invoked on devices with partitions
that don't contain an ext2, ext3, xfs or jfs filesystem (see bug 1604)</para>
@@ -129,12 +141,36 @@ that don't contain an ext2, ext3, xfs or jfs filesystem (see bug 1604)</para>
<listitem><para>September 4, 2005 [matt]: Upgrade to findutils-4.2.25</para>
</listitem>
+<listitem><para>September 2, 2005 [matt]: The optimization flag for util-linux
+comes from <filename>configure</filename> rather than
+<filename>MCONFIG</filename>, so adjust the <command>sed</command> in order for
+the segfault fix to actually work.</para></listitem>
+
+<listitem><para>September 2, 2005 [matt]: Avoid the potential race condition
+when invoking <command>find</command> to remove GCC's fixed headers.</para>
+</listitem>
+
+<listitem><para>August 30th, 2005 [matt]: Work around a segfault in cfdisk by
+compiling with -O instead of the default -O2 optimization setting (fixes bug
+1604).</para></listitem>
+
+<listitem><para>August 30th, 2005 [matt]: Update the inetutils patch to use the
+upstream fix for GCC-4.x compilation problems (fixes bug 1602).</para></listitem>
+
<listitem><para>August 30th, 2005 [matt]: Upgrade to shadow-2.0.12</para>
</listitem>
+<listitem><para>August 30th, 2005 [ken]: Remove <command>sed -i</command>
+ commands from gcc-pass2.</para></listitem>
+
<listitem><para>August 28th, 2005 [jhuntwork]: Adjusted tar commands in Bash
and Glibc chapter six builds for consistency</para></listitem>
+<listitem><para>August 23rd, 2005 [matt]: <command>find</command> may fail due
+to a race condition when deleting files. Remove the &amp;&amp; construct in
+chapter05/adjusting.xml so that the rest of the commands for removing fixed
+headers will be executed (fixes bug 1621).</para></listitem>
+
<listitem><para>August 23rd, 2005 [matt]: Install Udev's documentation relating
to configuring rules (fixes bug 1622)</para></listitem>
@@ -149,9 +185,9 @@ to /bin as they aren't required to be there (fixes bug 1620).</para></listitem>
<listitem><para>August 19th, 2005 [matt]: Upgrade to file-4.15</para></listitem>
-<listitem><para>August 18th, 2005 [matt]: Refrain from using the undocumented
---print-file switch for GCC's spec file edit. Use -print-file-name=specs
-instead (Greg Schafer).</para></listitem>
+<listitem><para>August 18th, 2005 [matt]: Simplify the method for finding where
+GCC's default specs file and private include directory live. Additionally,
+don't assume the host's sed supports the -i switch.</para></listitem>
<listitem><para>August 18th, 2005 [ken]: Add a patch to sanitise bzgrep's
handling of filenames.</para></listitem>
@@ -163,11 +199,14 @@ handling of filenames.</para></listitem>
<listitem><para>August 16th, 2005 [matt]: Upgraded to linux-2.6.12.5.</para>
</listitem>
+<listitem><para>August 15th, 2005 [matt]: Alter the GCC -fomit-frame-pointer sed
+to protect from multiple invocations (Greg Schafer)</para></listitem>
+
<listitem><para>August 14th, 2005 [ken]: Upgrade shadow to 4.0.11.1 with
--enable-shadowgrp as advised by Greg Schafer.</para></listitem>
-<listitem><para>August 14th, 2005 [matt]: Add a sed to prevent the UFS test
-from being run (fixes bug 1595).</para></listitem>
+<listitem><para>August 14th, 2005 [matt]: Mention the common libmudflap test
+failures in GCC (fixes bug 1615).</para></listitem>
<listitem><para>August 14th, 2005 [matt]: Added patch to install documentation
for bzip2 (fixes bug 1603).</para>
@@ -176,6 +215,9 @@ for bzip2 (fixes bug 1603).</para>
<listitem><para>August 14th, 2005 [matt]: Upgrade to linux-2.6.12.4.</para>
</listitem>
+<listitem><para>August 14th, 2005 [matt]: Add sed to chapter05/gcc-pass2 and chapter06/gcc to ensure they get built with -fomit-frame-pointer so it matches the
+bootstrap build in chapter05/gcc-pass1 (fixes bug 1609).</para></listitem>
+
<listitem><para>August 14th, 2005 [matt]: Upgrade to udev-067 including a fix
for the failing test (bug 1611).</para></listitem>
@@ -207,9 +249,19 @@ the latest modeline vulnerability.</para></listitem>
<listitem><para>July 30th, 2005 [matt]: Added instructions for installing Bash
documentation (Randy McMurchy).</para></listitem>
+<listitem><para>July 30th, 2005 [matt]: Remove GCC linkonce patch from chapter03/patches.xml as it's no longer used in the book</para></listitem>
+
<listitem><para>July 29th, 2005 [manuel]: Removed the text about defining
gvimrc.</para></listitem>
+<listitem><para>July 28th, 2005 [matt]: Add GCC-4 related patch for kbd</para></listitem>
+
+<listitem><para>July 28th, 2005 [matt]: Add GCC-4 related patch for inetutils</para></listitem>
+
+<listitem><para>July 28th, 2005 [matt]: Remove the note regarding a known test failure in GRUB. The test no longer fails under GCC-4</para></listitem>
+
+<listitem><para>July 28th, 2005 [matt]: Add GCC-4 related patch to chapter06 tar</para></listitem>
+
<listitem><para>July 27th, 2005 [matt]: Don't define gvim's configuration file
as we don't compile gvim in LFS (Bruce Dubbs).</para></listitem>
@@ -232,10 +284,46 @@ of previous contributors.</para></listitem>
<listitem><para>July 22nd, 2005 [manuel]: Added obfuscate.sh and modified the
Makefile to obfuscate e-mail addresses in XHTML output.</para></listitem>
+<listitem><para>July 21st, 2005 [matt]: Add GCC-4 related patches to chapter06 glibc</para></listitem>
+
+<listitem><para>July 21st, 2005 [matt]: Unset the GCC_INCLUDEDIR variable once
+it's no longer needed.</para></listitem>
+
<listitem><para>July 19th, 2005 [matt]: Removed flex++ from the list of installed files, as it is no longer present (Randy McMurchy)</para></listitem>
+<listitem><para>July 18th, 2005 [matt]: Re-added the explanation of the fixincludes process and rewording where necessary (Chris Staub), and reworded description of the specs patch.</para></listitem>
+
+<listitem><para>July 18th, 2005 [matt]: Remove all host headers brought in via the fixincludes process, not just pthread.h and sigaction.h</para></listitem>
+
+<listitem><para>July 17th, 2005 [matt]: Slightly adjusted the specs file seds,
+to prevent multiple seds from adversely affecting them.</para></listitem>
+
+<listitem><para>July 17th, 2005 [matt]: Removed the fixincludes sed from
+gcc-pass1 as we may need to fix up host's headers. Also reinstate the
+associated removal of pthread.h and sigthread.h.</para></listitem>
+
+<listitem><para>July 16th, 2005 [jhuntwork]: Added sed to chapter 5 gcc builds
+to force the fixincludes to use the headers in /tools and not the host.</para></listitem>
+
+<listitem><para>July 16th, 2005 [jhuntwork]: Removed no_fixincludes and linkonce
+patches for gcc4. Also removed the command to remove the fixed pthread.h.</para></listitem>
+
+<listitem><para>July 16th, 2005 [jhuntwork]: Fixed adjusting toolchain sed for both
+chapters 5 and 6.</para></listitem>
+
<listitem><para>July 15th, 2005 [matt]: Updated to Linux-2.6.12.3.</para></listitem>
+<listitem><para>July 15th, 2005 [matt]: Added a patch to enable tar to build
+with gcc-4.0.1</para></listitem>
+
+<listitem><para>July 15th, 2005 [matt]: GCC-4.x no longer installs its
+specs file by default. Alter the toolchain adjustment stage to first
+dump the specs file where GCC will find it, then alter it.</para></listitem>
+
+<listitem><para>July 15th, 2005 [matt]: Added patches for chapter 5's Glibc to build with gcc-4.0.1</para></listitem>
+
+<listitem><para>July 15th, 2005 [matt]: Updated to gcc-4.0.1.</para></listitem>
+
<listitem><para>July 15th, 2005 [matt]: Updated to udev-063.</para></listitem>
<listitem><para>July 13th, 2005 [matt]: Updated to automake-1.9.6.</para></listitem>
diff --git a/chapter03/packages.xml b/chapter03/packages.xml
index 040ccdd4a..d5c71213b 100644
--- a/chapter03/packages.xml
+++ b/chapter03/packages.xml
@@ -130,7 +130,7 @@ url="ftp://ftp.linuxfromscratch.org/pub/lfs/"/>.</para></note>
</varlistentry>
<varlistentry>
-<term>GCC (&gcc-version;) - 26,952 KB:</term>
+<term>GCC (&gcc-version;) - 31,001 KB:</term>
<listitem>
<para><ulink url="&gnu;gcc/"/></para>
</listitem>
diff --git a/chapter03/patches.xml b/chapter03/patches.xml
index ed3b7bedc..be39fdde1 100644
--- a/chapter03/patches.xml
+++ b/chapter03/patches.xml
@@ -74,40 +74,75 @@ needed to build an LFS system:</para>
</varlistentry>
<varlistentry>
-<term> GCC Linkonce Patch - 12 KB:</term>
+<term>GCC Specs Patch - 14 KB:</term>
<listitem>
-<para><ulink url="&patches-root;&gcc-linkonce-patch;"/></para>
+<para><ulink url="&patches-root;&gcc-specs-patch;"/></para>
</listitem>
</varlistentry>
<varlistentry>
-<term>GCC No-Fixincludes Patch - 1 KB:</term>
+<term>Glibc Fix Testsuite Patch - 1 KB:</term>
<listitem>
-<para><ulink url="&patches-root;&gcc-no_fixincludes-patch;"/></para>
+<para><ulink url="&patches-root;&glibc-testfix-patch;"/></para>
</listitem>
</varlistentry>
<varlistentry>
-<term>GCC Specs Patch - 14 KB:</term>
+<term>Glibc GCC-4.x Symbols Patch - 5 KB:</term>
<listitem>
-<para><ulink url="&patches-root;&gcc-specs-patch;"/></para>
+<para><ulink url="&patches-root;&glibc-gcc4_symbols-patch;"/></para>
</listitem>
</varlistentry>
<varlistentry>
-<term>Glibc Fix Testsuite Patch - 1 KB:</term>
+<term>Glibc GCC-4.x String Patch - 2 KB:</term>
<listitem>
-<para><ulink url="&patches-root;&glibc-testfix-patch;"/></para>
+<para><ulink url="&patches-root;&glibc-gcc4_string-patch;"/></para>
</listitem>
</varlistentry>
<varlistentry>
+<term>Glibc GCC-4.x ELF Patch - 15KB:</term>
+<listitem>
+<para><ulink url="&patches-root;&glibc-gcc4_elf-patch;"/></para>
+</listitem>
+</varlistentry>
+
+<varlistentry>
+<term>Glibc GCC-4.x Iconvdata Patch - 1 KB:</term>
+<listitem>
+<para><ulink url="&patches-root;&glibc-gcc4_iconvdata-patch;"/></para>
+</listitem>
+</varlistentry>
+
+<varlistentry>
+<term>Glibc GCC-4.x Mathtest Patch - 9 KB:</term>
+<listitem>
+<para><ulink url="&patches-root;&glibc-gcc4_mathtest-patch;"/></para>
+</listitem>
+</varlistentry>
+
+<varlistentry>
<term>Gzip Security Patch - 2 KB:</term><listitem>
<para><ulink url="&patches-root;&gzip-security_fix-patch;"/></para>
</listitem>
</varlistentry>
<varlistentry>
+<term>Kbd GCC-4.x Fix Patch - 1 KB:</term>
+<listitem>
+<para><ulink url="&patches-root;&kbd-gcc4_fixes-patch;"/></para>
+</listitem>
+</varlistentry>
+
+<varlistentry>
+<term>Inetutils GCC-4.x Fix Patch - 2 KB:</term>
+<listitem>
+<para><ulink url="&patches-root;&inetutils-gcc4_fixes-patch;"/></para>
+</listitem>
+</varlistentry>
+
+<varlistentry>
<term>Inetutils No-Server-Man-Pages Patch - 4 KB:</term>
<listitem>
<para><ulink url="&patches-root;&inetutils-man_pages-patch;"/></para>
@@ -150,6 +185,13 @@ needed to build an LFS system:</para>
</varlistentry>
<varlistentry>
+<term>Tar GCC-4.x Fix Patch - 1 KB:</term>
+<listitem>
+<para><ulink url="&patches-root;&tar-gcc4_fix-patch;"/></para>
+</listitem>
+</varlistentry>
+
+<varlistentry>
<term>Util-linux Cramfs Patch - 3 KB:</term> <listitem>
<para><ulink url="&patches-root;&util-linux-cramfs-patch;"/></para>
</listitem>
diff --git a/chapter05/adjusting.xml b/chapter05/adjusting.xml
index 3f5ff2958..1991bd36d 100644
--- a/chapter05/adjusting.xml
+++ b/chapter05/adjusting.xml
@@ -31,14 +31,16 @@ second pass of Binutils is installed later.</para></note>
<para>Now that the adjusted linker is installed, the Binutils build and source
directories should be removed.</para>
-<para>The next task is to amend the GCC specs file so that it points
-to the new dynamic linker. A simple sed script will accomplish this:</para>
+<para>The next task is to point GCC to the new dynamic linker. This is done by
+dumping GCC's <quote>specs</quote> file to a location where GCC will look for it
+by default. A simple <command>sed</command> substitution then alters the
+dynamic linker that GCC will use:</para>
<!-- Ampersands are needed to allow copy and paste -->
-<screen><userinput>SPECFILE=`gcc -print-file-name=specs` &amp;&amp;
-sed 's@ /lib/ld-linux.so.2@ /tools/lib/ld-linux.so.2@g' \
- $SPECFILE &gt; tempspecfile &amp;&amp;
+<screen><userinput>SPECFILE=`dirname $(gcc -print-libgcc-file-name)`/specs &amp;&amp;
+gcc -dumpspecs > $SPECFILE &amp;&amp;
+sed 's@^/lib/ld-linux.so.2@/tools&amp;@g' $SPECFILE &gt; tempspecfile &amp;&amp;
mv -f tempspecfile $SPECFILE &amp;&amp;
unset SPECFILE</userinput></screen>
@@ -59,14 +61,16 @@ dynamic linker in the above commands. Refer back to <xref
linkend="ch-tools-toolchaintechnotes" role=","/> if
necessary.</para></important>
-<para>There is a possibility that some include files from the host
-system have found their way into GCC's private include dir. This can
-happen as a result of GCC's <quote>fixincludes</quote> process, which runs as part
-of the GCC build. This is explained in more detail later in this
-chapter. Run the following command to eliminate this
-possibility:</para>
+<para>There is a possibility that some header files from the host system have
+found their way into GCC's private include dir. This can happen as a result of
+GCC's <quote>fixincludes</quote> process, which runs as part of the GCC build.
+This is explained in more detail later in this chapter. Run the following commands to remove those header files (you may find it easier to copy and paste these commands, rather than typing them by hand, due to their length):</para>
-<screen><userinput>rm -f /tools/lib/gcc/*/*/include/{pthread.h,bits/sigthread.h}</userinput></screen>
+<!-- && used to ease copy and pasting -->
+<screen><userinput>GCC_INCLUDEDIR=`dirname $(gcc -print-libgcc-file-name)`/include &amp;&amp;
+find ${GCC_INCLUDEDIR}/* -maxdepth 0 -xtype d -exec rm -rf '{}' \; &amp;&amp;
+rm -f `grep -l "DO NOT EDIT THIS FILE" ${GCC_INCLUDEDIR}/*` &amp;&amp;
+unset GCC_INCLUDEDIR</userinput></screen>
<caution><para>At this point, it is imperative to stop and ensure that
the basic functions (compiling and linking) of the new toolchain are
diff --git a/chapter05/gcc-pass2.xml b/chapter05/gcc-pass2.xml
index 78118cc60..7e1a1d29d 100644
--- a/chapter05/gcc-pass2.xml
+++ b/chapter05/gcc-pass2.xml
@@ -58,36 +58,50 @@ Binutils until this issue is resolved. Please consult the LFS FAQ at <ulink
url="&lfs-root;/lfs/faq.html#no-ptys"/> for more information on how to get PTYs
working.</para>
-<para>First correct a known problem and make an essential adjustment:</para>
-
-<screen><userinput>patch -Np1 -i ../&gcc-no_fixincludes-patch;
-patch -Np1 -i ../&gcc-specs-patch;</userinput></screen>
-
-<para>The first patch disables the GCC <command>fixincludes</command>
-script. This was briefly mentioned earlier, but a more in-depth
-explanation of the fixincludes process is warranted here. Under normal
-circumstances, the GCC <command>fixincludes</command> script scans the
-system for header files that need to be fixed. It might find that some
-Glibc header files on the host system need to be fixed, and will fix
-them and put them in the GCC private include directory. In <xref
-linkend="chapter-building-system"/>, after the newer Glibc has been
-installed, this private include directory will be searched before the
-system include directory. This may result in GCC finding the fixed
-headers from the host system, which most likely will not match the
-Glibc version used for the LFS system.</para>
-
-<para>The second patch changes GCC's default location of the dynamic
-linker (typically <filename class="libraryfile">ld-linux.so.2</filename>). It also removes
-<filename class="directory">/usr/include</filename> from GCC's include
-search path. Patching now rather than adjusting the specs file after
-installation ensures that the new dynamic linker is used during the
-actual build of GCC. That is, all of the final (and temporary)
-binaries created during the build will link against the new
+<para>Under normal circumstances, the GCC <command>fixincludes</command> script
+scans the system for header files that need to be fixed (they may contain syntax
+errors, for example). The script might find that some Glibc header files on the
+host system need to be fixed, so fixes them and puts them in the GCC private
+include directory. In <xref linkend="chapter-building-system"/>, after the
+newer Glibc has been installed, this private include directory will be searched
+before the system include directory. This may result in GCC finding the fixed
+headers from the host system, which most likely will not match the Glibc version
+used for the LFS system.</para>
+
+<para>The following command adjusts where the GCC <command>fixincludes</command>
+script searches for headers, so that it fixes only the new headers under
+<filename class="directory">/tools</filename>, not the ones from your host
+system.</para>
+
+<screen><userinput>cp gcc/Makefile.in{,.orig} &amp;&amp;
+sed 's@\(^NATIVE_SYSTEM_HEADER_DIR =\).*@\1 /tools/include@g' \
+ gcc/Makefile.in.orig &gt; gcc/Makefile.in</userinput></screen>
+
+<para>The bootstrap build performed in <xref linkend="ch-tools-gcc-pass1"/>
+built GCC with the <option>-fomit-frame-pointer</option> compiler flag.
+Non-bootstrap builds omit this flag by default, so apply the following
+<command>sed</command> to use it in order to ensure consistent compiler builds.
+</para>
+
+<screen><userinput>cp gcc/Makefile.in{,.tmp} &amp;&amp;
+sed 's/^XCFLAGS =$/&amp; -fomit-frame-pointer/' gcc/Makefile.in.tmp \
+ &gt; gcc/Makefile.in</userinput></screen>
+
+<para>Apply the following patch to change the location of GCC's default dynamic
+linker (typically <filename class="libraryfile">ld-linux.so.2</filename>):</para>
+
+<screen><userinput>patch -Np1 -i ../&gcc-specs-patch;</userinput></screen>
+
+<para>The above patch also removes
+<filename class="directory">/usr/include</filename> from GCC's include search
+path. Patching now rather than adjusting the specs file after installation
+ensures that the new dynamic linker is used during the actual build of GCC. That
+is, all of the binaries created during the build will link against the new
Glibc.</para>
-<important><para>The above patches are critical in ensuring a
+<important><para>The above patch is critical in ensuring a
successful overall build. Do not forget to apply
-them.</para></important>
+it.</para></important>
<para>Create a separate build directory again:</para>
@@ -180,10 +194,13 @@ failures. To receive a summary of the test suite results, run:</para>
<para>Results can be compared with those located at <ulink
url="&test-results;"/>.</para>
-<para>A few unexpected failures cannot always be avoided. The
-GCC developers are usually aware of these issues, but have not
-resolved them yet. Unless the test results are vastly different from
-those at the above URL, it is safe to continue.</para>
+<para>A few unexpected failures cannot always be avoided. The GCC developers are
+usually aware of these issues, but have not resolved them yet. In particular,
+the <filename class="libraryfile">libmudflap</filename> tests are known be
+particularly problematic as a result of a bug in GCC (<ulink
+url="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20003"/>). Unless the test
+results are vastly different from those at the above URL, it is safe to
+continue.</para>
<para>Install the package:</para>
diff --git a/chapter05/glibc.xml b/chapter05/glibc.xml
index 068fef71a..f0119bbaf 100644
--- a/chapter05/glibc.xml
+++ b/chapter05/glibc.xml
@@ -45,6 +45,15 @@ The problem has been determined to be with the tests themselves, not with the C
<screen><userinput>patch -Np1 -i ../&glibc-testfix-patch;</userinput></screen>
+<para>Apply the following patches to enable Glibc to compile with
+GCC-&gcc-version;:</para>
+
+
+<screen><userinput>patch -Np1 -i ../&glibc-gcc4_symbols-patch;
+patch -Np1 -i ../&glibc-gcc4_string-patch;
+patch -Np1 -i ../&glibc-gcc4_elf-patch;
+patch -Np1 -i ../&glibc-gcc4_iconvdata-patch;</userinput></screen>
+
<para>The Glibc documentation recommends building Glibc outside of the source
directory in a dedicated build directory:</para>
diff --git a/chapter05/tar.xml b/chapter05/tar.xml
index 6c18c6111..15c522c0d 100644
--- a/chapter05/tar.xml
+++ b/chapter05/tar.xml
@@ -29,6 +29,11 @@
<sect2 role="installation">
<title>Installation of Tar</title>
+<para>If you wish to run the test suite, apply the following patch to fix
+some issues with GCC-&gcc-version;:</para>
+
+<screen><userinput>patch -Np1 -i ../&tar-gcc4_fix-patch;</userinput></screen>
+
<para>Prepare Tar for compilation:</para>
<screen><userinput>./configure --prefix=/tools</userinput></screen>
diff --git a/chapter06/gcc.xml b/chapter06/gcc.xml
index 4c13eed95..de204c1f4 100644
--- a/chapter06/gcc.xml
+++ b/chapter06/gcc.xml
@@ -38,17 +38,6 @@ variables that override default optimizations have been defined, such
as <envar>CFLAGS</envar> and <envar>CXXFLAGS</envar>,
unset them when building GCC.</para>
-<para>Apply only the No-Fixincludes patch (not the Specs patch) also
-used in the previous chapter:</para>
-
-<screen><userinput>patch -Np1 -i ../&gcc-no_fixincludes-patch;</userinput></screen>
-
-<para>GCC fails to compile some packages outside of a base Linux From Scratch
-install (e.g., Mozilla and kdegraphics) when used in conjunction with newer
-versions of Binutils. Apply the following patch to fix this issue:</para>
-
-<screen><userinput>patch -Np1 -i ../&gcc-linkonce-patch;</userinput></screen>
-
<para>Apply a <command>sed</command> substitution that will suppress the
installation of <filename class="libraryfile">libiberty.a</filename>. The
version of <filename class="libraryfile">libiberty.a</filename> provided by
@@ -56,6 +45,14 @@ Binutils will be used instead:</para>
<screen><userinput>sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in</userinput></screen>
+<para>The bootstrap build performed in <xref linkend="ch-tools-gcc-pass1"/>
+built GCC with the <option>-fomit-frame-pointer</option> compiler flag.
+Non-bootstrap builds omit this flag by default, so apply the following
+<command>sed</command> to use it in order to ensure consistent compiler builds.
+</para>
+
+<screen><userinput>sed -i 's/^XCFLAGS =$/&amp; -fomit-frame-pointer/' gcc/Makefile.in</userinput></screen>
+
<para>The GCC documentation recommends building GCC outside of the source
directory in a dedicated build directory:</para>
diff --git a/chapter06/glibc.xml b/chapter06/glibc.xml
index 653b4280c..a0f3b4277 100644
--- a/chapter06/glibc.xml
+++ b/chapter06/glibc.xml
@@ -20,7 +20,7 @@ arithmetic, and so on.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
<segtitle>&diskspace;</segtitle>
-<seglistitem><seg>12.3 SBU</seg><seg>476</seg></seglistitem>
+<seglistitem><seg>16.7 SBU</seg><seg>500</seg></seglistitem>
</segmentedlist>
<segmentedlist>
@@ -68,6 +68,19 @@ C library or the kernel. This patch fixes the problem:</para>
<screen><userinput>patch -Np1 -i ../&glibc-testfix-patch;</userinput></screen>
+<para>Apply the following patches to enable Glibc to compile with
+GCC-&gcc-version;:</para>
+
+<screen><userinput>patch -Np1 -i ../&glibc-gcc4_symbols-patch;
+patch -Np1 -i ../&glibc-gcc4_string-patch;
+patch -Np1 -i ../&glibc-gcc4_elf-patch;
+patch -Np1 -i ../&glibc-gcc4_iconvdata-patch;</userinput></screen>
+
+<para>The following patch corrects the expected results for some of the math
+tests on x86 processors when compiled with GCC-&gcc-version;:</para>
+
+<screen><userinput>patch -Np1 -i ../&glibc-gcc4_mathtest-patch;</userinput></screen>
+
<para>The Glibc documentation recommends building Glibc outside of the source
directory in a dedicated build directory:</para>
@@ -102,16 +115,24 @@ circumstance.</para></important>
<para>Test the results:</para>
-<screen><userinput>make check</userinput></screen>
+<screen><userinput>
+make -k check &gt;glibc-check-log 2&gt;&amp;1 ; grep Error glibc-check-log
+</userinput></screen>
+
+<para>On at least i686 you can expect to see failures in the <emphasis>test-double
+</emphasis> and <emphasis>test-idouble</emphasis> math tests with
+gcc-&gcc-version;, as well as an expected (ignored) failure in <emphasis>
+posix/annexc</emphasis>. These two failures in the math tests appear to be
+harmless.</para>
<para>The Glibc test suite is highly dependent on certain functions of
-the host system, in particular the kernel. In general, the Glibc test
-suite is always expected to pass. However, in certain circumstances,
+the host system, in particular the kernel. In certain circumstances,
some failures are unavoidable. This is a list of the most common
issues:</para>
<itemizedlist>
-<listitem><para>The <emphasis>math</emphasis> tests sometimes fail when running
+<listitem><para>The <emphasis>math</emphasis> tests sometimes fail in other tests
+when running
on systems where the CPU is not a relatively new genuine Intel or authentic AMD.
Certain optimization settings are also known to be a factor here.</para></listitem>
diff --git a/chapter06/grub.xml b/chapter06/grub.xml
index 1e852896a..141e3bff6 100644
--- a/chapter06/grub.xml
+++ b/chapter06/grub.xml
@@ -46,14 +46,7 @@ unset them when building GRUB.</para>
<screen><userinput>make</userinput></screen>
<para>To test the results, issue:
-<userinput>sed -i '/ufs2/d' stage2/size_test &amp;&amp;
-make check</userinput>.</para>
-
-<para>The UFS test is known to fail due to a compiler issue. The failure
-prevents the rest of the tests from being run, so the <command>sed</command>
-command is used to avoid the failure. The UFS test failure can be ignored
-unless you plan to boot from a UFS partition. The partitions are normally only
-used by Sun workstations.</para>
+<userinput>make check</userinput>.</para>
<para>Install the package:</para>
diff --git a/chapter06/inetutils.xml b/chapter06/inetutils.xml
index 1ddb547fb..c8251c5c2 100644
--- a/chapter06/inetutils.xml
+++ b/chapter06/inetutils.xml
@@ -30,6 +30,10 @@ Diffutils, GCC, Glibc, Grep, Make, Ncurses, and Sed</seg></seglistitem>
<sect2 role="installation">
<title>Installation of Inetutils</title>
+<para>Apply a patch to Inetutils to enable it to compile with GCC-&gcc-version;:</para>
+
+<screen><userinput>patch -Np1 -i ../&inetutils-gcc4_fixes-patch;</userinput></screen>
+
<para>All programs that come with Inetutils will not be installed.
However, the Inetutils build system will insist on installing all the
man pages anyway. The following patch will correct this
diff --git a/chapter06/kbd.xml b/chapter06/kbd.xml
index 70a5980fe..1e71570be 100644
--- a/chapter06/kbd.xml
+++ b/chapter06/kbd.xml
@@ -30,6 +30,11 @@ Diffutils, Flex, GCC, Gettext, Glibc, Grep, Gzip, M4, Make, and Sed</seg></segli
<sect2 role="installation">
<title>Installation of Kbd</title>
+<para>Patch Kbd to fix a bug in <command>setfont</command> that is triggered
+when compiling with GCC-&gcc-version;:</para>
+
+<screen><userinput>patch -Np1 -i ../&kbd-gcc4_fixes-patch;</userinput></screen>
+
<para>Prepare Kbd for compilation:</para>
<screen><userinput>./configure</userinput></screen>
diff --git a/chapter06/readjusting.xml b/chapter06/readjusting.xml
index 760f35cb0..7c11d9333 100644
--- a/chapter06/readjusting.xml
+++ b/chapter06/readjusting.xml
@@ -51,11 +51,12 @@ problem. The above command takes care of this issue.</para>
<para>Remove the Binutils source and build directories now.</para>
<para>Next, amend the GCC specs file so that it points to the new
-dynamic linker. A <command>perl</command> command accomplishes this:</para>
+dynamic linker. A <command>sed</command> command accomplishes this:</para>
-<screen><userinput>perl -pi -e 's@ /tools/lib/ld-linux.so.2@ /lib/ld-linux.so.2@g;' \
- -e 's@\*startfile_prefix_spec:\n@$_/usr/lib/ @g;' \
- `gcc -print-file-name=specs`</userinput></screen>
+<screen><userinput>SPECFILE=`dirname $(gcc -print-libgcc-file-name)`/specs &amp;&amp;
+gcc -dumpspecs > $SPECFILE &amp;&amp;
+sed -i 's@^/tools/lib/ld-linux.so.2@/lib/ld-linux.so.2@g' $SPECFILE &amp;&amp;
+unset SPECFILE</userinput></screen>
<para>It is a good idea to visually inspect the specs file to verify the intended
change was actually made.</para>
diff --git a/chapter06/tar.xml b/chapter06/tar.xml
index c8c2c661d..938bd50ff 100644
--- a/chapter06/tar.xml
+++ b/chapter06/tar.xml
@@ -30,6 +30,11 @@ Diffutils, GCC, Gettext, Glibc, Grep, Make, and Sed</seg></seglistitem>
<sect2 role="installation">
<title>Installation of Tar</title>
+<para>Apply a patch to fix some issues with the test suite when using
+GCC-&gcc-version;:</para>
+
+<screen><userinput>patch -Np1 -i ../&tar-gcc4_fix-patch;</userinput></screen>
+
<para>Tar has a bug when the <parameter>-S</parameter> option is used
with files larger than 4 GB. The following patch properly fixes this issue:</para>
diff --git a/chapter08/kernel.xml b/chapter08/kernel.xml
index cb3efa913..ef242991e 100644
--- a/chapter08/kernel.xml
+++ b/chapter08/kernel.xml
@@ -70,7 +70,7 @@ we do not recommend this option. It is often better to explore all the
configuration menus and create the kernel configuration from
scratch.</para>
-<note><para>NPTL requires the kernel to be compiled with GCC-3.x, in this case
+<note><para>NPTL requires the kernel to be compiled with GCC-3.x or later, in this case
&gcc-version;. It is not recommended to compile the kernel with GCC-2.95.x, as
this causes failures in the Glibc test suite. Normally, this wouldn't be
mentioned as LFS doesn't build GCC-2.95.x. Unfortunately, the kernel
diff --git a/general.ent b/general.ent
index 918bcb62d..69f76e276 100644
--- a/general.ent
+++ b/general.ent
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<!ENTITY version "SVN-20050908">
-<!ENTITY releasedate "September 8, 2005">
+<!ENTITY version "SVN-20050909">
+<!ENTITY releasedate "September 9, 2005">
<!ENTITY milestone "6.2">
<!ENTITY generic-version "development"> <!-- Use "development", "testing", or "x.y[-pre{x}]" -->
@@ -40,7 +40,7 @@
<!ENTITY findutils-version "4.2.25">
<!ENTITY flex-version "2.5.31">
<!ENTITY gawk-version "3.1.4">
-<!ENTITY gcc-version "3.4.4">
+<!ENTITY gcc-version "4.0.1">
<!ENTITY gettext-version "0.14.5">
<!ENTITY glibc-version "2.3.5">
<!ENTITY grep-version "2.5.1a">
diff --git a/patches.ent b/patches.ent
index b92caee5d..2e75c5e42 100644
--- a/patches.ent
+++ b/patches.ent
@@ -14,14 +14,20 @@
<!ENTITY flex-fixes-patch "flex-&flex-version;-debian_fixes-3.patch">
-<!ENTITY gcc-no_fixincludes-patch "gcc-&gcc-version;-no_fixincludes-1.patch">
-<!ENTITY gcc-linkonce-patch "gcc-&gcc-version;-linkonce-1.patch">
-<!ENTITY gcc-specs-patch "gcc-&gcc-version;-specs-2.patch">
+<!ENTITY gcc-specs-patch "gcc-&gcc-version;-specs-1.patch">
<!ENTITY glibc-testfix-patch "glibc-&glibc-version;-fix_test-1.patch">
+<!ENTITY glibc-gcc4_symbols-patch "glibc-&glibc-version;-gcc4_fix_symbols-1.patch">
+<!ENTITY glibc-gcc4_string-patch "glibc-&glibc-version;-gcc4_fix_string-1.patch">
+<!ENTITY glibc-gcc4_elf-patch "glibc-&glibc-version;-gcc4_fix_elf-1.patch">
+<!ENTITY glibc-gcc4_iconvdata-patch "glibc-&glibc-version;-gcc4_fix_iconvdata-1.patch">
+<!ENTITY glibc-gcc4_mathtest-patch "glibc-&glibc-version;-gcc4_fix_math_tests-1.patch">
<!ENTITY gzip-security_fix-patch "gzip-&gzip-version;-security_fixes-1.patch">
+<!ENTITY kbd-gcc4_fixes-patch "kbd-&kbd-version;-gcc4_fixes-1.patch">
+
+<!ENTITY inetutils-gcc4_fixes-patch "inetutils-&inetutils-version;-gcc4_fixes-3.patch">
<!ENTITY inetutils-man_pages-patch "inetutils-&inetutils-version;-no_server_man_pages-1.patch">
<!ENTITY mktemp-tempfile-patch "mktemp-&mktemp-version;-add_tempfile-3.patch">
@@ -33,6 +39,7 @@
<!ENTITY sysklogd-fixes-patch "sysklogd-&sysklogd-version;-fixes-1.patch">
<!ENTITY tar-sparse_fix-patch "tar-&tar-version;-sparse_fix-1.patch">
+<!ENTITY tar-gcc4_fix-patch "tar-&tar-version;-gcc4_fix_tests-1.patch">
<!ENTITY util-linux-cramfs-patch "util-linux-&util-linux-version;-cramfs-1.patch">