aboutsummaryrefslogtreecommitdiff
path: root/lang/gcc6-aux
diff options
context:
space:
mode:
authorJohn Marino <marino@FreeBSD.org>2015-12-06 16:04:22 +0000
committerJohn Marino <marino@FreeBSD.org>2015-12-06 16:04:22 +0000
commit320c206ea9b056e68b04fa4825ce40030ee7411c (patch)
treebf3529c65237c77eaa6e8cf4ec9edd88fab531cc /lang/gcc6-aux
parenteba05ee1624e7bb4c1f22b82c8876d2606a66547 (diff)
downloadports-320c206ea9b056e68b04fa4825ce40030ee7411c.tar.gz
ports-320c206ea9b056e68b04fa4825ce40030ee7411c.zip
Add new port lang/gcc6-aux
This will be the successor to lang/gcc5-aux. GCC6 is still in development although the Ada front end is generally stable. Once gcc6-aux is released, the lang/gcc-aux port will likely be removed. For that to happen, the gnatdroid compilers need to move from it to gcc5-aux or gcc6-aux. The Ada framework will also move to gcc6-aux by default as well.
Notes
Notes: svn path=/head/; revision=403127
Diffstat (limited to 'lang/gcc6-aux')
-rw-r--r--lang/gcc6-aux/Makefile284
-rw-r--r--lang/gcc6-aux/Makefile.common14
-rw-r--r--lang/gcc6-aux/Makefile.version22
-rw-r--r--lang/gcc6-aux/distinfo8
-rw-r--r--lang/gcc6-aux/files/android.exp106
-rw-r--r--lang/gcc6-aux/files/diff-ada1101
-rw-r--r--lang/gcc6-aux/files/diff-ada-testsuite705
-rw-r--r--lang/gcc6-aux/files/diff-core92
-rw-r--r--lang/gcc6-aux/files/diff-cxx12
-rw-r--r--lang/gcc6-aux/files/diff-gcc-testsuite46
-rw-r--r--lang/gcc6-aux/files/gnatdroid.exp14
-rw-r--r--lang/gcc6-aux/pkg-descr14
12 files changed, 2418 insertions, 0 deletions
diff --git a/lang/gcc6-aux/Makefile b/lang/gcc6-aux/Makefile
new file mode 100644
index 000000000000..cb6c8e015287
--- /dev/null
+++ b/lang/gcc6-aux/Makefile
@@ -0,0 +1,284 @@
+# Created by: John Marino <marino@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= gcc6-aux
+PORTVERSION= ${SNAPSHOT}
+PORTREVISION= ${MAIN_PR}
+CATEGORIES= lang
+MASTER_SITES= http://downloads.dragonlace.net/src/:boot \
+ LOCAL/marino:boot GCC/${MS_SUBDIR}
+DISTFILES= ${IDENTIFICATION}.tar.bz2
+
+MAINTAINER= marino@FreeBSD.org
+COMMENT= Version of GCC ${GCC_BRANCH} with full Ada support
+
+LICENSE= GPLv3 GPLv3RLE
+LICENSE_COMB= multi
+
+.include "${.CURDIR}/Makefile.common"
+
+LANGS= c c++ ada
+APPLY_DIFFS= core cxx ada
+INTENDED_COMPILER= NATIVE
+GARCH= ${ARCH:S/amd64/x86_64/}
+BOOTSTRAP_COMPILER= gnat-bootstrap.${GARCH}.${OPSYS:tl}.tar.bz2
+BLD_TARGET= ${GARCH}-aux-${OPSYS:tl}${OSREL}
+FULL_GNATGCC= NOT_SET
+OS_LABEL4VERS= [${OPSYS}${GARCH:M*64:S/amd_//:S/x86_//}]
+NO_MTREE= yes
+CPPFLAGS+= -I${LOCALBASE}/include
+LDFLAGS+= -L${LOCALBASE}/lib
+
+OPTIONS_GROUP= Standard Bootstrap
+OPTIONS_GROUP_Standard= FORT OBJC NLS TESTSUITE ALLSTAGES STATIC
+OPTIONS_GROUP_Bootstrap=BOOTSTRAP
+OPTIONS_DEFAULT= FORT OBJC
+NO_OPTIONS_SORT= yes
+
+FORT_DESC= Fortran language support
+OBJC_DESC= Objective-C language support
+TESTSUITE_DESC= Activate test support
+ALLSTAGES_DESC= Build compiler with itself (twice, brings in libcc1)
+STATIC_DESC= Link compilers and drivers statically
+BOOTSTRAP_DESC= Create bootstrap compiler (overrides other options)
+
+# The BOOTSTRAP option overrides all the others. "make stage" will build a
+# static compiler that supports C, C++, and Ada languages and then create
+# a new distfile in $WRKDIR/newbsd with the name following the pattern:
+# ada-bootstrap.$ARCH.$OPSYS.XY.tar.bz2. There is no need to "make install"
+
+.include <bsd.port.options.mk>
+
+.if ${OPSYS} == FreeBSD
+ONLY_FOR_ARCHS= amd64 i386
+MODERN_BINUTILS= yes
+BOOTSTRAP_COMPILER= ada-bootstrap.${GARCH}.freebsd.100B.tar.bz2
+.endif
+.if ${OPSYS} == DragonFly
+ONLY_FOR_ARCHS= x86_64
+BOOTSTRAP_COMPILER= ada-bootstrap.${GARCH}.dragonfly.41.tar.bz2
+.endif
+
+.if defined(MODERN_BINUTILS)
+# Apparently gcc 4.9 needs binutils 2.23 or greater to link Ada correctly
+USE_BINUTILS= yes
+RUN_DEPENDS+= ${LOCALBASE}/bin/as:${PORTSDIR}/devel/binutils
+EXTRA_CONFIG+= --with-ld=${LOCALBASE}/bin/ld
+EXTRA_CONFIG+= --with-as=${LOCALBASE}/bin/as
+.else
+EXTRA_CONFIG+= --with-ld=/usr/bin/ld
+EXTRA_CONFIG+= --with-as=/usr/bin/as
+.endif
+
+WRKSRC= ${WRKDIR}/${IDENTIFICATION}
+BUILDDIR= ${WRKDIR}/build
+NEWBSDIR= ${WRKDIR}/newbs/bootstrap
+CFG_SCRIPT= ${WRKSRC}/configure
+REVFILE= ${WRKSRC}/gcc/REVISION
+PHASEFILE= ${WRKSRC}/gcc/DEV-PHASE
+BOOTSTRAP_PREFIX= ${WRKDIR}/bootstrap
+PKG_PREFIX= ${PREFIX}/${PORTNAME}
+MANPREFIX= ${PREFIX}/${PORTNAME}/share
+BSFILENAME= ada-bootstrap.${GARCH}.${OPSYS:tl}.${OSREL:S/.//}.tar.bz2
+
+# If we find gnatmake and friends in a standard location, then we'll use this
+# compiler instead of downloading the bootstrap.
+.if exists (${LOCALBASE}/${PORTNAME}/bin/ada)
+.if exists (${LOCALBASE}/${PORTNAME}/bin/gnatbind)
+.if exists (${LOCALBASE}/${PORTNAME}/bin/gnatlink)
+.if exists (${LOCALBASE}/${PORTNAME}/bin/gnatmake)
+FULL_GNATGCC=${LOCALBASE}/${PORTNAME}/bin/ada
+FULL_GNATGXX=${LOCALBASE}/${PORTNAME}/bin/g++
+FULL_PATH=/sbin:/bin:/usr/sbin:/usr/bin:${PREFIX}/${PORTNAME}/bin:${PREFIX}/bin
+.endif
+.endif
+.endif
+.endif
+
+# If FULL_GNATGCC is not set, we'll request the bootstrap compiler
+.if ${FULL_GNATGCC} == NOT_SET
+INTENDED_COMPILER=BOOTSTRAP
+FULL_GNATGCC=${BOOTSTRAP_PREFIX}/bin/gcc
+FULL_GNATGXX=${BOOTSTRAP_PREFIX}/bin/g++
+FULL_PATH=${BOOTSTRAP_PREFIX}/bin:/sbin:/bin:/usr/sbin:/usr/bin:${PREFIX}/bin
+DISTFILES+= ${BOOTSTRAP_COMPILER}:boot
+.endif
+
+# for port maintenance, invoke "make makesum PLUS_BOOTSTRAPS=1"
+.if defined(PLUS_BOOTSTRAPS)
+DISTFILES= \
+ ${IDENTIFICATION}.tar.bz2 \
+ ada-bootstrap.i386.freebsd.100B.tar.bz2:boot \
+ ada-bootstrap.x86_64.dragonfly.41.tar.bz2:boot \
+ ada-bootstrap.x86_64.freebsd.100B.tar.bz2:boot
+.endif
+
+.if ${PORT_OPTIONS:MFORT} && !${PORT_OPTIONS:MBOOTSTRAP}
+LANGS+= fortran
+EXTRA_CONFIG+= --enable-libquadmath
+.else
+EXTRA_CONFIG+= --disable-libquadmath
+.endif
+
+.if ${PORT_OPTIONS:MOBJC} && !${PORT_OPTIONS:MBOOTSTRAP}
+LANGS+= objc
+.endif
+
+.if ${PORT_OPTIONS:MTESTSUITE} && !${PORT_OPTIONS:MBOOTSTRAP}
+BUILD_DEPENDS+= dejagnu>=1.4:${PORTSDIR}/misc/dejagnu
+APPLY_DIFFS+= ada-testsuite
+APPLY_DIFFS+= gcc-testsuite
+.endif
+
+.if ${PORT_OPTIONS:MNLS} && !${PORT_OPTIONS:MBOOTSTRAP}
+USES+= gettext
+EXTRA_CONFIG+= --enable-nls
+.else
+EXTRA_CONFIG+= --disable-nls
+.endif
+
+.if ${PORT_OPTIONS:MSTATIC} && !${PORT_OPTIONS:MBOOTSTRAP}
+EXTRA_CONFIG+= --with-stage1-ldflags=-static
+.endif
+
+.if ${PORT_OPTIONS:MBOOTSTRAP}
+EXTRA_CONFIG+= --disable-shared --disable-lto
+EXTRA_CONFIG+= --with-boot-ldflags=-static
+.else
+. if !${PORT_OPTIONS:MALLSTAGES}
+# For reasons unknown, build fails at libcc1 when the compiler is not
+# not bootstrapping. It appears to be an upstream error. LibCC1 is used
+# for gdb 7.9 exclusively, so it's not really needed. Let's disable it
+# by default, but let people that want it suffer a 3-stage build.
+EXTRA_CONFIG+= --disable-bootstrap --disable-libcc1
+. endif
+USES+= iconv
+.endif
+
+# Establish Ada-aware compiler for use
+ADA_CONFIGURE_ENV+= CC=${FULL_GNATGCC}
+ADA_CONFIGURE_ENV+= CXX=${FULL_GNATGXX}
+ADA_CONFIGURE_ENV+= CFLAGS="${CFLAGS}"
+ADA_CONFIGURE_ENV+= CPPFLAGS="${CPPFLAGS}"
+ADA_CONFIGURE_ENV+= CXXFLAGS="${CXXFLAGS}"
+ADA_CONFIGURE_ENV+= LDFLAGS="${LDFLAGS}"
+ADA_CONFIGURE_ENV+= build_configargs="CPPFLAGS=\"${CPPFLAGS}\""
+ADA_CONFIGURE_ENV+= host_configargs="CPPFLAGS=\"${CPPFLAGS}\""
+ADA_CONFIGURE_ENV+= PATH=${FULL_PATH}
+ADA_MAKE_ENV+= PATH=${FULL_PATH}
+
+# The standard configuration options
+ADA_CONFIG_ARGS= --enable-languages=${LANGS:Q}
+ADA_CONFIG_ARGS+= --build=${BLD_TARGET}
+ADA_CONFIG_ARGS+= --prefix=${PKG_PREFIX:Q}
+ADA_CONFIG_ARGS+= --with-system-zlib
+ADA_CONFIG_ARGS+= --with-gmp=${PREFIX}
+ADA_CONFIG_ARGS+= --with-mpfr=${PREFIX}
+ADA_CONFIG_ARGS+= --with-mpc=${PREFIX}
+ADA_CONFIG_ARGS+= ${ICONV_CONFIGURE_ARG}
+ADA_CONFIG_ARGS+= --enable-shared
+ADA_CONFIG_ARGS+= --enable-threads=posix
+ADA_CONFIG_ARGS+= --enable-checking=release
+ADA_CONFIG_ARGS+= --disable-libmudflap
+ADA_CONFIG_ARGS+= --disable-libgomp
+ADA_CONFIG_ARGS+= --disable-libssp
+ADA_CONFIG_ARGS+= ${EXTRA_CONFIG}
+
+post-extract:
+ # Personalize GNAT for each different machine
+ @${ECHO} "-=> GNAT AUX ${OS_LABEL4VERS}" > ${REVFILE}
+ @${ECHO} ${PHASE} > ${PHASEFILE}
+
+ # Apply required composite diff files
+.for suffix in ${APPLY_DIFFS}
+ @${ECHO} "Applying composite patch diff-${suffix}"
+ @${PATCH} -d ${WRKSRC} -s -E < ${FILESDIR}/diff-${suffix}
+.endfor
+.if ${PORT_OPTIONS:MSTATIC} || ${PORT_OPTIONS:MBOOTSTRAP}
+ # Ensure GNAT tools are built statically
+ ${REINPLACE_CMD} -e 's/^GCC_LINK_FLAGS=.*/GCC_LINK_FLAGS=-static/' \
+ ${WRKSRC}/gcc/ada/gcc-interface/Makefile.in
+.endif
+ # Update LINK_SPEC to add gcc-aux lib runpath in every binary
+ @${ECHO} "Configuring LINK_SPEC runpath"
+ @${REINPLACE_CMD} -e 's;\@PREFIX\@;${PREFIX};' \
+ -e 's;\@GCCAUX\@;${PORTNAME};' \
+ ${WRKSRC}/gcc/config/dragonfly.h \
+ ${WRKSRC}/gcc/config/i386/freebsd64.h \
+ ${WRKSRC}/gcc/config/i386/freebsd.h
+.if defined(MODERN_BINUTILS)
+ # Use dwarf4-compatible addr2line (affects FreeBSD only)
+ ${REINPLACE_CMD} -e 's|/usr/bin/addr2line|${PREFIX}/bin/addr2line|g' \
+ ${WRKSRC}/gcc/ada/traceback_symbolic.c
+.endif
+
+do-configure:
+ ${MKDIR} ${BUILDDIR}
+ cd ${BUILDDIR} && ${SETENV} ${ADA_CONFIGURE_ENV} \
+ ${CFG_SCRIPT} ${ADA_CONFIG_ARGS}
+
+do-build:
+ cd ${BUILDDIR} && ${SETENV} ${ADA_MAKE_ENV} \
+ ${MAKE_CMD} -j${MAKE_JOBS_NUMBER} ${MAKE_ARGS} all
+
+.if ${PORT_OPTIONS:MTESTSUITE} && !${PORT_OPTIONS:MBOOTSTRAP}
+test: build test-ada test-fortran test-objc test-cxx test-c
+
+test-ada:
+ cd ${BUILDDIR} && ${SETENV} ${ADA_MAKE_ENV} \
+ ${MAKE_CMD} -sk check-ada
+
+test-cxx:
+ # libstdc++ testsuite will break every time, for TRUE to continue
+ cd ${BUILDDIR} && ${SETENV} ${ADA_MAKE_ENV} \
+ ${MAKE_CMD} -j${MAKE_JOBS_NUMBER} -sk check-c++ || true
+
+test-c:
+ cd ${BUILDDIR} && ${SETENV} ${ADA_MAKE_ENV} \
+ ${MAKE_CMD} -j${MAKE_JOBS_NUMBER} -sk check-c
+
+test-fortran:
+. if ${PORT_OPTIONS:MFORT}
+ cd ${BUILDDIR} && ${SETENV} ${ADA_MAKE_ENV} \
+ ${MAKE_CMD} -j${MAKE_JOBS_NUMBER} -sk check-fortran
+. endif
+
+test-objc:
+. if ${PORT_OPTIONS:MOBJC}
+ cd ${BUILDDIR} && ${SETENV} ${ADA_MAKE_ENV} \
+ ${MAKE_CMD} -j${MAKE_JOBS_NUMBER} -sk check-objc
+. endif
+.endif
+
+do-install:
+ cd ${BUILDDIR} && ${SETENV} ${ADA_MAKE_ENV} \
+ ${MAKE_CMD} install-strip ${MAKE_ARGS}
+ ${MV} ${STAGEDIR}${PKG_PREFIX}/share ${WRKDIR}/moved_share
+# Don't activate until this port builds gnatdroid
+# Otherwise it will conflict with lang/gcc-aux
+# Add "share" after {PORTNAME} on 3rd line of post-stage target
+# ${MKDIR} ${STAGEDIR}${PREFIX}/share/dejagnu/baseboards \
+# ${STAGEDIR}${PREFIX}/share/dejagnu/config
+# ${INSTALL_DATA} ${FILESDIR}/android.exp \
+# ${STAGEDIR}${PREFIX}/share/dejagnu/config
+# ${INSTALL_DATA} ${FILESDIR}/gnatdroid.exp \
+# ${STAGEDIR}${PREFIX}/share/dejagnu/baseboards
+
+post-stage:
+ (cd ${STAGEDIR}${PKG_PREFIX}; ${FIND} * -type d -empty | \
+ ${SORT} -dr | ${XARGS} ${RMDIR})
+ (cd ${STAGEDIR}${PREFIX}; ${FIND} ${PORTNAME} \
+ \( -type f -or -type l \) | ${SORT} | ${SED} \
+ -e 's/\/man\/man[1578]\/.*[1578]$$/&.gz/' >> ${TMPPLIST})
+.if ${PORT_OPTIONS:MBOOTSTRAP}
+ ${MKDIR} ${NEWBSDIR}
+ ${CP} -a ${STAGEDIR}${PKG_PREFIX}/bin ${NEWBSDIR}/
+ ${CP} -a ${STAGEDIR}${PKG_PREFIX}/lib ${NEWBSDIR}/
+ ${CP} -a ${STAGEDIR}${PKG_PREFIX}/include ${NEWBSDIR}/
+ ${CP} -a ${STAGEDIR}${PKG_PREFIX}/libexec ${NEWBSDIR}/
+ ${RM} ${NEWBSDIR}/bin/${GARCH}*
+ ${RM} -rf ${NEWBSDIR}/lib/gcc/${BLD_TARGET}/${GCC_VERSION}/include-fixed
+ (cd ${NEWBSDIR}/.. ; ${TAR} -cyf ${BSFILENAME} bootstrap)
+.endif
+
+.include <bsd.port.mk>
diff --git a/lang/gcc6-aux/Makefile.common b/lang/gcc6-aux/Makefile.common
new file mode 100644
index 000000000000..4f24cc2b0b03
--- /dev/null
+++ b/lang/gcc6-aux/Makefile.common
@@ -0,0 +1,14 @@
+# $FreeBSD$
+
+.include "Makefile.version"
+
+LIB_DEPENDS= libgmp.so:${PORTSDIR}/math/gmp
+LIB_DEPENDS+= libmpfr.so:${PORTSDIR}/math/mpfr
+LIB_DEPENDS+= libmpc.so:${PORTSDIR}/math/mpc
+
+ONLY_FOR_ARCHS= i386 amd64
+
+GNU_CONFIGURE= yes
+USES= gmake libtool perl5 tar:bzip2
+USE_PERL5= build
+ALL_TARGET= default
diff --git a/lang/gcc6-aux/Makefile.version b/lang/gcc6-aux/Makefile.version
new file mode 100644
index 000000000000..389701f9573f
--- /dev/null
+++ b/lang/gcc6-aux/Makefile.version
@@ -0,0 +1,22 @@
+# $FreeBSD$
+
+GCC_BRANCH= 6
+GCC_POINT= 0.0
+GCC_VERSION= ${GCC_BRANCH}.${GCC_POINT}
+SNAPSHOT= 20151129
+BUILD_RELEASE= no
+MAIN_PR= 0
+UTIL_PR= 0
+ARMV7_PR= 0
+
+.if ${BUILD_RELEASE:Mno}
+# Snapshot naming pattern
+IDENTIFICATION= gcc-${GCC_BRANCH}-${SNAPSHOT}
+MS_SUBDIR= snapshots/${GCC_BRANCH}-${SNAPSHOT}
+PHASE= snapshot
+.else
+# Release naming pattern
+IDENTIFICATION= gcc-${GCC_VERSION}
+MS_SUBDIR= releases/gcc-${GCC_VERSION}
+PHASE= release
+.endif
diff --git a/lang/gcc6-aux/distinfo b/lang/gcc6-aux/distinfo
new file mode 100644
index 000000000000..17ac7cb9f676
--- /dev/null
+++ b/lang/gcc6-aux/distinfo
@@ -0,0 +1,8 @@
+SHA256 (gcc-6-20151129.tar.bz2) = 9fc70384a69ced8d3014d1182d874c9376fdaaa5d2bb4adb47a0df35a81e3834
+SIZE (gcc-6-20151129.tar.bz2) = 93779686
+SHA256 (ada-bootstrap.i386.freebsd.100B.tar.bz2) = 7231209f2600275f554f788ad1d036cf633c4339ebd25bd479a5bb1ddcddedf3
+SIZE (ada-bootstrap.i386.freebsd.100B.tar.bz2) = 41229192
+SHA256 (ada-bootstrap.x86_64.dragonfly.41.tar.bz2) = eb7785d8b842aee2bb04b43adfb1346b178ee4e83d8775b4e6705fd23f1586f0
+SIZE (ada-bootstrap.x86_64.dragonfly.41.tar.bz2) = 44956630
+SHA256 (ada-bootstrap.x86_64.freebsd.100B.tar.bz2) = 1066d7c5e71d78b4416de3b73348227678ca07db52488409e270db7b00467f55
+SIZE (ada-bootstrap.x86_64.freebsd.100B.tar.bz2) = 42163803
diff --git a/lang/gcc6-aux/files/android.exp b/lang/gcc6-aux/files/android.exp
new file mode 100644
index 000000000000..b3eb17563371
--- /dev/null
+++ b/lang/gcc6-aux/files/android.exp
@@ -0,0 +1,106 @@
+# This file is part of DejaGnu.
+
+if {![info exists board]} {
+ error "must set $board before loading android.exp"
+}
+
+# For rcp_download, rsh_exec.
+load_lib remote.exp
+
+#
+# unix_load -- load the program and execute it
+#
+# See default.exp for explanation of arguments and results.
+#
+
+
+proc unix_load { dest prog args } {
+ global ld_library_path
+ set output ""
+ set orig_ld_library_path ""
+
+ if { [llength $args] > 0 } {
+ set parg [lindex $args 0]
+ } else {
+ set parg ""
+ }
+
+ if { [llength $args] > 1 } {
+ set inp [lindex $args 1]
+ } else {
+ set inp ""
+ }
+
+ if {![file exists $prog]} then {
+ # We call both here because this should never happen.
+ perror "$prog does not exist in unix_load."
+ verbose -log "$prog does not exist." 3
+ return "untested"
+ }
+ verbose "loading to $dest" 2
+ if {![is_remote $dest]} {
+ if { "$inp" != "" } {
+ set command "$prog $parg < $inp"
+ } else {
+ set command "$prog $parg"
+ }
+
+ if {![info exists ld_library_path]} {
+ set ld_library_path ""
+ }
+
+ set orig_ld_library_path "[getenv LD_LIBRARY_PATH]"
+ setenv LD_LIBRARY_PATH "$ld_library_path:$orig_ld_library_path"
+ setenv SHLIB_PATH "$ld_library_path:$orig_ld_library_path"
+ verbose -log "Setting LD_LIBRARY_PATH to $ld_library_path:$orig_ld_library_path" 2
+
+ set id [remote_spawn $dest "$command" "readonly"]
+ if { $id < 0 } {
+ set output "remote_spawn failed"
+ set status -1
+ } else {
+ set status [remote_wait $dest 300]
+ set output [lindex $status 1]
+ set status [lindex $status 0]
+ }
+ # Unset them so we don't potentially get hosed when we try to run a
+ # non-testcase executable. (Setting LD_LIBRARY_PATH is the wrong
+ # fix in the first place; this just tries to minimize the resulting
+ # crap.)
+ if {[info exists ld_library_path]} {
+ setenv LD_LIBRARY_PATH $orig_ld_library_path
+ setenv SHLIB_PATH $orig_ld_library_path
+ }
+ } else {
+ set remotefile "/data/local/testsuite/[file tail $prog].[pid]"
+ set remotefile [remote_download $dest $prog $remotefile]
+ if { $remotefile == "" } {
+ verbose -log "Download of $prog to [board_info $dest name] failed." 3
+ return [list "unresolved" ""]
+ }
+ set status [remote_exec $dest "$remotefile" $parg $inp]
+ remote_file $dest delete $remotefile.o $remotefile
+ if { [lindex $status 0] < 0 } {
+ verbose -log "Couldn't execute $prog, [lindex $status 1]" 3
+ return [list "unresolved" ""]
+ }
+ set output [lindex $status 1]
+ set status [lindex $status 0]
+ }
+
+ setenv LD_LIBRARY_PATH $orig_ld_library_path
+ setenv SHLIB_PATH $orig_ld_library_path
+
+ verbose "Executed $prog, status $status" 2
+ if {![string match "" $output]} {
+ verbose -- "$output" 2
+ }
+ if { $status == 0 } {
+ set result "pass"
+ } else {
+ set result "fail"
+ }
+ return [list $result $output]
+}
+
+set_board_info protocol "unix"
diff --git a/lang/gcc6-aux/files/diff-ada b/lang/gcc6-aux/files/diff-ada
new file mode 100644
index 000000000000..f31a3bc6c132
--- /dev/null
+++ b/lang/gcc6-aux/files/diff-ada
@@ -0,0 +1,1101 @@
+--- gcc/ada/adaint.c.orig
++++ gcc/ada/adaint.c
+@@ -1157,6 +1157,47 @@
+ free (pname);
+ }
+
++#elif defined (__ANDROID__)
++
++ /*
++ * ext2 /ext3/ext4/fat16/fat32 have no path limits
++ * /data/local/tmp normally requires rooted devices, if it even exists
++ * /sdcard is the standard location for external storage. Nativeactivity
++ * manifest needs to authorize its use, otherwise it might not have the
++ * proper permissions.
++ */
++
++ int testfd;
++ char *datadir = getenv ("ANDROID_DATA");
++
++ if (datadir == NULL)
++ strncpy (tmp_filename, "/data/local/tmp/gnat-XXXXXX", L_tmpnam);
++ else
++ snprintf (tmp_filename, L_tmpnam, "%s/local/tmp/gnat-XXXXXX", datadir);
++
++ testfd = mkstemp (tmp_filename);
++ if (testfd != -1)
++ {
++ close (testfd);
++ return;
++ }
++
++ char *sdcard = getenv ("EXTERNAL_STORAGE");
++
++ if (sdcard == NULL)
++ strncpy (tmp_filename, "/sdcard/gnat-XXXXXX", L_tmpnam);
++ else
++ snprintf (tmp_filename, L_tmpnam, "%s/gnat-XXXXXX", sdcard);
++
++ testfd = mkstemp (tmp_filename);
++ if (testfd != -1)
++ {
++ close (testfd);
++ return;
++ }
++
++ tmpnam (tmp_filename);
++
+ #elif defined (__linux__) || defined (__FreeBSD__) || defined (__NetBSD__) \
+ || defined (__OpenBSD__) || defined (__GLIBC__) || defined (__ANDROID__) \
+ || defined (__DragonFly__)
+--- gcc/ada/cio.c.orig
++++ gcc/ada/cio.c
+@@ -49,7 +49,7 @@
+
+ /* Don't use macros on GNU/Linux since they cause incompatible changes between
+ glibc 2.0 and 2.1 */
+-#ifdef __linux__
++#if defined __linux__ && !defined __ANDROID__
+ #undef putchar
+ #undef getchar
+ #undef fputc
+--- gcc/ada/cstreams.c.orig
++++ gcc/ada/cstreams.c
+@@ -69,7 +69,7 @@
+ #include <unixlib.h>
+ #endif
+
+-#ifdef __linux__
++#if defined __linux__ && !defined __ANDROID__
+ /* Don't use macros on GNU/Linux since they cause incompatible changes between
+ glibc 2.0 and 2.1 */
+
+--- /dev/null
++++ gcc/ada/g-socthi-bsd.adb
+@@ -0,0 +1,356 @@
++------------------------------------------------------------------------------
++-- --
++-- GNAT COMPILER COMPONENTS --
++-- --
++-- G N A T . S O C K E T S . T H I N --
++-- --
++-- B o d y --
++-- --
++-- Copyright (C) 2001-2013, AdaCore --
++-- --
++-- GNAT is free software; you can redistribute it and/or modify it under --
++-- terms of the GNU General Public License as published by the Free Soft- --
++-- ware Foundation; either version 3, or (at your option) any later ver- --
++-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
++-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
++-- or FITNESS FOR A PARTICULAR PURPOSE. --
++-- --
++-- As a special exception under Section 7 of GPL version 3, you are granted --
++-- additional permissions described in the GCC Runtime Library Exception, --
++-- version 3.1, as published by the Free Software Foundation. --
++-- --
++-- You should have received a copy of the GNU General Public License and --
++-- a copy of the GCC Runtime Library Exception along with this program; --
++-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
++-- <http://www.gnu.org/licenses/>. --
++-- --
++-- GNAT was originally developed by the GNAT team at New York University. --
++-- Extensive contributions were provided by Ada Core Technologies Inc. --
++-- --
++------------------------------------------------------------------------------
++
++-- This package provides a target dependent thin interface to the sockets
++-- layer for use by the GNAT.Sockets package (g-socket.ads). This package
++-- should not be directly with'ed by an applications program.
++
++-- This is the *BSD version which uses fcntl rather than ioctl
++-- The constant SCON.Thread_Blocking_IO is always true (for all platforms, not
++-- just *BSD), so this binding is significantly simpler than the standard
++-- one it replaces.
++
++with GNAT.OS_Lib; use GNAT.OS_Lib;
++
++with Interfaces.C; use Interfaces.C;
++
++package body GNAT.Sockets.Thin is
++
++ function Syscall_Accept
++ (S : C.int;
++ Addr : System.Address;
++ Addrlen : not null access C.int) return C.int;
++ pragma Import (C, Syscall_Accept, "accept");
++ -- The accept() function accepts a connection on a socket. An incoming
++ -- connection is acknowledged and associated with an immediately created
++ -- socket. The original socket is returned to the listening state.
++
++ function Syscall_Connect
++ (S : C.int;
++ Name : System.Address;
++ Namelen : C.int) return C.int;
++ pragma Import (C, Syscall_Connect, "connect");
++ -- The connect() system call initiates a connection on a socket. If the
++ -- parameter S is of type SOCK_DGRAM then connect() permanently specifies
++ -- the peer to which datagrams are to be sent. If S is type SOCK_STREAM
++ -- then connect() attempts to make a connection with another socket, which
++ -- is identified by the parameter Name.
++
++ function Syscall_Recv
++ (S : C.int;
++ Msg : System.Address;
++ Len : C.int;
++ Flags : C.int) return C.int;
++ pragma Import (C, Syscall_Recv, "recv");
++ -- The recv() function receives a message from a socket. The call can be
++ -- used on a connection mode socket or a bound, connectionless socket. If
++ -- no messages are available at the socket, the recv() call waits for a
++ -- message to arrive unless the socket is non-blocking. If a socket is
++ -- non-blocking, the call returns a -1 and ERRNO is set to EWOULDBLOCK.
++
++ function Syscall_Recvfrom
++ (S : C.int;
++ Msg : System.Address;
++ Len : C.int;
++ Flags : C.int;
++ From : System.Address;
++ Fromlen : not null access C.int) return C.int;
++ pragma Import (C, Syscall_Recvfrom, "recvfrom");
++ -- The recvfrom() system call receives a message from a socket and captures
++ -- the address from which the data was sent. It can be used to receive
++ -- data on an unconnected socket as well. If no messages are available,
++ -- the call waits for a message to arrive on blocking sockets. For
++ -- non-blocking sockets without messages, -1 is returned and ERRNO is set
++ -- to EAGAIN or EWOULDBLOCK.
++
++ function Syscall_Recvmsg
++ (S : C.int;
++ Msg : System.Address;
++ Flags : C.int) return System.CRTL.ssize_t;
++ pragma Import (C, Syscall_Recvmsg, "recvmsg");
++ -- The recvmsg call receives a message from a socket, and can be used to
++ -- receive data on an unconnected socket as well. If no messages are
++ -- available, the call waits for a message to arrive on blocking sockets.
++ -- For non-blocking sockets without messages, -1 is returned and ERRNO is
++ -- set to EAGAIN or EWOULDBLOCK.
++
++ function Syscall_Sendmsg
++ (S : C.int;
++ Msg : System.Address;
++ Flags : C.int) return System.CRTL.ssize_t;
++ pragma Import (C, Syscall_Sendmsg, "sendmsg");
++ -- The sendmsg() function sends a message to a socket, and can be used with
++ -- unconnected sockets as well (the msg is ignored in this case). The
++ -- function returns the number of bytes sent when successful, otherwise it
++ -- returns -1 and ERRNO is set (many possible values).
++
++ function Syscall_Sendto
++ (S : C.int;
++ Msg : System.Address;
++ Len : C.int;
++ Flags : C.int;
++ To : System.Address;
++ Tolen : C.int) return C.int;
++ pragma Import (C, Syscall_Sendto, "sendto");
++ -- The sendto() function only works for connected sockets and it initiates
++ -- the transmission of a message. A successful call returns the numbers of
++ -- bytes sent, and a failure returns a -1 and ERRNO is set.
++
++ function Syscall_Socket
++ (Domain : C.int;
++ Typ : C.int;
++ Protocol : C.int) return C.int;
++ pragma Import (C, Syscall_Socket, "socket");
++ -- The socket() function is used to create an unbound socket and returns a
++ -- file descriptor that can be used with other socket functions. Upon
++ -- failure, a -1 is returned and ERRNO is set.
++
++ procedure Disable_SIGPIPE (S : C.int);
++ pragma Import (C, Disable_SIGPIPE, "__gnat_disable_sigpipe");
++
++ procedure Disable_All_SIGPIPEs;
++ pragma Import (C, Disable_All_SIGPIPEs, "__gnat_disable_all_sigpipes");
++ -- Sets the process to ignore all SIGPIPE signals on platforms that
++ -- don't support Disable_SIGPIPE for particular streams.
++
++ function C_Fcntl
++ (Fd : C.int;
++ Cmd : C.int;
++ Val : C.int) return C.int;
++ pragma Import (C, C_Fcntl, "fcntl");
++ -- The ioctl of 64-bit DragonFlyBSD, OpenBSD, and NetBSD does not support
++ -- setting a socket in non-blocking mode. fcntl must be used instead.
++
++ --------------
++ -- C_Accept --
++ --------------
++
++ function C_Accept
++ (S : C.int;
++ Addr : System.Address;
++ Addrlen : not null access C.int) return C.int
++ is
++ R : constant C.int := Syscall_Accept (S, Addr, Addrlen);
++ begin
++
++ Disable_SIGPIPE (R);
++ return R;
++ end C_Accept;
++
++ ---------------
++ -- C_Connect --
++ ---------------
++
++ function C_Connect
++ (S : C.int;
++ Name : System.Address;
++ Namelen : C.int) return C.int
++ is
++ begin
++ return Syscall_Connect (S, Name, Namelen);
++ end C_Connect;
++
++ ------------------
++ -- Socket_Ioctl --
++ ------------------
++
++ function Socket_Ioctl
++ (S : C.int;
++ Req : SOSC.IOCTL_Req_T;
++ Arg : access C.int) return C.int
++ is
++ begin
++ if Req = SOSC.FIONBIO then
++ declare
++ use Interfaces;
++ flags : constant Unsigned_32 :=
++ Unsigned_32 (C_Fcntl (S, SOSC.F_GETFL, 0));
++ nonblock : constant Unsigned_32 := Unsigned_32 (SOSC.O_NDELAY);
++ enabled : constant Boolean := Arg.all = 1;
++ newval : C.int := C.int (flags);
++ begin
++ if enabled then
++ newval := C.int (flags or nonblock);
++ elsif (flags and nonblock) > 0 then
++ newval := C.int (flags - nonblock);
++ end if;
++ return C_Fcntl (Fd => S, Cmd => SOSC.F_SETFL, Val => newval);
++ end;
++ end if;
++
++ return C_Ioctl (S, Req, Arg);
++ end Socket_Ioctl;
++
++ ------------
++ -- C_Recv --
++ ------------
++
++ function C_Recv
++ (S : C.int;
++ Msg : System.Address;
++ Len : C.int;
++ Flags : C.int) return C.int
++ is
++ begin
++ return Syscall_Recv (S, Msg, Len, Flags);
++ end C_Recv;
++
++ ----------------
++ -- C_Recvfrom --
++ ----------------
++
++ function C_Recvfrom
++ (S : C.int;
++ Msg : System.Address;
++ Len : C.int;
++ Flags : C.int;
++ From : System.Address;
++ Fromlen : not null access C.int) return C.int
++ is
++ begin
++ return Syscall_Recvfrom (S, Msg, Len, Flags, From, Fromlen);
++ end C_Recvfrom;
++
++ ---------------
++ -- C_Recvmsg --
++ ---------------
++
++ function C_Recvmsg
++ (S : C.int;
++ Msg : System.Address;
++ Flags : C.int) return System.CRTL.ssize_t
++ is
++ begin
++ return Syscall_Recvmsg (S, Msg, Flags);
++ end C_Recvmsg;
++
++ ---------------
++ -- C_Sendmsg --
++ ---------------
++
++ function C_Sendmsg
++ (S : C.int;
++ Msg : System.Address;
++ Flags : C.int) return System.CRTL.ssize_t
++ is
++ begin
++ return Syscall_Sendmsg (S, Msg, Flags);
++ end C_Sendmsg;
++
++ --------------
++ -- C_Sendto --
++ --------------
++
++ function C_Sendto
++ (S : C.int;
++ Msg : System.Address;
++ Len : C.int;
++ Flags : C.int;
++ To : System.Address;
++ Tolen : C.int) return C.int
++ is
++ begin
++ return Syscall_Sendto (S, Msg, Len, Flags, To, Tolen);
++ end C_Sendto;
++
++ --------------
++ -- C_Socket --
++ --------------
++
++ function C_Socket
++ (Domain : C.int;
++ Typ : C.int;
++ Protocol : C.int) return C.int
++ is
++ R : constant C.int := Syscall_Socket (Domain, Typ, Protocol);
++ begin
++ Disable_SIGPIPE (R);
++ return R;
++ end C_Socket;
++
++ --------------
++ -- Finalize --
++ --------------
++
++ procedure Finalize is
++ begin
++ null;
++ end Finalize;
++
++ -------------------------
++ -- Host_Error_Messages --
++ -------------------------
++
++ package body Host_Error_Messages is separate;
++
++ ----------------
++ -- Initialize --
++ ----------------
++
++ procedure Initialize is
++ begin
++ Disable_All_SIGPIPEs;
++ end Initialize;
++
++ --------------------
++ -- Signalling_Fds --
++ --------------------
++
++ package body Signalling_Fds is
++
++ -- In this default implementation, we use a C version of these
++ -- subprograms provided by socket.c.
++
++ function C_Create (Fds : not null access Fd_Pair) return C.int;
++ function C_Read (Rsig : C.int) return C.int;
++ function C_Write (Wsig : C.int) return C.int;
++ procedure C_Close (Sig : C.int);
++
++ pragma Import (C, C_Create, "__gnat_create_signalling_fds");
++ pragma Import (C, C_Read, "__gnat_read_signalling_fd");
++ pragma Import (C, C_Write, "__gnat_write_signalling_fd");
++ pragma Import (C, C_Close, "__gnat_close_signalling_fd");
++
++ function Create
++ (Fds : not null access Fd_Pair) return C.int renames C_Create;
++ function Read (Rsig : C.int) return C.int renames C_Read;
++ function Write (Wsig : C.int) return C.int renames C_Write;
++ procedure Close (Sig : C.int) renames C_Close;
++
++ end Signalling_Fds;
++
++ --------------------------
++ -- Socket_Error_Message --
++ --------------------------
++
++ function Socket_Error_Message (Errno : Integer) return String is separate;
++
++end GNAT.Sockets.Thin;
+--- gcc/ada/gnatchop.adb.orig
++++ gcc/ada/gnatchop.adb
+@@ -44,7 +44,7 @@
+ Config_File_Name : constant String_Access := new String'("gnat.adc");
+ -- The name of the file holding the GNAT configuration pragmas
+
+- Gcc : String_Access := new String'("gcc");
++ Gcc : String_Access := new String'("ada");
+ -- May be modified by switch --GCC=
+
+ Gcc_Set : Boolean := False;
+--- gcc/ada/gnatlink.adb.orig
++++ gcc/ada/gnatlink.adb
+@@ -136,7 +136,7 @@
+ -- This table collects the arguments to be passed to compile the binder
+ -- generated file.
+
+- Gcc : String_Access := Program_Name ("gcc", "gnatlink");
++ Gcc : String_Access := Program_Name ("ada", "gnatlink");
+
+ Read_Mode : constant String := "r" & ASCII.NUL;
+
+--- gcc/ada/make.adb.orig
++++ gcc/ada/make.adb
+@@ -667,7 +667,7 @@
+ -- Compiler, Binder & Linker Data and Subprograms --
+ ----------------------------------------------------
+
+- Gcc : String_Access := Program_Name ("gcc", "gnatmake");
++ Gcc : String_Access := Program_Name ("ada", "gnatmake");
+ Gnatbind : String_Access := Program_Name ("gnatbind", "gnatmake");
+ Gnatlink : String_Access := Program_Name ("gnatlink", "gnatmake");
+ -- Default compiler, binder, linker programs
+--- gcc/ada/mlib-prj.adb.orig
++++ gcc/ada/mlib-prj.adb
+@@ -335,6 +335,11 @@
+
+ Foreign_Sources : Boolean;
+
++ Rpath_Disabled : Boolean := False;
++ -- If -R is passed through the library options for the linker, it will
++ -- prevent the implemented libraries portion of the rpath switch from
++ -- being built, even if the linker is capable of supporting rpath.
++
+ Rpath : String_Access := null;
+ -- Allocated only if Path Option is supported
+
+@@ -768,7 +773,7 @@
+ Opts.Table (Opts.Last) :=
+ new String'("-L" & Name_Buffer (1 .. Name_Len));
+
+- if Path_Option /= null then
++ if not Rpath_Disabled and then Path_Option /= null then
+ Add_Rpath (Name_Buffer (1 .. Name_Len));
+ end if;
+
+@@ -1299,9 +1304,13 @@
+ Get_Name_String (Element.Value);
+
+ if Name_Len /= 0 then
+- Opts.Increment_Last;
+- Opts.Table (Opts.Last) :=
+- new String'(Name_Buffer (1 .. Name_Len));
++ if Name_Buffer (1 .. Name_Len) = "-R" then
++ Rpath_Disabled := True;
++ else
++ Opts.Increment_Last;
++ Opts.Table (Opts.Last) :=
++ new String'(Name_Buffer (1 .. Name_Len));
++ end if;
+ end if;
+
+ Current := Element.Next;
+--- gcc/ada/mlib-utl.adb.orig
++++ gcc/ada/mlib-utl.adb
+@@ -446,7 +446,7 @@
+ if Driver_Name = No_Name then
+ if Gcc_Exec = null then
+ if Gcc_Name = null then
+- Gcc_Name := Osint.Program_Name ("gcc", "gnatmake");
++ Gcc_Name := Osint.Program_Name ("ada", "gnatmake");
+ end if;
+
+ Gcc_Exec := Locate_Exec_On_Path (Gcc_Name.all);
+--- gcc/ada/prj-makr.adb.orig
++++ gcc/ada/prj-makr.adb
+@@ -115,7 +115,7 @@
+
+ procedure Dup2 (Old_Fd, New_Fd : File_Descriptor);
+
+- Gcc : constant String := "gcc";
++ Gcc : constant String := "ada";
+ Gcc_Path : String_Access := null;
+
+ Non_Empty_Node : constant Project_Node_Id := 1;
+--- /dev/null
++++ gcc/ada/s-trasym-bsd.adb
+@@ -0,0 +1,151 @@
++------------------------------------------------------------------------------
++-- --
++-- GNAT RUN-TIME COMPONENTS --
++-- --
++-- S Y S T E M . T R A C E B A C K . S Y M B O L I C --
++-- --
++-- B o d y --
++-- --
++-- Copyright (C) 1999-2009, AdaCore --
++-- --
++-- GNAT is free software; you can redistribute it and/or modify it under --
++-- terms of the GNU General Public License as published by the Free Soft- --
++-- ware Foundation; either version 2, or (at your option) any later ver- --
++-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
++-- OUT 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 distributed with GNAT; see file COPYING. If not, write --
++-- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, --
++-- Boston, MA 02110-1301, USA. --
++-- --
++-- As a special exception, if other files instantiate generics from this --
++-- unit, or you link this unit with other files to produce an executable, --
++-- this unit does not by itself cause the resulting executable to be --
++-- covered by the GNU General Public License. This exception does not --
++-- however invalidate any other reasons why the executable file might be --
++-- covered by the GNU Public License. --
++-- --
++-- GNAT was originally developed by the GNAT team at New York University. --
++-- Extensive contributions were provided by Ada Core Technologies Inc. --
++-- --
++------------------------------------------------------------------------------
++
++-- Run-time symbolic traceback support
++-- This file is based on the work by Juergen Pfiefer which is still used
++-- today to provide symbolic traceback support for gnu/kFreeBSD.
++-- Incorporated in GNAT-AUX by John Marino <http://www.dragonlace.net>
++
++with System.Soft_Links;
++with Ada.Exceptions.Traceback; use Ada.Exceptions.Traceback;
++
++package body System.Traceback.Symbolic is
++
++ package TSL renames System.Soft_Links;
++
++ -- To perform the raw addresses to symbolic form translation we rely on a
++ -- libaddr2line symbolizer which examines debug info from a provided
++ -- executable file name, and an absolute path is needed to ensure the file
++ -- is always found. This is "__gnat_locate_exec_on_path (gnat_argv [0])"
++ -- for our executable file, a fairly heavy operation so we cache the
++ -- result.
++
++ Exename : System.Address;
++ -- Pointer to the name of the executable file to be used on all
++ -- invocations of the libaddr2line symbolization service.
++
++ Exename_Resolved : Boolean := False;
++ -- Flag to indicate whether we have performed the executable file name
++ -- resolution already. Relying on a not null Exename for this purpose
++ -- would be potentially inefficient as this is what we will get if the
++ -- resolution attempt fails.
++
++ ------------------------
++ -- Symbolic_Traceback --
++ ------------------------
++
++ function Symbolic_Traceback (Traceback : Tracebacks_Array) return String is
++
++ procedure convert_addresses
++ (filename : System.Address;
++ addrs : System.Address;
++ n_addrs : Integer;
++ buf : System.Address;
++ len : System.Address);
++ pragma Import (C, convert_addresses, "convert_addresses");
++ -- This is the procedure version of the Ada-aware addr2line. It places
++ -- in BUF a string representing the symbolic translation of the N_ADDRS
++ -- raw addresses provided in ADDRS, looked up in debug information from
++ -- FILENAME. LEN points to an integer which contains the size of the
++ -- BUF buffer at input and the result length at output.
++ --
++ -- Note that this procedure is *not* thread-safe.
++
++ type Argv_Array is array (0 .. 0) of System.Address;
++ gnat_argv : access Argv_Array;
++ pragma Import (C, gnat_argv, "gnat_argv");
++
++ function locate_exec_on_path
++ (c_exename : System.Address) return System.Address;
++ pragma Import (C, locate_exec_on_path, "__gnat_locate_exec_on_path");
++
++ B_Size : constant Integer := 256 * Traceback'Length;
++ Len : Integer := B_Size;
++ Res : String (1 .. B_Size);
++
++ use type System.Address;
++
++ begin
++ -- The symbolic translation of an empty set of addresses is an empty
++ -- string.
++
++ if Traceback'Length = 0 then
++ return "";
++ end if;
++
++ -- If our input set of raw addresses is not empty, resort to the
++ -- libaddr2line service to symbolize it all.
++
++ -- Compute, cache and provide the absolute path to our executable file
++ -- name as the binary file where the relevant debug information is to be
++ -- found. If the executable file name resolution fails, we have no
++ -- sensible basis to invoke the symbolizer at all.
++
++ -- Protect all this against concurrent accesses explicitly, as the
++ -- underlying services are potentially thread unsafe.
++
++ TSL.Lock_Task.all;
++
++ if not Exename_Resolved then
++ Exename := locate_exec_on_path (gnat_argv (0));
++ Exename_Resolved := True;
++ end if;
++
++ if Exename /= System.Null_Address then
++ Len := Res'Length;
++ convert_addresses
++ (Exename, Traceback'Address, Traceback'Length,
++ Res (1)'Address, Len'Address);
++ end if;
++
++ TSL.Unlock_Task.all;
++
++ -- Return what the addr2line symbolizer has produced if we have called
++ -- it (the executable name resolution succeeded), or an empty string
++ -- otherwise.
++
++ if Exename /= System.Null_Address then
++ return Res (1 .. Len);
++ else
++ return "";
++ end if;
++
++ end Symbolic_Traceback;
++
++ function Symbolic_Traceback
++ (E : Ada.Exceptions.Exception_Occurrence) return String is
++ begin
++ return Symbolic_Traceback (Tracebacks (E));
++ end Symbolic_Traceback;
++
++end System.Traceback.Symbolic;
+--- gcc/ada/terminals.c.orig
++++ gcc/ada/terminals.c
+@@ -32,7 +32,7 @@
+ /* First all usupported platforms. Add stubs for exported routines. */
+
+ #if defined (VMS) || defined (__vxworks) || defined (__Lynx__) \
+- || defined (__ANDROID__) || defined (__PikeOS__)
++ || defined (__PikeOS__)
+
+ #define ATTRIBUTE_UNUSED __attribute__((unused))
+
+@@ -1059,7 +1059,7 @@
+ || defined (__OpenBSD__) \
+ || defined (__NetBSD__) \
+ || defined (__DragonFly__)
+-# define BSD
++# define FREEBSD
+ #endif
+
+ /* Include every system header we need */
+@@ -1070,8 +1070,8 @@
+
+ /* On some system termio is either absent or including it will disable termios
+ (HP-UX) */
+-#if !defined (__hpux__) && !defined (BSD) && !defined (__APPLE__) \
+- && !defined (__rtems__)
++#if ! defined (__hpux__) && ! defined (FREEBSD) && \
++ ! defined (__APPLE__) && ! defined(__rtems__)
+ # include <termio.h>
+ #endif
+
+@@ -1083,10 +1083,10 @@
+ #include <sys/types.h>
+ #include <sys/wait.h>
+ #include <unistd.h>
+-#if defined (__sun__)
++#if defined (sun)
+ # include <sys/stropts.h>
+ #endif
+-#if defined (BSD) || defined (__sun__)
++#if defined (FREEBSD) || defined (sun)
+ # include <sys/signal.h>
+ #endif
+ #if defined (__hpux__)
+@@ -1094,11 +1094,15 @@
+ # include <sys/stropts.h>
+ #endif
+
++#ifdef __ANDROID__
++#define CDISABLE _PC_VDISABLE
++#else
+ #define CDISABLE _POSIX_VDISABLE
++#endif
+
+ /* On HP-UX and Sun system, there is a bzero function but with a different
+ signature. Use memset instead */
+-#if defined (__hpux__) || defined (__sun__) || defined (_AIX)
++#if defined (__hpux__) || defined (sun) || defined (_AIX)
+ # define bzero(s,n) memset (s,0,n)
+ #endif
+
+@@ -1116,11 +1120,11 @@
+ */
+
+ /* Configurable part */
+-#if defined (__APPLE__) || defined (BSD)
++#if defined (__APPLE__) || defined (FREEBSD)
+ #define USE_OPENPTY
+-#elif defined (__linux__)
++#elif defined (linux)
+ #define USE_GETPT
+-#elif defined (__sun__)
++#elif defined (sun)
+ #define USE_CLONE_DEVICE "/dev/ptmx"
+ #elif defined (_AIX)
+ #define USE_CLONE_DEVICE "/dev/ptc"
+@@ -1406,7 +1410,7 @@
+ desc->slave_fd = open (desc->slave_name, O_RDWR, 0);
+ #endif
+
+-#if defined (__sun__) || defined (__hpux__)
++#if defined (sun) || defined (__hpux__)
+ /* On systems such as Solaris we are using stream. We need to push the right
+ "modules" in order to get the expected terminal behaviors. Otherwise
+ functionalities such as termios are not available. */
+--- /dev/null
++++ gcc/ada/traceback_symbolic.c
+@@ -0,0 +1,201 @@
++/*
++ Copyright (C) 1999 by Juergen Pfeifer <juergen.pfeifer@gmx.net>
++ Ada for Linux Team (ALT)
++ Heavily modified by John Marino <http://www.dragonlace.net>
++
++ Permission is hereby granted, free of charge, to any person obtaining a
++ copy of this software and associated documentation files (the
++ "Software"), to deal in the Software without restriction, including
++ without limitation the rights to use, copy, modify, merge, publish,
++ distribute, distribute with modifications, sublicense, and/or sell
++ copies of the Software, and to permit persons to whom the Software is
++ furnished to do so, subject to the following conditions:
++
++ The above copyright notice and this permission notice shall be included
++ in all copies or substantial portions of the Software.
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++ IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
++ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
++ OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
++ THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++
++ Except as contained in this notice, the name(s) of the above copyright
++ holders shall not be used in advertising or otherwise to promote the
++ sale, use or other dealings in this Software without prior written
++ authorization.
++*/
++
++#ifdef IS_CROSS
++
++
++/*
++ * Running addr2line doesn't make sense for cross-compiled objects.
++ * Create a dummy function to satisfy g-trasym.o
++ */
++
++void
++convert_addresses (const char *file_name ATTRIBUTE_UNUSED,
++ void *addrs ATTRIBUTE_UNUSED,
++ int n_addr ATTRIBUTE_UNUSED,
++ void *buf ATTRIBUTE_UNUSED,
++ int *len ATTRIBUTE_UNUSED)
++{
++ *len = 0;
++}
++
++#else
++
++
++/*
++ * use the external program /usr/bin/addr2line to convert addresses
++ * into file names and line numbers
++ */
++
++#include <sys/types.h>
++#include <stdlib.h>
++#include <unistd.h>
++#include <string.h>
++#include <signal.h>
++
++#define CLOSE_SENDPIPE close(sendpipe[0]); close(sendpipe[1])
++#define CLOSE_READPIPE close(readpipe[0]); close(readpipe[1])
++#define DUP2CLOSE(oldfd, newfd) dup2(oldfd, newfd); close(oldfd);
++#define RESTSIG sigaction(SIGPIPE,&oact,NULL)
++
++#define MAX_LINE 1024
++#define PARENT_READ readpipe[0]
++#define CHILD_WRITE readpipe[1]
++#define CHILD_READ sendpipe[0]
++#define PARENT_WRITE sendpipe[1]
++
++#if defined (__sun__)
++#define ADDR2LINE_PROG "/usr/gnu/bin/addr2line"
++#else
++#define ADDR2LINE_PROG "/usr/bin/addr2line"
++#endif
++
++void
++convert_addresses (const char *file_name,
++ void *addrs,
++ int n_addr,
++ void *buf,
++ int *len)
++{
++ int max_len = *len;
++ pid_t childpid;
++
++ struct sigaction act, oact;
++
++ int sendpipe[2] = {-1,-1}, /* parent -> child */
++ readpipe[2] = {-1,-1}; /* parent <- child */
++
++ *len = 0;
++ act.sa_handler = SIG_IGN;
++ sigemptyset(&act.sa_mask);
++ act.sa_flags = 0;
++ if (sigaction(SIGPIPE,&act,&oact) < 0)
++ return;
++
++ if (pipe(sendpipe) < 0) { RESTSIG; return; }
++ if (pipe(readpipe) < 0) { CLOSE_SENDPIPE; RESTSIG; return; }
++ if ((childpid = fork()) < 0) {
++ CLOSE_READPIPE;
++ CLOSE_SENDPIPE;
++ RESTSIG;
++ return;
++ }
++
++ if (childpid == 0) { /* child process */
++ close(PARENT_WRITE);
++ close(PARENT_READ);
++ if ((CHILD_READ != STDIN_FILENO) && (CHILD_WRITE != STDOUT_FILENO)) {
++ if ((CHILD_READ == STDOUT_FILENO) && (CHILD_WRITE == STDIN_FILENO)) {
++ const int temp_fd = dup(CHILD_WRITE);
++ close (CHILD_WRITE);
++ DUP2CLOSE (CHILD_READ, STDIN_FILENO);
++ DUP2CLOSE (temp_fd, STDOUT_FILENO);
++ }
++ else if ((CHILD_READ == STDIN_FILENO) && (CHILD_WRITE > 1)) {
++ DUP2CLOSE (CHILD_WRITE, STDOUT_FILENO);
++ }
++ else if ((CHILD_READ > 1) && (CHILD_WRITE == STDOUT_FILENO)) {
++ DUP2CLOSE (CHILD_READ, STDIN_FILENO);
++ }
++ else if ((CHILD_READ > 1) && (CHILD_WRITE == STDIN_FILENO)) {
++ DUP2CLOSE (CHILD_WRITE, STDOUT_FILENO);
++ DUP2CLOSE (CHILD_READ, STDIN_FILENO);
++ }
++ else {
++ /* CHILD_READ >= 1 and CHILD_WRITE > 1 */
++ DUP2CLOSE (CHILD_READ, STDIN_FILENO);
++ DUP2CLOSE (CHILD_WRITE, STDOUT_FILENO);
++ }
++ }
++ /* As pointed out by Florian Weimer to JP, it is a security threat to call
++ the script with a user defined environment and using the path. That
++ would be Trojans pleasure. Therefore the absolute path to addr2line
++ and an empty environment is used. That should be safe.
++ */
++ char *const argv[] = { "addr2line",
++ "-e", file_name,
++ "--demangle=gnat",
++ "--functions",
++ "--basenames",
++ NULL };
++ char *const envp[] = { NULL };
++ if (execve(ADDR2LINE_PROG, argv, envp) < 0) {
++ close (CHILD_WRITE);
++ close (CHILD_READ);
++ RESTSIG;
++ exit (1);
++ }
++ }
++
++ /* Below this line is parent process */
++ int i, n;
++ char hex[16];
++ char line[MAX_LINE + 1];
++ char *p;
++ char *s = buf;
++ long *trace_address = addrs;
++
++ close(CHILD_WRITE);
++ close(CHILD_READ);
++
++ for(i=0; i < n_addr; i++) {
++ snprintf(hex,sizeof(hex),"%#lx\n",*trace_address);
++ write(PARENT_WRITE,hex,strlen(hex));
++ n = read(PARENT_READ,line,MAX_LINE);
++ if (n<=0)
++ break;
++
++ line[n]=0;
++ /* We have approx. 16 additional chars for "%#lx in " clause.
++ We use this info to prevent a buffer overrun. */
++ if (n + 16 + (*len) > max_len)
++ break;
++
++ p = strchr(line,'\n');
++ if (p) {
++ if (*(p+1)) {
++ *p = 0;
++ *len += snprintf(s, (max_len - (*len)), "%#lx in %s at %s",
++ *trace_address, line, p+1);
++ }
++ else {
++ *len += snprintf(s, (max_len - (*len)), "%#lx at %s",
++ *trace_address, line);
++ }
++ s = buf + (*len);
++ }
++ trace_address += 1;
++ }
++ close (PARENT_WRITE);
++ close (PARENT_READ);
++ RESTSIG;
++}
++
++#endif
+--- gcc/ada/gcc-interface/Makefile.in.orig
++++ gcc/ada/gcc-interface/Makefile.in
+@@ -1186,6 +1186,7 @@
+ ifeq ($(strip $(filter-out arm% linux-androideabi,$(target_cpu) $(target_os))),)
+ LIBGNAT_TARGET_PAIRS = \
+ a-intnam.ads<a-intnam-linux.ads \
++ g-socthi.adb<g-socthi-bsd.adb \
+ s-inmaop.adb<s-inmaop-posix.adb \
+ s-intman.adb<s-intman-android.adb \
+ s-linux.ads<s-linux-android.ads \
+@@ -1293,6 +1294,7 @@
+ a-intnam.ads<a-intnam-solaris.ads \
+ s-inmaop.adb<s-inmaop-posix.adb \
+ s-intman.adb<s-intman-solaris.adb \
++ s-trasym.adb<s-trasym-bsd.adb \
+ s-mudido.adb<s-mudido-affinity.adb \
+ s-osinte.adb<s-osinte-solaris.adb \
+ s-osinte.ads<s-osinte-solaris.ads \
+@@ -1336,6 +1338,8 @@
+ EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o
+
+ EH_MECHANISM=-gcc
++ EXTRA_LIBGNAT_SRCS+= traceback_symbolic.c
++ EXTRA_LIBGNAT_OBJS+= traceback_symbolic.o
+ THREADSLIB = -lposix4 -lthread
+ MISCLIB = -lposix4 -lnsl -lsocket
+ SO_OPTS = -Wl,-h,
+@@ -1406,6 +1410,39 @@
+ LIBRARY_VERSION := $(LIB_VERSION)
+ endif
+
++# x86 android
++ifeq ($(strip $(filter-out %86 linux-android,$(target_cpu) $(target_os))),)
++ LIBGNAT_TARGET_PAIRS = \
++ a-intnam.ads<a-intnam-linux.ads \
++ g-socthi.adb<g-socthi-bsd.adb \
++ s-inmaop.adb<s-inmaop-posix.adb \
++ s-intman.adb<s-intman-posix.adb \
++ s-linux.ads<s-linux-android.ads \
++ s-osinte.adb<s-osinte-android.adb \
++ s-osinte.ads<s-osinte-android.ads \
++ s-osprim.adb<s-osprim-posix.adb \
++ s-taprop.adb<s-taprop-posix.adb \
++ s-taspri.ads<s-taspri-posix.ads \
++ s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
++ $(ATOMICS_TARGET_PAIRS) \
++ $(X86_TARGET_PAIRS) \
++ system.ads<system-linux-x86.ads
++
++ TOOLS_TARGET_PAIRS = \
++ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
++ indepsw.adb<indepsw-gnu.adb
++
++ EXTRA_LIBGNAT_OBJS=
++ EXTRA_GNATRTL_TASKING_OBJS=s-linux.o
++ EXTRA_GNATRTL_NONTASKING_OBJS=
++ EH_MECHANISM=-gcc
++ THREADSLIB=
++ MISCLIB=
++ GMEM_LIB=
++ GNATLIB_SHARED = gnatlib-shared-dual
++ LIBRARY_VERSION := $(LIB_VERSION)
++endif
++
+ # x86 kfreebsd
+ ifeq ($(strip $(filter-out %86 kfreebsd%,$(target_cpu) $(target_os))),)
+ LIBGNAT_TARGET_PAIRS = \
+@@ -1470,6 +1507,8 @@
+ ifeq ($(strip $(filter-out %86 freebsd%,$(target_cpu) $(target_os))),)
+ LIBGNAT_TARGET_PAIRS = \
+ a-intnam.ads<a-intnam-freebsd.ads \
++ g-socthi.adb<g-socthi-bsd.adb \
++ s-trasym.adb<s-trasym-bsd.adb \
+ s-inmaop.adb<s-inmaop-posix.adb \
+ s-intman.adb<s-intman-posix.adb \
+ s-mudido.adb<s-mudido-affinity.adb \
+@@ -1487,6 +1526,8 @@
+ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb
+ GNATLIB_SHARED = gnatlib-shared-dual
+
++ EXTRA_LIBGNAT_SRCS+= traceback_symbolic.c
++ EXTRA_LIBGNAT_OBJS+= traceback_symbolic.o
+ EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o
+
+ EH_MECHANISM=-gcc
+@@ -1500,6 +1541,8 @@
+ ifeq ($(strip $(filter-out %86_64 freebsd%,$(target_cpu) $(target_os))),)
+ LIBGNAT_TARGET_PAIRS = \
+ a-intnam.ads<a-intnam-freebsd.ads \
++ g-socthi.adb<g-socthi-bsd.adb \
++ s-trasym.adb<s-trasym-bsd.adb \
+ s-inmaop.adb<s-inmaop-posix.adb \
+ s-intman.adb<s-intman-posix.adb \
+ s-mudido.adb<s-mudido-affinity.adb \
+@@ -1517,6 +1560,8 @@
+ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb
+ GNATLIB_SHARED = gnatlib-shared-dual
+
++ EXTRA_LIBGNAT_SRCS+= traceback_symbolic.c
++ EXTRA_LIBGNAT_OBJS+= traceback_symbolic.o
+ EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o
+
+ EH_MECHANISM=-gcc
+@@ -1530,6 +1575,8 @@
+ ifeq ($(strip $(filter-out %86_64 dragonfly%,$(target_cpu) $(target_os))),)
+ LIBGNAT_TARGET_PAIRS = \
+ a-intnam.ads<a-intnam-dragonfly.ads \
++ g-socthi.adb<g-socthi-bsd.adb \
++ s-trasym.adb<s-trasym-bsd.adb \
+ s-inmaop.adb<s-inmaop-posix.adb \
+ s-intman.adb<s-intman-posix.adb \
+ s-mudido.adb<s-mudido-affinity.adb \
+@@ -1547,6 +1594,8 @@
+ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb
+ GNATLIB_SHARED = gnatlib-shared-dual
+
++ EXTRA_LIBGNAT_SRCS+= traceback_symbolic.c
++ EXTRA_LIBGNAT_OBJS+= traceback_symbolic.o
+ EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o
+
+ EH_MECHANISM=-gcc
+--- gcc/ada/gcc-interface/Make-lang.in.orig
++++ gcc/ada/gcc-interface/Make-lang.in
+@@ -589,7 +589,7 @@
+ ada/widechar.o
+
+ # Language-independent object files.
+-ADA_BACKEND = $(BACKEND) attribs.o
++ADA_BACKEND = $(BACKEND2) attribs.o
+
+ # List of target dependent sources, overridden below as necessary
+ TARGET_ADA_SRCS =
diff --git a/lang/gcc6-aux/files/diff-ada-testsuite b/lang/gcc6-aux/files/diff-ada-testsuite
new file mode 100644
index 000000000000..1e5d47939f39
--- /dev/null
+++ b/lang/gcc6-aux/files/diff-ada-testsuite
@@ -0,0 +1,705 @@
+--- gcc/testsuite/ada/acats/run_acats.orig
++++ gcc/testsuite/ada/acats/run_acats
+@@ -5,20 +5,6 @@
+ exit 1
+ fi
+
+-# Provide which replacement.
+-#
+-# type -p is missing from Solaris 2 /bin/sh and /bin/ksh (ksh88), but both
+-# ksh93 and bash have it.
+-# type output format differs between ksh88 and ksh93, so avoid it if
+-# type -p is present. Unfortunately, HP-UX /bin/sh ignores -p with type.
+-# Fall back to whence which ksh88 and ksh93 provide, but bash does not.
+-
+-which () {
+- path=`type -p $* 2>/dev/null` && { echo $path | awk '{print $NF}'; return 0; }
+- path=`type $* 2>/dev/null` && { echo $path | awk '{print $NF}'; return 0; }
+- path=`whence $* 2>/dev/null` && { echo $path; return 0; }
+- return 1
+-}
+
+ # Set up environment to use the Ada compiler from the object tree
+
+--- gcc/testsuite/ada/acats/run_all.sh.orig
++++ gcc/testsuite/ada/acats/run_all.sh
+@@ -18,21 +18,6 @@
+
+ # End of customization section.
+
+-# Perform arithmetic evaluation on the ARGs, and store the result in the
+-# global $as_val. Take advantage of shells that can avoid forks. The arguments
+-# must be portable across $(()) and expr.
+-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+- eval 'as_fn_arith ()
+- {
+- as_val=$(( $* ))
+- }'
+-else
+- as_fn_arith ()
+- {
+- as_val=`expr "$@" || test $? -eq 1`
+- }
+-fi # as_fn_arith
+-
+ display_noeol () {
+ printf "$@"
+ printf "$@" >> $dir/acats.sum
+@@ -50,6 +35,14 @@
+ echo "$@" >> $dir/acats.log
+ }
+
++inform () {
++ printf "%04d %7s" $1 $2
++}
++
++disinform () {
++ printf "\r"
++}
++
+ dir=`${PWDCMD-pwd}`
+
+ if [ "$testdir" = "" ]; then
+@@ -105,18 +98,6 @@
+ gnatls -v >> $dir/acats.log
+ display ""
+
+-if [ -n "$GCC_RUNTEST_PARALLELIZE_DIR" ]; then
+- dir_support=$dir/../acats/support
+-
+- rm -rf $dir/run
+- mv $dir/tests $dir/tests.$$ 2> /dev/null
+- rm -rf $dir/tests.$$ &
+- mkdir -p $dir/run
+-
+- cp -pr $dir/../acats/tests $dir/
+-else
+- dir_support=$dir/support
+-
+ display " === acats support ==="
+ display_noeol "Generating support files..."
+
+@@ -213,9 +194,6 @@
+
+ display " done."
+ display ""
+-
+-fi
+-
+ display " === acats tests ==="
+
+ if [ $# -eq 0 ]; then
+@@ -227,14 +205,20 @@
+ glob_countn=0
+ glob_countok=0
+ glob_countu=0
+-par_count=0
+-par_countm=0
+-par_last=
++countdown=0
+
+ for chapter in $chapters; do
+- # Used to generate support once and finish after that.
+- [ "$chapter" = "NONE" ] && continue
++ if [ -d $dir/tests/$chapter ]; then
++ cd $dir/tests/$chapter
++ ls *.a *.ada *.adt *.am *.dep 2> /dev/null | sed -e 's/\(.*\)\..*/\1/g' | \
++ cut -c1-7 | sort | uniq | comm -23 - $dir/support/norun.lst \
++ > $dir/tests/$chapter/${chapter}.lst
++ countn=`wc -l < $dir/tests/$chapter/${chapter}.lst`
++ countdown=`expr $countdown + $countn`
++ fi
++done
+
++for chapter in $chapters; do
+ display Running chapter $chapter ...
+
+ if [ ! -d $dir/tests/$chapter ]; then
+@@ -243,45 +227,11 @@
+ continue
+ fi
+
+- cd $dir/tests/$chapter
+- ls *.a *.ada *.adt *.am *.dep 2> /dev/null | sed -e 's/\(.*\)\..*/\1/g' | \
+- cut -c1-7 | sort | uniq | comm -23 - $dir_support/norun.lst \
+- > $dir/tests/$chapter/${chapter}.lst
+ countn=`wc -l < $dir/tests/$chapter/${chapter}.lst`
+- as_fn_arith $glob_countn + $countn
+- glob_countn=$as_val
++ glob_countn=`expr $glob_countn + $countn`
++ counti=0
+ for i in `cat $dir/tests/$chapter/${chapter}.lst`; do
+-
+- # If running multiple run_all.sh jobs in parallel, decide
+- # if we should run this test in the current instance.
+- if [ -n "$GCC_RUNTEST_PARALLELIZE_DIR" ]; then
+- case "$i" in
+- # Ugh, some tests have inter-test dependencies, those
+- # tests have to be scheduled on the same parallel instance
+- # as previous test.
+- ce2108f | ce2108h | ce3112d) ;;
+- # All others can be hopefully scheduled freely.
+- *)
+- as_fn_arith $par_countm + 1
+- par_countm=$as_val
+- [ $par_countm -eq 10 ] && par_countm=0
+- if [ $par_countm -eq 1 ]; then
+- as_fn_arith $par_count + 1
+- par_count=$as_val
+- if mkdir $GCC_RUNTEST_PARALLELIZE_DIR/$par_count 2>/dev/null; then
+- par_last=1
+- else
+- par_last=
+- fi
+- fi;;
+- esac
+- if [ -z "$par_last" ]; then
+- as_fn_arith $glob_countn - 1
+- glob_countn=$as_val
+- continue
+- fi
+- fi
+-
++ counti=`expr $counti + 1`
+ extraflags="-gnat95"
+ grep $i $testdir/overflow.lst > /dev/null 2>&1
+ if [ $? -eq 0 ]; then
+@@ -299,10 +249,13 @@
+ if [ $? -eq 0 ]; then
+ extraflags="$extraflags -fstack-check"
+ fi
++ inform $countdown $i
++ countdown=`expr $countdown - 1`
+ test=$dir/tests/$chapter/$i
+ mkdir $test && cd $test >> $dir/acats.log 2>&1
+
+ if [ $? -ne 0 ]; then
++ disinform
+ display "FAIL: $i"
+ failed="${failed}${i} "
+ clean_dir
+@@ -320,19 +273,22 @@
+ echo "BUILD $main" >> $dir/acats.log
+ EXTERNAL_OBJECTS=""
+ case $i in
+- cxb30*) EXTERNAL_OBJECTS="$dir_support/cxb30040.o $dir_support/cxb30060.o $dir_support/cxb30130.o $dir_support/cxb30131.o";;
++ cxb30*) EXTERNAL_OBJECTS="$dir/support/cxb30040.o $dir/support/cxb30060.o $dir/support/cxb30130.o $dir/support/cxb30131.o";;
+ ca1020e) rm -f ca1020e_func1.adb ca1020e_func2.adb ca1020e_proc1.adb ca1020e_proc2.adb > /dev/null 2>&1;;
+ ca14028) rm -f ca14028_func2.ads ca14028_func3.ads ca14028_proc1.ads ca14028_proc3.ads > /dev/null 2>&1;;
++ cxh1001) extraflags="-a -f"; echo "pragma Normalize_Scalars;" > gnat.adc
+ esac
+ if [ "$main" = "" ]; then
++ disinform
+ display "FAIL: $i"
+ failed="${failed}${i} "
+ clean_dir
+ continue
+ fi
+
+- target_gnatmake $extraflags -I$dir_support $main >> $dir/acats.log 2>&1
++ target_gnatmake $extraflags -I$dir/support $main >> $dir/acats.log 2>&1
+ if [ $? -ne 0 ]; then
++ disinform
+ display "FAIL: $i"
+ failed="${failed}${i} "
+ clean_dir
+@@ -347,6 +303,7 @@
+ target_run $dir/tests/$chapter/$i/$binmain > $dir/tests/$chapter/$i/${i}.log 2>&1
+ cd $dir/tests/$chapter/$i
+ cat ${i}.log >> $dir/acats.log
++ disinform
+ egrep -e '(==== |\+\+\+\+ |\!\!\!\! )' ${i}.log > /dev/null 2>&1
+ if [ $? -ne 0 ]; then
+ grep 'tasking not implemented' ${i}.log > /dev/null 2>&1
+@@ -356,15 +313,12 @@
+ failed="${failed}${i} "
+ else
+ log "UNSUPPORTED: $i"
+- as_fn_arith $glob_countn - 1
+- glob_countn=$as_val
+- as_fn_arith $glob_countu + 1
+- glob_countu=$as_val
++ glob_countn=`expr $glob_countn - 1`
++ glob_countu=`expr $glob_countu + 1`
+ fi
+ else
+ log "PASS: $i"
+- as_fn_arith $glob_countok + 1
+- glob_countok=$as_val
++ glob_countok=`expr $glob_countok + 1`
+ fi
+ clean_dir
+ done
+--- /dev/null
++++ gcc/testsuite/ada/acats/run_remote.sh
+@@ -0,0 +1,412 @@
++#!/bin/sh
++# Run ACATS with the GNU Ada compiler
++
++# The following functions are to be customized if you run in cross
++# environment or want to change compilation flags. Note that for
++# tests requiring checks not turned on by default, this script
++# automatically adds the needed flags to pass (ie: -gnato or -gnatE).
++
++# gccflags="-O3 -fomit-frame-pointer -funroll-all-loops -finline-functions"
++# gnatflags="-gnatN"
++
++gccflags="-O2"
++gnatflags="-gnatws"
++tabtarget="/data/local/testsuite"
++STRIP="@REMOTE_TARGET@-strip"
++
++target_run () {
++ # Run on rooted tablet (port 22 vs port 2222)
++ BN=`basename $*`
++ $STRIP_FOR_TARGET $*
++ /usr/bin/scp -qp $* root@tablet:$tabtarget/
++ /usr/bin/ssh -q tablet $tabtarget/$BN
++}
++
++target_cmd () {
++ /usr/bin/ssh -q tablet "$1"
++}
++
++# End of customization section.
++
++display_noeol () {
++ printf "$@"
++ printf "$@" >> $dir/acats.sum
++ printf "$@" >> $dir/acats.log
++}
++
++display () {
++ echo "$@"
++ echo "$@" >> $dir/acats.sum
++ echo "$@" >> $dir/acats.log
++}
++
++log () {
++ echo "$@" >> $dir/acats.sum
++ echo "$@" >> $dir/acats.log
++}
++
++inform () {
++ printf "%04d %7s" $1 $2
++}
++
++disinform () {
++ printf "\r"
++}
++
++dir=`${PWDCMD-pwd}`
++
++if [ "$testdir" = "" ]; then
++ echo You must use make check or make check-ada
++ exit 1
++fi
++
++if [ "$dir" = "$testdir" ]; then
++ echo "error: srcdir must be different than objdir, exiting."
++ exit 1
++fi
++
++target_gnatmake () {
++ echo gnatmake-cross --GCC=\"$GCC\" $gnatflags $gccflags $* -largs $EXTERNAL_OBJECTS --GCC=\"$GCC\" -fPIE -pie
++ gnatmake-cross --GCC="$GCC" $gnatflags $gccflags $* -largs $EXTERNAL_OBJECTS --GCC="$GCC" -fPIE -pie
++}
++
++target_gcc () {
++ $GCC $gccflags $*
++}
++
++clean_dir () {
++ rm -f "$binmain" *.o *.ali > /dev/null 2>&1
++}
++
++find_main () {
++ ls ${i}?.adb > ${i}.lst 2> /dev/null
++ ls ${i}*m.adb >> ${i}.lst 2> /dev/null
++ ls ${i}.adb >> ${i}.lst 2> /dev/null
++ main=`tail -1 ${i}.lst`
++}
++
++split_testid () {
++ local mysplit=`echo $1 | awk -F/ '{print "section=" $1 "; TN=" $2 "; prog=" $3 ";"}'`
++ eval ${mysplit}
++}
++
++EXTERNAL_OBJECTS=""
++# Global variable to communicate external objects to link with.
++
++rm -f $dir/acats.sum $dir/acats.log $dir/transfer.lst
++
++display "Test Run By $USER on `date`"
++
++display " === acats configuration ==="
++
++target=`$GCC -dumpmachine`
++
++display target gcc is $GCC
++display `$GCC -v 2>&1`
++display host=`gcc -dumpmachine`
++display target=$target
++display `type gnatmake-cross`
++gnatls-cross -v >> $dir/acats.log
++display ""
++
++# Let's be tidy and clear off the remote device first
++target_cmd "cd ${tabtarget}; rm logs/*; rmdir logs; rm *"
++
++display " === acats support ==="
++display_noeol "Generating support files..."
++
++rm -rf $dir/support
++mkdir -p $dir/support
++cd $dir/support
++
++cp $testdir/support/*.ada $testdir/support/*.a $testdir/support/*.tst $dir/support
++
++# Find out the size in bit of an address on the target
++target_gnatmake $testdir/support/impbit.adb >> $dir/acats.log 2>&1
++target_run $dir/support/impbit > $dir/support/impbit.out 2>&1
++target_bit=`cat $dir/support/impbit.out`
++echo target_bit="$target_bit" >> $dir/acats.log
++
++# Find out a suitable asm statement
++# Adapted from configure.ac gcc_cv_as_dwarf2_debug_line
++case "$target" in
++ ia64*-*-* | s390*-*-*)
++ target_insn="nop 0"
++ ;;
++ mmix-*-*)
++ target_insn="swym 0"
++ ;;
++ *)
++ target_insn="nop"
++ ;;
++esac
++echo target_insn="$target_insn" >> $dir/acats.log
++
++sed -e "s,ACATS4GNATDIR,$dir,g" \
++ < $testdir/support/impdef.a > $dir/support/impdef.a
++sed -e "s,ACATS4GNATDIR,$dir,g" \
++ -e "s,ACATS4GNATBIT,$target_bit,g" \
++ -e "s,ACATS4GNATINSN,$target_insn,g" \
++ < $testdir/support/macro.dfs > $dir/support/MACRO.DFS
++sed -e "s,ACATS4GNATDIR,$dir,g" \
++ < $testdir/support/tsttests.dat > $dir/support/TSTTESTS.DAT
++
++cp $testdir/tests/cd/*.c $dir/support
++cp $testdir/tests/cxb/*.c $dir/support
++grep -v '^#' $testdir/norun.lst | sort > $dir/support/norun.lst
++
++rm -rf $dir/run
++mv $dir/tests $dir/tests.$$ 2> /dev/null
++rm -rf $dir/tests.$$ &
++mkdir -p $dir/run
++
++cp -pr $testdir/tests $dir/
++
++for i in $dir/support/*.ada $dir/support/*.a; do
++ host_gnatchop $i >> $dir/acats.log 2>&1
++done
++
++# These tools are used to preprocess some ACATS sources
++# they need to be compiled native on the host.
++
++host_gnatmake -q -gnatws macrosub.adb
++if [ $? -ne 0 ]; then
++ display "**** Failed to compile macrosub"
++ exit 1
++fi
++./macrosub > macrosub.out 2>&1
++
++gcc -c cd300051.c
++host_gnatmake -q -gnatws widechr.adb
++if [ $? -ne 0 ]; then
++ display "**** Failed to compile widechr"
++ exit 1
++fi
++./widechr > widechr.out 2>&1
++
++rm -f $dir/support/macrosub
++rm -f $dir/support/widechr
++rm -f $dir/support/*.ali
++rm -f $dir/support/*.o
++
++display " done."
++
++# From here, all compilations will be made by the target compiler
++
++display_noeol "Compiling support files..."
++
++target_gcc -c *.c
++if [ $? -ne 0 ]; then
++ display "**** Failed to compile C code"
++ exit 1
++fi
++
++host_gnatchop *.adt >> $dir/acats.log 2>&1
++
++target_gnatmake -c -gnato -gnatE *.ads >> $dir/acats.log 2>&1
++target_gnatmake -c -gnato -gnatE *.adb >> $dir/acats.log 2>&1
++
++display " done."
++display ""
++display " === acats tests ==="
++
++if [ $# -eq 0 ]; then
++ chapters=`cd $dir/tests; echo [a-z]*`
++else
++ chapters=$*
++fi
++
++glob_countn=0
++glob_countok=0
++glob_countu=0
++countdown=0
++
++for chapter in $chapters; do
++ if [ -d $dir/tests/$chapter ]; then
++ cd $dir/tests/$chapter
++ ls *.a *.ada *.adt *.am *.dep 2> /dev/null | sed -e 's/\(.*\)\..*/\1/g' | \
++ cut -c1-7 | sort | uniq | comm -23 - $dir/support/norun.lst \
++ > $dir/tests/$chapter/${chapter}.lst
++ countn=`wc -l < $dir/tests/$chapter/${chapter}.lst`
++ countdown=`expr $countdown + $countn`
++ fi
++done
++
++cat > $dir/execute.sh << EOF
++inform () {
++ printf "left: %04d" \$1
++}
++disinform () {
++ printf "\r"
++}
++cycle () {
++ local countx=0
++ local total=\$(echo \$testlist | awk '{print NF}')
++ mkdir -p logs
++ echo "Executing \$total tests on remote device"
++ inform \$total
++ for x in \$testlist; do
++ timeout -t 30 ./\${x} > logs/\${x}.log 2>&1
++ countx=\$(expr \$countx + 1)
++ if [ \$countx -eq 25 ]; then
++ total=\$(expr \$total - 25)
++ countx=0
++ disinform
++ inform \$total
++ fi
++ done
++ disinform
++ tar -czf remote.logs.tar.gz logs
++}
++testlist=" \\
++EOF
++
++display "All tests are being cross-compiled without execution first."
++
++for chapter in $chapters; do
++ if [ ! -d $dir/tests/$chapter ]; then
++ continue
++ fi
++
++ countn=`wc -l < $dir/tests/$chapter/${chapter}.lst`
++ glob_countn=`expr $glob_countn + $countn`
++ counti=0
++ for i in `cat $dir/tests/$chapter/${chapter}.lst`; do
++ counti=`expr $counti + 1`
++ extraflags="-gnat95"
++ grep $i $testdir/overflow.lst > /dev/null 2>&1
++ if [ $? -eq 0 ]; then
++ extraflags="$extraflags -gnato"
++ fi
++ grep $i $testdir/elabd.lst > /dev/null 2>&1
++ if [ $? -eq 0 ]; then
++ extraflags="$extraflags -gnatE"
++ fi
++ grep $i $testdir/floatstore.lst > /dev/null 2>&1
++ if [ $? -eq 0 ]; then
++ extraflags="$extraflags -ffloat-store"
++ fi
++ grep $i $testdir/stackcheck.lst > /dev/null 2>&1
++ if [ $? -eq 0 ]; then
++ extraflags="$extraflags -fstack-check"
++ fi
++ inform $countdown $i
++ countdown=`expr $countdown - 1`
++ test=$dir/tests/$chapter/$i
++ mkdir $test && cd $test >> $dir/acats.log 2>&1
++
++ if [ $? -ne 0 ]; then
++ disinform
++ display "FAIL: $i"
++ failed="${failed}${i} "
++ clean_dir
++ continue
++ fi
++
++ host_gnatchop -c -w `ls ${test}*.a ${test}*.ada ${test}*.adt ${test}*.am ${test}*.dep 2> /dev/null` >> $dir/acats.log 2>&1
++ find_main
++ if [ -z "$main" ]; then
++ sync
++ find_main
++ fi
++ binmain=`echo $main | sed -e 's/\(.*\)\..*/\1/g'`
++ echo "BUILD $main" >> $dir/acats.log
++ EXTERNAL_OBJECTS=""
++ case $i in
++ cxb30*) EXTERNAL_OBJECTS="$dir/support/cxb30040.o $dir/support/cxb30060.o $dir/support/cxb30130.o $dir/support/cxb30131.o";;
++ ca1020e) rm -f ca1020e_func1.adb ca1020e_func2.adb ca1020e_proc1.adb ca1020e_proc2.adb > /dev/null 2>&1;;
++ ca14028) rm -f ca14028_func2.ads ca14028_func3.ads ca14028_proc1.ads ca14028_proc3.ads > /dev/null 2>&1;;
++ cxh1001) extraflags="-a -f"; echo "pragma Normalize_Scalars;" > gnat.adc
++ esac
++ if [ "$main" = "" ]; then
++ disinform
++ display "FAIL: $i"
++ failed="${failed}${i} "
++ clean_dir
++ continue
++ fi
++
++ target_gnatmake $extraflags -I$dir/support $main >> $dir/acats.log 2>&1
++ if [ $? -ne 0 ]; then
++ disinform
++ display "FAIL: $i"
++ failed="${failed}${i} "
++ clean_dir
++ continue
++ fi
++ echo $chapter/$i/$binmain >> $dir/transfer.lst
++ echo "$binmain \\" >> $dir/execute.sh
++ $STRIP $binmain
++ disinform
++ done
++done
++echo '"' >> $dir/execute.sh
++echo "cycle" >> $dir/execute.sh
++
++sync
++display "Transfer files to remote device: root@tablet:$tabtarget/"
++cd $dir/tests
++cat $dir/transfer.lst | xargs tar --strip-components=2 -czf - | \
++ target_cmd "tar -C $tabtarget -xzf -"
++cd $dir
++tar -czf - execute.sh | target_cmd "tar -C $tabtarget -xzf -"
++target_cmd "cd $tabtarget; sh execute.sh"
++rm -rf $dir/logs $dir/remote.logs.tar.gz
++/usr/bin/scp -q root@tablet:$tabtarget/remote.logs.tar.gz $dir/
++tar -xzf $dir/remote.logs.tar.gz
++
++countdown=`wc -l < $dir/transfer.lst`
++glob_countn=${countdown}
++for i in `cat $dir/transfer.lst`; do
++ split_testid $i
++ if [ "$section" != "$savedsect" ]; then
++ display Running chapter $section ...
++ fi
++ savedsect=$section
++
++ #inform $countdown $TN
++ countdown=`expr $countdown - 1`
++ proglog="$dir/logs/${prog}.log"
++ echo "RUN $prog" >> $dir/acats.log
++ if [ ! -f $proglog ]; then
++ echo "LOG NOT FOUND!" >> $proglog
++ fi
++
++ cat $proglog >> $dir/acats.log
++
++ egrep -e '(==== |\+\+\+\+ |\!\!\!\! )' $proglog > /dev/null 2>&1
++ if [ $? -ne 0 ]; then
++ grep 'tasking not implemented' $proglog > /dev/null 2>&1
++
++ if [ $? -ne 0 ]; then
++ display "FAIL: ${TN}"
++ failed="${failed}${TN} "
++ else
++ log "UNSUPPORTED: ${TN}"
++ glob_countn=`expr $glob_countn - 1`
++ glob_countu=`expr $glob_countu + 1`
++ fi
++ else
++ log "PASS: ${TN}"
++ glob_countok=`expr $glob_countok + 1`
++ fi
++ cd $dir/tests/$section/$TN
++ clean_dir
++ #disinform
++done
++
++display " === acats Summary ==="
++display "# of expected passes $glob_countok"
++display "# of unexpected failures `expr $glob_countn - $glob_countok`"
++
++if [ $glob_countu -ne 0 ]; then
++ display "# of unsupported tests $glob_countu"
++fi
++
++if [ $glob_countok -ne $glob_countn ]; then
++ display "*** FAILURES: $failed"
++fi
++
++display "$0 completed at `date`"
++
++exit 0
+--- gcc/testsuite/gnat.dg/test_raise_from_pure.adb.orig
++++ gcc/testsuite/gnat.dg/test_raise_from_pure.adb
+@@ -1,4 +1,4 @@
+--- { dg-do run }
++-- { dg-do run { xfail *-*-openbsd* } }
+ -- { dg-options "-O2" }
+
+ -- This is an optimization test and its failure is only a missed optimization.
+--- gcc/testsuite/gnat.dg/unchecked_convert5.adb.orig
++++ gcc/testsuite/gnat.dg/unchecked_convert5.adb
+@@ -1,22 +0,0 @@
+--- { dg-do run { target hppa*-*-* sparc*-*-* powerpc*-*-* } }
+-
+-with Unchecked_Conversion;
+-
+-procedure Unchecked_Convert5 is
+-
+- subtype c_1 is string(1..1);
+-
+- function int2c1 is -- { dg-warning "different sizes" }
+- new unchecked_conversion (source => integer, target => c_1);
+-
+- c1 : c_1;
+-
+-begin
+-
+- c1 := int2c1(16#12#);
+-
+- if c1 (1) /= ASCII.Nul then
+- raise Program_Error;
+- end if;
+-
+-end;
+--- gcc/testsuite/gnat.dg/unchecked_convert6.adb.orig
++++ gcc/testsuite/gnat.dg/unchecked_convert6.adb
+@@ -1,22 +0,0 @@
+--- { dg-do run { target hppa*-*-* sparc*-*-* powerpc*-*-* } }
+-
+-with Unchecked_Conversion;
+-
+-procedure Unchecked_Convert6 is
+-
+- subtype c_5 is string(1..5);
+-
+- function int2c5 is -- { dg-warning "different sizes" }
+- new unchecked_conversion (source => integer, target => c_5);
+-
+- c5 : c_5;
+-
+-begin
+-
+- c5 := int2c5(16#12#);
+-
+- if c5 (4) /= ASCII.DC2 then
+- raise Program_Error;
+- end if;
+-
+-end;
diff --git a/lang/gcc6-aux/files/diff-core b/lang/gcc6-aux/files/diff-core
new file mode 100644
index 000000000000..c3db3ddd1c7a
--- /dev/null
+++ b/lang/gcc6-aux/files/diff-core
@@ -0,0 +1,92 @@
+--- gcc/config/i386/freebsd.h.orig
++++ gcc/config/i386/freebsd.h
+@@ -77,6 +77,12 @@
+ When the -shared link option is used a final link is not being
+ done. */
+
++#if FBSD_MAJOR < 10
++#define ELF_HASH_STYLE "--hash-style=both "
++#else
++#define ELF_HASH_STYLE "--hash-style=gnu "
++#endif
++
+ #undef LINK_SPEC
+ #define LINK_SPEC "\
+ %{p:%nconsider using '-pg' instead of '-p' with gprof(1)} \
+@@ -88,6 +94,7 @@
+ %{rdynamic:-export-dynamic} \
+ -dynamic-linker %(fbsd_dynamic_linker) } \
+ %{static:-Bstatic}} \
++ %{!static:" ELF_HASH_STYLE "-rpath @PREFIX@/@GCCAUX@/lib} \
+ %{symbolic:-Bsymbolic}"
+
+ /* A C statement to output to the stdio stream FILE an assembler
+--- gcc/config/i386/freebsd64.h.orig
++++ gcc/config/i386/freebsd64.h
+@@ -41,4 +41,5 @@
+ %{rdynamic:-export-dynamic} \
+ -dynamic-linker %(fbsd_dynamic_linker) } \
+ %{static:-Bstatic}} \
++ %{!static:" ELF_HASH_STYLE "-rpath @PREFIX@/@GCCAUX@/lib} \
+ %{symbolic:-Bsymbolic}"
+--- gcc/Makefile.in.orig
++++ gcc/Makefile.in
+@@ -1184,7 +1184,6 @@
+ insn-emit.o \
+ insn-extract.o \
+ insn-latencytab.o \
+- insn-modes.o \
+ insn-opinit.o \
+ insn-output.o \
+ insn-peep.o \
+@@ -1547,6 +1546,7 @@
+ $(OBJS-libcommon-target) main.o c-family/cppspec.o \
+ $(COLLECT2_OBJS) $(EXTRA_GCC_OBJS) $(GCOV_OBJS) $(GCOV_DUMP_OBJS) \
+ $(GCOV_TOOL_OBJS) $(GENGTYPE_OBJS) gcc-ar.o gcc-nm.o gcc-ranlib.o \
++ insn-modes.o insn-modes-ada.o \
+ lto-wrapper.o collect-utils.o
+
+ # This lists all host object files, whether they are included in this
+@@ -1554,6 +1554,11 @@
+ ALL_HOST_OBJS = $(ALL_HOST_FRONTEND_OBJS) $(ALL_HOST_BACKEND_OBJS)
+
+ BACKEND = libbackend.a main.o libcommon-target.a libcommon.a \
++ insn-modes.o \
++ $(CPPLIB) $(LIBDECNUMBER)
++
++BACKEND2 = libbackend.a main.o libcommon-target.a libcommon.a \
++ insn-modes-ada.o \
+ $(CPPLIB) $(LIBDECNUMBER)
+
+ # This is defined to "yes" if Tree checking is enabled, which roughly means
+@@ -2208,6 +2213,7 @@
+
+ insn-modes.c: s-modes; @true
+ insn-modes.h: s-modes-h; @true
++insn-modes-ada.c: s-modes-ada; @true
+ min-insn-modes.c: s-modes-m; @true
+
+ s-modes: build/genmodes$(build_exeext)
+@@ -2225,6 +2231,12 @@
+ $(SHELL) $(srcdir)/../move-if-change tmp-min-modes.c min-insn-modes.c
+ $(STAMP) s-modes-m
+
++s-modes-ada: s-modes
++ $(shell sed -e 's/: TARGET_96_ROUND_53_LONG_DOUBLE \? &ieee_extended_intel_96_round_53_format //' \
++ < insn-modes.c > tmp-modes-ada.c)
++ $(SHELL) $(srcdir)/../move-if-change tmp-modes-ada.c insn-modes-ada.c
++ $(STAMP) s-modes-ada
++
+ insn-preds.c: s-preds; @true
+ tm-preds.h: s-preds-h; @true
+ tm-constrs.h: s-constrs-h; @true
+@@ -3407,6 +3419,9 @@
+ ( cd $(DESTDIR)$(bindir) && \
+ $(LN) $(GCC_INSTALL_NAME)$(exeext) $(FULL_DRIVER_NAME) ); \
+ fi; \
++ if [ -f gnat1$(exeext) ] ; then \
++ ( cd $(DESTDIR)$(bindir) && $(LN) $(GCC_INSTALL_NAME)$(exeext) ada$(exeext) ) \
++ fi; \
+ if [ ! -f gcc-cross$(exeext) ] \
+ && [ "$(GCC_INSTALL_NAME)" != "$(GCC_TARGET_INSTALL_NAME)" ]; then \
+ rm -f $(DESTDIR)$(bindir)/$(target_noncanonical)-gcc-tmp$(exeext); \
diff --git a/lang/gcc6-aux/files/diff-cxx b/lang/gcc6-aux/files/diff-cxx
new file mode 100644
index 000000000000..672c9ca9965c
--- /dev/null
+++ b/lang/gcc6-aux/files/diff-cxx
@@ -0,0 +1,12 @@
+--- libstdc++-v3/configure.host.orig
++++ libstdc++-v3/configure.host
+@@ -262,6 +262,9 @@
+ freebsd*)
+ os_include_dir="os/bsd/freebsd"
+ ;;
++ linux-android*)
++ os_include_dir="os/bionic"
++ ;;
+ linux-musl*)
+ os_include_dir="os/generic"
+ ;;
diff --git a/lang/gcc6-aux/files/diff-gcc-testsuite b/lang/gcc6-aux/files/diff-gcc-testsuite
new file mode 100644
index 000000000000..a9a330ecf553
--- /dev/null
+++ b/lang/gcc6-aux/files/diff-gcc-testsuite
@@ -0,0 +1,46 @@
+--- gcc/testsuite/gcc.dg/format/ext-1.c.orig
++++ gcc/testsuite/gcc.dg/format/ext-1.c
+@@ -8,7 +8,7 @@
+ #include "format.h"
+
+ void
+-foo (quad_t q, u_quad_t uq, quad_t *qn, size_t z, size_t *zn, long long int ll,
++foo (quad2_t q, u_quad2_t uq, quad2_t *qn, size_t z, size_t *zn, long long int ll,
+ unsigned long long int ull, int i, unsigned int u, double d,
+ char *s, void *p, wchar_t *ls, wint_t lc, int *n, long int l)
+ {
+--- gcc/testsuite/gcc.dg/format/ext-2.c.orig
++++ gcc/testsuite/gcc.dg/format/ext-2.c
+@@ -8,7 +8,7 @@
+ #include "format.h"
+
+ void
+-foo (quad_t *qp, u_quad_t *uqp, quad_t *qn, long long int *llp,
++foo (quad2_t *qp, u_quad2_t *uqp, quad2_t *qn, long long int *llp,
+ unsigned long long int *ullp, float *fp, char *s, void **pp, wchar_t *ls,
+ int *ip, unsigned int *up)
+ {
+--- gcc/testsuite/gcc.dg/format/format.h.orig
++++ gcc/testsuite/gcc.dg/format/format.h
+@@ -71,8 +71,8 @@
+ #endif
+
+ /* %q formats want a "quad"; GCC considers this to be a long long. */
+-typedef llong quad_t;
+-typedef ullong u_quad_t;
++typedef llong quad2_t;
++typedef ullong u_quad2_t;
+
+ __extension__ typedef __INTMAX_TYPE__ intmax_t;
+ __extension__ typedef __UINTMAX_TYPE__ uintmax_t;
+--- gcc/testsuite/gcc.dg/pch/pch.exp.orig
++++ gcc/testsuite/gcc.dg/pch/pch.exp
+@@ -44,6 +44,8 @@
+ set test "largefile.c"
+ set testh "largefile.hs"
+ set f [open $test w]
++puts $f "/* { dg-do run { target *-*-solaris* } } */"
++puts $f "/* { dg-error \"dummy\" \"fool dejagnu\" { target { ! *-*-solaris* } 20 } } */"
+ puts $f "/* { dg-timeout-factor 4.0 } */"
+ set v 0
+ for { set v 0 } { $v < 10000 } { incr v } {
diff --git a/lang/gcc6-aux/files/gnatdroid.exp b/lang/gcc6-aux/files/gnatdroid.exp
new file mode 100644
index 000000000000..978319f8a9b1
--- /dev/null
+++ b/lang/gcc6-aux/files/gnatdroid.exp
@@ -0,0 +1,14 @@
+# gnatdroid testsuite running over ssh.
+
+load_generic_config "android"
+
+process_multilib_options ""
+
+# The default compiler for this target.
+set_board_info compiler "[find_gcc]"
+
+set_board_info rsh_prog /usr/bin/ssh
+set_board_info rcp_prog /usr/bin/scp
+set_board_info protocol standard
+set_board_info hostname tablet
+set_board_info username root
diff --git a/lang/gcc6-aux/pkg-descr b/lang/gcc6-aux/pkg-descr
new file mode 100644
index 000000000000..c7eff9c4711d
--- /dev/null
+++ b/lang/gcc6-aux/pkg-descr
@@ -0,0 +1,14 @@
+The AUX compiler supports several languages: Ada, C, C++, Fortran and
+Objective-C. Since Ada support must be built by an Ada-capable compiler,
+only platforms for which a bootstrap compiler is available can build it.
+
+The AUX compiler is based on release versions of the Free Software
+Foundation's GNU Compiler Collection. It uses the GCC Runtime Library
+Exception, so the resulting binaries have no licensing requirements.
+Binaries produced by the AUX compiler should be legally handled the same
+as binaries produced by any FSF compiler.
+
+This compiler implements the full Ada-83, Ada-95, Ada-2005 and Ada-2012
+standards.
+
+WWW: http://www.dragonlace.net/