diff --git a/patches/gcc-patch.txt b/patches/gcc-patch.txt
index e3598a5..eb4deda 100644
--- a/patches/gcc-patch.txt
+++ b/patches/gcc-patch.txt
@@ -1,67 +1,271 @@
---- gcc-4.8.2.orig/gcc/config/arm/t-arm-elf	2013-01-10 20:38:27.000000000 +0000
-+++ gcc-4.8.2/gcc/config/arm/t-arm-elf	2013-12-28 22:54:59.000000000 +0000
-@@ -25,22 +25,36 @@
- #MULTILIB_DIRNAMES    += fa526 fa626 fa606te fa626te fmp626 fa726te
- #MULTILIB_EXCEPTIONS  += *mthumb*/*mcpu=fa526 *mthumb*/*mcpu=fa626
+diff -rdup --unidirectional-new-file gcc-6.3.0-fsf/config.sub gcc-6.3.0/config.sub
+--- gcc-6.3.0-fsf/config.sub	2017-03-30 16:18:19.117238667 -0700
++++ gcc-6.3.0/config.sub	2017-03-30 16:23:21.688074247 -0700
+@@ -1531,6 +1531,9 @@ case $os in
+ 		;;
+ 	-nacl*)
+ 		;;
++	-fuchsia*)
++		os=-fuchsia
++		;;
+ 	-none)
+ 		;;
+ 	*)
+diff -rdup --unidirectional-new-file gcc-6.3.0-fsf/gcc/collect2.c gcc-6.3.0/gcc/collect2.c
+--- gcc-6.3.0-fsf/gcc/collect2.c	2017-03-30 16:18:18.781239956 -0700
++++ gcc-6.3.0/gcc/collect2.c	2017-03-30 16:23:21.692074232 -0700
+@@ -1067,8 +1067,10 @@ main (int argc, char **argv)
+   if (signal (SIGQUIT, SIG_IGN) != SIG_IGN)
+     signal (SIGQUIT, handler);
+ #endif
++#ifdef SIGINT
+   if (signal (SIGINT, SIG_IGN) != SIG_IGN)
+     signal (SIGINT, handler);
++#endif
+ #ifdef SIGALRM
+   if (signal (SIGALRM, SIG_IGN) != SIG_IGN)
+     signal (SIGALRM, handler);
+@@ -1077,8 +1079,10 @@ main (int argc, char **argv)
+   if (signal (SIGHUP, SIG_IGN) != SIG_IGN)
+     signal (SIGHUP, handler);
+ #endif
++#ifdef SIGSEGV
+   if (signal (SIGSEGV, SIG_IGN) != SIG_IGN)
+     signal (SIGSEGV, handler);
++#endif
+ #ifdef SIGBUS
+   if (signal (SIGBUS, SIG_IGN) != SIG_IGN)
+     signal (SIGBUS, handler);
+@@ -2307,7 +2311,9 @@ static void
+ scan_prog_file (const char *prog_name, scanpass which_pass,
+ 		scanfilter filter)
+ {
++#ifdef SIGINT
+   void (*int_handler) (int);
++#endif
+ #ifdef SIGQUIT
+   void (*quit_handler) (int);
+ #endif
+@@ -2373,7 +2379,9 @@ scan_prog_file (const char *prog_name, s
+ 	fatal_error (input_location, errmsg);
+     }
  
-+# build a bunch of specialized versions of libcc for particular cores
-+#MULTILIB_OPTIONS    += mcpu=arm7tdmi/mcpu=arm9tdmi/mcpu=arm920t/mcpu=arm926ej-s/mcpu=arm1136j-s/mcpu=arm1136jf-s/mcpu=arm1176jz-s/mcpu=arm1176jzf-s/mcpu=xscale/mcpu=mpcore/mcpu=cortex-a8/cortex-a9/march=armv4t/march=armv5t/march=armv5te/march=armv6/march=armv6j/march=armv6k/march=armv6z/march=armv6zk/march=armv7-a/march=armv7-r
-+#MULTILIB_DIRNAMES   += arm7tdmi arm9tdmi arm920t arm926ej-s arm1136j-s arm1136jf-s arm1176jz-s arm1176jzf-s xscale mpcore cortex-a8 cortex-a9 cortex-m3 armv4t armv5t armv5te armv6 armv6j armv6k armv6z armv6zk armv7-a armv7-r
-+#MULTILIB_OPTIONS    += mcpu=arm7tdmi/mcpu=arm9tdmi/mcpu=arm920t/mcpu=arm926ej-s/mcpu=arm1136j-s/mcpu=arm1136jf-s/mcpu=arm1176jz-s/mcpu=arm1176jzf-s/mcpu=xscale/mcpu=mpcore/mcpu=cortex-a8/mcpu=cortex-a9
-+#MULTILIB_DIRNAMES   += arm7tdmi arm9tdmi arm920t arm926ej-s arm1136j-s arm1136jf-s arm1176jz-s arm1176jzf-s xscale mpcore cortex-a8 cortex-a9
++#ifdef SIGINT
+   int_handler  = (void (*) (int)) signal (SIGINT,  SIG_IGN);
++#endif
+ #ifdef SIGQUIT
+   quit_handler = (void (*) (int)) signal (SIGQUIT, SIG_IGN);
+ #endif
+@@ -2499,7 +2507,9 @@ scan_prog_file (const char *prog_name, s
+ 
+   do_wait (nm_file_name, pex);
+ 
++#ifdef SIGINT
+   signal (SIGINT,  int_handler);
++#endif
+ #ifdef SIGQUIT
+   signal (SIGQUIT, quit_handler);
+ #endif
+@@ -2571,7 +2581,9 @@ scan_libraries (const char *prog_name)
+ 	fatal_error (input_location, errmsg);
+     }
+ 
++#ifdef SIGINT
+   int_handler  = (void (*) (int)) signal (SIGINT,  SIG_IGN);
++#endif
+ #ifdef SIGQUIT
+   quit_handler = (void (*) (int)) signal (SIGQUIT, SIG_IGN);
+ #endif
+@@ -2619,7 +2631,9 @@ scan_libraries (const char *prog_name)
+ 
+   do_wait (ldd_file_name, pex);
+ 
++#ifdef SIGINT
+   signal (SIGINT,  int_handler);
++#endif
+ #ifdef SIGQUIT
+   signal (SIGQUIT, quit_handler);
+ #endif
+diff -rdup --unidirectional-new-file gcc-6.3.0-fsf/gcc/config/fuchsia.h gcc-6.3.0/gcc/config/fuchsia.h
+--- gcc-6.3.0-fsf/gcc/config/fuchsia.h	1969-12-31 16:00:00.000000000 -0800
++++ gcc-6.3.0/gcc/config/fuchsia.h	2017-03-30 16:23:21.692074232 -0700
+@@ -0,0 +1,105 @@
++/* Base configuration file for all Fuchsia targets.
++   Copyright (C) 2016 Free Software Foundation, Inc.
 +
-+MULTILIB_OPTIONS      += march=armv7
-+MULTILIB_DIRNAMES     += thumb2
-+MULTILIB_EXCEPTIONS   += march=armv7* marm/*march=armv7*
-+MULTILIB_MATCHES      += march?armv7=march?armv7-a
-+MULTILIB_MATCHES      += march?armv7=march?armv7-r
-+MULTILIB_MATCHES      += march?armv7=march?armv7-m
-+MULTILIB_MATCHES      += march?armv7=mcpu?cortex-a15
-+MULTILIB_MATCHES      += march?armv7=mcpu?cortex-a9
-+MULTILIB_MATCHES      += march?armv7=mcpu?cortex-a8
-+MULTILIB_MATCHES      += march?armv7=mcpu?cortex-r4
-+MULTILIB_MATCHES      += march?armv7=mcpu?cortex-m4
-+MULTILIB_MATCHES      += march?armv7=mcpu?cortex-m3
++This file is part of GCC.
 +
-+#MULTILIB_OPTIONS      += mfpu=vfp
-+#MULTILIB_DIRNAMES     += vfp
-+#MULTILIB_MATCHES      += mfpu?vfp=mcpu?arm1136jf-s
-+#MULTILIB_MATCHES      += mfpu?vfp=mcpu?arm1136jzf-s
--#MULTILIB_OPTIONS      += march=armv7
--#MULTILIB_DIRNAMES     += thumb2
--#MULTILIB_EXCEPTIONS   += march=armv7* marm/*march=armv7*
--#MULTILIB_MATCHES      += march?armv7=march?armv7-a
--#MULTILIB_MATCHES      += march?armv7=march?armv7-r
--#MULTILIB_MATCHES      += march?armv7=march?armv7-m
--#MULTILIB_MATCHES      += march?armv7=mcpu?cortex-a8
--#MULTILIB_MATCHES      += march?armv7=mcpu?cortex-r4
--#MULTILIB_MATCHES      += march?armv7=mcpu?cortex-m3
++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/>.  */
++
++/* Common Fuchsia configuration.  */
++
++/* In case we need to know.  */
++#define USING_CONFIG_FUCHSIA 1
++
++#undef  STARTFILE_SPEC
++#define STARTFILE_SPEC "%{!shared: crt1%O%s} crtbegin%O%s"
++
++#undef  ENDFILE_SPEC
++#define ENDFILE_SPEC "crtend%O%s"
++
++/* When neither pic nor pie has been specified, use PIE by default.  */
++#undef  CC1_SPEC
++#define CC1_SPEC "%{!fno-pic:%{!fno-PIC:%{!fpic:%{!fPIC:" \
++                   "%{!fno-pie:%{!fno-PIE:%{!fpie:%{!fPIE: -fPIE}}}}}}}}"
++
++#undef  LIB_SPEC
++#define LIB_SPEC "--start-group" \
++		 " -lmxio -lmagenta -lc -llaunchpad" \
++		 "%{!static: -lgcc_s}" \
++		 " --end-group"
++
++#undef  LINK_SPEC
++#define LINK_SPEC "-z max-page-size=4096" \
++		  " -z combreloc" \
++		  " -z relro" \
++		  " -z now" \
++		  " -z text" \
++		  "%{!hash-style: --hash-style=gnu}" \
++		  "%{!no-eh-frame-hdr: --eh-frame-hdr}" \
++		  "%{!no-build-id: --build-id}" \
++		  "%{shared: -shared}" \
++		  "%{!shared:%{!static:%{!dynamic-linker: -dynamic-linker=ld.so.1}}}"
++
++/* We are using MUSL as our libc.  */
++#undef  OPTION_MUSL
++#define OPTION_MUSL 1
++
++#ifndef TARGET_SUB_OS_CPP_BUILTINS
++#define TARGET_SUB_OS_CPP_BUILTINS()
++#endif
++
++#undef  TARGET_OS_CPP_BUILTINS
++#define TARGET_OS_CPP_BUILTINS()		\
++  do						\
++    {						\
++      builtin_define ("__Fuchsia__");		\
++      TARGET_SUB_OS_CPP_BUILTINS();		\
++    }						\
++  while (false)
++
++/* /dev/null is unwritable, at the moment. Use this as a workaround.  */
++#undef  HOST_BIT_BUCKET
++#define HOST_BIT_BUCKET "/tmp/.null"
++
++/* Inode numbers are not available to us.  */
++#define HOST_LACKS_INODE_NUMBERS
++
++/* In fact we have ftw.h, but the function itself is unimplemented.  */
++#undef HAVE_FTW_H
++
++/* Functions that are implemented as stubs in libc.  */
++#undef HAVE_GETRLIMIT
++#undef HAVE_GETRUSAGE
++#undef HAVE_REALPATH
++#undef HAVE_SETRLIMIT
++#undef HAVE_TIMES
++
++/* No ioctl() support.  */
++#undef TIOCGWINSZ
++
++/* No signal() support.  */
++#undef SIGABRT
++#undef SIGALRM
++#undef SIGBUS
++#undef SIGCHLD
++#undef SIGFPE
++#undef SIGHUP
++#undef SIGILL
++#undef SIGINT
++#undef SIGIOT
++#undef SIGPIPE
++#undef SIGQUIT
++#undef SIGSEGV
++#undef SIGTERM
++
+diff -rdup --unidirectional-new-file gcc-6.3.0-fsf/gcc/config/i386/i386.c gcc-6.3.0/gcc/config/i386/i386.c
+--- gcc-6.3.0-fsf/gcc/config/i386/i386.c	2017-03-30 16:18:17.521244794 -0700
++++ gcc-6.3.0/gcc/config/i386/i386.c	2017-03-30 16:23:21.708074170 -0700
+@@ -41322,9 +41322,6 @@ ix86_expand_builtin (tree exp, rtx targe
+       mode0 = DImode;
  
- # Not quite true.  We can support hard-vfp calling in Thumb2, but how do we
- # express that here?  Also, we really need architecture v5e or later
- # (mcrr etc).
-+#MULTILIB_OPTIONS       += mfloat-abi=hard
-+#MULTILIB_DIRNAMES      += fpu
-+#MULTILIB_EXCEPTIONS    += *mthumb/*mfloat-abi=hard*
--MULTILIB_OPTIONS       += mfloat-abi=hard
--MULTILIB_DIRNAMES      += fpu
--MULTILIB_EXCEPTIONS    += *mthumb/*mfloat-abi=hard*
- #MULTILIB_EXCEPTIONS    += *mcpu=fa526/*mfloat-abi=hard*
- #MULTILIB_EXCEPTIONS    += *mcpu=fa626/*mfloat-abi=hard*
+ rdrand_step:
+-      op0 = gen_reg_rtx (mode0);
+-      emit_insn (GEN_FCN (icode) (op0));
+-
+       arg0 = CALL_EXPR_ARG (exp, 0);
+       op1 = expand_normal (arg0);
+       if (!address_operand (op1, VOIDmode))
+@@ -41332,6 +41329,10 @@ rdrand_step:
+ 	  op1 = convert_memory_address (Pmode, op1);
+ 	  op1 = copy_addr_to_reg (op1);
+ 	}
++
++      op0 = gen_reg_rtx (mode0);
++      emit_insn (GEN_FCN (icode) (op0));
++
+       emit_move_insn (gen_rtx_MEM (mode0, op1), op0);
  
-@@ -56,8 +70,8 @@
- # MULTILIB_DIRNAMES   += fpu soft
- # MULTILIB_EXCEPTIONS += *mthumb/*mfloat-abi=hard*
- # 
-+MULTILIB_OPTIONS    += mno-thumb-interwork/mthumb-interwork
-+MULTILIB_DIRNAMES   += normal interwork
--# MULTILIB_OPTIONS    += mno-thumb-interwork/mthumb-interwork
--# MULTILIB_DIRNAMES   += normal interwork
- # 
- # MULTILIB_OPTIONS    += fno-leading-underscore/fleading-underscore
- # MULTILIB_DIRNAMES   += elf under
---- gcc-4.8.2.orig/gcc/config/i386/t-x86_64-elf	1970-01-01 01:00:00.000000000 +0100
-+++ gcc-4.8.2/gcc/config/i386/t-x86_64-elf	2013-12-29 12:47:35.000000000 +0000
+       op1 = gen_reg_rtx (SImode);
+@@ -41340,8 +41341,20 @@ rdrand_step:
+       /* Emit SImode conditional move.  */
+       if (mode0 == HImode)
+ 	{
+-	  op2 = gen_reg_rtx (SImode);
+-	  emit_insn (gen_zero_extendhisi2 (op2, op0));
++	  if (TARGET_ZERO_EXTEND_WITH_AND
++	      && optimize_function_for_speed_p (cfun))
++	    {
++	      op2 = force_reg (SImode, const0_rtx);
++
++	      emit_insn (gen_movstricthi
++			 (gen_lowpart (HImode, op2), op0));
++	    }
++	  else
++	    {
++	      op2 = gen_reg_rtx (SImode);
++
++	      emit_insn (gen_zero_extendhisi2 (op2, op0));
++	    }
+ 	}
+       else if (mode0 == SImode)
+ 	op2 = op0;
+@@ -41373,9 +41386,6 @@ rdrand_step:
+       mode0 = DImode;
+ 
+ rdseed_step:
+-      op0 = gen_reg_rtx (mode0);
+-      emit_insn (GEN_FCN (icode) (op0));
+-
+       arg0 = CALL_EXPR_ARG (exp, 0);
+       op1 = expand_normal (arg0);
+       if (!address_operand (op1, VOIDmode))
+@@ -41383,6 +41393,10 @@ rdseed_step:
+ 	  op1 = convert_memory_address (Pmode, op1);
+ 	  op1 = copy_addr_to_reg (op1);
+ 	}
++
++      op0 = gen_reg_rtx (mode0);
++      emit_insn (GEN_FCN (icode) (op0));
++
+       emit_move_insn (gen_rtx_MEM (mode0, op1), op0);
+ 
+       op2 = gen_reg_rtx (QImode);
+diff -rdup --unidirectional-new-file gcc-6.3.0-fsf/gcc/config/i386/t-x86_64-elf gcc-6.3.0/gcc/config/i386/t-x86_64-elf
+--- gcc-6.3.0-fsf/gcc/config/i386/t-x86_64-elf	1969-12-31 16:00:00.000000000 -0800
++++ gcc-6.3.0/gcc/config/i386/t-x86_64-elf	2017-03-30 16:23:21.712074155 -0700
 @@ -0,0 +1,8 @@
 +# Add redzoneless libgcc
 +
@@ -72,19 +276,416 @@
 +MULTILIB_OPTIONS  += m32
 +MULTILIB_DIRNAMES += 32
 \ No newline at end of file
-2016-09-27  Roland McGrath  <roland@hack.frob.com>
-
-	PR other/77609
-	* varasm.c (default_section_type_flags): Set SECTION_NOTYPE for
-	any section for which we don't know a specific type it should have,
-	regardless of name.  Previously this was done only for the exact
-	names ".init_array", ".fini_array", and ".preinit_array".
-
-diff --git a/gcc/varasm.c b/gcc/varasm.c
-index b0f2af0..dcc9976 100644
---- a/gcc/varasm.c
-+++ b/gcc/varasm.c
-@@ -6193,15 +6193,20 @@ default_section_type_flags (tree decl, const char *name, int reloc)
+diff -rdup --unidirectional-new-file gcc-6.3.0-fsf/gcc/config.gcc gcc-6.3.0/gcc/config.gcc
+--- gcc-6.3.0-fsf/gcc/config.gcc	2017-03-30 16:18:18.853239681 -0700
++++ gcc-6.3.0/gcc/config.gcc	2017-03-31 18:27:18.774027678 -0700
+@@ -710,6 +710,9 @@ case ${target} in
+   esac
+   use_gcc_stdint=wrap
+   ;;
++*-*-fuchsia*)
++  native_system_header_dir=/include
++  ;;
+ *-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu | *-*-gnu* | *-*-kopensolaris*-gnu)
+   extra_options="$extra_options gnu-user.opt"
+   gas=yes
+@@ -912,7 +915,7 @@ case ${target} in
+ esac
+ 
+ case ${target} in
+-aarch64*-*-elf | aarch64*-*-rtems*)
++aarch64*-*-elf | aarch64*-*-fuchsia* | aarch64*-*-rtems*)
+ 	tm_file="${tm_file} dbxelf.h elfos.h newlib-stdint.h"
+ 	tm_file="${tm_file} aarch64/aarch64-elf.h aarch64/aarch64-elf-raw.h"
+ 	tmake_file="${tmake_file} aarch64/t-aarch64"
+@@ -920,6 +923,9 @@ aarch64*-*-elf | aarch64*-*-rtems*)
+ 	aarch64-*-elf*)
+ 		use_gcc_stdint=wrap
+ 		;;
++        aarch64-*-fuchsia*)
++                tm_file="${tm_file} fuchsia.h"
++                ;;
+ 	aarch64-*-rtems*)
+ 	  	tm_file="${tm_file} rtems.h aarch64/rtems.h"
+ 		;;
+@@ -1429,6 +1435,7 @@ i[34567]86-*-elf*)
+ 	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h newlib-stdint.h i386/i386elf.h"
+ 	;;
+ x86_64-*-elf*)
++	tmake_file="${tmake_file} i386/t-x86_64-elf"
+ 	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h newlib-stdint.h i386/i386elf.h i386/x86-64.h"
+ 	;;
+ x86_64-*-rtems*)
+@@ -1802,6 +1809,10 @@ i[34567]86-*-interix[3-9]*)
+ 		tm_file="${tm_file} dbxcoff.h"
+ 	fi
+ 	;;
++x86_64-*-fuchsia*)
++	tmake_file="${tmake_file} i386/t-x86_64-elf"
++	tm_file="${tm_file} i386/unix.h i386/att.h elfos.h newlib-stdint.h i386/i386elf.h i386/x86-64.h fuchsia.h"
++	;;
+ ia64*-*-elf*)
+ 	tm_file="${tm_file} dbxelf.h elfos.h newlib-stdint.h ia64/sysv4.h ia64/elf.h"
+ 	tmake_file="ia64/t-ia64"
+diff -rdup --unidirectional-new-file gcc-6.3.0-fsf/gcc/config.host gcc-6.3.0/gcc/config.host
+--- gcc-6.3.0-fsf/gcc/config.host	2017-03-30 16:18:17.569244610 -0700
++++ gcc-6.3.0/gcc/config.host	2017-03-31 18:27:55.833878360 -0700
+@@ -99,7 +99,7 @@ case ${host} in
+ esac
+ 
+ case ${host} in
+-  aarch64*-*-linux*)
++  aarch64*-*-linux* | aarch64*-*-fuchsia*)
+     case ${target} in
+       aarch64*-*-*)
+ 	host_extra_gcc_objs="driver-aarch64.o"
+diff -rdup --unidirectional-new-file gcc-6.3.0-fsf/gcc/configure gcc-6.3.0/gcc/configure
+--- gcc-6.3.0-fsf/gcc/configure	2017-03-30 16:18:18.769240003 -0700
++++ gcc-6.3.0/gcc/configure	2017-03-31 06:43:15.446595972 -0700
+@@ -13387,6 +13387,10 @@ freebsd* | dragonfly*)
+   fi
+   ;;
+ 
++fuchsia*)
++  lt_cv_deplibs_check_method=pass_all
++  ;;
++
+ gnu*)
+   lt_cv_deplibs_check_method=pass_all
+   ;;
+@@ -17645,6 +17649,15 @@ freebsd* | dragonfly*)
+   esac
+   ;;
+ 
++fuchsia*)
++  need_lib_prefix=no
++  need_version=no
++  dynamic_linker="$host_os ld.so.1"
++  library_names_spec='$libname$shared_ext'
++  soname_spec='$libname$shared_ext'
++  sys_lib_dlsearch_path_spec='/system/lib /boot/lib'
++  ;;
++
+ gnu*)
+   version_type=linux
+   need_lib_prefix=no
+@@ -18248,6 +18261,11 @@ fi
+ 
+     ;;
+ 
++  fuchsia*)
++    lt_cv_dlopen="dlopen"
++    lt_cv_dlopen_libs=
++    ;;
++
+   *)
+     ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
+ if test "x$ac_cv_func_shl_load" = x""yes; then :
+@@ -18460,7 +18478,7 @@ else
+   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+   lt_status=$lt_dlunknown
+   cat > conftest.$ac_ext <<_LT_EOF
+-#line 18463 "configure"
++#line 18481 "configure"
+ #include "confdefs.h"
+ 
+ #if HAVE_DLFCN_H
+@@ -18566,7 +18584,7 @@ else
+   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+   lt_status=$lt_dlunknown
+   cat > conftest.$ac_ext <<_LT_EOF
+-#line 18569 "configure"
++#line 18587 "configure"
+ #include "confdefs.h"
+ 
+ #if HAVE_DLFCN_H
+@@ -20470,6 +20488,10 @@ $as_echo_n "checking for $compiler optio
+       freebsd* | dragonfly*)
+ 	# FreeBSD uses GNU C++
+ 	;;
++      fuchsia* )
++	lt_prog_compiler_wl_CXX='-Wl,'
++	lt_prog_compiler_static_CXX='-static'
++	;;
+       hpux9* | hpux10* | hpux11*)
+ 	case $cc_basename in
+ 	  CC*)
+@@ -21305,6 +21327,15 @@ freebsd* | dragonfly*)
+   esac
+   ;;
+ 
++fuchsia*)
++  need_lib_prefix=no
++  need_version=no
++  dynamic_linker="$host_os ld.so.1"
++  library_names_spec='$libname$shared_ext'
++  soname_spec='$libname$shared_ext'
++  sys_lib_dlsearch_path_spec='/system/lib /boot/lib'
++  ;;
++
+ gnu*)
+   version_type=linux
+   need_lib_prefix=no
+@@ -29486,14 +29517,19 @@ fi
+ 
+ 
+ # Check if -fno-PIE works.
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -fno-PIE option" >&5
++case $host_os in
++  fuchsia*)
++    # Fuchsia requires PIE binaries
++    ;;
++  *)
++    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -fno-PIE option" >&5
+ $as_echo_n "checking for -fno-PIE option... " >&6; }
+ if test "${gcc_cv_c_no_fpie+set}" = set; then :
+   $as_echo_n "(cached) " >&6
+ else
+   saved_CXXFLAGS="$CXXFLAGS"
+-   CXXFLAGS="$CXXFLAGS -fno-PIE"
+-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++       CXXFLAGS="$CXXFLAGS -fno-PIE"
++       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ int main(void) {return 0;}
+ _ACEOF
+@@ -29503,24 +29539,31 @@ else
+   gcc_cv_c_no_fpie=no
+ fi
+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+-   CXXFLAGS="$saved_CXXFLAGS"
++       CXXFLAGS="$saved_CXXFLAGS"
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_c_no_fpie" >&5
+ $as_echo "$gcc_cv_c_no_fpie" >&6; }
+-if test "$gcc_cv_c_no_fpie" = "yes"; then
+-  NO_PIE_CFLAGS="-fno-PIE"
+-fi
++    if test "$gcc_cv_c_no_fpie" = "yes"; then
++      NO_PIE_CFLAGS="-fno-PIE"
++    fi
++    ;;
++esac
+ 
+ 
+ # Check if -no-pie works.
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -no-pie option" >&5
++case $host_os in
++  fuchsia*)
++    # Fuchsia requires PIE binaries
++    ;;
++  *)
++    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -no-pie option" >&5
+ $as_echo_n "checking for -no-pie option... " >&6; }
+ if test "${gcc_cv_no_pie+set}" = set; then :
+   $as_echo_n "(cached) " >&6
+ else
+   saved_LDFLAGS="$LDFLAGS"
+-   LDFLAGS="$LDFLAGS -no-pie"
+-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++       LDFLAGS="$LDFLAGS -no-pie"
++       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ int main(void) {return 0;}
+ _ACEOF
+@@ -29531,13 +29574,15 @@ else
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+     conftest$ac_exeext conftest.$ac_ext
+-   LDFLAGS="$saved_LDFLAGS"
++       LDFLAGS="$saved_LDFLAGS"
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_no_pie" >&5
+ $as_echo "$gcc_cv_no_pie" >&6; }
+-if test "$gcc_cv_no_pie" = "yes"; then
+-  NO_PIE_FLAG="-no-pie"
+-fi
++    if test "$gcc_cv_no_pie" = "yes"; then
++      NO_PIE_FLAG="-no-pie"
++    fi
++    ;;
++esac
+ 
+ 
+ # Check linker supports '-z bndplt'
+diff -rdup --unidirectional-new-file gcc-6.3.0-fsf/gcc/configure.ac gcc-6.3.0/gcc/configure.ac
+--- gcc-6.3.0-fsf/gcc/configure.ac	2017-03-30 16:18:18.865239634 -0700
++++ gcc-6.3.0/gcc/configure.ac	2017-03-30 16:23:21.720074124 -0700
+@@ -6160,31 +6160,45 @@ fi
+ AC_SUBST([enable_default_pie])
+ 
+ # Check if -fno-PIE works.
+-AC_CACHE_CHECK([for -fno-PIE option],
+-  [gcc_cv_c_no_fpie],
+-  [saved_CXXFLAGS="$CXXFLAGS"
+-   CXXFLAGS="$CXXFLAGS -fno-PIE"
+-   AC_COMPILE_IFELSE([int main(void) {return 0;}],
+-     [gcc_cv_c_no_fpie=yes],
+-     [gcc_cv_c_no_fpie=no])
+-   CXXFLAGS="$saved_CXXFLAGS"])
+-if test "$gcc_cv_c_no_fpie" = "yes"; then
+-  NO_PIE_CFLAGS="-fno-PIE"
+-fi
++case $host_os in
++  fuchsia*)
++    # Fuchsia requires PIE binaries
++    ;;
++  *)
++    AC_CACHE_CHECK([for -fno-PIE option],
++      [gcc_cv_c_no_fpie],
++      [saved_CXXFLAGS="$CXXFLAGS"
++       CXXFLAGS="$CXXFLAGS -fno-PIE"
++       AC_COMPILE_IFELSE([int main(void) {return 0;}],
++         [gcc_cv_c_no_fpie=yes],
++         [gcc_cv_c_no_fpie=no])
++       CXXFLAGS="$saved_CXXFLAGS"])
++    if test "$gcc_cv_c_no_fpie" = "yes"; then
++      NO_PIE_CFLAGS="-fno-PIE"
++    fi
++    ;;
++esac
+ AC_SUBST([NO_PIE_CFLAGS])
+ 
+ # Check if -no-pie works.
+-AC_CACHE_CHECK([for -no-pie option],
+-  [gcc_cv_no_pie],
+-  [saved_LDFLAGS="$LDFLAGS"
+-   LDFLAGS="$LDFLAGS -no-pie"
+-   AC_LINK_IFELSE([int main(void) {return 0;}],
+-     [gcc_cv_no_pie=yes],
+-     [gcc_cv_no_pie=no])
+-   LDFLAGS="$saved_LDFLAGS"])
+-if test "$gcc_cv_no_pie" = "yes"; then
+-  NO_PIE_FLAG="-no-pie"
+-fi
++case $host_os in
++  fuchsia*)
++    # Fuchsia requires PIE binaries
++    ;;
++  *)
++    AC_CACHE_CHECK([for -no-pie option],
++      [gcc_cv_no_pie],
++      [saved_LDFLAGS="$LDFLAGS"
++       LDFLAGS="$LDFLAGS -no-pie"
++       AC_LINK_IFELSE([int main(void) {return 0;}],
++         [gcc_cv_no_pie=yes],
++         [gcc_cv_no_pie=no])
++       LDFLAGS="$saved_LDFLAGS"])
++    if test "$gcc_cv_no_pie" = "yes"; then
++      NO_PIE_FLAG="-no-pie"
++    fi
++    ;;
++esac
+ AC_SUBST([NO_PIE_FLAG])
+ 
+ # Check linker supports '-z bndplt'
+diff -rdup --unidirectional-new-file gcc-6.3.0-fsf/gcc/gcc.c gcc-6.3.0/gcc/gcc.c
+--- gcc-6.3.0-fsf/gcc/gcc.c	2017-03-30 16:18:18.805239865 -0700
++++ gcc-6.3.0/gcc/gcc.c	2017-03-30 16:23:21.724074108 -0700
+@@ -7255,14 +7255,18 @@ driver::global_initializations ()
+   if (atexit (delete_temp_files) != 0)
+     fatal_error (input_location, "atexit failed");
+ 
++#ifdef SIGINT
+   if (signal (SIGINT, SIG_IGN) != SIG_IGN)
+     signal (SIGINT, fatal_signal);
++#endif
+ #ifdef SIGHUP
+   if (signal (SIGHUP, SIG_IGN) != SIG_IGN)
+     signal (SIGHUP, fatal_signal);
+ #endif
++#ifdef SIGTERM
+   if (signal (SIGTERM, SIG_IGN) != SIG_IGN)
+     signal (SIGTERM, fatal_signal);
++#endif
+ #ifdef SIGPIPE
+   if (signal (SIGPIPE, SIG_IGN) != SIG_IGN)
+     signal (SIGPIPE, fatal_signal);
+diff -rdup --unidirectional-new-file gcc-6.3.0-fsf/gcc/gcov-tool.c gcc-6.3.0/gcc/gcov-tool.c
+--- gcc-6.3.0-fsf/gcc/gcov-tool.c	2017-03-30 16:18:18.793239910 -0700
++++ gcc-6.3.0/gcc/gcov-tool.c	2017-03-30 16:23:21.724074108 -0700
+@@ -51,7 +51,8 @@ extern void gcov_set_verbose (void);
+ /* Set to verbose output mode.  */
+ static bool verbose;
+ 
+-#if HAVE_FTW_H
++/* Fuchsia: remove when nftw has been implemented.  */
++#if HAVE_FTW_H && !defined(__Fuchsia__)
+ 
+ /* Remove file NAME if it has a gcda suffix. */
+ 
+@@ -80,7 +81,8 @@ unlink_gcda_file (const char *name,
+ static int
+ unlink_profile_dir (const char *path ATTRIBUTE_UNUSED)
+ {
+-#if HAVE_FTW_H
++/* Fuchsia: remove when nftw has been implemented.  */
++#if HAVE_FTW_H && !defined(__Fuchsia__)
+     return nftw(path, unlink_gcda_file, 64, FTW_DEPTH | FTW_PHYS);
+ #else
+     return -1;
+diff -rdup --unidirectional-new-file gcc-6.3.0-fsf/gcc/ggc-common.c gcc-6.3.0/gcc/ggc-common.c
+--- gcc-6.3.0-fsf/gcc/ggc-common.c	2017-03-30 16:18:17.565244626 -0700
++++ gcc-6.3.0/gcc/ggc-common.c	2017-03-30 16:23:21.724074108 -0700
+@@ -728,7 +728,8 @@ mmap_gt_pch_use_address (void *base, siz
+ static double
+ ggc_rlimit_bound (double limit)
+ {
+-#if defined(HAVE_GETRLIMIT)
++/* Fuchsia: getrlimit is not fully implemented yet.  */
++#if !defined(__Fuchsia__) && defined(HAVE_GETRLIMIT)
+   struct rlimit rlim;
+ # if defined (RLIMIT_AS)
+   /* RLIMIT_AS is what POSIX says is the limit on mmap.  Presumably
+@@ -752,7 +753,7 @@ ggc_rlimit_bound (double limit)
+       && rlim.rlim_cur >= 8 * 1024 * 1024)
+     limit = rlim.rlim_cur;
+ # endif /* RLIMIT_AS or RLIMIT_DATA */
+-#endif /* HAVE_GETRLIMIT */
++#endif /* !Fuchsia && HAVE_GETRLIMIT */
+ 
+   return limit;
+ }
+@@ -790,7 +791,8 @@ ggc_min_heapsize_heuristic (void)
+      bound of 128M (when RAM >= 1GB).  */
+   phys_kbytes /= 8;
+ 
+-#if defined(HAVE_GETRLIMIT) && defined (RLIMIT_RSS)
++/* Fuchsia: getrlimit is not fully implemented yet.  */
++#if !defined(__Fuchsia__) && defined(HAVE_GETRLIMIT) && defined (RLIMIT_RSS)
+   /* Try not to overrun the RSS limit while doing garbage collection.
+      The RSS limit is only advisory, so no margin is subtracted.  */
+  {
+diff -rdup --unidirectional-new-file gcc-6.3.0-fsf/gcc/opts.c gcc-6.3.0/gcc/opts.c
+--- gcc-6.3.0-fsf/gcc/opts.c	2017-03-30 16:18:18.789239926 -0700
++++ gcc-6.3.0/gcc/opts.c	2017-03-30 16:23:21.724074108 -0700
+@@ -2386,7 +2386,8 @@ setup_core_dumping (diagnostic_context *
+ #ifdef SIGABRT
+   signal (SIGABRT, SIG_DFL);
+ #endif
+-#if defined(HAVE_SETRLIMIT)
++/* Fuchsia: remove when getrlimit/setrlimit have been implemented.  */
++#if !defined(__Fuchsia__) && defined(HAVE_SETRLIMIT)
+   {
+     struct rlimit rlim;
+     if (getrlimit (RLIMIT_CORE, &rlim) != 0)
+diff -rdup --unidirectional-new-file gcc-6.3.0-fsf/gcc/timevar.c gcc-6.3.0/gcc/timevar.c
+--- gcc-6.3.0-fsf/gcc/timevar.c	2017-03-30 16:18:18.869239620 -0700
++++ gcc-6.3.0/gcc/timevar.c	2017-03-30 16:23:21.724074108 -0700
+@@ -69,7 +69,8 @@ struct tms
+ # define HAVE_SYS_TIME
+ # define HAVE_WALL_TIME
+ #else
+-#ifdef HAVE_GETRUSAGE
++/* Fuchsia: remove when getrusage has been implemented.  */
++#if !defined(__Fuchsia__) && defined(HAVE_GETRUSAGE)
+ # if defined HAVE_DECL_GETRUSAGE && !HAVE_DECL_GETRUSAGE
+   extern int getrusage (int, struct rusage *);
+ # endif
+diff -rdup --unidirectional-new-file gcc-6.3.0-fsf/gcc/varasm.c gcc-6.3.0/gcc/varasm.c
+--- gcc-6.3.0-fsf/gcc/varasm.c	2017-03-30 16:18:17.549244687 -0700
++++ gcc-6.3.0/gcc/varasm.c	2017-03-30 16:23:21.724074108 -0700
+@@ -6193,15 +6193,20 @@ default_section_type_flags (tree decl, c
        || strncmp (name, ".gnu.linkonce.tb.", 17) == 0)
      flags |= SECTION_TLS | SECTION_BSS;
  
@@ -114,1578 +715,499 @@
      flags |= SECTION_NOTYPE;
  
    return flags;
-diff -dcprN gcc-6.2.0/config.sub gcc-6.2.0-fuchsia/config.sub
-*** gcc-6.2.0/config.sub	2015-12-31 13:13:28.000000000 -0800
---- gcc-6.2.0-fuchsia/config.sub	2016-10-24 17:07:48.244523443 -0700
-*************** case $os in
-*** 1531,1536 ****
---- 1531,1539 ----
-  		;;
-  	-nacl*)
-  		;;
-+ 	-fuchsia*)
-+ 		os=-fuchsia
-+ 		;;
-  	-none)
-  		;;
-  	*)
-diff -rdcp --unidirectional-new-file gcc-6.2.0-fsf/gcc/collect2.c gcc-6.2.0/gcc/collect2.c
-*** gcc-6.2.0-fsf/gcc/collect2.c	2016-11-23 09:11:05.324188090 -0800
---- gcc-6.2.0/gcc/collect2.c	2016-11-30 13:50:14.585469484 -0800
-*************** main (int argc, char **argv)
-*** 1067,1074 ****
---- 1067,1076 ----
-    if (signal (SIGQUIT, SIG_IGN) != SIG_IGN)
-      signal (SIGQUIT, handler);
-  #endif
-+ #ifdef SIGINT
-    if (signal (SIGINT, SIG_IGN) != SIG_IGN)
-      signal (SIGINT, handler);
-+ #endif
-  #ifdef SIGALRM
-    if (signal (SIGALRM, SIG_IGN) != SIG_IGN)
-      signal (SIGALRM, handler);
-*************** main (int argc, char **argv)
-*** 1077,1084 ****
---- 1079,1088 ----
-    if (signal (SIGHUP, SIG_IGN) != SIG_IGN)
-      signal (SIGHUP, handler);
-  #endif
-+ #ifdef SIGSEGV
-    if (signal (SIGSEGV, SIG_IGN) != SIG_IGN)
-      signal (SIGSEGV, handler);
-+ #endif
-  #ifdef SIGBUS
-    if (signal (SIGBUS, SIG_IGN) != SIG_IGN)
-      signal (SIGBUS, handler);
-*************** static void
-*** 2307,2313 ****
---- 2311,2319 ----
-  scan_prog_file (const char *prog_name, scanpass which_pass,
-  		scanfilter filter)
-  {
-+ #ifdef SIGINT
-    void (*int_handler) (int);
-+ #endif
-  #ifdef SIGQUIT
-    void (*quit_handler) (int);
-  #endif
-*************** scan_prog_file (const char *prog_name, s
-*** 2373,2379 ****
---- 2379,2387 ----
-  	fatal_error (input_location, errmsg);
-      }
-  
-+ #ifdef SIGINT
-    int_handler  = (void (*) (int)) signal (SIGINT,  SIG_IGN);
-+ #endif
-  #ifdef SIGQUIT
-    quit_handler = (void (*) (int)) signal (SIGQUIT, SIG_IGN);
-  #endif
-*************** scan_prog_file (const char *prog_name, s
-*** 2499,2505 ****
---- 2507,2515 ----
-  
-    do_wait (nm_file_name, pex);
-  
-+ #ifdef SIGINT
-    signal (SIGINT,  int_handler);
-+ #endif
-  #ifdef SIGQUIT
-    signal (SIGQUIT, quit_handler);
-  #endif
-*************** scan_libraries (const char *prog_name)
-*** 2571,2577 ****
---- 2581,2589 ----
-  	fatal_error (input_location, errmsg);
-      }
-  
-+ #ifdef SIGINT
-    int_handler  = (void (*) (int)) signal (SIGINT,  SIG_IGN);
-+ #endif
-  #ifdef SIGQUIT
-    quit_handler = (void (*) (int)) signal (SIGQUIT, SIG_IGN);
-  #endif
-*************** scan_libraries (const char *prog_name)
-*** 2619,2625 ****
---- 2631,2639 ----
-  
-    do_wait (ldd_file_name, pex);
-  
-+ #ifdef SIGINT
-    signal (SIGINT,  int_handler);
-+ #endif
-  #ifdef SIGQUIT
-    signal (SIGQUIT, quit_handler);
-  #endif
-diff -rdcp --unidirectional-new-file gcc-6.2.0-fsf/gcc/config/arm/fuchsia-elf.h gcc-6.2.0/gcc/config/arm/fuchsia-elf.h
-*** gcc-6.2.0-fsf/gcc/config/arm/fuchsia-elf.h	1969-12-31 16:00:00.000000000 -0800
---- gcc-6.2.0/gcc/config/arm/fuchsia-elf.h	2016-11-21 19:10:12.382326720 -0800
-***************
-*** 0 ****
---- 1,31 ----
-+ /* Configuration file for ARM Fuchsia ELF targets.
-+    Copyright (C) 2016 Free Software Foundation, Inc.
-+    Contributed by Google.
-+ 
-+    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/>.  */
-+ 
-+ /* Use the BPABI builtins and the generic OS builtins.  */
-+ #undef  TARGET_SUB_OS_CPP_BUILTINS
-+ #define TARGET_SUB_OS_CPP_BUILTINS() 		\
-+   TARGET_BPABI_CPP_BUILTINS()
-+ 
-+ /* Use the AAPCS ABI by default.  */
-+ #undef ARM_DEFAULT_ABI
-+ #define ARM_DEFAULT_ABI ARM_ABI_AAPCS
-+ 
-+ #define ARM_TARGET2_DWARF_FORMAT (DW_EH_PE_pcrel | DW_EH_PE_indirect)
-+ 
-diff -rdcp --unidirectional-new-file gcc-6.2.0-fsf/gcc/config/fuchsia.h gcc-6.2.0/gcc/config/fuchsia.h
-*** gcc-6.2.0-fsf/gcc/config/fuchsia.h	1969-12-31 16:00:00.000000000 -0800
---- gcc-6.2.0/gcc/config/fuchsia.h	2017-01-10 09:07:12.943847114 -0800
-***************
-*** 0 ****
---- 1,105 ----
-+ /* Base configuration file for all Fuchsia targets.
-+    Copyright (C) 2016 Free Software Foundation, Inc.
-+ 
-+ 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/>.  */
-+ 
-+ /* Common Fuchsia configuration.  */
-+ 
-+ /* In case we need to know.  */
-+ #define USING_CONFIG_FUCHSIA 1
-+ 
-+ #undef  STARTFILE_SPEC
-+ #define STARTFILE_SPEC "%{!shared: crt1%O%s} crtbegin%O%s"
-+ 
-+ #undef  ENDFILE_SPEC
-+ #define ENDFILE_SPEC "crtend%O%s"
-+ 
-+ /* When neither pic nor pie has been specified, use PIE by default.  */
-+ #undef  CC1_SPEC
-+ #define CC1_SPEC "%{!fno-pic:%{!fno-PIC:%{!fpic:%{!fPIC:" \
-+                    "%{!fno-pie:%{!fno-PIE:%{!fpie:%{!fPIE: -fPIE}}}}}}}}"
-+ 
-+ #undef  LIB_SPEC
-+ #define LIB_SPEC "--start-group" \
-+ 		 " -lmxio -lmagenta -lc -llaunchpad" \
-+ 		 "%{!static: -lgcc_s}" \
-+ 		 " --end-group"
-+ 
-+ #undef  LINK_SPEC
-+ #define LINK_SPEC "-z max-page-size=4096" \
-+ 		  " -z combreloc" \
-+ 		  " -z relro" \
-+ 		  " -z now" \
-+ 		  " -z text" \
-+ 		  "%{!hash-style: --hash-style=gnu}" \
-+ 		  "%{!no-eh-frame-hdr: --eh-frame-hdr}" \
-+ 		  "%{!no-build-id: --build-id}" \
-+ 		  "%{shared: -shared}" \
-+ 		  "%{!shared:%{!static:%{!dynamic-linker: -dynamic-linker=ld.so.1}}}"
-+ 
-+ /* We are using MUSL as our libc.  */
-+ #undef  OPTION_MUSL
-+ #define OPTION_MUSL 1
-+ 
-+ #ifndef TARGET_SUB_OS_CPP_BUILTINS
-+ #define TARGET_SUB_OS_CPP_BUILTINS()
-+ #endif
-+ 
-+ #undef  TARGET_OS_CPP_BUILTINS
-+ #define TARGET_OS_CPP_BUILTINS()		\
-+   do						\
-+     {						\
-+       builtin_define ("__Fuchsia__");		\
-+       TARGET_SUB_OS_CPP_BUILTINS();		\
-+     }						\
-+   while (false)
-+ 
-+ /* /dev/null is unwritable, at the moment. Use this as a workaround.  */
-+ #undef  HOST_BIT_BUCKET
-+ #define HOST_BIT_BUCKET "/tmp/.null"
-+ 
-+ /* Inode numbers are not available to us.  */
-+ #define HOST_LACKS_INODE_NUMBERS
-+ 
-+ /* In fact we have ftw.h, but the function itself is unimplemented.  */
-+ #undef HAVE_FTW_H
-+ 
-+ /* Functions that are implemented as stubs in libc.  */
-+ #undef HAVE_GETRLIMIT
-+ #undef HAVE_GETRUSAGE
-+ #undef HAVE_REALPATH
-+ #undef HAVE_SETRLIMIT
-+ #undef HAVE_TIMES
-+ 
-+ /* No ioctl() support.  */
-+ #undef TIOCGWINSZ
-+ 
-+ /* No signal() support.  */
-+ #undef SIGABRT
-+ #undef SIGALRM
-+ #undef SIGBUS
-+ #undef SIGCHLD
-+ #undef SIGFPE
-+ #undef SIGHUP
-+ #undef SIGILL
-+ #undef SIGINT
-+ #undef SIGIOT
-+ #undef SIGPIPE
-+ #undef SIGQUIT
-+ #undef SIGSEGV
-+ #undef SIGTERM
-+ 
-diff -rdcp --unidirectional-new-file gcc-6.2.0-fsf/gcc/config.gcc gcc-6.2.0/gcc/config.gcc
-*** gcc-6.2.0-fsf/gcc/config.gcc	2016-11-23 09:11:05.804186203 -0800
---- gcc-6.2.0/gcc/config.gcc	2016-11-21 16:05:55.706051533 -0800
-*************** case ${target} in
-*** 710,715 ****
---- 710,718 ----
-    esac
-    use_gcc_stdint=wrap
-    ;;
-+ *-*-fuchsia*)
-+   native_system_header_dir=/include
-+   ;;
-  *-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu | *-*-gnu* | *-*-kopensolaris*-gnu)
-    extra_options="$extra_options gnu-user.opt"
-    gas=yes
-*************** case ${target} in
-*** 907,913 ****
-  esac
-  
-  case ${target} in
-! aarch64*-*-elf | aarch64*-*-rtems*)
-  	tm_file="${tm_file} dbxelf.h elfos.h newlib-stdint.h"
-  	tm_file="${tm_file} aarch64/aarch64-elf.h aarch64/aarch64-elf-raw.h"
-  	tmake_file="${tmake_file} aarch64/t-aarch64"
---- 910,916 ----
-  esac
-  
-  case ${target} in
-! aarch64*-*-elf | aarch64*-*-fuchsia* | aarch64*-*-rtems*)
-  	tm_file="${tm_file} dbxelf.h elfos.h newlib-stdint.h"
-  	tm_file="${tm_file} aarch64/aarch64-elf.h aarch64/aarch64-elf-raw.h"
-  	tmake_file="${tmake_file} aarch64/t-aarch64"
-*************** aarch64*-*-elf | aarch64*-*-rtems*)
-*** 915,920 ****
---- 918,926 ----
-  	aarch64-*-elf*)
-  		use_gcc_stdint=wrap
-  		;;
-+         aarch64-*-fuchsia*)
-+                 tm_file="${tm_file} fuchsia.h"
-+                 ;;
-  	aarch64-*-rtems*)
-  	  	tm_file="${tm_file} rtems.h aarch64/rtems.h"
-  		;;
-*************** arm*-*-uclinux*eabi*)		# ARM ucLinux
-*** 1097,1103 ****
-  	# The EABI requires the use of __cxa_atexit.
-  	default_use_cxa_atexit=yes
-  	;;
-! arm*-*-eabi* | arm*-*-symbianelf* | arm*-*-rtems*)
-  	case ${target} in
-  	arm*eb-*-eabi*)
-  	  tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
---- 1103,1109 ----
-  	# The EABI requires the use of __cxa_atexit.
-  	default_use_cxa_atexit=yes
-  	;;
-! arm*-*-eabi* | arm*-*-symbianelf* | arm*-*-rtems* | arm*-*-fuchsia*)
-  	case ${target} in
-  	arm*eb-*-eabi*)
-  	  tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
-*************** arm*-*-eabi* | arm*-*-symbianelf* | arm*
-*** 1111,1116 ****
---- 1117,1126 ----
-  	  tmake_file="${tmake_file} arm/t-bpabi"
-  	  use_gcc_stdint=wrap
-  	  ;;
-+ 	arm*-*-fuchsia*)
-+ 	  tm_file="${tm_file} fuchsia.h arm/fuchsia-elf.h glibc-stdint.h"
-+ 	  tmake_file="${tmake_file} arm/t-bpabi"
-+ 	  ;;
-  	arm*-*-rtems*)
-  	  tm_file="${tm_file} rtems.h arm/rtems.h newlib-stdint.h"
-  	  tmake_file="${tmake_file} arm/t-bpabi arm/t-rtems"
-*************** i[34567]86-*-elf*)
-*** 1418,1423 ****
---- 1428,1434 ----
-  	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h newlib-stdint.h i386/i386elf.h"
-  	;;
-  x86_64-*-elf*)
-+ 	tmake_file="${tmake_file} i386/t-x86_64-elf"
-  	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h newlib-stdint.h i386/i386elf.h i386/x86-64.h"
-  	;;
-  x86_64-*-rtems*)
-*************** i[34567]86-*-interix[3-9]*)
-*** 1791,1796 ****
---- 1802,1811 ----
-  		tm_file="${tm_file} dbxcoff.h"
-  	fi
-  	;;
-+ x86_64-*-fuchsia*)
-+ 	tmake_file="${tmake_file} i386/t-x86_64-elf"
-+ 	tm_file="${tm_file} i386/unix.h i386/att.h elfos.h newlib-stdint.h i386/i386elf.h i386/x86-64.h fuchsia.h"
-+ 	;;
-  ia64*-*-elf*)
-  	tm_file="${tm_file} dbxelf.h elfos.h newlib-stdint.h ia64/sysv4.h ia64/elf.h"
-  	tmake_file="ia64/t-ia64"
-diff -rdcp --unidirectional-new-file gcc-6.2.0-fsf/gcc/config.host gcc-6.2.0/gcc/config.host
-*** gcc-6.2.0-fsf/gcc/config.host	2016-11-23 09:10:49.908248680 -0800
---- gcc-6.2.0/gcc/config.host	2016-11-21 18:57:29.749649894 -0800
-*************** case ${host} in
-*** 99,105 ****
-  esac
-  
-  case ${host} in
-!   aarch64*-*-linux*)
-      case ${target} in
-        aarch64*-*-*)
-  	host_extra_gcc_objs="driver-aarch64.o"
---- 99,105 ----
-  esac
-  
-  case ${host} in
-!   aarch64*-*-linux* | aarch64*-*-fuchsia*)
-      case ${target} in
-        aarch64*-*-*)
-  	host_extra_gcc_objs="driver-aarch64.o"
-*************** case ${host} in
-*** 107,113 ****
-  	;;
-      esac
-      ;;
-!   arm*-*-freebsd* | arm*-*-linux*)
-      case ${target} in
-        arm*-*-*)
-  	host_extra_gcc_objs="driver-arm.o"
---- 107,113 ----
-  	;;
-      esac
-      ;;
-!   arm*-*-freebsd* | arm*-*-linux* | arm*-*-fuchsia*)
-      case ${target} in
-        arm*-*-*)
-  	host_extra_gcc_objs="driver-arm.o"
-diff -rdcp --unidirectional-new-file gcc-6.2.0-fsf/gcc/configure gcc-6.2.0/gcc/configure
-*** gcc-6.2.0-fsf/gcc/configure	2016-11-23 09:11:05.200188577 -0800
---- gcc-6.2.0/gcc/configure	2016-11-30 12:34:30.868394376 -0800
-*************** if test -z "$aix_libpath"; then aix_libp
-*** 16703,16708 ****
---- 16703,16715 ----
-        hardcode_shlibpath_var=no
-        ;;
-  
-+     fuchsia*)
-+       archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-+       hardcode_libdir_flag_spec='-R$libdir'
-+       hardcode_direct=yes
-+       hardcode_shlibpath_var=no
-+       ;;
-+ 
-      hpux9*)
-        if test "$GCC" = yes; then
-  	archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-*************** freebsd* | dragonfly*)
-*** 17638,17643 ****
---- 17645,17656 ----
-    esac
-    ;;
-  
-+ fuchsia*)
-+   library_names_spec='${libname}${shared_ext}'
-+   need_lib_prefix=no
-+   need_version=no
-+   ;;
-+ 
-  gnu*)
-    version_type=linux
-    need_lib_prefix=no
-*************** fi
-*** 18241,18246 ****
---- 18254,18264 ----
-  
-      ;;
-  
-+   fuchsia*)
-+     lt_cv_dlopen="dlopen"
-+     lt_cv_dlopen_libs=
-+     ;;
-+ 
-    *)
-      ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
-  if test "x$ac_cv_func_shl_load" = x""yes; then :
-*************** else
-*** 18453,18459 ****
-    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-    lt_status=$lt_dlunknown
-    cat > conftest.$ac_ext <<_LT_EOF
-! #line 18456 "configure"
-  #include "confdefs.h"
-  
-  #if HAVE_DLFCN_H
---- 18471,18477 ----
-    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-    lt_status=$lt_dlunknown
-    cat > conftest.$ac_ext <<_LT_EOF
-! #line 18474 "configure"
-  #include "confdefs.h"
-  
-  #if HAVE_DLFCN_H
-*************** else
-*** 18559,18565 ****
-    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-    lt_status=$lt_dlunknown
-    cat > conftest.$ac_ext <<_LT_EOF
-! #line 18562 "configure"
-  #include "confdefs.h"
-  
-  #if HAVE_DLFCN_H
---- 18577,18583 ----
-    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-    lt_status=$lt_dlunknown
-    cat > conftest.$ac_ext <<_LT_EOF
-! #line 18580 "configure"
-  #include "confdefs.h"
-  
-  #if HAVE_DLFCN_H
-*************** freebsd* | dragonfly*)
-*** 21298,21303 ****
---- 21316,21327 ----
-    esac
-    ;;
-  
-+ fuchsia*)
-+   library_names_spec='${libname}${shared_ext}'
-+   need_lib_prefix=no
-+   need_version=no
-+   ;;
-+ 
-  gnu*)
-    version_type=linux
-    need_lib_prefix=no
-*************** fi
-*** 29375,29388 ****
-  
-  
-  # Check if -fno-PIE works.
-! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -fno-PIE option" >&5
-  $as_echo_n "checking for -fno-PIE option... " >&6; }
-  if test "${gcc_cv_c_no_fpie+set}" = set; then :
-    $as_echo_n "(cached) " >&6
-  else
-    saved_CXXFLAGS="$CXXFLAGS"
-!    CXXFLAGS="$CXXFLAGS -fno-PIE"
-!    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-  /* end confdefs.h.  */
-  int main(void) {return 0;}
-  _ACEOF
---- 29399,29417 ----
-  
-  
-  # Check if -fno-PIE works.
-! case $host_os in
-!   fuchsia*)
-!     # Fuchsia requires PIE binaries
-!     ;;
-!   *)
-!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -fno-PIE option" >&5
-  $as_echo_n "checking for -fno-PIE option... " >&6; }
-  if test "${gcc_cv_c_no_fpie+set}" = set; then :
-    $as_echo_n "(cached) " >&6
-  else
-    saved_CXXFLAGS="$CXXFLAGS"
-!        CXXFLAGS="$CXXFLAGS -fno-PIE"
-!        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-  /* end confdefs.h.  */
-  int main(void) {return 0;}
-  _ACEOF
-*************** else
-*** 29392,29415 ****
-    gcc_cv_c_no_fpie=no
-  fi
-  rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-!    CXXFLAGS="$saved_CXXFLAGS"
-  fi
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_c_no_fpie" >&5
-  $as_echo "$gcc_cv_c_no_fpie" >&6; }
-! if test "$gcc_cv_c_no_fpie" = "yes"; then
-!   NO_PIE_CFLAGS="-fno-PIE"
-! fi
-  
-  
-  # Check if -no-pie works.
-! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -no-pie option" >&5
-  $as_echo_n "checking for -no-pie option... " >&6; }
-  if test "${gcc_cv_no_pie+set}" = set; then :
-    $as_echo_n "(cached) " >&6
-  else
-    saved_LDFLAGS="$LDFLAGS"
-!    LDFLAGS="$LDFLAGS -no-pie"
-!    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-  /* end confdefs.h.  */
-  int main(void) {return 0;}
-  _ACEOF
---- 29421,29451 ----
-    gcc_cv_c_no_fpie=no
-  fi
-  rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-!        CXXFLAGS="$saved_CXXFLAGS"
-  fi
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_c_no_fpie" >&5
-  $as_echo "$gcc_cv_c_no_fpie" >&6; }
-!     if test "$gcc_cv_c_no_fpie" = "yes"; then
-!       NO_PIE_CFLAGS="-fno-PIE"
-!     fi
-!     ;;
-! esac
-  
-  
-  # Check if -no-pie works.
-! case $host_os in
-!   fuchsia*)
-!     # Fuchsia requires PIE binaries
-!     ;;
-!   *)
-!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -no-pie option" >&5
-  $as_echo_n "checking for -no-pie option... " >&6; }
-  if test "${gcc_cv_no_pie+set}" = set; then :
-    $as_echo_n "(cached) " >&6
-  else
-    saved_LDFLAGS="$LDFLAGS"
-!        LDFLAGS="$LDFLAGS -no-pie"
-!        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-  /* end confdefs.h.  */
-  int main(void) {return 0;}
-  _ACEOF
-*************** else
-*** 29420,29432 ****
-  fi
-  rm -f core conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-!    LDFLAGS="$saved_LDFLAGS"
-  fi
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_no_pie" >&5
-  $as_echo "$gcc_cv_no_pie" >&6; }
-! if test "$gcc_cv_no_pie" = "yes"; then
-!   NO_PIE_FLAG="-no-pie"
-! fi
-  
-  
-  # Check linker supports '-z bndplt'
---- 29456,29470 ----
-  fi
-  rm -f core conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-!        LDFLAGS="$saved_LDFLAGS"
-  fi
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_no_pie" >&5
-  $as_echo "$gcc_cv_no_pie" >&6; }
-!     if test "$gcc_cv_no_pie" = "yes"; then
-!       NO_PIE_FLAG="-no-pie"
-!     fi
-!     ;;
-! esac
-  
-  
-  # Check linker supports '-z bndplt'
-diff -rdcp --unidirectional-new-file gcc-6.2.0-fsf/gcc/configure.ac gcc-6.2.0/gcc/configure.ac
-*** gcc-6.2.0-fsf/gcc/configure.ac	2016-11-23 09:11:05.952185621 -0800
---- gcc-6.2.0/gcc/configure.ac	2016-11-30 12:31:48.821079660 -0800
-*************** fi
-*** 6086,6116 ****
-  AC_SUBST([enable_default_pie])
-  
-  # Check if -fno-PIE works.
-! AC_CACHE_CHECK([for -fno-PIE option],
-!   [gcc_cv_c_no_fpie],
-!   [saved_CXXFLAGS="$CXXFLAGS"
-!    CXXFLAGS="$CXXFLAGS -fno-PIE"
-!    AC_COMPILE_IFELSE([int main(void) {return 0;}],
-!      [gcc_cv_c_no_fpie=yes],
-!      [gcc_cv_c_no_fpie=no])
-!    CXXFLAGS="$saved_CXXFLAGS"])
-! if test "$gcc_cv_c_no_fpie" = "yes"; then
-!   NO_PIE_CFLAGS="-fno-PIE"
-! fi
-  AC_SUBST([NO_PIE_CFLAGS])
-  
-  # Check if -no-pie works.
-! AC_CACHE_CHECK([for -no-pie option],
-!   [gcc_cv_no_pie],
-!   [saved_LDFLAGS="$LDFLAGS"
-!    LDFLAGS="$LDFLAGS -no-pie"
-!    AC_LINK_IFELSE([int main(void) {return 0;}],
-!      [gcc_cv_no_pie=yes],
-!      [gcc_cv_no_pie=no])
-!    LDFLAGS="$saved_LDFLAGS"])
-! if test "$gcc_cv_no_pie" = "yes"; then
-!   NO_PIE_FLAG="-no-pie"
-! fi
-  AC_SUBST([NO_PIE_FLAG])
-  
-  # Check linker supports '-z bndplt'
---- 6086,6130 ----
-  AC_SUBST([enable_default_pie])
-  
-  # Check if -fno-PIE works.
-! case $host_os in
-!   fuchsia*)
-!     # Fuchsia requires PIE binaries
-!     ;;
-!   *)
-!     AC_CACHE_CHECK([for -fno-PIE option],
-!       [gcc_cv_c_no_fpie],
-!       [saved_CXXFLAGS="$CXXFLAGS"
-!        CXXFLAGS="$CXXFLAGS -fno-PIE"
-!        AC_COMPILE_IFELSE([int main(void) {return 0;}],
-!          [gcc_cv_c_no_fpie=yes],
-!          [gcc_cv_c_no_fpie=no])
-!        CXXFLAGS="$saved_CXXFLAGS"])
-!     if test "$gcc_cv_c_no_fpie" = "yes"; then
-!       NO_PIE_CFLAGS="-fno-PIE"
-!     fi
-!     ;;
-! esac
-  AC_SUBST([NO_PIE_CFLAGS])
-  
-  # Check if -no-pie works.
-! case $host_os in
-!   fuchsia*)
-!     # Fuchsia requires PIE binaries
-!     ;;
-!   *)
-!     AC_CACHE_CHECK([for -no-pie option],
-!       [gcc_cv_no_pie],
-!       [saved_LDFLAGS="$LDFLAGS"
-!        LDFLAGS="$LDFLAGS -no-pie"
-!        AC_LINK_IFELSE([int main(void) {return 0;}],
-!          [gcc_cv_no_pie=yes],
-!          [gcc_cv_no_pie=no])
-!        LDFLAGS="$saved_LDFLAGS"])
-!     if test "$gcc_cv_no_pie" = "yes"; then
-!       NO_PIE_FLAG="-no-pie"
-!     fi
-!     ;;
-! esac
-  AC_SUBST([NO_PIE_FLAG])
-  
-  # Check linker supports '-z bndplt'
-diff -rdcp --unidirectional-new-file gcc-6.2.0-fsf/gcc/gcc.c gcc-6.2.0/gcc/gcc.c
-*** gcc-6.2.0-fsf/gcc/gcc.c	2016-11-23 09:11:05.472187508 -0800
---- gcc-6.2.0/gcc/gcc.c	2016-11-30 13:46:59.158288993 -0800
-*************** driver::global_initializations ()
-*** 7255,7268 ****
---- 7255,7272 ----
-    if (atexit (delete_temp_files) != 0)
-      fatal_error (input_location, "atexit failed");
-  
-+ #ifdef SIGINT
-    if (signal (SIGINT, SIG_IGN) != SIG_IGN)
-      signal (SIGINT, fatal_signal);
-+ #endif
-  #ifdef SIGHUP
-    if (signal (SIGHUP, SIG_IGN) != SIG_IGN)
-      signal (SIGHUP, fatal_signal);
-  #endif
-+ #ifdef SIGTERM
-    if (signal (SIGTERM, SIG_IGN) != SIG_IGN)
-      signal (SIGTERM, fatal_signal);
-+ #endif
-  #ifdef SIGPIPE
-    if (signal (SIGPIPE, SIG_IGN) != SIG_IGN)
-      signal (SIGPIPE, fatal_signal);
-diff -rdcp --unidirectional-new-file gcc-6.2.0-fsf/gcc/gcov-tool.c gcc-6.2.0/gcc/gcov-tool.c
-*** gcc-6.2.0-fsf/gcc/gcov-tool.c	2017-02-10 09:48:15.342343009 -0800
---- gcc-6.2.0/gcc/gcov-tool.c	2017-02-10 10:58:43.887925206 -0800
-*************** extern void gcov_set_verbose (void);
-*** 51,57 ****
-  /* Set to verbose output mode.  */
-  static bool verbose;
-  
-! #if HAVE_FTW_H
-  
-  /* Remove file NAME if it has a gcda suffix. */
-  
---- 51,58 ----
-  /* Set to verbose output mode.  */
-  static bool verbose;
-  
-! /* Fuchsia: remove when nftw has been implemented.  */
-! #if HAVE_FTW_H && !defined(__Fuchsia__)
-  
-  /* Remove file NAME if it has a gcda suffix. */
-  
-*************** unlink_gcda_file (const char *name,
-*** 80,86 ****
-  static int
-  unlink_profile_dir (const char *path ATTRIBUTE_UNUSED)
-  {
-! #if HAVE_FTW_H
-      return nftw(path, unlink_gcda_file, 64, FTW_DEPTH | FTW_PHYS);
-  #else
-      return -1;
---- 81,88 ----
-  static int
-  unlink_profile_dir (const char *path ATTRIBUTE_UNUSED)
-  {
-! /* Fuchsia: remove when nftw has been implemented.  */
-! #if HAVE_FTW_H && !defined(__Fuchsia__)
-      return nftw(path, unlink_gcda_file, 64, FTW_DEPTH | FTW_PHYS);
-  #else
-      return -1;
-diff -rdcp --unidirectional-new-file gcc-6.2.0-fsf/gcc/ggc-common.c gcc-6.2.0/gcc/ggc-common.c
-*** gcc-6.2.0-fsf/gcc/ggc-common.c	2016-12-20 13:59:53.022879377 -0800
---- gcc-6.2.0/gcc/ggc-common.c	2017-01-10 14:54:17.969607414 -0800
-*************** mmap_gt_pch_use_address (void *base, siz
-*** 728,734 ****
-  static double
-  ggc_rlimit_bound (double limit)
-  {
-! #if defined(HAVE_GETRLIMIT)
-    struct rlimit rlim;
-  # if defined (RLIMIT_AS)
-    /* RLIMIT_AS is what POSIX says is the limit on mmap.  Presumably
---- 728,735 ----
-  static double
-  ggc_rlimit_bound (double limit)
-  {
-! /* Fuchsia: getrlimit is not fully implemented yet.  */
-! #if !defined(__Fuchsia__) && defined(HAVE_GETRLIMIT)
-    struct rlimit rlim;
-  # if defined (RLIMIT_AS)
-    /* RLIMIT_AS is what POSIX says is the limit on mmap.  Presumably
-*************** ggc_rlimit_bound (double limit)
-*** 752,758 ****
-        && rlim.rlim_cur >= 8 * 1024 * 1024)
-      limit = rlim.rlim_cur;
-  # endif /* RLIMIT_AS or RLIMIT_DATA */
-! #endif /* HAVE_GETRLIMIT */
-  
-    return limit;
-  }
---- 753,759 ----
-        && rlim.rlim_cur >= 8 * 1024 * 1024)
-      limit = rlim.rlim_cur;
-  # endif /* RLIMIT_AS or RLIMIT_DATA */
-! #endif /* !Fuchsia && HAVE_GETRLIMIT */
-  
-    return limit;
-  }
-*************** ggc_min_heapsize_heuristic (void)
-*** 790,796 ****
-       bound of 128M (when RAM >= 1GB).  */
-    phys_kbytes /= 8;
-  
-! #if defined(HAVE_GETRLIMIT) && defined (RLIMIT_RSS)
-    /* Try not to overrun the RSS limit while doing garbage collection.
-       The RSS limit is only advisory, so no margin is subtracted.  */
+diff -rdup --unidirectional-new-file gcc-6.3.0-fsf/libgcc/config/t-slibgcc-fuchsia gcc-6.3.0/libgcc/config/t-slibgcc-fuchsia
+--- gcc-6.3.0-fsf/libgcc/config/t-slibgcc-fuchsia	1969-12-31 16:00:00.000000000 -0800
++++ gcc-6.3.0/libgcc/config/t-slibgcc-fuchsia	2017-03-30 16:23:21.728074093 -0700
+@@ -0,0 +1,22 @@
++# Copyright (C) 2016 Free Software Foundation, Inc.
++#
++# 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/>.
++
++# Fuchsia-specific shared library overrides.
++
++SHLIB_LDFLAGS = -Wl,--soname=$(SHLIB_SONAME) \
++                $(LDFLAGS)
+diff -rdup --unidirectional-new-file gcc-6.3.0-fsf/libgcc/config.host gcc-6.3.0/libgcc/config.host
+--- gcc-6.3.0-fsf/libgcc/config.host	2017-03-30 16:18:19.057238897 -0700
++++ gcc-6.3.0/libgcc/config.host	2017-03-31 18:28:28.201747975 -0700
+@@ -230,6 +230,10 @@ case ${host} in
+       ;;
+   esac
+   ;;
++*-*-fuchsia*)
++  tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-eh-dw2-dip t-slibgcc t-slibgcc-fuchsia"
++  extra_parts="crtbegin.o crtend.o"
++  ;;
+ *-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu | *-*-gnu* | *-*-kopensolaris*-gnu)
+   tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-eh-dw2-dip t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver t-linux"
+   extra_parts="crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o"
+@@ -333,6 +337,10 @@ aarch64*-*-elf | aarch64*-*-rtems*)
+ 	tmake_file="${tmake_file} ${cpu_type}/t-aarch64"
+ 	tmake_file="${tmake_file} ${cpu_type}/t-softfp t-softfp t-crtfm"
+ 	;;
++aarch64*-*-fuchsia*)
++	tmake_file="${tmake_file} ${cpu_type}/t-aarch64"
++	tmake_file="${tmake_file} ${cpu_type}/t-softfp t-softfp"
++	;;
+ aarch64*-*-linux*)
+ 	extra_parts="$extra_parts crtfastmath.o"
+ 	md_unwind_header=aarch64/linux-unwind.h
+@@ -584,8 +592,8 @@ i[34567]86-*-elfiamcu)
+ i[34567]86-*-elf*)
+ 	tmake_file="$tmake_file i386/t-crtstuff t-crtstuff-pic t-libgcc-pic"
+ 	;;
+-x86_64-*-elf* | x86_64-*-rtems*)
+-	tmake_file="$tmake_file i386/t-crtstuff t-crtstuff-pic t-libgcc-pic"
++x86_64-*-elf* | x86_64-*-rtems* | x86_64-*-fuchsia*)
++	tmake_file="$tmake_file t-libgcc-pic"
+ 	;;
+ i[34567]86-*-dragonfly*)
+ 	tmake_file="${tmake_file} i386/t-dragonfly i386/t-crtstuff"
+diff -rdup --unidirectional-new-file gcc-6.3.0-fsf/libgcc/libgcov-util.c gcc-6.3.0/libgcc/libgcov-util.c
+--- gcc-6.3.0-fsf/libgcc/libgcov-util.c	2017-03-30 16:18:19.057238897 -0700
++++ gcc-6.3.0/libgcc/libgcov-util.c	2017-03-30 16:23:21.728074093 -0700
+@@ -382,7 +382,8 @@ read_gcda_file (const char *filename)
+   return obj_info;
+ }
+ 
+-#ifdef HAVE_FTW_H
++/* Fuchsia: remove when ftw has been implemented.  */
++#if defined(HAVE_FTW_H) && !defined(__Fuchsia__)
+ /* This will be called by ftw(). It opens and read a gcda file FILENAME.
+    Return a non-zero value to stop the tree walk.  */
+ 
+@@ -455,7 +456,8 @@ gcov_read_profile_dir (const char* dir_n
+       fnotice (stderr, "%s is not a directory\n", dir_name);
+       return NULL;
+     }
+-#ifdef HAVE_FTW_H
++/* Fuchsia: remove when ftw has been implemented.  */
++#if defined(HAVE_FTW_H) && !defined(__Fuchsia__)
+   ftw (".", ftw_read_file, 50);
+ #endif
+   ret = chdir (pwd);
+diff -rdup --unidirectional-new-file gcc-6.3.0-fsf/libiberty/lrealpath.c gcc-6.3.0/libiberty/lrealpath.c
+--- gcc-6.3.0-fsf/libiberty/lrealpath.c	2017-03-30 16:18:18.997239127 -0700
++++ gcc-6.3.0/libiberty/lrealpath.c	2017-03-30 16:23:21.728074093 -0700
+@@ -56,7 +56,8 @@ components will be simplified.  The retu
+ extern char *canonicalize_file_name (const char *);
+ #endif
+ 
+-#if defined(HAVE_REALPATH)
++/* Fuchsia: remove when realpath has been implemented.  */
++#if !defined(__Fuchsia__) && defined(HAVE_REALPATH)
+ # if defined (PATH_MAX)
+ #  define REALPATH_LIMIT PATH_MAX
+ # else
+@@ -109,7 +110,9 @@ lrealpath (const char *filename)
+      pathconf()) making it impossible to pass a correctly sized buffer
+      to realpath() (it could always overflow).  On those systems, we
+      skip this.  */
+-#if defined (HAVE_REALPATH) && defined (HAVE_UNISTD_H)
++/* Fuchsia: remove from conditional when realpath has been implemented.  */
++#if defined (HAVE_REALPATH) && defined (HAVE_UNISTD_H) \
++    && !defined (__Fuchsia__)
    {
---- 791,798 ----
-       bound of 128M (when RAM >= 1GB).  */
-    phys_kbytes /= 8;
-  
-! /* Fuchsia: getrlimit is not fully implemented yet.  */
-! #if !defined(__Fuchsia__) && defined(HAVE_GETRLIMIT) && defined (RLIMIT_RSS)
-    /* Try not to overrun the RSS limit while doing garbage collection.
-       The RSS limit is only advisory, so no margin is subtracted.  */
-   {
-diff -rdcp --unidirectional-new-file gcc-6.2.0-fsf/gcc/opts.c gcc-6.2.0/gcc/opts.c
-*** gcc-6.2.0-fsf/gcc/opts.c	2016-12-20 14:00:05.086836577 -0800
---- gcc-6.2.0/gcc/opts.c	2017-01-10 14:58:46.448360086 -0800
-*************** setup_core_dumping (diagnostic_context *
-*** 2386,2392 ****
-  #ifdef SIGABRT
-    signal (SIGABRT, SIG_DFL);
-  #endif
-! #if defined(HAVE_SETRLIMIT)
-    {
-      struct rlimit rlim;
-      if (getrlimit (RLIMIT_CORE, &rlim) != 0)
---- 2386,2393 ----
-  #ifdef SIGABRT
-    signal (SIGABRT, SIG_DFL);
-  #endif
-! /* Fuchsia: remove when getrlimit/setrlimit have been implemented.  */
-! #if !defined(__Fuchsia__) && defined(HAVE_SETRLIMIT)
-    {
-      struct rlimit rlim;
-      if (getrlimit (RLIMIT_CORE, &rlim) != 0)
-diff -rdcp --unidirectional-new-file gcc-6.2.0-fsf/gcc/timevar.c gcc-6.2.0/gcc/timevar.c
-*** gcc-6.2.0-fsf/gcc/timevar.c	2016-12-20 14:00:05.594834775 -0800
---- gcc-6.2.0/gcc/timevar.c	2017-01-10 14:56:40.812936374 -0800
-*************** struct tms
-*** 69,75 ****
-  # define HAVE_SYS_TIME
-  # define HAVE_WALL_TIME
-  #else
-! #ifdef HAVE_GETRUSAGE
-  # if defined HAVE_DECL_GETRUSAGE && !HAVE_DECL_GETRUSAGE
-    extern int getrusage (int, struct rusage *);
-  # endif
---- 69,76 ----
-  # define HAVE_SYS_TIME
-  # define HAVE_WALL_TIME
-  #else
-! /* Fuchsia: remove when getrusage has been implemented.  */
-! #if !defined(__Fuchsia__) && defined(HAVE_GETRUSAGE)
-  # if defined HAVE_DECL_GETRUSAGE && !HAVE_DECL_GETRUSAGE
-    extern int getrusage (int, struct rusage *);
-  # endif
-diff -rdcp --unidirectional-new-file gcc-6.2.0-fsf/libgcc/config/arm/unwind-arm.h gcc-6.2.0/libgcc/config/arm/unwind-arm.h
-*** gcc-6.2.0-fsf/libgcc/config/arm/unwind-arm.h	2016-12-20 14:00:07.118829367 -0800
---- gcc-6.2.0/libgcc/config/arm/unwind-arm.h	2017-01-10 09:08:36.419550153 -0800
-*************** extern "C" {
-*** 49,55 ****
-  	return 0;
-  
-  #if (defined(linux) && !defined(__uClinux__)) || defined(__NetBSD__) \
-!     || defined(__FreeBSD__)
-        /* Pc-relative indirect.  */
-  #define _GLIBCXX_OVERRIDE_TTYPE_ENCODING (DW_EH_PE_pcrel | DW_EH_PE_indirect)
-        tmp += ptr;
---- 49,55 ----
-  	return 0;
-  
-  #if (defined(linux) && !defined(__uClinux__)) || defined(__NetBSD__) \
-!     || defined(__FreeBSD__) || defined(__Fuchsia__)
-        /* Pc-relative indirect.  */
-  #define _GLIBCXX_OVERRIDE_TTYPE_ENCODING (DW_EH_PE_pcrel | DW_EH_PE_indirect)
-        tmp += ptr;
-diff -rdcp --unidirectional-new-file gcc-6.2.0-fsf/libgcc/config/t-slibgcc-fuchsia gcc-6.2.0/libgcc/config/t-slibgcc-fuchsia
-*** gcc-6.2.0-fsf/libgcc/config/t-slibgcc-fuchsia	1969-12-31 16:00:00.000000000 -0800
---- gcc-6.2.0/libgcc/config/t-slibgcc-fuchsia	2016-11-16 08:49:38.427039926 -0800
-***************
-*** 0 ****
---- 1,22 ----
-+ # Copyright (C) 2016 Free Software Foundation, Inc.
-+ #
-+ # 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/>.
-+ 
-+ # Fuchsia-specific shared library overrides.
-+ 
-+ SHLIB_LDFLAGS = -Wl,--soname=$(SHLIB_SONAME) \
-+                 $(LDFLAGS)
-diff -rdcp --unidirectional-new-file gcc-6.2.0-fsf/libgcc/config.host gcc-6.2.0/libgcc/config.host
-*** gcc-6.2.0-fsf/libgcc/config.host	2016-11-23 09:11:08.440175844 -0800
---- gcc-6.2.0/libgcc/config.host	2016-12-08 12:43:21.452060382 -0800
-*************** case ${host} in
-*** 230,235 ****
---- 230,239 ----
-        ;;
-    esac
-    ;;
-+ *-*-fuchsia*)
-+   tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-eh-dw2-dip t-slibgcc t-slibgcc-fuchsia"
-+   extra_parts="crtbegin.o crtend.o"
-+   ;;
-  *-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu | *-*-gnu* | *-*-kopensolaris*-gnu)
-    tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-eh-dw2-dip t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver t-linux"
-    extra_parts="crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o"
-*************** aarch64*-*-elf | aarch64*-*-rtems*)
-*** 333,338 ****
---- 337,346 ----
-  	tmake_file="${tmake_file} ${cpu_type}/t-aarch64"
-  	tmake_file="${tmake_file} ${cpu_type}/t-softfp t-softfp t-crtfm"
-  	;;
-+ aarch64*-*-fuchsia*)
-+ 	tmake_file="${tmake_file} ${cpu_type}/t-aarch64"
-+ 	tmake_file="${tmake_file} ${cpu_type}/t-softfp t-softfp"
-+ 	;;
-  aarch64*-*-linux*)
-  	extra_parts="$extra_parts crtfastmath.o"
-  	md_unwind_header=aarch64/linux-unwind.h
-*************** arm*-*-freebsd*)                # ARM Fr
-*** 383,388 ****
---- 391,402 ----
-  	unwind_header=config/arm/unwind-arm.h
-  	tmake_file="${tmake_file} t-softfp-sfdf t-softfp-excl arm/t-softfp t-softfp"
-  	;;
-+ arm*-*-fuchsia*)
-+ 	tmake_file="${tmake_file} arm/t-arm arm/t-elf arm/t-bpabi"
-+ 	tmake_file="${tmake_file} arm/tsoftfp t-softfp"
-+ 	tm_file="${tm_file} arm/bpabi-lib.h"
-+ 	unwind_header=config/arm/unwind-arm.h
-+ 	;;
-  arm*-*-netbsdelf*)
-  	tmake_file="$tmake_file arm/t-arm arm/t-netbsd t-slibgcc-gld-nover"
-  	;;
-*************** i[34567]86-*-elfiamcu)
-*** 577,584 ****
-  i[34567]86-*-elf*)
-  	tmake_file="$tmake_file i386/t-crtstuff t-crtstuff-pic t-libgcc-pic"
-  	;;
-! x86_64-*-elf* | x86_64-*-rtems*)
-! 	tmake_file="$tmake_file i386/t-crtstuff t-crtstuff-pic t-libgcc-pic"
-  	;;
-  i[34567]86-*-dragonfly*)
-  	tmake_file="${tmake_file} i386/t-dragonfly i386/t-crtstuff"
---- 591,598 ----
-  i[34567]86-*-elf*)
-  	tmake_file="$tmake_file i386/t-crtstuff t-crtstuff-pic t-libgcc-pic"
-  	;;
-! x86_64-*-elf* | x86_64-*-rtems* | x86_64-*-fuchsia*)
-! 	tmake_file="$tmake_file t-libgcc-pic"
-  	;;
-  i[34567]86-*-dragonfly*)
-  	tmake_file="${tmake_file} i386/t-dragonfly i386/t-crtstuff"
-diff -rdcp --unidirectional-new-file gcc-6.2.0-fsf/libgcc/libgcov-util.c gcc-6.2.0/libgcc/libgcov-util.c
-*** gcc-6.2.0-fsf/libgcc/libgcov-util.c	2017-02-10 09:48:17.438335487 -0800
---- gcc-6.2.0/libgcc/libgcov-util.c	2017-02-10 10:59:15.295811444 -0800
-*************** read_gcda_file (const char *filename)
-*** 382,388 ****
-    return obj_info;
-  }
-  
-! #ifdef HAVE_FTW_H
-  /* This will be called by ftw(). It opens and read a gcda file FILENAME.
-     Return a non-zero value to stop the tree walk.  */
-  
---- 382,389 ----
-    return obj_info;
-  }
-  
-! /* Fuchsia: remove when ftw has been implemented.  */
-! #if defined(HAVE_FTW_H) && !defined(__Fuchsia__)
-  /* This will be called by ftw(). It opens and read a gcda file FILENAME.
-     Return a non-zero value to stop the tree walk.  */
-  
-*************** gcov_read_profile_dir (const char* dir_n
-*** 455,461 ****
-        fnotice (stderr, "%s is not a directory\n", dir_name);
-        return NULL;
-      }
-! #ifdef HAVE_FTW_H
-    ftw (".", ftw_read_file, 50);
-  #endif
-    ret = chdir (pwd);
---- 456,463 ----
-        fnotice (stderr, "%s is not a directory\n", dir_name);
-        return NULL;
-      }
-! /* Fuchsia: remove when ftw has been implemented.  */
-! #if defined(HAVE_FTW_H) && !defined(__Fuchsia__)
-    ftw (".", ftw_read_file, 50);
-  #endif
-    ret = chdir (pwd);
-diff -rdcp --unidirectional-new-file gcc-6.2.0-fsf/libiberty/lrealpath.c gcc-6.2.0/libiberty/lrealpath.c
-*** gcc-6.2.0-fsf/libiberty/lrealpath.c	2016-12-20 14:00:06.758830644 -0800
---- gcc-6.2.0/libiberty/lrealpath.c	2017-01-10 15:01:19.863671770 -0800
-*************** components will be simplified.  The retu
-*** 56,62 ****
-  extern char *canonicalize_file_name (const char *);
-  #endif
-  
-! #if defined(HAVE_REALPATH)
-  # if defined (PATH_MAX)
-  #  define REALPATH_LIMIT PATH_MAX
-  # else
---- 56,63 ----
-  extern char *canonicalize_file_name (const char *);
-  #endif
-  
-! /* Fuchsia: remove when realpath has been implemented.  */
-! #if !defined(__Fuchsia__) && defined(HAVE_REALPATH)
-  # if defined (PATH_MAX)
-  #  define REALPATH_LIMIT PATH_MAX
-  # else
-*************** lrealpath (const char *filename)
-*** 109,115 ****
-       pathconf()) making it impossible to pass a correctly sized buffer
-       to realpath() (it could always overflow).  On those systems, we
-       skip this.  */
-! #if defined (HAVE_REALPATH) && defined (HAVE_UNISTD_H)
-    {
-      /* Find out the max path size.  */
-      long path_max = pathconf ("/", _PC_PATH_MAX);
---- 110,118 ----
-       pathconf()) making it impossible to pass a correctly sized buffer
-       to realpath() (it could always overflow).  On those systems, we
-       skip this.  */
-! /* Fuchsia: remove from conditional when realpath has been implemented.  */
-! #if defined (HAVE_REALPATH) && defined (HAVE_UNISTD_H) \
-!     && !defined (__Fuchsia__)
-    {
-      /* Find out the max path size.  */
-      long path_max = pathconf ("/", _PC_PATH_MAX);
-diff -rdcp --unidirectional-new-file gcc-6.2.0-fsf/libiberty/pex-unix.c gcc-6.2.0/libiberty/pex-unix.c
-*** gcc-6.2.0-fsf/libiberty/pex-unix.c	2017-03-02 15:29:41.979495096 -0800
---- gcc-6.2.0/libiberty/pex-unix.c	2017-03-06 08:45:00.518152950 -0800
-*************** extern int errno;
-*** 60,65 ****
---- 60,71 ----
-  #include <process.h>
-  #endif
-  
-+ #ifdef __Fuchsia__
-+ #include <launchpad/launchpad.h>
-+ #include <magenta/syscalls.h>
-+ #include <magenta/syscalls/object.h>
-+ #endif
-+ 
-  #ifdef vfork /* Autoconf may define this to fork for us. */
-  # define VFORK_STRING "fork"
-  #else
-*************** to_ptr32 (char **ptr64)
-*** 120,126 ****
-  
-  static pid_t pex_wait (struct pex_obj *, pid_t, int *, struct pex_time *);
-  
-! #ifdef HAVE_WAIT4
-  
-  static pid_t
-  pex_wait (struct pex_obj *obj ATTRIBUTE_UNUSED, pid_t pid, int *status,
---- 126,162 ----
-  
-  static pid_t pex_wait (struct pex_obj *, pid_t, int *, struct pex_time *);
-  
-! #ifdef __Fuchsia__
-! 
-! static pid_t
-! pex_wait (struct pex_obj *obj ATTRIBUTE_UNUSED, pid_t pid, int *status,
-! 	  struct pex_time *time ATTRIBUTE_UNUSED)
-! {
-!   mx_status_t wait_result, procinfo_result;
-!   mx_info_process_t proc_info;
-! 
-!   /* We don't support waiting on multiple pids.  */
-!   if (pid <= 0)
-!     return -1;
-! 
-!   wait_result = mx_object_wait_one ((mx_handle_t) pid, MX_TASK_TERMINATED,
-! 				    MX_TIME_INFINITE, NULL);
-! 
-!   if (wait_result != NO_ERROR)
-!     return -1;
-! 
-!   procinfo_result = mx_object_get_info ((mx_handle_t) pid, MX_INFO_PROCESS,
-! 					&proc_info, sizeof (proc_info), NULL,
-! 					NULL);
-! 
-!   if (procinfo_result != NO_ERROR)
-!     return -1;
-! 
-!   *status = (proc_info.return_code & 0xff) << 8;
-!   return pid;
-! }
-! 
-! #elif defined(HAVE_WAIT4)
-  
-  static pid_t
-  pex_wait (struct pex_obj *obj ATTRIBUTE_UNUSED, pid_t pid, int *status,
-*************** pex_child_error (struct pex_obj *obj, co
-*** 391,397 ****
-  
-  /* Execute a child.  */
-  
-! #if defined(HAVE_SPAWNVE) && defined(HAVE_SPAWNVPE)
-  /* Implementation of pex->exec_child using the Cygwin spawn operation.  */
-  
-  /* Subroutine of pex_unix_exec_child.  Move OLD_FD to a new file descriptor
---- 427,433 ----
-  
-  /* Execute a child.  */
-  
-! #if defined(__Fuchsia__) || (defined(HAVE_SPAWNVE) && defined(HAVE_SPAWNVPE))
-  /* Implementation of pex->exec_child using the Cygwin spawn operation.  */
-  
-  /* Subroutine of pex_unix_exec_child.  Move OLD_FD to a new file descriptor
-*************** static pid_t
-*** 492,498 ****
-  pex_unix_exec_child (struct pex_obj *obj ATTRIBUTE_UNUSED,
-  		     int flags, const char *executable,
-  		     char * const * argv, char * const * env,
-!                      int in, int out, int errdes, int toclose,
-  		     const char **errmsg, int *err)
-  {
-    int fl_in = 0, fl_out = 0, fl_err = 0, fl_tc = 0;
---- 528,534 ----
-  pex_unix_exec_child (struct pex_obj *obj ATTRIBUTE_UNUSED,
-  		     int flags, const char *executable,
-  		     char * const * argv, char * const * env,
-! 		     int in, int out, int errdes, int toclose,
-  		     const char **errmsg, int *err)
-  {
-    int fl_in = 0, fl_out = 0, fl_err = 0, fl_tc = 0;
-*************** pex_unix_exec_child (struct pex_obj *obj
-*** 547,552 ****
---- 583,612 ----
-      {
-        typedef const char * const *cc_cp;
-  
-+ #ifdef __Fuchsia__
-+       {
-+ 	int argc;
-+ 
-+ 	/* Count the number of arguments.  */
-+ 	for (argc = 0; argv[argc]; argc++)
-+ 	  ;
-+ 
-+ 	/* TODO: Implement PATH search for PEX_SEARCH option.  */
-+ 	launchpad_t *lp;
-+ 	launchpad_create (MX_HANDLE_INVALID, executable, &lp);
-+ 	launchpad_load_from_file (lp, executable);
-+ 	launchpad_set_args (lp, argc, argv);
-+ 	launchpad_clone (lp, LP_CLONE_ALL);
-+ 	mx_handle_t handle;
-+ 	mx_status_t status = launchpad_go (lp, &handle, errmsg);
-+ 	if (status == NO_ERROR) {
-+ 	  pid = (pid_t) handle;
-+ 	  break;
-+ 	}
-+ 	*err = status;
-+ 	return (pid_t) -1;
-+       }
-+ #else
-        if (flags & PEX_SEARCH)
-  	pid = spawnvpe (_P_NOWAITO, executable, (cc_cp)argv, (cc_cp)env);
-        else
-*************** pex_unix_exec_child (struct pex_obj *obj
-*** 560,565 ****
---- 620,626 ----
-        if (errno != EAGAIN || ++retries == 4)
-  	return (pid_t) -1;
-        sleep (1 << retries);
-+ #endif
-      }
-  
-    /* Success.  Restore the parent's file descriptors that we saved above.  */
-*************** pex_unix_exec_child (struct pex_obj *obj
-*** 590,596 ****
-  static pid_t
-  pex_unix_exec_child (struct pex_obj *obj, int flags, const char *executable,
-  		     char * const * argv, char * const * env,
-!                      int in, int out, int errdes,
-  		     int toclose, const char **errmsg, int *err)
-  {
-    pid_t pid;
---- 651,657 ----
-  static pid_t
-  pex_unix_exec_child (struct pex_obj *obj, int flags, const char *executable,
-  		     char * const * argv, char * const * env,
-! 		     int in, int out, int errdes,
-  		     int toclose, const char **errmsg, int *err)
-  {
-    pid_t pid;
-diff -rdcp --unidirectional-new-file gcc-6.2.0-fsf/libiberty/stack-limit.c gcc-6.2.0/libiberty/stack-limit.c
-*** gcc-6.2.0-fsf/libiberty/stack-limit.c	2016-12-20 14:00:06.730830744 -0800
---- gcc-6.2.0/libiberty/stack-limit.c	2017-01-10 14:58:25.856453718 -0800
-*************** Attempt to increase stack size limit to
-*** 46,53 ****
-  void
-  stack_limit_increase (unsigned long pref ATTRIBUTE_UNUSED)
-  {
-  #if defined(HAVE_SETRLIMIT) && defined(HAVE_GETRLIMIT) \
-!     && defined(RLIMIT_STACK) && defined(RLIM_INFINITY)
-    struct rlimit rlim;
-    if (getrlimit (RLIMIT_STACK, &rlim) == 0
-        && rlim.rlim_cur != RLIM_INFINITY
---- 46,55 ----
-  void
-  stack_limit_increase (unsigned long pref ATTRIBUTE_UNUSED)
-  {
-+ /* Fuchsia: remove when getrlimit/setrlimit have been implemented.  */
-  #if defined(HAVE_SETRLIMIT) && defined(HAVE_GETRLIMIT) \
-!     && defined(RLIMIT_STACK) && defined(RLIM_INFINITY) \
-!     && !defined(__Fuchsia__)
-    struct rlimit rlim;
-    if (getrlimit (RLIMIT_STACK, &rlim) == 0
-        && rlim.rlim_cur != RLIM_INFINITY
-diff -rdcp --unidirectional-new-file gcc-6.2.0-fsf/libstdc++-v3/configure gcc-6.2.0/libstdc++-v3/configure
-*** gcc-6.2.0-fsf/libstdc++-v3/configure	2016-11-23 09:10:40.968283817 -0800
---- gcc-6.2.0/libstdc++-v3/configure	2016-11-16 08:49:38.447039849 -0800
-*************** if test -z "$aix_libpath"; then aix_libp
-*** 9825,9830 ****
---- 9825,9837 ----
-        hardcode_shlibpath_var=no
-        ;;
-  
-+     fuchsia*)
-+       archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-+       hardcode_libdir_flag_spec='-R$libdir'
-+       hardcode_direct=yes
-+       hardcode_shlibpath_var=no
-+       ;;
-+ 
-      hpux9*)
-        if test "$GCC" = yes; then
-  	archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-*************** freebsd* | dragonfly*)
-*** 10763,10768 ****
---- 10770,10781 ----
-    esac
-    ;;
-  
-+ fuchsia*)
-+   library_names_spec='${libname}${shared_ext}'
-+   need_lib_prefix=no
-+   need_version=no
-+   ;;
-+ 
-  gnu*)
-    version_type=linux
-    need_lib_prefix=no
-*************** fi
-*** 11372,11377 ****
---- 11385,11395 ----
-  
-      ;;
-  
-+   fuchsia*)
-+     lt_cv_dlopen="dlopen"
-+     lt_cv_dlopen_libs=
-+     ;;
-+ 
-    *)
-      ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
-  if test "x$ac_cv_func_shl_load" = x""yes; then :
-*************** else
-*** 11596,11602 ****
-    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-    lt_status=$lt_dlunknown
-    cat > conftest.$ac_ext <<_LT_EOF
-! #line 11599 "configure"
-  #include "confdefs.h"
-  
-  #if HAVE_DLFCN_H
---- 11614,11620 ----
-    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-    lt_status=$lt_dlunknown
-    cat > conftest.$ac_ext <<_LT_EOF
-! #line 11617 "configure"
-  #include "confdefs.h"
-  
-  #if HAVE_DLFCN_H
-*************** else
-*** 11702,11708 ****
-    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-    lt_status=$lt_dlunknown
-    cat > conftest.$ac_ext <<_LT_EOF
-! #line 11705 "configure"
-  #include "confdefs.h"
-  
-  #if HAVE_DLFCN_H
---- 11720,11726 ----
-    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-    lt_status=$lt_dlunknown
-    cat > conftest.$ac_ext <<_LT_EOF
-! #line 11723 "configure"
-  #include "confdefs.h"
-  
-  #if HAVE_DLFCN_H
-*************** freebsd* | dragonfly*)
-*** 14447,14452 ****
---- 14465,14476 ----
-    esac
-    ;;
-  
-+ fuchsia*)
-+   library_names_spec='${libname}${shared_ext}'
-+   need_lib_prefix=no
-+   need_version=no
-+   ;;
-+ 
-  gnu*)
-    version_type=linux
-    need_lib_prefix=no
-*************** $as_echo "$glibcxx_cv_atomic_long_long"
-*** 15388,15394 ****
-    # Fake what AC_TRY_COMPILE does.
-  
-      cat > conftest.$ac_ext << EOF
-! #line 15391 "configure"
-  int main()
-  {
-    typedef bool atomic_type;
---- 15412,15418 ----
-    # Fake what AC_TRY_COMPILE does.
-  
-      cat > conftest.$ac_ext << EOF
-! #line 15415 "configure"
-  int main()
-  {
-    typedef bool atomic_type;
-*************** $as_echo "$glibcxx_cv_atomic_bool" >&6;
-*** 15423,15429 ****
-      rm -f conftest*
-  
-      cat > conftest.$ac_ext << EOF
-! #line 15426 "configure"
-  int main()
-  {
-    typedef short atomic_type;
---- 15447,15453 ----
-      rm -f conftest*
-  
-      cat > conftest.$ac_ext << EOF
-! #line 15450 "configure"
-  int main()
-  {
-    typedef short atomic_type;
-*************** $as_echo "$glibcxx_cv_atomic_short" >&6;
-*** 15458,15464 ****
-      rm -f conftest*
-  
-      cat > conftest.$ac_ext << EOF
-! #line 15461 "configure"
-  int main()
-  {
-    // NB: _Atomic_word not necessarily int.
---- 15482,15488 ----
-      rm -f conftest*
-  
-      cat > conftest.$ac_ext << EOF
-! #line 15485 "configure"
-  int main()
-  {
-    // NB: _Atomic_word not necessarily int.
-*************** $as_echo "$glibcxx_cv_atomic_int" >&6; }
-*** 15494,15500 ****
-      rm -f conftest*
-  
-      cat > conftest.$ac_ext << EOF
-! #line 15497 "configure"
-  int main()
-  {
-    typedef long long atomic_type;
---- 15518,15524 ----
-      rm -f conftest*
-  
-      cat > conftest.$ac_ext << EOF
-! #line 15521 "configure"
-  int main()
-  {
-    typedef long long atomic_type;
-*************** $as_echo "$as_me: WARNING: Performance o
-*** 15573,15579 ****
-    # unnecessary for this test.
-  
-      cat > conftest.$ac_ext << EOF
-! #line 15576 "configure"
-  int main()
-  {
-    _Decimal32 d1;
---- 15597,15603 ----
-    # unnecessary for this test.
-  
-      cat > conftest.$ac_ext << EOF
-! #line 15600 "configure"
-  int main()
-  {
-    _Decimal32 d1;
-*************** ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-*** 15615,15621 ****
-    # unnecessary for this test.
-  
-      cat > conftest.$ac_ext << EOF
-! #line 15618 "configure"
-  template<typename T1, typename T2>
-    struct same
-    { typedef T2 type; };
---- 15639,15645 ----
-    # unnecessary for this test.
-  
-      cat > conftest.$ac_ext << EOF
-! #line 15642 "configure"
-  template<typename T1, typename T2>
-    struct same
-    { typedef T2 type; };
-*************** $as_echo "$enable_int128" >&6; }
-*** 15649,15655 ****
-      rm -f conftest*
-  
-      cat > conftest.$ac_ext << EOF
-! #line 15652 "configure"
-  template<typename T1, typename T2>
-    struct same
-    { typedef T2 type; };
---- 15673,15679 ----
-      rm -f conftest*
-  
-      cat > conftest.$ac_ext << EOF
-! #line 15676 "configure"
-  template<typename T1, typename T2>
-    struct same
-    { typedef T2 type; };
-*************** $as_echo "$ac_ld_relro" >&6; }
-*** 53130,53135 ****
---- 53154,53165 ----
-  
-      fi
-      ;;
-+ 
-+   *-fuchsia*)
-+     SECTION_FLAGS='-ffunction-sections -fdata-sections'
-+     SECTION_LDFLAGS='-Wl,--gc-sections $SECTION_LDFLAGS'
-+     ;;
-+ 
-    *-hpux*)
-      SECTION_FLAGS='-ffunction-sections -fdata-sections'
-  
-diff -rdcp --unidirectional-new-file gcc-6.2.0-fsf/libstdc++-v3/crossconfig.m4 gcc-6.2.0/libstdc++-v3/crossconfig.m4
-*** gcc-6.2.0-fsf/libstdc++-v3/crossconfig.m4	2016-11-23 09:10:41.352282308 -0800
---- gcc-6.2.0/libstdc++-v3/crossconfig.m4	2016-11-16 08:49:38.451039834 -0800
-*************** case "${host}" in
-*** 107,112 ****
---- 107,118 ----
-        AC_DEFINE(HAVE_ISNANL)
-      fi
-      ;;
-+ 
-+   *-fuchsia*)
-+     SECTION_FLAGS='-ffunction-sections -fdata-sections'
-+     SECTION_LDFLAGS='-Wl,--gc-sections $SECTION_LDFLAGS'
-+     ;;
-+ 
-    *-hpux*)
-      SECTION_FLAGS='-ffunction-sections -fdata-sections'
-      AC_SUBST(SECTION_FLAGS)
-diff -rdcp --unidirectional-new-file gcc-6.2.0-fsf/libtool.m4 gcc-6.2.0/libtool.m4
-*** gcc-6.2.0-fsf/libtool.m4	2016-11-23 09:11:07.960177729 -0800
---- gcc-6.2.0/libtool.m4	2016-12-09 14:52:40.904402887 -0800
-*************** else
-*** 1748,1753 ****
---- 1748,1758 ----
-      ])
-      ;;
-  
-+   fuchsia*)
-+     lt_cv_dlopen="dlopen"
-+     lt_cv_dlopen_libs=
-+     ;;
-+ 
-    *)
-      AC_CHECK_FUNC([shl_load],
-  	  [lt_cv_dlopen="shl_load"],
-*************** freebsd* | dragonfly*)
-*** 2323,2328 ****
---- 2328,2342 ----
-    esac
-    ;;
-  
-+ fuchsia*)
-+   need_lib_prefix=no
-+   need_version=no
-+   dynamic_linker="$host_os ld.so.1"
-+   library_names_spec='$libname$shared_ext'
-+   soname_spec='$libname$shared_ext'
-+   sys_lib_dlsearch_path_spec='/system/lib /boot/lib'
-+   ;;
-+ 
-  gnu*)
-    version_type=linux
-    need_lib_prefix=no
-*************** freebsd* | dragonfly*)
-*** 3047,3052 ****
---- 3061,3070 ----
-    fi
-    ;;
-  
-+ fuchsia*)
-+   lt_cv_deplibs_check_method=pass_all
-+   ;;
-+ 
-  gnu*)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-*************** m4_if([$1], [CXX], [
-*** 3604,3610 ****
-        esac
-        ;;
-  
-!     beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-        # PIC is the default for these OSes.
-        ;;
-      mingw* | cygwin* | os2* | pw32* | cegcc*)
---- 3622,3628 ----
-        esac
-        ;;
-  
-!     beos* | fuchsia* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-        # PIC is the default for these OSes.
-        ;;
-      mingw* | cygwin* | os2* | pw32* | cegcc*)
-*************** m4_if([$1], [CXX], [
-*** 3694,3699 ****
---- 3712,3722 ----
-        freebsd* | dragonfly*)
-  	# FreeBSD uses GNU C++
-  	;;
-+       fuchsia* )
-+ 	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-+ 	_LT_TAGVAR(lt_prog_compiler_pic, $1)=
-+ 	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-+ 	;;
-        hpux9* | hpux10* | hpux11*)
-  	case $cc_basename in
-  	  CC*)
-diff -rdcp --unidirectional-new-file gcc-6.2.0-fsf/Makefile.in gcc-6.2.0/Makefile.in
-*** gcc-6.2.0-fsf/Makefile.in	2016-11-23 09:11:07.960177729 -0800
---- gcc-6.2.0/Makefile.in	2016-12-08 13:11:05.048744794 -0800
-*************** BASE_TARGET_EXPORTS = \
-*** 287,292 ****
---- 287,293 ----
-  	LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
-  	LIPO="$(LIPO_FOR_TARGET)"; export LIPO; \
-  	NM="$(COMPILER_NM_FOR_TARGET)"; export NM; \
-+ 	NO_PIE_CFLAGS="$(NO_PIE_CFLAGS_FOR_TARGET)"; export NO_PIE_CFLAGS; \
-  	OBJDUMP="$(OBJDUMP_FOR_TARGET)"; export OBJDUMP; \
-  	OBJCOPY="$(OBJCOPY_FOR_TARGET)"; export OBJCOPY; \
-  	RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
-*************** EXTRA_TARGET_FLAGS = \
-*** 869,874 ****
---- 870,876 ----
-  	'LIBCFLAGS=$$(LIBCFLAGS_FOR_TARGET)' \
-  	'LIBCXXFLAGS=$$(LIBCXXFLAGS_FOR_TARGET)' \
-  	'NM=$(COMPILER_NM_FOR_TARGET)' \
-+ 	'NO_PIE_CFLAGS=$(NO_PIE_CFLAGS_FOR_TARGET)' \
-  	'OBJDUMP=$$(OBJDUMP_FOR_TARGET)' \
-  	'OBJCOPY=$$(OBJCOPY_FOR_TARGET)' \
-  	'RANLIB=$$(RANLIB_FOR_TARGET)' \
+     /* Find out the max path size.  */
+     long path_max = pathconf ("/", _PC_PATH_MAX);
+diff -rdup --unidirectional-new-file gcc-6.3.0-fsf/libiberty/pex-unix.c gcc-6.3.0/libiberty/pex-unix.c
+--- gcc-6.3.0-fsf/libiberty/pex-unix.c	2017-03-30 16:18:18.993239143 -0700
++++ gcc-6.3.0/libiberty/pex-unix.c	2017-03-30 16:23:21.728074093 -0700
+@@ -60,6 +60,12 @@ extern int errno;
+ #include <process.h>
+ #endif
+ 
++#ifdef __Fuchsia__
++#include <launchpad/launchpad.h>
++#include <magenta/syscalls.h>
++#include <magenta/syscalls/object.h>
++#endif
++
+ #ifdef vfork /* Autoconf may define this to fork for us. */
+ # define VFORK_STRING "fork"
+ #else
+@@ -120,7 +126,37 @@ to_ptr32 (char **ptr64)
+ 
+ static pid_t pex_wait (struct pex_obj *, pid_t, int *, struct pex_time *);
+ 
+-#ifdef HAVE_WAIT4
++#ifdef __Fuchsia__
++
++static pid_t
++pex_wait (struct pex_obj *obj ATTRIBUTE_UNUSED, pid_t pid, int *status,
++	  struct pex_time *time ATTRIBUTE_UNUSED)
++{
++  mx_status_t wait_result, procinfo_result;
++  mx_info_process_t proc_info;
++
++  /* We don't support waiting on multiple pids.  */
++  if (pid <= 0)
++    return -1;
++
++  wait_result = mx_object_wait_one ((mx_handle_t) pid, MX_TASK_TERMINATED,
++				    MX_TIME_INFINITE, NULL);
++
++  if (wait_result != NO_ERROR)
++    return -1;
++
++  procinfo_result = mx_object_get_info ((mx_handle_t) pid, MX_INFO_PROCESS,
++					&proc_info, sizeof (proc_info), NULL,
++					NULL);
++
++  if (procinfo_result != NO_ERROR)
++    return -1;
++
++  *status = (proc_info.return_code & 0xff) << 8;
++  return pid;
++}
++
++#elif defined(HAVE_WAIT4)
+ 
+ static pid_t
+ pex_wait (struct pex_obj *obj ATTRIBUTE_UNUSED, pid_t pid, int *status,
+@@ -391,7 +427,7 @@ pex_child_error (struct pex_obj *obj, co
+ 
+ /* Execute a child.  */
+ 
+-#if defined(HAVE_SPAWNVE) && defined(HAVE_SPAWNVPE)
++#if defined(__Fuchsia__) || (defined(HAVE_SPAWNVE) && defined(HAVE_SPAWNVPE))
+ /* Implementation of pex->exec_child using the Cygwin spawn operation.  */
+ 
+ /* Subroutine of pex_unix_exec_child.  Move OLD_FD to a new file descriptor
+@@ -492,7 +528,7 @@ static pid_t
+ pex_unix_exec_child (struct pex_obj *obj ATTRIBUTE_UNUSED,
+ 		     int flags, const char *executable,
+ 		     char * const * argv, char * const * env,
+-                     int in, int out, int errdes, int toclose,
++		     int in, int out, int errdes, int toclose,
+ 		     const char **errmsg, int *err)
+ {
+   int fl_in = 0, fl_out = 0, fl_err = 0, fl_tc = 0;
+@@ -547,6 +583,30 @@ pex_unix_exec_child (struct pex_obj *obj
+     {
+       typedef const char * const *cc_cp;
+ 
++#ifdef __Fuchsia__
++      {
++	int argc;
++
++	/* Count the number of arguments.  */
++	for (argc = 0; argv[argc]; argc++)
++	  ;
++
++	/* TODO: Implement PATH search for PEX_SEARCH option.  */
++	launchpad_t *lp;
++	launchpad_create (MX_HANDLE_INVALID, executable, &lp);
++	launchpad_load_from_file (lp, executable);
++	launchpad_set_args (lp, argc, argv);
++	launchpad_clone (lp, LP_CLONE_ALL);
++	mx_handle_t handle;
++	mx_status_t status = launchpad_go (lp, &handle, errmsg);
++	if (status == NO_ERROR) {
++	  pid = (pid_t) handle;
++	  break;
++	}
++	*err = status;
++	return (pid_t) -1;
++      }
++#else
+       if (flags & PEX_SEARCH)
+ 	pid = spawnvpe (_P_NOWAITO, executable, (cc_cp)argv, (cc_cp)env);
+       else
+@@ -560,6 +620,7 @@ pex_unix_exec_child (struct pex_obj *obj
+       if (errno != EAGAIN || ++retries == 4)
+ 	return (pid_t) -1;
+       sleep (1 << retries);
++#endif
+     }
+ 
+   /* Success.  Restore the parent's file descriptors that we saved above.  */
+@@ -590,7 +651,7 @@ pex_unix_exec_child (struct pex_obj *obj
+ static pid_t
+ pex_unix_exec_child (struct pex_obj *obj, int flags, const char *executable,
+ 		     char * const * argv, char * const * env,
+-                     int in, int out, int errdes,
++		     int in, int out, int errdes,
+ 		     int toclose, const char **errmsg, int *err)
+ {
+   pid_t pid;
+diff -rdup --unidirectional-new-file gcc-6.3.0-fsf/libiberty/stack-limit.c gcc-6.3.0/libiberty/stack-limit.c
+--- gcc-6.3.0-fsf/libiberty/stack-limit.c	2017-03-30 16:18:18.993239143 -0700
++++ gcc-6.3.0/libiberty/stack-limit.c	2017-03-30 16:23:21.728074093 -0700
+@@ -46,8 +46,10 @@ Attempt to increase stack size limit to
+ void
+ stack_limit_increase (unsigned long pref ATTRIBUTE_UNUSED)
+ {
++/* Fuchsia: remove when getrlimit/setrlimit have been implemented.  */
+ #if defined(HAVE_SETRLIMIT) && defined(HAVE_GETRLIMIT) \
+-    && defined(RLIMIT_STACK) && defined(RLIM_INFINITY)
++    && defined(RLIMIT_STACK) && defined(RLIM_INFINITY) \
++    && !defined(__Fuchsia__)
+   struct rlimit rlim;
+   if (getrlimit (RLIMIT_STACK, &rlim) == 0
+       && rlim.rlim_cur != RLIM_INFINITY
+diff -rdup --unidirectional-new-file gcc-6.3.0-fsf/libstdc++-v3/configure gcc-6.3.0/libstdc++-v3/configure
+--- gcc-6.3.0-fsf/libstdc++-v3/configure	2017-03-30 16:18:16.689247989 -0700
++++ gcc-6.3.0/libstdc++-v3/configure	2017-03-31 06:42:34.802733803 -0700
+@@ -6360,6 +6360,10 @@ freebsd* | dragonfly*)
+   fi
+   ;;
+ 
++fuchsia*)
++  lt_cv_deplibs_check_method=pass_all
++  ;;
++
+ gnu*)
+   lt_cv_deplibs_check_method=pass_all
+   ;;
+@@ -10763,6 +10767,15 @@ freebsd* | dragonfly*)
+   esac
+   ;;
+ 
++fuchsia*)
++  need_lib_prefix=no
++  need_version=no
++  dynamic_linker="$host_os ld.so.1"
++  library_names_spec='$libname$shared_ext'
++  soname_spec='$libname$shared_ext'
++  sys_lib_dlsearch_path_spec='/system/lib /boot/lib'
++  ;;
++
+ gnu*)
+   version_type=linux
+   need_lib_prefix=no
+@@ -11372,6 +11385,11 @@ fi
+ 
+     ;;
+ 
++  fuchsia*)
++    lt_cv_dlopen="dlopen"
++    lt_cv_dlopen_libs=
++    ;;
++
+   *)
+     ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
+ if test "x$ac_cv_func_shl_load" = x""yes; then :
+@@ -11596,7 +11614,7 @@ else
+   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+   lt_status=$lt_dlunknown
+   cat > conftest.$ac_ext <<_LT_EOF
+-#line 11599 "configure"
++#line 11617 "configure"
+ #include "confdefs.h"
+ 
+ #if HAVE_DLFCN_H
+@@ -11702,7 +11720,7 @@ else
+   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+   lt_status=$lt_dlunknown
+   cat > conftest.$ac_ext <<_LT_EOF
+-#line 11705 "configure"
++#line 11723 "configure"
+ #include "confdefs.h"
+ 
+ #if HAVE_DLFCN_H
+@@ -13612,6 +13630,10 @@ $as_echo_n "checking for $compiler optio
+       freebsd* | dragonfly*)
+ 	# FreeBSD uses GNU C++
+ 	;;
++      fuchsia* )
++	lt_prog_compiler_wl_CXX='-Wl,'
++	lt_prog_compiler_static_CXX='-static'
++	;;
+       hpux9* | hpux10* | hpux11*)
+ 	case $cc_basename in
+ 	  CC*)
+@@ -14447,6 +14469,15 @@ freebsd* | dragonfly*)
+   esac
+   ;;
+ 
++fuchsia*)
++  need_lib_prefix=no
++  need_version=no
++  dynamic_linker="$host_os ld.so.1"
++  library_names_spec='$libname$shared_ext'
++  soname_spec='$libname$shared_ext'
++  sys_lib_dlsearch_path_spec='/system/lib /boot/lib'
++  ;;
++
+ gnu*)
+   version_type=linux
+   need_lib_prefix=no
+@@ -15388,7 +15419,7 @@ $as_echo "$glibcxx_cv_atomic_long_long"
+   # Fake what AC_TRY_COMPILE does.
+ 
+     cat > conftest.$ac_ext << EOF
+-#line 15391 "configure"
++#line 15422 "configure"
+ int main()
+ {
+   typedef bool atomic_type;
+@@ -15423,7 +15454,7 @@ $as_echo "$glibcxx_cv_atomic_bool" >&6;
+     rm -f conftest*
+ 
+     cat > conftest.$ac_ext << EOF
+-#line 15426 "configure"
++#line 15457 "configure"
+ int main()
+ {
+   typedef short atomic_type;
+@@ -15458,7 +15489,7 @@ $as_echo "$glibcxx_cv_atomic_short" >&6;
+     rm -f conftest*
+ 
+     cat > conftest.$ac_ext << EOF
+-#line 15461 "configure"
++#line 15492 "configure"
+ int main()
+ {
+   // NB: _Atomic_word not necessarily int.
+@@ -15494,7 +15525,7 @@ $as_echo "$glibcxx_cv_atomic_int" >&6; }
+     rm -f conftest*
+ 
+     cat > conftest.$ac_ext << EOF
+-#line 15497 "configure"
++#line 15528 "configure"
+ int main()
+ {
+   typedef long long atomic_type;
+@@ -15575,7 +15606,7 @@ $as_echo "$as_me: WARNING: Performance o
+   # unnecessary for this test.
+ 
+     cat > conftest.$ac_ext << EOF
+-#line 15578 "configure"
++#line 15609 "configure"
+ int main()
+ {
+   _Decimal32 d1;
+@@ -15617,7 +15648,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+   # unnecessary for this test.
+ 
+     cat > conftest.$ac_ext << EOF
+-#line 15620 "configure"
++#line 15651 "configure"
+ template<typename T1, typename T2>
+   struct same
+   { typedef T2 type; };
+@@ -15651,7 +15682,7 @@ $as_echo "$enable_int128" >&6; }
+     rm -f conftest*
+ 
+     cat > conftest.$ac_ext << EOF
+-#line 15654 "configure"
++#line 15685 "configure"
+ template<typename T1, typename T2>
+   struct same
+   { typedef T2 type; };
+@@ -53199,6 +53230,12 @@ $as_echo "$ac_ld_relro" >&6; }
+ 
+     fi
+     ;;
++
++  *-fuchsia*)
++    SECTION_FLAGS='-ffunction-sections -fdata-sections'
++    SECTION_LDFLAGS='-Wl,--gc-sections $SECTION_LDFLAGS'
++    ;;
++
+   *-hpux*)
+     SECTION_FLAGS='-ffunction-sections -fdata-sections'
+ 
+diff -rdup --unidirectional-new-file gcc-6.3.0-fsf/libstdc++-v3/crossconfig.m4 gcc-6.3.0/libstdc++-v3/crossconfig.m4
+--- gcc-6.3.0-fsf/libstdc++-v3/crossconfig.m4	2017-03-30 16:18:16.741247790 -0700
++++ gcc-6.3.0/libstdc++-v3/crossconfig.m4	2017-03-30 16:23:21.744074031 -0700
+@@ -107,6 +107,12 @@ case "${host}" in
+       AC_DEFINE(HAVE_ISNANL)
+     fi
+     ;;
++
++  *-fuchsia*)
++    SECTION_FLAGS='-ffunction-sections -fdata-sections'
++    SECTION_LDFLAGS='-Wl,--gc-sections $SECTION_LDFLAGS'
++    ;;
++
+   *-hpux*)
+     SECTION_FLAGS='-ffunction-sections -fdata-sections'
+     AC_SUBST(SECTION_FLAGS)
+diff -rdup --unidirectional-new-file gcc-6.3.0-fsf/libtool.m4 gcc-6.3.0/libtool.m4
+--- gcc-6.3.0-fsf/libtool.m4	2017-03-30 16:18:19.009239082 -0700
++++ gcc-6.3.0/libtool.m4	2017-03-31 06:41:11.187017373 -0700
+@@ -1748,6 +1748,11 @@ else
+     ])
+     ;;
+ 
++  fuchsia*)
++    lt_cv_dlopen="dlopen"
++    lt_cv_dlopen_libs=
++    ;;
++
+   *)
+     AC_CHECK_FUNC([shl_load],
+ 	  [lt_cv_dlopen="shl_load"],
+@@ -2323,6 +2328,15 @@ freebsd* | dragonfly*)
+   esac
+   ;;
+ 
++fuchsia*)
++  need_lib_prefix=no
++  need_version=no
++  dynamic_linker="$host_os ld.so.1"
++  library_names_spec='$libname$shared_ext'
++  soname_spec='$libname$shared_ext'
++  sys_lib_dlsearch_path_spec='/system/lib /boot/lib'
++  ;;
++
+ gnu*)
+   version_type=linux
+   need_lib_prefix=no
+@@ -3047,6 +3061,10 @@ freebsd* | dragonfly*)
+   fi
+   ;;
+ 
++fuchsia*)
++  lt_cv_deplibs_check_method=pass_all
++  ;;
++
+ gnu*)
+   lt_cv_deplibs_check_method=pass_all
+   ;;
+@@ -3694,6 +3712,10 @@ m4_if([$1], [CXX], [
+       freebsd* | dragonfly*)
+ 	# FreeBSD uses GNU C++
+ 	;;
++      fuchsia* )
++	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
++	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
++	;;
+       hpux9* | hpux10* | hpux11*)
+ 	case $cc_basename in
+ 	  CC*)
+diff -rdup --unidirectional-new-file gcc-6.3.0-fsf/Makefile.in gcc-6.3.0/Makefile.in
+--- gcc-6.3.0-fsf/Makefile.in	2017-03-30 16:18:19.009239082 -0700
++++ gcc-6.3.0/Makefile.in	2017-03-30 16:23:21.752074000 -0700
+@@ -287,6 +287,7 @@ BASE_TARGET_EXPORTS = \
+ 	LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
+ 	LIPO="$(LIPO_FOR_TARGET)"; export LIPO; \
+ 	NM="$(COMPILER_NM_FOR_TARGET)"; export NM; \
++	NO_PIE_CFLAGS="$(NO_PIE_CFLAGS_FOR_TARGET)"; export NO_PIE_CFLAGS; \
+ 	OBJDUMP="$(OBJDUMP_FOR_TARGET)"; export OBJDUMP; \
+ 	OBJCOPY="$(OBJCOPY_FOR_TARGET)"; export OBJCOPY; \
+ 	RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
+@@ -869,6 +870,7 @@ EXTRA_TARGET_FLAGS = \
+ 	'LIBCFLAGS=$$(LIBCFLAGS_FOR_TARGET)' \
+ 	'LIBCXXFLAGS=$$(LIBCXXFLAGS_FOR_TARGET)' \
+ 	'NM=$(COMPILER_NM_FOR_TARGET)' \
++	'NO_PIE_CFLAGS=$(NO_PIE_CFLAGS_FOR_TARGET)' \
+ 	'OBJDUMP=$$(OBJDUMP_FOR_TARGET)' \
+ 	'OBJCOPY=$$(OBJCOPY_FOR_TARGET)' \
+ 	'RANLIB=$$(RANLIB_FOR_TARGET)' \
diff --git a/toolvers b/toolvers
index e491d52..bc9e236 100644
--- a/toolvers
+++ b/toolvers
@@ -1,12 +1,12 @@
 # Rerun updatetoolvers after modifying this file
-GCC_VER=6.2.0
+GCC_VER=6.3.0
 BINUTILS_VER=2.27
 GDB_VER=7.10.1
 GMP_VER=5.1.3
 MPC_VER=1.0.3
 MPFR_VER=3.1.3
 # Below is autogenerated by updatetoolvers
-GCC_HASH=9944589fc722d3e66308c0ce5257788ebd7872982a718aa2516123940671b7c5
+GCC_HASH=f06ae7f3f790fbf0f018f6d40e844451e6bc3b7bc96e128e63b09825c1f8b29f
 BINUTILS_HASH=369737ce51587f92466041a97ab7d2358c6d9e1b6490b3940eb09fb0a9a6ac88
 GDB_HASH=25c72f3d41c7c8554d61cacbeacd5f40993276d2ccdec43279ac546e3993d6d5
 GMP_HASH=752079520b4690531171d0f4532e40f08600215feefede70b24fabdc6f1ab160
