blob: 262c0ff6bdf772b4e32a707304a4996a5c4cd481 [file] [log] [blame]
--- 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
--- 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
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 -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/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
*************** 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/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
*************** 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_handle_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
*************** pex_unix_exec_child (struct pex_obj *obj
*** 547,556 ****
--- 583,605 ----
{
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. */
+ pid = launchpad_launch_mxio (executable, argc, argv);
+ }
+ #else
if (flags & PEX_SEARCH)
pid = spawnvpe (_P_NOWAITO, executable, (cc_cp)argv, (cc_cp)env);
else
pid = spawnve (_P_NOWAITO, executable, (cc_cp)argv, (cc_cp)env);
+ #endif
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
*************** 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)' \