diff --git a/patches/gcc-patch.txt b/patches/gcc-patch.txt
index d3db393..486c52f 100644
--- a/patches/gcc-patch.txt
+++ b/patches/gcc-patch.txt
@@ -828,6 +828,104 @@
   #ifdef SIGPIPE
     if (signal (SIGPIPE, SIG_IGN) != SIG_IGN)
       signal (SIGPIPE, fatal_signal);
+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.  */
+   {
+--- 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
@@ -939,6 +1037,46 @@
   	;;
   i[34567]86-*-dragonfly*)
   	tmake_file="${tmake_file} i386/t-dragonfly i386/t-crtstuff"
+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	2016-12-20 14:00:06.758830644 -0800
 --- gcc-6.2.0/libiberty/pex-unix.c	2017-01-10 09:09:16.271408329 -0800
@@ -1047,6 +1185,30 @@
   
         if (pid > 0)
   	break;
+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
