--- 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
 
+# 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
+
+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
+
+#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
 
 # 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*
 
@@ -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
reverted:
--- 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
@@ -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
reverted:
--- gcc-4.8.2.orig/gcc/config.gcc	2013-10-03 01:47:24.000000000 +0100
+++ gcc-4.8.2/gcc/config.gcc	2013-12-29 12:06:18.000000000 +0000
@@ -1213,6 +1213,7 @@
 	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"
 	;;
 i[34567]86-*-rdos*)

gcc/
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)
       || 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 -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 -dcprN gcc-6.2.0/gcc/config/fuchsia.h gcc-6.2.0-fuchsia/gcc/config/fuchsia.h
*** gcc-6.2.0/gcc/config/fuchsia.h	1969-12-31 16:00:00.000000000 -0800
--- gcc-6.2.0-fuchsia/gcc/config/fuchsia.h	2016-10-31 13:08:34.707128162 -0700
***************
*** 0 ****
--- 1,49 ----
+ /* 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}"
+ 
+ #undef  ENDFILE_SPEC
+ #define ENDFILE_SPEC ""
+ 
+ #undef  CC1_SPEC
+ #define CC1_SPEC "%{!fno-pic:%{!fno-PIC:%{!fpic:%{!fPIC: -fPIC}}}}"
+ 
+ #undef  LIB_SPEC
+ #define LIB_SPEC "-lmxio -lmagenta -lc" \
+ 		 "%{!static: -lgcc_s}"
+ 
+ #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}}}"
+ 
diff -dcprN gcc-6.2.0/gcc/config.gcc gcc-6.2.0-fuchsia/gcc/config.gcc
*** gcc-6.2.0/gcc/config.gcc	2016-10-24 16:39:48.403676689 -0700
--- gcc-6.2.0-fuchsia/gcc/config.gcc	2016-10-31 15:26:25.548944871 -0700
*************** i[34567]86-*-interix[3-9]*)
*** 1792,1797 ****
--- 1792,1801 ----
  		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 -dcprN gcc-6.2.0/libgcc/config/t-slibgcc-fuchsia gcc-6.2.0-fuchsia/libgcc/config/t-slibgcc-fuchsia
*** gcc-6.2.0/libgcc/config/t-slibgcc-fuchsia	1969-12-31 16:00:00.000000000 -0800
--- gcc-6.2.0-fuchsia/libgcc/config/t-slibgcc-fuchsia	2016-10-28 10:05:17.778985385 -0700
***************
*** 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 -dcprN gcc-6.2.0/libgcc/config.host gcc-6.2.0-fuchsia/libgcc/config.host
*** gcc-6.2.0/libgcc/config.host	2016-05-16 23:15:52.000000000 -0700
--- gcc-6.2.0-fuchsia/libgcc/config.host	2016-10-31 15:15:46.787859155 -0700
*************** case ${host} in
*** 230,235 ****
--- 230,238 ----
        ;;
    esac
    ;;
+ *-*-fuchsia*)
+   tmake_file="$tmake_file t-libgcc-pic t-eh-dw2-dip t-slibgcc t-slibgcc-fuchsia"
+   ;;
  *-*-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"
*************** 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"
--- 580,587 ----
  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 -dcprN gcc-6.2.0/libstdc++-v3/configure gcc-6.2.0-fuchsia/libstdc++-v3/configure
*** gcc-6.2.0/libstdc++-v3/configure	2016-04-05 12:03:46.000000000 -0700
--- gcc-6.2.0-fuchsia/libstdc++-v3/configure	2016-10-25 16:25:08.882770549 -0700
*************** 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 -dcprN gcc-6.2.0/libstdc++-v3/crossconfig.m4 gcc-6.2.0-fuchsia/libstdc++-v3/crossconfig.m4
*** gcc-6.2.0/libstdc++-v3/crossconfig.m4	2015-10-11 15:34:28.000000000 -0700
--- gcc-6.2.0-fuchsia/libstdc++-v3/crossconfig.m4	2016-10-25 16:20:47.855807450 -0700
*************** 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 -dcprN gcc-6.2.0/libtool.m4 gcc-6.2.0-fuchsia/libtool.m4
*** gcc-6.2.0/libtool.m4	2015-11-26 05:20:59.000000000 -0800
--- gcc-6.2.0-fuchsia/libtool.m4	2016-10-25 15:03:17.327232321 -0700
*************** 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,2339 ----
    esac
    ;;
  
+ fuchsia*)
+   library_names_spec='${libname}${shared_ext}'
+   need_lib_prefix=no
+   need_version=no
+   ;;
+ 
  gnu*)
    version_type=linux
    need_lib_prefix=no
*************** _LT_EOF
*** 4831,4836 ****
--- 4842,4854 ----
        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
        _LT_TAGVAR(hardcode_direct, $1)=yes
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       ;;
+ 
+     fuchsia*)
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+       _LT_TAGVAR(hardcode_direct, $1)=yes
        _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
        ;;
  
