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);
     }
 
+#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.
+
+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 -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;
 
 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);
 
       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
+
+MULTILIB_OPTIONS  += mno-red-zone
+MULTILIB_DIRNAMES += no-red-zone
+
+# Build a 32bit libgcc as well
+MULTILIB_OPTIONS  += m32
+MULTILIB_DIRNAMES += 32
\ No newline at end of file
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;
 
-  /* These three sections have special ELF types.  They are neither
-     SHT_PROGBITS nor SHT_NOBITS, so when changing sections we don't
-     want to print a section type (@progbits or @nobits).  If someone
-     is silly enough to emit code or TLS variables to one of these
-     sections, then don't handle them specially.  */
-  if (!(flags & (SECTION_CODE | SECTION_BSS | SECTION_TLS))
-      && (strcmp (name, ".init_array") == 0
-	  || strcmp (name, ".fini_array") == 0
-	  || strcmp (name, ".preinit_array") == 0))
+  /* Various sections have special ELF types that the assembler will
+     assign by default based on the name.  They are neither SHT_PROGBITS
+     nor SHT_NOBITS, so when changing sections we don't want to print a
+     section type (@progbits or @nobits).  Rather than duplicating the
+     assembler's knowledge of what those special name patterns are, just
+     let the assembler choose the type if we don't know a specific
+     reason to set it to something other than the default.  SHT_PROGBITS
+     is the default for sections whose name is not specially known to
+     the assembler, so it does no harm to leave the choice to the
+     assembler when @progbits is the best thing we know to use.  If
+     someone is silly enough to emit code or TLS variables to one of
+     these sections, then don't handle them specially.  */
+  if (!(flags & (SECTION_CODE | SECTION_BSS | SECTION_TLS | SECTION_ENTSIZE))
+      && !(HAVE_COMDAT_GROUP && (flags & SECTION_LINKONCE)))
     flags |= SECTION_NOTYPE;
 
   return flags;
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__)
   {
     /* 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)' \
