commit 79a117c82c59a07b041c1396a8270d2905b91d01
Author: Roland McGrath <mcgrathr@google.com>
Date:   Tue Aug 9 12:09:17 2016 -0700

    Support -pie for arm*-eabi targets.
    
    ld/
    	* emulparams/armelf.sh (GENERATE_PIE_SCRIPT): Set to yes.

diff --git a/ld/emulparams/armelf.sh b/ld/emulparams/armelf.sh
index 672b208..f581c68 100644
--- a/ld/emulparams/armelf.sh
+++ b/ld/emulparams/armelf.sh
@@ -21,6 +21,7 @@ OTHER_READONLY_SECTIONS="
 DATA_START_SYMBOLS='__data_start = . ;';
 
 GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
 
 ARCH=arm
 MACHINE=


commit 37bb4d970f17d7f33d0621f7b81b623456b1d183
Author: Roland McGrath <mcgrathr@google.com>
Date:   Fri Aug 12 09:50:49 2016 -0700

    [gold] Implement HIDDEN syntax in linker scripts
    
    gold/
    	* yyscript.y (HIDDEN): New %token.
    	(assignment): Handle HIDDEN(string = expr) syntax.
    	* script.cc (script_keyword_parsecodes): Add HIDDEN.
    
    (cherry picked from commit f300578f78f5ecddc9cfb28c02d032a0acffdf70)

diff --git a/gold/script.cc b/gold/script.cc
index d6aa7b2..bb8b437 100644
--- a/gold/script.cc
+++ b/gold/script.cc
@@ -1755,6 +1755,7 @@ script_keyword_parsecodes[] =
   { "FLOAT", FLOAT },
   { "FORCE_COMMON_ALLOCATION", FORCE_COMMON_ALLOCATION },
   { "GROUP", GROUP },
+  { "HIDDEN", HIDDEN },
   { "HLL", HLL },
   { "INCLUDE", INCLUDE },
   { "INFO", INFO },
diff --git a/gold/yyscript.y b/gold/yyscript.y
index 7e6bd27..38831d5 100644
--- a/gold/yyscript.y
+++ b/gold/yyscript.y
@@ -137,6 +137,7 @@
 %token FORCE_COMMON_ALLOCATION
 %token GLOBAL		/* global */
 %token GROUP
+%token HIDDEN
 %token HLL
 %token INCLUDE
 %token INHIBIT_COMMON_ALLOCATION
@@ -864,6 +865,8 @@ assignment:
 	      Expression_ptr e = script_exp_binary_bitwise_or(s, $3);
 	      script_set_symbol(closure, $1.value, $1.length, e, 0, 0);
 	    }
+	| HIDDEN '(' string '=' parse_exp ')'
+	    { script_set_symbol(closure, $3.value, $3.length, $5, 0, 1); }
 	| PROVIDE '(' string '=' parse_exp ')'
 	    { script_set_symbol(closure, $3.value, $3.length, $5, 1, 0); }
 	| PROVIDE_HIDDEN '(' string '=' parse_exp ')'

commit 9dfbd0e7d0765a35dce7423d79a975d7c5bad3ae
Author: Roland McGrath <mcgrathr@google.com>
Date:   Fri Aug 12 09:55:25 2016 -0700

    PR gold/20462: Fix bogus layout on ARM with linker script using PHDRS clause
    
    gold/
    	PR gold/20462
    	* script-sections.cc (Script_sections::release_segments):
    	Reset this->segments_created_.
    
    (cherry picked from commit 3785f51aa2454dba199db8aafa80019795d536ec)

diff --git a/gold/script-sections.cc b/gold/script-sections.cc
index 96c68de..bf25391 100644
--- a/gold/script-sections.cc
+++ b/gold/script-sections.cc
@@ -4459,6 +4459,7 @@ Script_sections::release_segments()
 	   ++p)
 	(*p)->release_segment();
     }
+  this->segments_created_ = false;
 }
 
 // Print the SECTIONS clause to F for debugging.
diff -rdcp --unidirectional-new-file binutils-2.27-fsf/bfd/cache.c binutils-2.27/bfd/cache.c
*** binutils-2.27-fsf/bfd/cache.c	2017-02-21 15:59:58.416850264 -0800
--- binutils-2.27/bfd/cache.c	2017-02-21 15:53:16.650326182 -0800
*************** bfd_cache_max_open (void)
*** 93,99 ****
  	 this limitation.  */
        max = 16;
  #else
! #ifdef HAVE_GETRLIMIT
        struct rlimit rlim;
  
        if (getrlimit (RLIMIT_NOFILE, &rlim) == 0
--- 93,100 ----
  	 this limitation.  */
        max = 16;
  #else
! /* Fuchsia: Remove when getrlimit() has been implemented.  */
! #if !defined(__Fuchsia__) && defined(HAVE_GETRLIMIT)
        struct rlimit rlim;
  
        if (getrlimit (RLIMIT_NOFILE, &rlim) == 0
*************** bfd_cache_max_open (void)
*** 101,107 ****
  	max = rlim.rlim_cur / 8;
        else
  #endif
! #ifdef _SC_OPEN_MAX
  	max = sysconf (_SC_OPEN_MAX) / 8;
  #else
          max = 10;
--- 102,110 ----
  	max = rlim.rlim_cur / 8;
        else
  #endif
! /* Fuchsia: Remove when sysconf(_SC_OPEN_MAX) has been implemented
!    (it currently relies on unimplemented getrlimit()).  */
! #if !defined(__Fuchsia__) && defined(_SC_OPEN_MAX)
  	max = sysconf (_SC_OPEN_MAX) / 8;
  #else
          max = 10;
diff -rdcp --unidirectional-new-file binutils-2.27-fsf/bfd/config.bfd binutils-2.27/bfd/config.bfd
*** binutils-2.27-fsf/bfd/config.bfd	2016-11-23 08:59:58.370833363 -0800
--- binutils-2.27/bfd/config.bfd	2016-11-16 08:49:21.135106894 -0800
*************** case "${targ}" in
*** 192,197 ****
--- 192,202 ----
      targ_selvecs="aarch64_elf64_be_vec arm_elf32_le_vec arm_elf32_be_vec"
      want64=true
      ;;
+   aarch64-*-fuchsia*)
+     targ_defvec=aarch64_elf64_le_vec
+     targ_selvecs="aarch64_elf64_be_vec arm_elf32_le_vec arm_elf32_be_vec"
+     want64=true
+     ;;
    aarch64-*-cloudabi*)
      targ_defvec=aarch64_elf64_le_cloudabi_vec
      targ_selvecs=aarch64_elf64_be_cloudabi_vec
*************** case "${targ}" in
*** 286,291 ****
--- 291,300 ----
      targ_selvecs="mach_o_le_vec mach_o_be_vec mach_o_fat_vec"
      targ_archs="$targ_archs bfd_i386_arch bfd_powerpc_arch bfd_rs6000_arch"
      ;;
+   arm-*-fuchsia*)
+     targ_defvec=arm_elf32_le_vec
+     targ_selvecs="arm_elf32_be_vec"
+     ;;
    arm-*-nacl*)
      targ_defvec=arm_elf32_nacl_le_vec
      targ_selvecs="arm_elf32_nacl_be_vec i386_elf32_nacl_vec"
*************** case "${targ}" in
*** 693,699 ****
      targ_selvecs="i386_elf32_vec iamcu_elf32_vec l1om_elf64_vec k1om_elf64_vec"
      want64=true
      ;;
!   x86_64-*-elf* | x86_64-*-rtems*)
      targ_defvec=x86_64_elf64_vec
      targ_selvecs="i386_elf32_vec iamcu_elf32_vec x86_64_elf32_vec l1om_elf64_vec k1om_elf64_vec"
      want64=true
--- 702,708 ----
      targ_selvecs="i386_elf32_vec iamcu_elf32_vec l1om_elf64_vec k1om_elf64_vec"
      want64=true
      ;;
!   x86_64-*-elf* | x86_64-*-rtems* | x86_64-*-fuchsia)
      targ_defvec=x86_64_elf64_vec
      targ_selvecs="i386_elf32_vec iamcu_elf32_vec x86_64_elf32_vec l1om_elf64_vec k1om_elf64_vec"
      want64=true
diff -dcp -r binutils-2.27/config.sub binutils-2.27-fuchsia/config.sub
*** binutils-2.27/config.sub	2016-08-03 00:36:51.000000000 -0700
--- binutils-2.27-fuchsia/config.sub	2016-10-24 17:41:14.128384816 -0700
*************** case $os in
*** 1399,1405 ****
  	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
  	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
  	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
! 	      | -onefs* | -tirtos* | -phoenix*)
  	# Remember, each alternative MUST END IN *, to match a version number.
  		;;
  	-qnx*)
--- 1399,1405 ----
  	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
  	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
  	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
! 	      | -onefs* | -tirtos* | -phoenix* | -fuchsia*)
  	# Remember, each alternative MUST END IN *, to match a version number.
  		;;
  	-qnx*)
diff -dcp -r binutils-2.27/configure binutils-2.27-fuchsia/configure
*** binutils-2.27/configure	2016-08-03 00:54:55.000000000 -0700
--- binutils-2.27-fuchsia/configure	2016-10-31 12:00:06.513896294 -0700
*************** case "${ENABLE_GOLD}" in
*** 2959,2965 ****
        *-*-elf* | *-*-sysv4* | *-*-unixware* | *-*-eabi* | hppa*64*-*-hpux* \
        | *-*-linux* | *-*-gnu* | frv-*-uclinux* | *-*-irix5* | *-*-irix6* \
        | *-*-netbsd* | *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* \
!       | *-*-solaris2* | *-*-nto* | *-*-nacl*)
          case "${target}" in
            *-*-linux*aout* | *-*-linux*oldld*)
              ;;
--- 2959,2965 ----
        *-*-elf* | *-*-sysv4* | *-*-unixware* | *-*-eabi* | hppa*64*-*-hpux* \
        | *-*-linux* | *-*-gnu* | frv-*-uclinux* | *-*-irix5* | *-*-irix6* \
        | *-*-netbsd* | *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* \
!       | *-*-solaris2* | *-*-nto* | *-*-nacl* | *-*-fuchsia*)
          case "${target}" in
            *-*-linux*aout* | *-*-linux*oldld*)
              ;;
diff -rdcp --unidirectional-new-file binutils-2.27-fsf/gas/configure.tgt binutils-2.27/gas/configure.tgt
*** binutils-2.27-fsf/gas/configure.tgt	2016-11-23 08:59:59.878827298 -0800
--- binutils-2.27/gas/configure.tgt	2016-11-16 08:49:21.135106894 -0800
*************** generic_target=${cpu_type}-$vendor-$os
*** 121,126 ****
--- 121,127 ----
  # Note: This table is alpha-sorted, please try to keep it that way.
  case ${generic_target} in
    aarch64*-*-elf | aarch64*-*-rtems*)	fmt=elf;;
+   aarch64*-*-fuchsia*)			fmt=elf;;
    aarch64*-*-linux*)			fmt=elf em=linux ;;
  
    alpha-*-*vms*)			fmt=evax ;;
*************** case ${generic_target} in
*** 159,164 ****
--- 160,166 ----
  					fmt=coff em=wince-pe ;;
    arm-*-pe)				fmt=coff em=pe ;;
    arm-*-riscix*)			fmt=aout em=riscix ;;
+   arm-*-fuchsia*)			fmt=elf ;;
  
    avr-*-*)				fmt=elf bfd_gas=yes ;;
  
*************** case ${generic_target} in
*** 219,224 ****
--- 221,227 ----
    i386-*-coff)				fmt=coff ;;
    i386-*-elfiamcu)			fmt=elf arch=iamcu ;;
    i386-*-elf*)				fmt=elf ;;
+   i386-*-fuchsia*)			fmt=elf ;;
    i386-*-kaos*)				fmt=elf ;;
    i386-*-bsd*)				fmt=aout em=386bsd ;;
    i386-*-nacl*)				fmt=elf em=nacl
diff -rdcp --unidirectional-new-file binutils-2.27-fsf/gold/fileread.cc binutils-2.27/gold/fileread.cc
*** binutils-2.27-fsf/gold/fileread.cc	2016-11-23 09:00:03.026814640 -0800
--- binutils-2.27/gold/fileread.cc	2016-12-02 11:05:29.758465966 -0800
*************** File_read::find_view(off_t start, sectio
*** 372,377 ****
--- 372,391 ----
    return NULL;
  }
  
+ #ifdef __Fuchsia__
+ /* Fuchsia provides an unimplemented pread, which is sufficient to convince
+    configure into linking against it.  */
+ extern "C" {
+ static ssize_t
+ fuchsia_pread (int fd, void *buf, size_t count, off_t offset)
+ {
+   if (lseek(fd, offset, SEEK_SET) != offset)
+     return -1;
+   return read(fd, buf, count);
+ }
+ }
+ #endif
+ 
  // Read SIZE bytes from the file starting at offset START.  Read into
  // the buffer at P.
  
*************** File_read::do_read(off_t start, section_
*** 397,403 ****
--- 411,421 ----
        size_t to_read = size;
        do
  	{
+ #ifdef __Fuchsia__
+ 	  bytes = fuchsia_pread(this->descriptor_, read_ptr, to_read, read_pos);
+ #else
  	  bytes = ::pread(this->descriptor_, read_ptr, to_read, read_pos);
+ #endif
  	  if (bytes < 0)
  	    gold_fatal(_("%s: pread failed: %s"),
  		       this->filename().c_str(), strerror(errno));
diff -rdcp --unidirectional-new-file binutils-2.27-fsf/gold/output.cc binutils-2.27/gold/output.cc
*** binutils-2.27-fsf/gold/output.cc	2016-11-23 09:00:03.242813772 -0800
--- binutils-2.27/gold/output.cc	2016-12-09 17:11:18.558286565 -0800
*************** namespace gold
*** 127,136 ****
  static int
  gold_fallocate(int o, off_t offset, off_t len)
  {
! #ifdef HAVE_POSIX_FALLOCATE
    if (parameters->options().posix_fallocate())
      return ::posix_fallocate(o, offset, len);
! #endif // defined(HAVE_POSIX_FALLOCATE)
  #ifdef HAVE_FALLOCATE
    if (::fallocate(o, 0, offset, len) == 0)
      return 0;
--- 127,136 ----
  static int
  gold_fallocate(int o, off_t offset, off_t len)
  {
! #if defined(HAVE_POSIX_FALLOCATE) && !defined(__Fuchsia__)
    if (parameters->options().posix_fallocate())
      return ::posix_fallocate(o, offset, len);
! #endif // defined(HAVE_POSIX_FALLOCATE) && !defined(__Fuchsia__)
  #ifdef HAVE_FALLOCATE
    if (::fallocate(o, 0, offset, len) == 0)
      return 0;
diff -rdcp --unidirectional-new-file binutils-2.27-fsf/ld/configure.tgt binutils-2.27/ld/configure.tgt
*** binutils-2.27-fsf/ld/configure.tgt	2016-11-23 08:59:55.706844075 -0800
--- binutils-2.27/ld/configure.tgt	2016-11-21 16:45:35.047787524 -0800
*************** aarch64-*-cloudabi*)	targ_emul=aarch64cl
*** 54,59 ****
--- 54,61 ----
  			targ_extra_emuls=aarch64cloudabib ;;
  aarch64-*-freebsd*)	targ_emul=aarch64fbsd
  			targ_extra_emuls="aarch64fbsdb aarch64elf" ;;
+ aarch64-*-fuchsia*)	targ_emul=aarch64elf
+ 			targ_extra_emuls="aarch64elfb armelf armelfb" ;;
  aarch64_be-*-linux*)	targ_emul=aarch64linuxb
  			targ_extra_libpath="aarch64linux aarch64linux32 aarch64linux32b armelfb_linux_eabi armelf_linux_eabi"
  			targ_extra_emuls="aarch64elfb aarch64elf aarch64elf32 aarch64elf32b armelfb armelf $targ_extra_libpath" ;;
*************** arm*-*-uclinux*)	targ_emul=armelf_linux
*** 150,155 ****
--- 152,160 ----
  			;;
  arm-*-vxworks)		targ_emul=armelf_vxworks ;;
  arm*-*-conix*)		targ_emul=armelf ;;
+ arm*-*-fuchsia*)	targ_emul=armelf_fuchsia
+ 			targ_extra_emuls="armelfb_fuchsia armelf armelfb"
+ 			;;
  avr-*-*)		targ_emul=avr2
  			targ_extra_emuls="avr1 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6 avrxmega1 avrxmega2 avrxmega3 avrxmega4 avrxmega5 avrxmega6 avrxmega7 avrtiny"
  			;;
*************** i[3-7]86-*-elfiamcu)	targ_emul=elf_iamcu
*** 316,322 ****
  			targ_extra_emuls=elf_i386 ;;
  i[3-7]86-*-elf*)	targ_emul=elf_i386
  			targ_extra_emuls=elf_iamcu ;;
! x86_64-*-elf* | x86_64-*-rtems*)
  			targ_emul=elf_x86_64
  			targ_extra_emuls="elf_i386 elf_iamcu elf32_x86_64 elf_l1om elf_k1om"
  			targ_extra_libpath="elf_i386 elf_iamcu elf32_x86_64 elf_l1om elf_k1om"
--- 321,327 ----
  			targ_extra_emuls=elf_i386 ;;
  i[3-7]86-*-elf*)	targ_emul=elf_i386
  			targ_extra_emuls=elf_iamcu ;;
! x86_64-*-elf* | x86_64-*-rtems* | x86_64-*-fuchsia*)
  			targ_emul=elf_x86_64
  			targ_extra_emuls="elf_i386 elf_iamcu elf32_x86_64 elf_l1om elf_k1om"
  			targ_extra_libpath="elf_i386 elf_iamcu elf32_x86_64 elf_l1om elf_k1om"
diff -rdcp --unidirectional-new-file binutils-2.27-fsf/ld/emulparams/armelfb_fuchsia.sh binutils-2.27/ld/emulparams/armelfb_fuchsia.sh
*** binutils-2.27-fsf/ld/emulparams/armelfb_fuchsia.sh	1969-12-31 16:00:00.000000000 -0800
--- binutils-2.27/ld/emulparams/armelfb_fuchsia.sh	2016-11-21 16:45:22.135841864 -0800
***************
*** 0 ****
--- 1,2 ----
+ . ${srcdir}/emulparams/armelf_fuchsia.sh
+ OUTPUT_FORMAT="$BIG_OUTPUT_FORMAT"
diff -rdcp --unidirectional-new-file binutils-2.27-fsf/ld/emulparams/armelf_fuchsia.sh binutils-2.27/ld/emulparams/armelf_fuchsia.sh
*** binutils-2.27-fsf/ld/emulparams/armelf_fuchsia.sh	1969-12-31 16:00:00.000000000 -0800
--- binutils-2.27/ld/emulparams/armelf_fuchsia.sh	2016-11-21 17:26:46.729182447 -0800
***************
*** 0 ****
--- 1,32 ----
+ ARCH=arm
+ SCRIPT_NAME=elf
+ OUTPUT_FORMAT="elf32-littlearm"
+ BIG_OUTPUT_FORMAT="elf32-bigarm"
+ LITTLE_OUTPUT_FORMAT="elf32-littlearm"
+ MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+ COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
+ TEMPLATE_NAME=elf32
+ EXTRA_EM_FILE=armelf
+ GENERATE_SHLIB_SCRIPT=yes
+ GENERATE_PIE_SCRIPT=yes
+ 
+ DATA_START_SYMBOLS='PROVIDE (__data_start = .);';
+ OTHER_TEXT_SECTIONS='*(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)'
+ OTHER_BSS_SYMBOLS='__bss_start__ = .;'
+ OTHER_BSS_END_SYMBOLS='_bss_end__ = . ; __bss_end__ = . ;'
+ OTHER_END_SYMBOLS='__end__ = . ;'
+ OTHER_SECTIONS='.note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }'
+ 
+ TEXT_START_ADDR=0x00001000
+ TARGET2_TYPE=got-rel
+ 
+ # ARM does not support .s* sections.
+ NO_SMALL_DATA=yes
+ 
+ # Use the ARM ABI-compliant exception-handling sections.
+ OTHER_READONLY_SECTIONS="
+   .ARM.extab ${RELOCATING-0} : { *(.ARM.extab${RELOCATING+* .gnu.linkonce.armextab.*}) }
+   ${RELOCATING+ PROVIDE_HIDDEN (__exidx_start = .); }
+   .ARM.exidx ${RELOCATING-0} : { *(.ARM.exidx${RELOCATING+* .gnu.linkonce.armexidx.*}) }
+   ${RELOCATING+ PROVIDE_HIDDEN (__exidx_end = .); }"
+ 
diff -rdcp --unidirectional-new-file binutils-2.27-fsf/ld/Makefile.am binutils-2.27/ld/Makefile.am
*** binutils-2.27-fsf/ld/Makefile.am	2016-11-23 08:59:58.042834681 -0800
--- binutils-2.27/ld/Makefile.am	2016-11-21 17:16:33.371837561 -0800
*************** ALL_EMULATION_SOURCES = \
*** 175,180 ****
--- 175,181 ----
  	earmcoff.c \
  	earmelf.c \
  	earmelf_fbsd.c \
+ 	earmelf_fuchsia.c \
  	earmelf_linux.c \
  	earmelf_linux_eabi.c \
  	earmelf_nacl.c \
*************** ALL_EMULATION_SOURCES = \
*** 183,188 ****
--- 184,190 ----
  	earmelf_vxworks.c \
  	earmelfb.c \
  	earmelfb_fbsd.c \
+ 	earmelfb_fuchsia.c \
  	earmelfb_linux.c \
  	earmelfb_linux_eabi.c \
  	earmelfb_nacl.c \
*************** earmelf_fbsd.c: $(srcdir)/emulparams/arm
*** 757,762 ****
--- 759,768 ----
    $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
    $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
  
+ earmelf_fuchsia.c: $(srcdir)/emulparams/armelf_fuchsia.sh \
+   $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
+   $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ 
  earmelf_linux.c: $(srcdir)/emulparams/armelf_linux.sh \
    $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
    $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
*************** earmelfb_fbsd.c: $(srcdir)/emulparams/ar
*** 797,802 ****
--- 803,812 ----
    $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
    $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
  
+ earmelf_fuchsia.c: $(srcdir)/emulparams/armelfb_fuchsia.sh \
+   $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
+   $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ 
  earmelfb_linux.c: $(srcdir)/emulparams/armelfb_linux.sh \
    $(srcdir)/emulparams/armelf_linux.sh \
    $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
diff -rdcp --unidirectional-new-file binutils-2.27-fsf/ld/Makefile.in binutils-2.27/ld/Makefile.in
*** binutils-2.27-fsf/ld/Makefile.in	2016-11-23 08:59:58.082834520 -0800
--- binutils-2.27/ld/Makefile.in	2016-11-21 17:16:38.471815461 -0800
*************** ALL_EMULATION_SOURCES = \
*** 543,548 ****
--- 543,549 ----
  	earmcoff.c \
  	earmelf.c \
  	earmelf_fbsd.c \
+ 	earmelf_fuchsia.c \
  	earmelf_linux.c \
  	earmelf_linux_eabi.c \
  	earmelf_nacl.c \
*************** ALL_EMULATION_SOURCES = \
*** 551,556 ****
--- 552,558 ----
  	earmelf_vxworks.c \
  	earmelfb.c \
  	earmelfb_fbsd.c \
+ 	earmelfb_fuchsia.c \
  	earmelfb_linux.c \
  	earmelfb_linux_eabi.c \
  	earmelfb_nacl.c \
*************** distclean-compile:
*** 1180,1185 ****
--- 1182,1188 ----
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earmcoff.Po@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earmelf.Po@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earmelf_fbsd.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earmelf_fuchsia.Po@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earmelf_linux.Po@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earmelf_linux_eabi.Po@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earmelf_nacl.Po@am__quote@
*************** distclean-compile:
*** 1188,1193 ****
--- 1191,1197 ----
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earmelf_vxworks.Po@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earmelfb.Po@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earmelfb_fbsd.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earmelfb_fuchsia.Po@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earmelfb_linux.Po@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earmelfb_linux_eabi.Po@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earmelfb_nacl.Po@am__quote@
*************** earmelf_fbsd.c: $(srcdir)/emulparams/arm
*** 2345,2350 ****
--- 2349,2358 ----
    $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
    $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
  
+ earmelf_fuchsia.c: $(srcdir)/emulparams/armelf_fuchsia.sh \
+   $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
+   $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ 
  earmelf_linux.c: $(srcdir)/emulparams/armelf_linux.sh \
    $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
    $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
*************** earmelfb_fbsd.c: $(srcdir)/emulparams/ar
*** 2385,2390 ****
--- 2393,2402 ----
    $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
    $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
  
+ earmelf_fuchsia.c: $(srcdir)/emulparams/armelfb_fuchsia.sh \
+   $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
+   $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ 
  earmelfb_linux.c: $(srcdir)/emulparams/armelfb_linux.sh \
    $(srcdir)/emulparams/armelf_linux.sh \
    $(ELF_DEPS) $(srcdir)/emultempl/armelf.em \
diff -rdcp --unidirectional-new-file binutils-2.27-fsf/libiberty/getruntime.c binutils-2.27/libiberty/getruntime.c
*** binutils-2.27-fsf/libiberty/getruntime.c	2017-02-21 14:59:51.026603203 -0800
--- binutils-2.27/libiberty/getruntime.c	2017-02-21 14:53:58.899960741 -0800
*************** process started.
*** 96,102 ****
  long
  get_run_time (void)
  {
! #if defined (HAVE_GETRUSAGE) && defined (HAVE_SYS_RESOURCE_H)
    struct rusage rusage;
  
    getrusage (RUSAGE_SELF, &rusage);
--- 96,104 ----
  long
  get_run_time (void)
  {
! /* Fuchsia: Remove when getrusage() has been implemented.  */
! #if !defined(__Fuchsia__) && \
!     defined (HAVE_GETRUSAGE) && defined (HAVE_SYS_RESOURCE_H)
    struct rusage rusage;
  
    getrusage (RUSAGE_SELF, &rusage);
diff -rdcp --unidirectional-new-file binutils-2.27-fsf/libiberty/pex-unix.c binutils-2.27/libiberty/pex-unix.c
*** binutils-2.27-fsf/libiberty/pex-unix.c	2017-02-21 14:59:51.082602987 -0800
--- binutils-2.27/libiberty/pex-unix.c	2017-02-21 14:33:47.408601885 -0800
*************** Boston, MA 02110-1301, USA.  */
*** 28,33 ****
--- 28,39 ----
  #include <stdio.h>
  #include <signal.h>
  #include <errno.h>
+ 
+ /* Fuchsia: remove when getrusage() has been implemented.  */
+ #ifdef __Fuchsia__
+ #undef HAVE_GETRUSAGE
+ #endif
+ 
  #ifdef NEED_DECLARATION_ERRNO
  extern int errno;
  #endif
diff -rdcp --unidirectional-new-file binutils-2.27-fsf/libiberty/stack-limit.c binutils-2.27/libiberty/stack-limit.c
*** binutils-2.27-fsf/libiberty/stack-limit.c	2017-02-21 14:59:51.046603126 -0800
--- binutils-2.27/libiberty/stack-limit.c	2017-02-21 14:52:31.212300050 -0800
*************** Attempt to increase stack size limit to
*** 46,52 ****
  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
--- 46,54 ----
  void
  stack_limit_increase (unsigned long pref ATTRIBUTE_UNUSED)
  {
! /* Fuchsia: remove when getrlimit() has been implemented.  */
! #if !defined(__Fuchsia__) && \
!     defined(HAVE_SETRLIMIT) && defined(HAVE_GETRLIMIT) \
      && defined(RLIMIT_STACK) && defined(RLIM_INFINITY)
    struct rlimit rlim;
    if (getrlimit (RLIMIT_STACK, &rlim) == 0
diff -rdcp --unidirectional-new-file binutils-2.27-fsf/Makefile.in binutils-2.27/Makefile.in
*** binutils-2.27-fsf/Makefile.in	2016-11-23 09:00:02.962814897 -0800
--- binutils-2.27/Makefile.in	2016-11-17 14:27:46.861334193 -0800
*************** HOST_EXPORTS = \
*** 190,195 ****
--- 190,196 ----
  	ADA_CFLAGS="$(ADA_CFLAGS)"; export ADA_CFLAGS; \
  	CFLAGS="$(CFLAGS)"; export CFLAGS; \
  	CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
+ 	CPPFLAGS="$(CPPFLAGS)"; export CPPFLAGS; \
  	CXX="$(CXX)"; export CXX; \
  	CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
  	GCJ="$(GCJ)"; export GCJ; \
*************** GNATBIND = @GNATBIND@
*** 410,415 ****
--- 411,417 ----
  GNATMAKE = @GNATMAKE@
  
  CFLAGS = @CFLAGS@
+ CPPFLAGS = @CPPFLAGS@
  LDFLAGS = @LDFLAGS@
  LIBCFLAGS = $(CFLAGS)
  CXXFLAGS = @CXXFLAGS@
