Index: BOOK/boot/common/e2fsprogs.xml
===================================================================
--- BOOK/boot/common/e2fsprogs.xml	(revision 7c0efc591c7a097f3ea6a92e2a7fd07c572b1353)
+++ BOOK/boot/common/e2fsprogs.xml	(revision 9f61be5e733db4982ff24bd0a066e3b5a7a367ef)
@@ -75,5 +75,5 @@
     <para os="ad">Create needed symlinks for a bootable system:</para>
 
-<screen os="ae"><userinput>ln -sv /tools/sbin/{fsck.ext2,fsck.ext3,e2fsck} ${CLFS}/sbin</userinput></screen>
+<screen os="ae"><userinput>ln -sv /tools/sbin/{fsck.ext2,fsck.ext3,fsck.ext4,e2fsck} ${CLFS}/sbin</userinput></screen>
 
   </sect2>
Index: scripts/patch/binutils-patch.sh
===================================================================
--- scripts/patch/binutils-patch.sh	(revision 7c0efc591c7a097f3ea6a92e2a7fd07c572b1353)
+++ scripts/patch/binutils-patch.sh	(revision 9f61be5e733db4982ff24bd0a066e3b5a7a367ef)
@@ -16,5 +16,8 @@
 fi
 
-# 
+# Set Patch Directory
+#
+PATCH_DIR=$(pwd -P)/binutils
+ 
 # Download Binutils Source
 #
@@ -111,5 +114,5 @@
 #
 cd ~/tmp
-if [ -e ${PATCH_DIR}/${VERSION} ]; then
+if [ -e ${PATCH_DIR}/${SOURCEVERSION} ]; then
   rm -rf binutils-${SOURCEVERSION}.orig
   cp -ar binutils-${SOURCEVERSION} binutils-${SOURCEVERSION}.orig
@@ -118,5 +121,5 @@
   #
   cd ~/tmp/binutils-${SOURCEVERSION}
-  PATCH_FILES=$(ls ${PATCH_DIR}/${VERSION}/*.patch)
+  PATCH_FILES=$(ls ${PATCH_DIR}/${SOURCEVERSION}/*.patch)
   if [ "${PATCH_FILES}" != "" ]; then
     for pfile in ${PATCH_FILES}; do
Index: scripts/patch/binutils/2.19.1/01-ppc64_pie.patch
===================================================================
--- scripts/patch/binutils/2.19.1/01-ppc64_pie.patch	(revision 9f61be5e733db4982ff24bd0a066e3b5a7a367ef)
+++ scripts/patch/binutils/2.19.1/01-ppc64_pie.patch	(revision 9f61be5e733db4982ff24bd0a066e3b5a7a367ef)
@@ -0,0 +1,17 @@
+--- bfd/elf64-ppc.c.jj	2004-09-27 16:46:06.000000000 -0400
++++ bfd/elf64-ppc.c	2004-10-04 09:09:50.000000000 -0400
+@@ -9681,7 +9681,12 @@ ppc64_elf_relocate_section (bfd *output_
+ 	      else if (!SYMBOL_REFERENCES_LOCAL (info, &h->elf)
+ 		       && !is_opd
+ 		       && r_type != R_PPC64_TOC)
+-		outrel.r_info = ELF64_R_INFO (h->elf.dynindx, r_type);
++		{
++		  outrel.r_info = ELF64_R_INFO (h->elf.dynindx, r_type);
++		  if (h->elf.dynindx == -1
++		      && h->elf.root.type == bfd_link_hash_undefweak)
++		  memset (&outrel, 0, sizeof outrel);
++		}
+ 	      else
+ 		{
+ 		  /* This symbol is local, or marked to become local,
+
Index: scripts/patch/binutils/2.19.1/05-strip_common.patch
===================================================================
--- scripts/patch/binutils/2.19.1/05-strip_common.patch	(revision 9f61be5e733db4982ff24bd0a066e3b5a7a367ef)
+++ scripts/patch/binutils/2.19.1/05-strip_common.patch	(revision 9f61be5e733db4982ff24bd0a066e3b5a7a367ef)
@@ -0,0 +1,26 @@
+http://sourceware.org/bugzilla/show_bug.cgi?id=9933
+
+2009-03-09  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR binutils/9933
+	* objcopy.c (filter_symbols): Properly handle common symbols
+	in relocatable file.
+
+===================================================================
+RCS file: /cvs/src/src/binutils/objcopy.c,v
+retrieving revision 1.125
+retrieving revision 1.126
+diff -u -r1.125 -r1.126
+--- src/binutils/objcopy.c	2009/01/29 13:03:21	1.125
++++ src/binutils/objcopy.c	2009/03/10 00:48:09	1.126
+@@ -1028,7 +1028,8 @@
+ 	  used_in_reloc = TRUE;
+ 	}
+       else if (relocatable			/* Relocatable file.  */
+-	       && (flags & (BSF_GLOBAL | BSF_WEAK)) != 0)
++	       && ((flags & (BSF_GLOBAL | BSF_WEAK)) != 0
++		   || bfd_is_com_section (bfd_get_section (sym))))
+ 	keep = TRUE;
+       else if (bfd_decode_symclass (sym) == 'I')
+ 	/* Global symbols in $idata sections need to be retained
+
Index: scripts/patch/binutils/2.19.1/10-strip_symbol_table.patch
===================================================================
--- scripts/patch/binutils/2.19.1/10-strip_symbol_table.patch	(revision 9f61be5e733db4982ff24bd0a066e3b5a7a367ef)
+++ scripts/patch/binutils/2.19.1/10-strip_symbol_table.patch	(revision 9f61be5e733db4982ff24bd0a066e3b5a7a367ef)
@@ -0,0 +1,99 @@
+http://sourceware.org/bugzilla/show_bug.cgi?id=9945
+
+2009-03-13  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR binutils/9945
+	* elf.c (assign_section_numbers): Generate symbol table if there
+	is any relocation in output.
+	(_bfd_elf_compute_section_file_positions): Likewise.
+
+2009-03-13  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR binutils/9945
+	* objcopy.c (copy_object): Clear HAS_RELOC when stripping all.
+
+===================================================================
+RCS file: /cvs/src/src/bfd/elf.c,v
+retrieving revision 1.477
+retrieving revision 1.478
+diff -u -r1.477 -r1.478
+--- src/bfd/elf.c	2009/02/25 14:39:35	1.477
++++ src/bfd/elf.c	2009/03/13 13:39:56	1.478
+@@ -2774,6 +2774,7 @@
+   unsigned int section_number, secn;
+   Elf_Internal_Shdr **i_shdrp;
+   struct bfd_elf_section_data *d;
++  bfd_boolean need_symtab;
+ 
+   section_number = 1;
+ 
+@@ -2829,7 +2830,11 @@
+   _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->shstrtab_hdr.sh_name);
+   elf_elfheader (abfd)->e_shstrndx = t->shstrtab_section;
+ 
+-  if (bfd_get_symcount (abfd) > 0)
++  need_symtab = (bfd_get_symcount (abfd) > 0
++		|| (link_info == NULL
++		    && ((abfd->flags & (EXEC_P | DYNAMIC | HAS_RELOC))
++			== HAS_RELOC)));
++  if (need_symtab)
+     {
+       t->symtab_section = section_number++;
+       _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->symtab_hdr.sh_name);
+@@ -2868,7 +2873,7 @@
+   elf_elfsections (abfd) = i_shdrp;
+ 
+   i_shdrp[t->shstrtab_section] = &t->shstrtab_hdr;
+-  if (bfd_get_symcount (abfd) > 0)
++  if (need_symtab)
+     {
+       i_shdrp[t->symtab_section] = &t->symtab_hdr;
+       if (elf_numsections (abfd) > (SHN_LORESERVE & 0xFFFF))
+@@ -3261,6 +3266,7 @@
+   bfd_boolean failed;
+   struct bfd_strtab_hash *strtab = NULL;
+   Elf_Internal_Shdr *shstrtab_hdr;
++  bfd_boolean need_symtab;
+ 
+   if (abfd->output_has_begun)
+     return TRUE;
+@@ -3285,7 +3291,11 @@
+     return FALSE;
+ 
+   /* The backend linker builds symbol table information itself.  */
+-  if (link_info == NULL && bfd_get_symcount (abfd) > 0)
++  need_symtab = (link_info == NULL
++		 && (bfd_get_symcount (abfd) > 0
++		     || ((abfd->flags & (EXEC_P | DYNAMIC | HAS_RELOC))
++			 == HAS_RELOC)));
++  if (need_symtab)
+     {
+       /* Non-zero if doing a relocatable link.  */
+       int relocatable_p = ! (abfd->flags & (EXEC_P | DYNAMIC));
+@@ -3316,7 +3326,7 @@
+   if (!assign_file_positions_except_relocs (abfd, link_info))
+     return FALSE;
+ 
+-  if (link_info == NULL && bfd_get_symcount (abfd) > 0)
++  if (need_symtab)
+     {
+       file_ptr off;
+       Elf_Internal_Shdr *hdr;
+===================================================================
+RCS file: /cvs/src/src/binutils/objcopy.c,v
+retrieving revision 1.126
+retrieving revision 1.127
+diff -u -r1.126 -r1.127
+--- src/binutils/objcopy.c	2009/03/10 00:48:09	1.126
++++ src/binutils/objcopy.c	2009/03/13 13:39:57	1.127
+@@ -1396,6 +1396,9 @@
+       flags &= ~bfd_flags_to_clear;
+       flags &= bfd_applicable_file_flags (obfd);
+ 
++      if (strip_symbols == STRIP_ALL)
++	flags &= ~HAS_RELOC;
++
+       if (!bfd_set_start_address (obfd, start)
+ 	  || !bfd_set_file_flags (obfd, flags))
+ 	{
+
Index: scripts/patch/binutils/2.19.1/15-orphan_section.patch
===================================================================
--- scripts/patch/binutils/2.19.1/15-orphan_section.patch	(revision 9f61be5e733db4982ff24bd0a066e3b5a7a367ef)
+++ scripts/patch/binutils/2.19.1/15-orphan_section.patch	(revision 9f61be5e733db4982ff24bd0a066e3b5a7a367ef)
@@ -0,0 +1,34 @@
+--- ../binutils-2.19.51.0.11.orig/ld/ldlang.c	2009-07-14 11:42:46.000000000 +0100
++++ ld/ldlang.c	2009-07-14 11:55:01.000000000 +0100
+@@ -1615,10 +1615,12 @@ output_prev_sec_find (lang_output_sectio
+    idea is to skip over anything that might be inside a SECTIONS {}
+    statement in a script, before we find another output section
+    statement.  Assignments to "dot" before an output section statement
+-   are assumed to belong to it.  An exception to this rule is made for
+-   the first assignment to dot, otherwise we might put an orphan
+-   before . = . + SIZEOF_HEADERS or similar assignments that set the
+-   initial address.  */
++   are assumed to belong to it, except in two cases;  The first
++   assignment to dot, and assignments before non-alloc sections.
++   Otherwise we might put an orphan before . = . + SIZEOF_HEADERS or
++   similar assignments that set the initial address, or we might
++   insert non-alloc note sections among assignments setting end of
++   image symbols.  */
+ 
+ static lang_statement_union_type **
+ insert_os_after (lang_output_section_statement_type *after)
+@@ -1662,7 +1664,12 @@ insert_os_after (lang_output_section_sta
+ 	  continue;
+ 	case lang_output_section_statement_enum:
+ 	  if (assign != NULL)
+-	    where = assign;
++	    {
++	      asection *s = (*where)->output_section_statement.bfd_section;
++
++	      if (s == NULL || (s->flags & SEC_ALLOC) != 0)
++		where = assign;
++	    }
+ 	  break;
+ 	case lang_input_statement_enum:
+ 	case lang_address_statement_enum:
+
Index: scripts/patch/gcc/4.4.0/40-powepc-fixes.patch
===================================================================
--- scripts/patch/gcc/4.4.0/40-powepc-fixes.patch	(revision 9f61be5e733db4982ff24bd0a066e3b5a7a367ef)
+++ scripts/patch/gcc/4.4.0/40-powepc-fixes.patch	(revision 9f61be5e733db4982ff24bd0a066e3b5a7a367ef)
@@ -0,0 +1,25 @@
+A Temporary Work around for
+http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37739
+
+diff -Naur gcc-4.4.0.orig/gcc/config.host gcc-4.4.0/gcc/config.host
+--- gcc-4.4.0.orig/gcc/config.host	2009-03-24 03:33:57.000000000 -0700
++++ gcc-4.4.0/gcc/config.host	2009-07-19 14:09:55.000000000 -0700
+@@ -135,17 +135,7 @@
+ 	  # On powerpc*-*-linux* use -Wl,--relax to link cc1,
+ 	  # if ld is new enough, otherwise force -O1 in CFLAGS.
+ 	  host_ppc_relax_xmake_file=
+-	  host_ld_ver=`${CC} -Wl,--version 2>/dev/null | sed 1q`
+-	  if echo "$host_ld_ver" | grep GNU > /dev/null; then
+-	    host_ld_date=`echo $host_ld_ver \
+-			  | sed -n 's,^.*\([2-9][0-9][0-9][0-9]\)[-]*\([01][0-9]\)[-]*\([0-3][0-9]\).*$,\1\2\3,p'`
+-	    if test 0"$host_ld_date" -gt 20080806; then
+-	      host_ppc_relax_xmake_file=rs6000/x-linux-relax
+-	    fi
+-	  fi
+-	  if test -z "${host_ppc_relax_xmake_file}"; then
+-	    host_ppc_relax_xmake_file=x-cflags-O1
+-	  fi
++	  host_ppc_relax_xmake_file=x-cflags-O1
+ 	  host_xmake_file="${host_xmake_file} ${host_ppc_relax_xmake_file}"
+ 	fi
+ 	;;
