diff --git a/component/gcc/buildout.cfg b/component/gcc/buildout.cfg
index 9e524f4a941c0892e6ba13ac297722a476b333b3..63cc7c8bdb80893de9edbe311045a55a3f90ec7d 100644
--- a/component/gcc/buildout.cfg
+++ b/component/gcc/buildout.cfg
@@ -36,12 +36,14 @@ recipe = slapos.recipe.cmmi
 url = http://bugseng.com/external/ppl/download/ftp/releases/0.11/ppl-0.11.tar.bz2
 md5sum = c414abd2ecaf1f1f48949c78d383ee1a
 configure-options =
-  --with-libgmp-prefix=${gmp-4:location}
-  --with-libgmpxx-prefix=${gmp-4:location}
+  --with-gmp=${gmp-4:location}
+  --with-gmp-prefix=${gmp-4:location}
   --disable-static
 environment =
   PATH=${m4:location}/bin:%(PATH)s
   LDFLAGS=-Wl,-rpath=${gmp-4:location}/lib
+  CXXFLAGS=-fpermissive
+
 
 [cloog-ppl]
 recipe = slapos.recipe.cmmi
@@ -67,13 +69,6 @@ destination = ${gcc-source:location}
 hack-revision = ${gcc-interconnection-workaround:hack-revision}
 location = ${buildout:parts-directory}/${:_buildout_section_name_}
 
-[gcc-multiarch.patch]
-recipe = hexagonit.recipe.download
-md5sum = 819e6735270c8a432b0512b49f40219f
-url = ${:_profile_base_location_}/${:filename}
-filename = ${:_buildout_section_name_}
-download-only = true
-
 [gcc]
 hack-revision = ${gcc-interconnection-workaround:hack-revision}
 depends =
@@ -81,9 +76,6 @@ depends =
 recipe = slapos.recipe.cmmi
 path = ${gcc-source:location}
 md5sum = bb3265edf0fa7543e50cedb93e04e427
-patches =
-  ${gcc-multiarch.patch:location}/${gcc-multiarch.patch:filename}
-patch-options = -p2
 configure-command = make clean \\; make distclean \\; ./configure
 configure-options =
   --disable-bootstrap
@@ -105,9 +97,6 @@ make-targets = install -j1
 recipe = slapos.recipe.cmmi
 url = http://ftp.gnu.org/gnu/gcc/gcc-4.7.3/gcc-4.7.3.tar.bz2
 md5sum = 86f428a30379bdee0224e353ee2f999e
-patches =
-  ${gcc-multiarch.patch:location}/${gcc-multiarch.patch:filename}
-patch-options = -p2
 configure-options =
   --disable-bootstrap
   --enable-languages=c
@@ -129,9 +118,6 @@ depends =
 recipe = slapos.recipe.cmmi
 path = ${gcc-source:location}
 md5sum = bb3265edf0fa7543e50cedb93e04e427
-patches =
-  ${gcc-multiarch.patch:location}/${gcc-multiarch.patch:filename}
-patch-options = -p2
 configure-command = make clean \\; make distclean \\; ./configure
 configure-options =
   --disable-bootstrap
diff --git a/component/gcc/gcc-multiarch.patch b/component/gcc/gcc-multiarch.patch
deleted file mode 100644
index c6c8bc79ac95204efdbfd64035aecb8e3d461cba..0000000000000000000000000000000000000000
--- a/component/gcc/gcc-multiarch.patch
+++ /dev/null
@@ -1,309 +0,0 @@
-# DP: Add multiarch support to GCC.
-# DP:
-# DP: Convert the multilib option to a target triplet,
-# DP: add multiarch include directories and libraries path:
-# DP:	/usr/local/include/<arch>-linux-gnu
-# DP:	/usr/include/<arch>-linux-gnu
-# DP:	/usr/lib/<arch>-linux-gnu
-# DP: to the system paths.
-# DP:
-# DP: Original patch:
-# DP: http://anonscm.debian.org/viewvc/gcccvs/branches/sid/gcc-4.5/debian/patches/gcc-multiarch.diff?revision=5086&view=co
-
-2011-08-05 Arnaud Fontaine <arnaud.fontaine@nexedi.com>
-	* Enable multiarch unconditionally.
-
-2011-03-08  Steve Langasek <steve.langasek@linaro.org>
-	* Canonicalize x86 to i386 everywhere, not i486/i686
-
-2009-03-24  Arthur Loiret  <aloiret@debian.org>
-
-	* configure.ac: Handle --enable-multiarch and --with-multiarch-defaults.
-	* config.gcc: Define MULTIARCH_DEFAULTS if multiarch is enabled.
-	* config.in [!USED_FOR_TARGET]: Undef ENABLE_MULTIARCH.
-	* gcc.c: include multiarch.h.
-	(set_multiarch_dir): New function. Adds the multiarch directories to
-	the library path.
-	[ENABLE_MULTIARCH]: Use it.
-	* cppdefault.c [LOCAL_INCLUDE_DIR, STANDARD_INCLUDE_DIR] Add an include
-	directory for multiarch directories.
-	* incpath.c: include multiarch.h
-	[ENABLE_MULTIARCH]: Add the multiarch directory to include directories.
-	* Makefile.in (MULTIARCH_H): New. Use it for incpath.o and gcc.o.
-	* multiarch.h: New file.
----
- gcc/Makefile.in  |    7 ++--
- gcc/config.gcc   |    9 +++++
- gcc/config.in    |    4 ++
- gcc/configure.ac |   13 ++++++++
- gcc/cppdefault.c |    6 +++
- gcc/gcc.c        |   41 ++++++++++++++++++++++++
- gcc/incpath.c    |   28 ++++++++++++++++
- gcc/multiarch.h  |   91 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 8 files changed, 196 insertions(+), 3 deletions(-)
-
---- a/src/gcc/gcc.c.orig	2009-12-20
-+++ b/src/gcc/gcc.c	2009-12-20
-@@ -71,6 +71,7 @@
- #include "system.h"
- #include "coretypes.h"
- #include "multilib.h" /* before tm.h */
-+#include "multiarch.h"
- #include "tm.h"
- #include <signal.h>
- #if ! defined( SIGCHLD ) && defined( SIGCLD )
-@@ -375,6 +376,7 @@
- static int used_arg (const char *, int);
- static int default_arg (const char *, int);
- static void set_multilib_dir (void);
-+static void set_multiarch_dir (void);
- static void print_multilib_info (void);
- static void perror_with_name (const char *);
- static void fatal_ice (const char *, ...) ATTRIBUTE_PRINTF_1 ATTRIBUTE_NORETURN;
-@@ -7354,6 +7358,9 @@
-       xputenv (XOBFINISH (&collect_obstack, char *));
-     }
- 
-+  /* Add the multiarch directories to libraries path.  */
-+  set_multiarch_dir ();
-+
-   /* Warn about any switches that no pass was interested in.  */
- 
-   for (i = 0; (int) i < n_switches; i++)
-@@ -8515,6 +8524,25 @@
-     multilib_os_dir = multilib_dir;
- }
- 
-+/* Add the multiarch directories to libraries path. This uses the converted
-+   multiarch triplet from the multilib value.
-+   For example, if the target supports -m32/-m64 as multilib option and
-+   defaults to 64, it will add /usr/lib/$triplet_target64/lib to library
-+   path if either -m64 or no multilib option at all is set. And it will
-+   add /usr/lib/$triplet_target32 if -m32 is set. Triplets are defined in
-+   multiarch.def.  */
-+
-+static void
-+set_multiarch_dir (void)
-+{
-+  const char *path;
-+
-+  path = concat (STANDARD_STARTFILE_PREFIX_2, MULTIARCH_DEFAULTS,
-+    dir_separator_str, NULL);
-+  add_prefix (&startfile_prefixes, path, NULL,
-+    PREFIX_PRIORITY_LAST, 0, 1);
-+}
-+
- /* Print out the multiple library subdirectory selection
-    information.  This prints out a series of lines.  Each line looks
-    like SUBDIRECTORY;@OPTION@OPTION, with as many options as is
---- a/src/gcc/config.gcc.orig	2009-12-20
-+++ b/src/gcc/config.gcc	2009-12-20
-@@ -3371,3 +3371,10 @@
- 		target_cpu_default=$target_cpu_default2
- 	fi
- fi
-+
-+multiarch_defaults=`echo ${target_noncanonical} | sed -e 's/unknown-//'`
-+multiarch_define="__`echo ${multiarch_defaults} | tr '-' '_'`__"
-+if test x${with_multiarch_defaults} != x; then
-+	multiarch_defaults=${with_multiarch_defaults}
-+fi
-+tm_defines="${tm_defines} ${multiarch_define}=1 MULTIARCH_DEFAULTS=\\\"${multiarch_defaults}\\\""
---- a/src/gcc/Makefile.in.orig	2009-12-20
-+++ b/src/gcc/Makefile.in	2009-12-20
-@@ -949,6 +949,7 @@
- 		$(HASHTAB_H)
- PLUGIN_H = plugin.h $(GCC_PLUGIN_H)
- PLUGIN_VERSION_H = plugin-version.h configargs.h
-+MULTIARCH_H = multiarch.h
- 
- #
- # Now figure out from those variables how to compile and link.
-@@ -1955,8 +1956,8 @@
- 	-cp -p $^ $(srcdir)
- 
- incpath.o: incpath.c incpath.h $(CONFIG_H) $(SYSTEM_H) $(CPPLIB_H) \
--		intl.h prefix.h coretypes.h $(TM_H) cppdefault.h $(TARGET_H) \
--		$(MACHMODE_H)
-+		intl.h prefix.h coretypes.h $(TM_H) cppdefault.h $(MULTIARCH_H) \
-+		$(TARGET_H) $(MACHMODE_H)
- 
- c-decl.o : c-decl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
-     $(RTL_H) $(C_TREE_H) $(GGC_H) $(TARGET_H) $(FLAGS_H) $(FUNCTION_H) output.h \
-@@ -2107,7 +2108,7 @@
- 
- gcc.o: gcc.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) intl.h multilib.h \
-     Makefile $(lang_specs_files) specs.h prefix.h $(GCC_H) $(FLAGS_H) \
--    configargs.h $(OBSTACK_H) opts.h
-+    configargs.h $(OBSTACK_H) opts.h $(MULTIARCH_H)
- 	(SHLIB_LINK='$(SHLIB_LINK)'; \
- 	$(COMPILER) $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) \
-   $(DRIVER_DEFINES) \
---- a/src/gcc/incpath.c.orig	2009-11-30
-+++ b/src/gcc/incpath.c	2009-12-20
-@@ -30,6 +30,7 @@
- #include "intl.h"
- #include "incpath.h"
- #include "cppdefault.h"
-+#include "multiarch.h"
- 
- /* Microsoft Windows does not natively support inodes.
-    VMS has non-numeric inodes.  */
-@@ -132,6 +133,7 @@
-   const struct default_include *p;
-   int relocated = cpp_relocated();
-   size_t len;
-+  const char *multiarch;
- 
-   if (iprefix && (len = cpp_GCC_INCLUDE_DIR_len) != 0)
-     {
-@@ -150,8 +154,15 @@
- 	      if (!strncmp (p->fname, cpp_GCC_INCLUDE_DIR, len))
- 		{
- 		  char *str = concat (iprefix, p->fname + len, NULL);
-+		  if (p->multilib == 1 && imultilib)
-+		    str = concat (str, dir_separator_str, imultilib, NULL);
-+		  else if (p->multilib == 2)
-+		    {
-+		      multiarch = multilib_to_multiarch (imultilib);
-+		      if (!multiarch)
-+			continue;
-+		      str = concat (str, dir_separator_str, multiarch, NULL);
-+		    }
--		  if (p->multilib && imultilib)
--		    str = concat (str, dir_separator_str, imultilib, NULL);
- 		  add_path (str, SYSTEM, p->cxx_aware, false);
- 		}
- 	    }
-@@ -195,8 +211,15 @@
- 	  else
- 	    str = update_path (p->fname, p->component);
- 
-+	  if (p->multilib == 1 && imultilib)
-+	    str = concat (str, dir_separator_str, imultilib, NULL);
-+	  else if (p->multilib == 2)
-+	    {
-+	      multiarch = multilib_to_multiarch (imultilib);
-+	      if (!multiarch)
-+		continue;
-+	      str = concat (str, dir_separator_str, multiarch, NULL);
-+	    }
--	  if (p->multilib && imultilib)
--	    str = concat (str, dir_separator_str, imultilib, NULL);
- 
- 	  add_path (str, SYSTEM, p->cxx_aware, false);
- 	}
---- a/src/gcc/multiarch.h.orig	2009-12-20
-+++ b/src/gcc/multiarch.h	2009-12-20
-@@ -0,0 +1,93 @@
-+/* Header for multiarch handling (include directories, libraries path).
-+   Copyright (C) 2009 Free Software Foundation, Inc.
-+   Contributed by Arthur Loiret <aloiret@debian.org>
-+
-+This file is part of GCC.
-+
-+GCC is free software; you can redistribute it and/or modify it under
-+the terms of the GNU General Public License as published by the Free
-+Software Foundation; either version 3, or (at your option) any later
-+version.
-+
-+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-+WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-+for more details.
-+
-+You should have received a copy of the GNU General Public License
-+along with GCC; see the file COPYING3.  If not see
-+<http://www.gnu.org/licenses/>.  */
-+
-+#ifndef GCC_MULTIARCH_H
-+#define GCC_MULTIARCH_H
-+
-+#include "tm.h"
-+
-+struct multiarch_mapping
-+{
-+  const char *const multilib;
-+  const char *const multiarch;
-+};
-+
-+const struct multiarch_mapping multiarch_mappings[] = {
-+  { "", MULTIARCH_DEFAULTS },
-+# if defined(__x86_64_linux_gnu__)
-+  { "32",  "i386-linux-gnu" },
-+# endif
-+# if defined(__i486_linux_gnu__) || defined(__i686_linux_gnu__)
-+  { "64",  "x86_64-linux-gnu" },
-+# endif
-+# if defined(__powerpc64_linux_gnu__)
-+  { "32",  "powerpc-linux-gnu" },
-+# endif
-+# if defined(__powerpc_linux_gnu__)
-+  { "64",  "powerpc64-linux-gnu" },
-+# endif
-+# if defined(__sparc64_linux_gnu__)
-+  { "32",  "sparc-linux-gnu" },
-+# endif
-+# if defined(__sparc_linux_gnu__)
-+  { "64",  "sparc64-linux-gnu" },
-+# endif
-+# if defined(__s390x_linux_gnu__)
-+  { "31",  "s390-linux-gnu" },
-+# endif
-+# if defined(__s390_linux_gnu__)
-+  { "64",  "s390x-linux-gnu" },
-+# endif
-+# if defined(__mips_linux_gnu__)
-+  { "n32",  "mips64-linux-gnuabin32" },
-+  { "64",  "mips64-linux-gnuabi64" },
-+# endif
-+# if defined(__mipsel_linux_gnu__)
-+  { "n32",  "mips64el-linux-gnuabin32" },
-+  { "64",  "mips64el-linux-gnuabi64" },
-+# endif
-+# if defined(__x86_64_kfreebsd_gnu__)
-+  { "32",  "i386-kfreebsd-gnu" },
-+# endif
-+# if defined(__sh4_linux_gnu__)
-+  { "m4",  "sh4-linux-gnu" },
-+  { "m4-nofpu",  "sh4_nofpu-linux-gnu" },
-+# endif
-+  { 0, 0 }
-+};
-+
-+/* Convert the multilib option to the corresponding target triplet.
-+   See multiarch.def and config.gcc for multilib/multiarch pairs.
-+   When the default multilib is used, the corresponding multilib/multiarch
-+   pair is { "", $target_tripplet }.  */
-+static inline const char*
-+multilib_to_multiarch (const char *imultilib)
-+{
-+  const struct multiarch_mapping *p;
-+
-+  for (p = multiarch_mappings; p->multiarch; p++)
-+    {
-+      if (!strcmp(p->multilib, imultilib ? imultilib : ""))
-+	return p->multiarch;
-+    }
-+  return NULL;
-+}
-+
-+#endif /* GCC_MULTIARCH_H */
---- a/src/gcc/cppdefault.c.orig	2008-07-21
-+++ b/src/gcc/cppdefault.c	2009-12-20
-@@ -60,6 +60,7 @@
- #endif
- #ifdef LOCAL_INCLUDE_DIR
-     /* /usr/local/include comes before the fixincluded header files.  */
-+    { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 2 },
-     { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 0 },
- #endif
- #ifdef PREFIX_INCLUDE_DIR
-@@ -95,6 +98,7 @@
- #endif
- #ifdef STANDARD_INCLUDE_DIR
-     /* /usr/include comes dead last.  */
-+    { STANDARD_INCLUDE_DIR, STANDARD_INCLUDE_COMPONENT, 0, 0, 1, 2 },
-     { STANDARD_INCLUDE_DIR, STANDARD_INCLUDE_COMPONENT, 0, 0, 1, 0 },
- #endif
-     { 0, 0, 0, 0, 0, 0 }