summaryrefslogtreecommitdiff
path: root/lang
diff options
context:
space:
mode:
authormarino <marino@pkgsrc.org>2012-01-08 11:17:07 +0000
committermarino <marino@pkgsrc.org>2012-01-08 11:17:07 +0000
commitee1c4dcbc9fe4aa1131b2a752e40547528417715 (patch)
treec65c5830f69593722289a2927af29373e46a980e /lang
parent5ed1fa8b82b5f214b13921b52379d9b545361def (diff)
downloadpkgsrc-ee1c4dcbc9fe4aa1131b2a752e40547528417715.tar.gz
lang/gnat-aux: Upgrade to gcc 4.6.2, add Fortran, Objective-C
Obvious additions: 1) Upgrades sync from gcc 4.6.1-RELEASE to gcc 4.6.2-RELEASE 2) New capability of building Fortran 3) New capability of building Objective-C 4) Building of all 5 languages (Ada,C,C++,ObjC,Fortran) now default 5) Fortran testsuite added 6) ObjC testsuite added Behind the scenes: 1) Previously GNAT-Aux was built from a custom-built tarball. Now real real gcc source files are used instead, but heavily patched. 2) The standard patch mechanism is not used. Composite diff files are generated by dragonlace.net and they are applied as needed, and are located in the "files" directory 3) This might be the only gcc that doesn't use the monolithic source tar ball. Depending on the options selected, the makefile updates its distfile list and only downloads what it needs, including testsuite files and dejagnu support. 4) All platforms are now built with unlimited stacksize command due to new issues with <platform>-stdint.h functionality. 5) All platforms use unlimited stacksize for Ada testing. Before it was limited to NetBSD x86_64. This may have introduced a failure on NetBSD i386 though. There were no other impacts according to the Ada testsuite results. 6) The PLIST automatic generation was significantly simplified, resulting in some variable deletion. 7) libstdc++ can't break testing now (forced to evaluate to true) 8) Unnecessary depends and USE_TOOLS removed 9) The includes-fixed directory is now removed from all platforms, arches now rather than problematic ones. It seems that it can only make no difference or cause problems, so no reason to keep it around. A) Unnecessary do-config phase "touches" removed. B) Several fixes added to diff patches to improve testsuite results on c, c++, and fortran for all platforms.
Diffstat (limited to 'lang')
-rw-r--r--lang/gnat-aux/DESCR3
-rw-r--r--lang/gnat-aux/Makefile123
-rw-r--r--lang/gnat-aux/distinfo27
-rw-r--r--lang/gnat-aux/files/diff-ada9755
-rw-r--r--lang/gnat-aux/files/diff-ada-testsuite190
-rw-r--r--lang/gnat-aux/files/diff-core1903
-rw-r--r--lang/gnat-aux/files/diff-cxx917
-rw-r--r--lang/gnat-aux/files/diff-cxx-testsuite4547
-rw-r--r--lang/gnat-aux/files/diff-fortran54
-rw-r--r--lang/gnat-aux/files/diff-fortran-testsuite31
-rw-r--r--lang/gnat-aux/files/diff-gcc-testsuite10
-rw-r--r--lang/gnat-aux/options.mk54
-rw-r--r--lang/gnat-aux/patches/patch-aa287
-rw-r--r--lang/gnat-aux/patches/patch-ab155
-rw-r--r--lang/gnat-aux/patches/patch-ac111
-rw-r--r--lang/gnat-aux/patches/patch-ad35
16 files changed, 17538 insertions, 664 deletions
diff --git a/lang/gnat-aux/DESCR b/lang/gnat-aux/DESCR
index c2b05665991..1d4ec3e7235 100644
--- a/lang/gnat-aux/DESCR
+++ b/lang/gnat-aux/DESCR
@@ -11,3 +11,6 @@ binaries produced by any FSF GNAT compiler.
GNAT AUX implements the full Ada-83, Ada-95, and Ada-2005 language standards.
It also implements some features of the draft Ada-2012 standard, which are
optionally accessible via the -gnat2012 switch or Ada_2012 pragma.
+
+GNAT AUX always builds C, and builds Ada, Fortran, C++, and Objective-C by
+default. The last four languages can be disabled by the options framework.
diff --git a/lang/gnat-aux/Makefile b/lang/gnat-aux/Makefile
index 9601eb91bd0..3c41f8edd58 100644
--- a/lang/gnat-aux/Makefile
+++ b/lang/gnat-aux/Makefile
@@ -1,28 +1,28 @@
-# $NetBSD: Makefile,v 1.7 2011/12/03 07:28:18 marino Exp $
+# $NetBSD: Makefile,v 1.8 2012/01/08 11:17:07 marino Exp $
#
-DISTNAME= gnat-aux-${SNAPSHOT}
-PKGREVISION= 2
+PKGNAME= gnat-aux-${SNAPSHOT}
+DISTNAME= gcc-${GCC_VERSION}
CATEGORIES= lang
-MASTER_SITES= http://downloads.dragonlace.net/src/ \
- http://dragonlace.mirrors.ada.cx/src/
-EXTRACT_SUFX= .tar.bz2
+MASTER_SITES= ${MASTER_SITE_GNU:=gcc/gcc-${GCC_VERSION}/}
+DISTFILES= gcc-core-${GCC_VERSION}.tar.bz2
MAINTAINER= draco@marino.st
HOMEPAGE= http://www.dragonlace.net/
COMMENT= GNAT Ada compiler based on GCC ${GCC_BRANCH}
LICENSE= gnu-gpl-v3 AND gnu-lgpl-v3
-SNAPSHOT= 20110627
+SNAPSHOT= 20111026
GCC_BRANCH= 4.6
-GCC_POINT= 1
+GCC_POINT= 2
+GCC_VERSION= ${GCC_BRANCH}.${GCC_POINT}
LANGS= c
PKG_DESTDIR_SUPPORT= user-destdir
-USE_TOOLS+= gmake sed flex bison gm4 perl makeinfo bzip2
+USE_TOOLS+= gmake sed perl makeinfo bzip2 patch
USE_BUILTIN.iconv= no
-BUILD_DEPENDS+= autoconf>=2.6:../../devel/autoconf
+APPLY_DIFFS= core
.include "../../mk/bsd.prefs.mk"
.include "options.mk"
@@ -80,6 +80,12 @@ LINK_HEADER= /usr/include/sys/link_elf.h
.endif
BOOTSTRAP_COMPILER= gnat-bootstrap.${MACHINE_ARCH}.netbsd.tar.bz2
LINK_HEADER= /usr/include/link_elf.h
+
+SUBST_CLASSES+= net1
+SUBST_STAGE.net1= post-patch
+SUBST_FILES.net1= gcc/config/i386/netbsd-elf.h
+SUBST_MESSAGE.net1= Fixing libgcc linkage problem on NetBSD
+SUBST_SED.net1= -e "s,@EXEC_PREFIX@,${PREFIX},"
.endif
@@ -101,17 +107,12 @@ CONFIG_SHELL= ${TOOLS_PATH.sh}
# define some important directories and files
BUILDDIR= ${WRKDIR}/build
-WRKSRC= ${WRKDIR}/gcc-${GCC_BRANCH}-${SNAPSHOT}
+WRKSRC= ${WRKDIR}/gcc-${GCC_VERSION}
PKG_PREFIX= ${PREFIX}
CFG_SCRIPT= ${WRKSRC}/configure
BOOTSTRAP_PREFIX= ${WRKDIR}/bootstrap
-MAN7= fsf-funding.7 gfdl.7 gpl.7
-SMAN1= share/man/man1
-SMAN7= share/man/man7
-LPATH= lib/gcc/${BLD_TARGET}/${GCC_BRANCH}.${GCC_POINT}
-LEPATH= libexec/gcc/${BLD_TARGET}/${GCC_BRANCH}.${GCC_POINT}
REVFILE= ${WRKSRC}/gcc/REVISION
-BASELIB= ${LOCALBASE}/lib
+BASELIB= ${PREFIX}/lib
@@ -132,13 +133,15 @@ FULL_GNATGCC=${PREFIX}/bin/gnatgcc
# here we know we need to install the bootstrap compiler
INTENDED_COMPILER=BOOTSTRAP
FULL_GNATGCC=${BOOTSTRAP_PREFIX}/bin/gnatgcc
-DISTFILES= ${DISTNAME}${EXTRACT_SUFX} ${BOOTSTRAP_COMPILER}
+DISTFILES+= ${BOOTSTRAP_COMPILER}
+SITES.${BOOTSTRAP_COMPILER}= http://downloads.dragonlace.net/src/ \
+ http://dragonlace.mirrors.ada.cx/src/
FULL_PATH=${BOOTSTRAP_PREFIX}/bin:/sbin:/bin:/usr/sbin:/usr/bin:${PREFIX}/sbin:${PREFIX}/bin
.endif
# For pkg maintenance, uncomment to invoke "bmake mdi"
-#DISTFILES=${DISTNAME}${EXTRACT_SUFX} \
+#DISTFILES+= \
# gnat-bootstrap.i386.dragonfly.tar.bz2 \
# gnat-bootstrap.x86_64.dragonfly.tar.bz2 \
# gnat-bootstrap.i386.netbsd.tar.bz2 \
@@ -167,57 +170,48 @@ CONFIGURE_ARGS+= --with-libiconv-prefix=${PKG_PREFIX}
CONFIGURE_ARGS+= --enable-shared
CONFIGURE_ARGS+= --enable-threads=${THREAD_MODEL}
CONFIGURE_ARGS+= --disable-bootstrap
-CONFIGURE_ARGS+= --disable-libquadmath
+CONFIGURE_ARGS+= ${QUADOPT}
CONFIGURE_ARGS+= --disable-libmudflap
CONFIGURE_ARGS+= --disable-libgomp
CONFIGURE_ARGS+= --disable-libssp
CONFIGURE_ARGS+= --disable-nls
-
# Automatic package list generation
-# lib/libquadmath.* will have to be added if __float128 support is added
-# Alternatively, libquadmath support could be intentionally disabled.
GENERATE_PLIST= cd ${DESTDIR}${PREFIX};
-GENERATE_PLIST+= ${FIND} bin/gnat* | ${SORT};
-GENERATE_PLIST+= ${FIND} bin/${BLD_TARGET}* | ${SORT};
-GENERATE_PLIST+= ${FIND} lib/libiberty.a;
-GENERATE_PLIST+= ${FIND} lib/libgcc_s.* \( -type f -or -type l \) | ${SORT};
-.if !empty(PKG_OPTIONS:Mcxx)
-GENERATE_PLIST+= ${FIND} lib/libsupc++.* \( -type f -or -type l \) | ${SORT};
-GENERATE_PLIST+= ${FIND} lib/libstdc++.* \( -type f -or -type l \) | ${SORT};
-GENERATE_PLIST+= ${FIND} include/c++/${GCC_BRANCH}.${GCC_POINT}/* -type f | ${SORT} -dr;
-GENERATE_PLIST+= ${FIND} share/gcc-${GCC_BRANCH}.${GCC_POINT}/* -type f | ${SORT} -dr;
-.endif
-GENERATE_PLIST+= ${FIND} ${LPATH}/* \( -type f -or -type l \) | ${SORT} -dr;
-GENERATE_PLIST+= ${FIND} ${LEPATH}/* -type f | ${SORT} -dr;
-GENERATE_PLIST+= ${FIND} ${SMAN1}/gnat* -type f | ${SORT};
-.for k in ${MAN7}
-GENERATE_PLIST+= ${FIND} ${SMAN7}/${k};
-.endfor
-
+GENERATE_PLIST+= ${FIND} * \( -type f -or -type l \) | ${SORT} -dr;
post-extract:
# Personalize GNAT for each different machine
@${ECHO} "-=> GNAT AUX ${OS_LABEL4VERS}" > ${REVFILE}
+ # Create new directories in preparation of applying diff files
+.if !empty(PKG_OPTIONS:Mcxx)
+ ${MKDIR} ${WRKSRC}/libstdc++-v3/config/locale/dragonfly
+ ${MKDIR} ${WRKSRC}/libstdc++-v3/config/os/bsd/dragonfly
+.endif
+
+ # 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 ${INTENDED_COMPILER} == "BOOTSTRAP"
+ # Bootstrap compiler has statically linked z, gmp, mpc, mpfr and iconv
+ # The only shared lib is libc.so.7, so it should work for a long time.
+ # It is at least 28MB and doesn't come with shared libraries.
+
${MKDIR} ${BOOTSTRAP_PREFIX}
mv ${BOOTSTRAP_PREFIX}/../bin ${BOOTSTRAP_PREFIX}
mv ${BOOTSTRAP_PREFIX}/../lib ${BOOTSTRAP_PREFIX}
mv ${BOOTSTRAP_PREFIX}/../libexec ${BOOTSTRAP_PREFIX}
- # Bootstrap compiler has statically linked z, gmp, mpc, mpfr and iconv
- # The only shared lib is libc.so.7, so it should work for a long time.
- # It is at least 28MB and doesn't come with shared libraries.
-
-.if (${OPSYS} == "NetBSD") && (empty(OS_VERSION:M[5].[0-8]*))
# Bootstrap compiler malfunctions in NetBSD 6 unless include-fixed
- # directory is removed first.
-
+ # directory is removed first. It will eventually cause problems
+ # for DragonFly and Solaris as well, so just unconditionally kill it.
${RM} -rf ${BOOTSTRAP_PREFIX}/lib/gcc/${BOOTSTRAP_TRIPLET}/include-fixed
.endif
-.endif
pre-configure:
@@ -251,38 +245,37 @@ pre-configure:
do-configure:
- #late switch of compiler to fool default depends checking
- ${SETENV} CC=${FULL_GNATGCC}
-
- #reset timestamps
- cd ${WRKSRC}; contrib/gcc_update --touch
- ${RM} -f ${WRKSRC}/gcc/*/*.info*
- ${TOUCH} ${WRKSRC}/gcc/cstamp-h.in
-
${MKDIR} ${BUILDDIR}
cd ${BUILDDIR} && ${SETENV} ${MY_CONFIGURE_ENV} \
${CFG_SCRIPT} ${CONFIGURE_ARGS}
do-build:
- cd ${BUILDDIR} && ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -j${MAKE_JOBS:U1:Q} all
+ # The unlimited stacksize is for NetBSD64
+ cd ${BUILDDIR} && \
+ ${ULIMIT_CMD_stacksize} && \
+ ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -j${MAKE_JOBS:U1:Q} all
do-test: build
.if !empty(PKG_OPTIONS:Mtestada)
-.if (${OPSYS} == "NetBSD") && (${MACHINE_ARCH} == "x86_64")
- #NetBSD has an exremely small default stacksize of 2MB, which is insufficient
- #for the gnat.dg testsuite (entry_queues test on AMD64 specifically)
+ # NetBSD has an extremely small default stacksize of 2MB, which is
+ # insufficient for the gnat.dg testsuite.
+ # specifically: entry_queues test on AMD64
cd ${BUILDDIR} && \
${ULIMIT_CMD_stacksize} && \
${SETENV} ${MY_MAKE_ENV} ${GMAKE} -sk check-ada
-.else
- cd ${BUILDDIR} && ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -sk check-ada
.endif
+.if !empty(PKG_OPTIONS:Mfortran) && !empty(PKG_OPTIONS:Mtestfortran)
+ cd ${BUILDDIR} && ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -sk check-fortran
+.endif
+.if !empty(PKG_OPTIONS:Mobjc) && !empty(PKG_OPTIONS:Mtestobjc)
+ cd ${BUILDDIR} && ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -sk check-objc
.endif
-.if !empty(PKG_OPTIONS:Mtestcxx)
- cd ${BUILDDIR} && ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -sk check-c++
- cd ${BUILDDIR} && ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -sk check-target-libstdc++-v3
+.if !empty(PKG_OPTIONS:Mcxx) && !empty(PKG_OPTIONS:Mtestcxx)
+ # libstdc++ always ends with error status, so ignore it
+ cd ${BUILDDIR} && ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -sk \
+ check-c++ || ${TRUE}
.endif
.if !empty(PKG_OPTIONS:Mtestgcc)
cd ${BUILDDIR} && ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -sk check-c
diff --git a/lang/gnat-aux/distinfo b/lang/gnat-aux/distinfo
index d88a2703969..5630a4c78a9 100644
--- a/lang/gnat-aux/distinfo
+++ b/lang/gnat-aux/distinfo
@@ -1,8 +1,23 @@
-$NetBSD: distinfo,v 1.7 2011/12/05 07:52:25 marino Exp $
+$NetBSD: distinfo,v 1.8 2012/01/08 11:17:07 marino Exp $
-SHA1 (gnat-aux-20110627.tar.bz2) = 598d2c21c3bbd1e2cada2ca98331107af3deb608
-RMD160 (gnat-aux-20110627.tar.bz2) = 84b05832457568fef9355279214caeacca9c74ba
-Size (gnat-aux-20110627.tar.bz2) = 26799024 bytes
+SHA1 (gcc-ada-4.6.2.tar.bz2) = e6eaa9b8111ac8e550844a7cc2d161f8c3c96522
+RMD160 (gcc-ada-4.6.2.tar.bz2) = 6f5d5af97c374411e13698c32314b43b1afd99cf
+Size (gcc-ada-4.6.2.tar.bz2) = 6064757 bytes
+SHA1 (gcc-core-4.6.2.tar.bz2) = 23d259e2269a40f6e203cf6f57bc7eb7a207a8b3
+RMD160 (gcc-core-4.6.2.tar.bz2) = 82c25532303759b6195bbd53d7f371f1974ff182
+Size (gcc-core-4.6.2.tar.bz2) = 30258326 bytes
+SHA1 (gcc-fortran-4.6.2.tar.bz2) = aba480c9a42d58eca6c34355b6d2f5f487de051d
+RMD160 (gcc-fortran-4.6.2.tar.bz2) = 6a966d647e9d3fe35996d390fbcd7ff0622edfb8
+Size (gcc-fortran-4.6.2.tar.bz2) = 1676539 bytes
+SHA1 (gcc-g++-4.6.2.tar.bz2) = f0bc2b4e1c23c5dc1462599efd5df4b9807b23af
+RMD160 (gcc-g++-4.6.2.tar.bz2) = afb274990e9102b55cb5f5dc11876c96e6b31c96
+Size (gcc-g++-4.6.2.tar.bz2) = 6955594 bytes
+SHA1 (gcc-objc-4.6.2.tar.bz2) = 32e5fbc31f1e8dd5e7c7e7ed9172afaf6136ea4e
+RMD160 (gcc-objc-4.6.2.tar.bz2) = 3c38c655edb90fadb2805043219296a4af43c56a
+Size (gcc-objc-4.6.2.tar.bz2) = 342544 bytes
+SHA1 (gcc-testsuite-4.6.2.tar.bz2) = 514c0ed8b9e4ed22e55303ae2426dd6f1e8a24f2
+RMD160 (gcc-testsuite-4.6.2.tar.bz2) = 859486da17497b61e0919f53f13efc04eeaef751
+Size (gcc-testsuite-4.6.2.tar.bz2) = 6309400 bytes
SHA1 (gnat-bootstrap.i386.dragonfly.tar.bz2) = d7a8103243a2df3723d9d3c3ec0da9c3bb725214
RMD160 (gnat-bootstrap.i386.dragonfly.tar.bz2) = 9e6fde444e0ed76ee404810af6d6b7eb48659c09
Size (gnat-bootstrap.i386.dragonfly.tar.bz2) = 28205489 bytes
@@ -18,7 +33,3 @@ Size (gnat-bootstrap.x86_64.netbsd.tar.bz2) = 30572187 bytes
SHA1 (gnat-bootstrap.i386.solaris.tar.bz2) = 4962657bfc894a20ad3102c1f6fe8e566b47cb51
RMD160 (gnat-bootstrap.i386.solaris.tar.bz2) = ae72e76d0aba94451d99b9a70a3c049c9258cc82
Size (gnat-bootstrap.i386.solaris.tar.bz2) = 43247034 bytes
-SHA1 (patch-aa) = 8a6199bb91fa1051db7af154e6995c116da71e63
-SHA1 (patch-ab) = 76cff68f5f697ed5aacd41d06bbb4d9a805e9d91
-SHA1 (patch-ac) = f8a73fc95b9119ae75b64a5578b94be6dbccb837
-SHA1 (patch-ad) = 989e84c2b7c41698a07894298f7fb8a8459de5e7
diff --git a/lang/gnat-aux/files/diff-ada b/lang/gnat-aux/files/diff-ada
new file mode 100644
index 00000000000..ce49e37fb44
--- /dev/null
+++ b/lang/gnat-aux/files/diff-ada
@@ -0,0 +1,9755 @@
+--- /dev/null
++++ gcc/ada/a-intnam-dragonfly.ads
+@@ -0,0 +1,133 @@
++------------------------------------------------------------------------------
++-- --
++-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
++-- --
++-- A D A . I N T E R R U P T S . N A M E S --
++-- --
++-- S p e c --
++-- --
++-- Copyright (C) 1991-2009, Free Software Foundation, Inc. --
++-- --
++-- GNARL 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/>. --
++-- --
++-- GNARL was developed by the GNARL team at Florida State University. --
++-- Extensive contributions were provided by Ada Core Technologies, Inc. --
++-- --
++-- Copyright (C) 2010 John Marino <draco@marino.st> --
++------------------------------------------------------------------------------
++
++-- This is the DragonFly BSD THREADS version of this package
++
++with System.OS_Interface;
++
++package Ada.Interrupts.Names is
++
++ -- Beware that the mapping of names to signals may be many-to-one. There
++ -- may be aliases. Also, for all signal names that are not supported on
++ -- the current system the value of the corresponding constant will be zero.
++
++ SIGHUP : constant Interrupt_ID :=
++ System.OS_Interface.SIGHUP; -- hangup
++
++ SIGINT : constant Interrupt_ID :=
++ System.OS_Interface.SIGINT; -- interrupt (rubout)
++
++ SIGQUIT : constant Interrupt_ID :=
++ System.OS_Interface.SIGQUIT; -- quit (ASCD FS)
++
++ SIGILL : constant Interrupt_ID :=
++ System.OS_Interface.SIGILL; -- illegal instruction (not reset)
++
++ SIGTRAP : constant Interrupt_ID :=
++ System.OS_Interface.SIGTRAP; -- trace trap (not reset)
++
++ SIGIOT : constant Interrupt_ID :=
++ System.OS_Interface.SIGIOT; -- IOT instruction
++
++ SIGABRT : constant Interrupt_ID := -- used by abort,
++ System.OS_Interface.SIGABRT; -- replace SIGIOT in the future
++
++ SIGFPE : constant Interrupt_ID :=
++ System.OS_Interface.SIGFPE; -- floating point exception
++
++ SIGKILL : constant Interrupt_ID :=
++ System.OS_Interface.SIGKILL; -- kill (cannot be caught or ignored)
++
++ SIGBUS : constant Interrupt_ID :=
++ System.OS_Interface.SIGBUS; -- bus error
++
++ SIGSEGV : constant Interrupt_ID :=
++ System.OS_Interface.SIGSEGV; -- segmentation violation
++
++ SIGPIPE : constant Interrupt_ID := -- write on a pipe with
++ System.OS_Interface.SIGPIPE; -- no one to read it
++
++ SIGALRM : constant Interrupt_ID :=
++ System.OS_Interface.SIGALRM; -- alarm clock
++
++ SIGTERM : constant Interrupt_ID :=
++ System.OS_Interface.SIGTERM; -- software termination signal from kill
++
++ SIGURG : constant Interrupt_ID :=
++ System.OS_Interface.SIGURG; -- urgent condition on IO channel
++
++ SIGSTOP : constant Interrupt_ID :=
++ System.OS_Interface.SIGSTOP; -- stop (cannot be caught or ignored)
++
++ SIGTSTP : constant Interrupt_ID :=
++ System.OS_Interface.SIGTSTP; -- user stop requested from tty
++
++ SIGCONT : constant Interrupt_ID :=
++ System.OS_Interface.SIGCONT; -- stopped process has been continued
++
++ SIGCHLD : constant Interrupt_ID :=
++ System.OS_Interface.SIGCHLD; -- 4.3BSD's/POSIX name for SIGCLD
++
++ SIGCLD : constant Interrupt_ID :=
++ System.OS_Interface.SIGCLD; -- child status change
++
++ SIGTTIN : constant Interrupt_ID :=
++ System.OS_Interface.SIGTTIN; -- background tty read attempted
++
++ SIGTTOU : constant Interrupt_ID :=
++ System.OS_Interface.SIGTTOU; -- background tty write attempted
++
++ SIGIO : constant Interrupt_ID := -- input/output possible,
++ System.OS_Interface.SIGIO; -- SIGPOLL alias (Solaris)
++
++ SIGXCPU : constant Interrupt_ID :=
++ System.OS_Interface.SIGXCPU; -- CPU time limit exceeded
++
++ SIGXFSZ : constant Interrupt_ID :=
++ System.OS_Interface.SIGXFSZ; -- filesize limit exceeded
++
++ SIGVTALRM : constant Interrupt_ID :=
++ System.OS_Interface.SIGVTALRM; -- virtual timer expired
++
++ SIGPROF : constant Interrupt_ID :=
++ System.OS_Interface.SIGPROF; -- profiling timer expired
++
++ SIGWINCH : constant Interrupt_ID :=
++ System.OS_Interface.SIGWINCH; -- window size change
++
++ SIGUSR1 : constant Interrupt_ID :=
++ System.OS_Interface.SIGUSR1; -- user defined signal 1
++
++ SIGUSR2 : constant Interrupt_ID :=
++ System.OS_Interface.SIGUSR2; -- user defined signal 2
++
++end Ada.Interrupts.Names;
+--- /dev/null
++++ gcc/ada/a-intnam-netbsd.ads
+@@ -0,0 +1,136 @@
++------------------------------------------------------------------------------
++-- --
++-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
++-- --
++-- A D A . I N T E R R U P T S . N A M E S --
++-- --
++-- S p e c --
++-- --
++-- Copyright (C) 1991-2009, Free Software Foundation, Inc. --
++-- --
++-- GNARL 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/>. --
++-- --
++-- GNARL was developed by the GNARL team at Florida State University. --
++-- Extensive contributions were provided by Ada Core Technologies, Inc. --
++-- --
++-- Copyright (C) 2010 John Marino <draco@marino.st> --
++------------------------------------------------------------------------------
++
++-- This is the NetBSD THREADS version of this package
++
++with System.OS_Interface;
++
++package Ada.Interrupts.Names is
++
++ -- Beware that the mapping of names to signals may be many-to-one. There
++ -- may be aliases. Also, for all signal names that are not supported on
++ -- the current system the value of the corresponding constant will be zero.
++
++ SIGHUP : constant Interrupt_ID :=
++ System.OS_Interface.SIGHUP; -- hangup
++
++ SIGINT : constant Interrupt_ID :=
++ System.OS_Interface.SIGINT; -- interrupt (rubout)
++
++ SIGQUIT : constant Interrupt_ID :=
++ System.OS_Interface.SIGQUIT; -- quit (ASCD FS)
++
++ SIGILL : constant Interrupt_ID :=
++ System.OS_Interface.SIGILL; -- illegal instruction (not reset)
++
++ SIGTRAP : constant Interrupt_ID :=
++ System.OS_Interface.SIGTRAP; -- trace trap (not reset)
++
++ SIGIOT : constant Interrupt_ID :=
++ System.OS_Interface.SIGIOT; -- IOT instruction
++
++ SIGABRT : constant Interrupt_ID := -- used by abort,
++ System.OS_Interface.SIGABRT; -- replace SIGIOT in the future
++
++ SIGFPE : constant Interrupt_ID :=
++ System.OS_Interface.SIGFPE; -- floating point exception
++
++ SIGKILL : constant Interrupt_ID :=
++ System.OS_Interface.SIGKILL; -- kill (cannot be caught or ignored)
++
++ SIGBUS : constant Interrupt_ID :=
++ System.OS_Interface.SIGBUS; -- bus error
++
++ SIGSEGV : constant Interrupt_ID :=
++ System.OS_Interface.SIGSEGV; -- segmentation violation
++
++ SIGPIPE : constant Interrupt_ID := -- write on a pipe with
++ System.OS_Interface.SIGPIPE; -- no one to read it
++
++ SIGALRM : constant Interrupt_ID :=
++ System.OS_Interface.SIGALRM; -- alarm clock
++
++ SIGTERM : constant Interrupt_ID :=
++ System.OS_Interface.SIGTERM; -- software termination signal from kill
++
++ SIGURG : constant Interrupt_ID :=
++ System.OS_Interface.SIGURG; -- urgent condition on IO channel
++
++ SIGSTOP : constant Interrupt_ID :=
++ System.OS_Interface.SIGSTOP; -- stop (cannot be caught or ignored)
++
++ SIGTSTP : constant Interrupt_ID :=
++ System.OS_Interface.SIGTSTP; -- user stop requested from tty
++
++ SIGCONT : constant Interrupt_ID :=
++ System.OS_Interface.SIGCONT; -- stopped process has been continued
++
++ SIGCHLD : constant Interrupt_ID :=
++ System.OS_Interface.SIGCHLD; -- 4.3BSD's/POSIX name for SIGCLD
++
++ SIGCLD : constant Interrupt_ID :=
++ System.OS_Interface.SIGCLD; -- child status change
++
++ SIGTTIN : constant Interrupt_ID :=
++ System.OS_Interface.SIGTTIN; -- background tty read attempted
++
++ SIGTTOU : constant Interrupt_ID :=
++ System.OS_Interface.SIGTTOU; -- background tty write attempted
++
++ SIGIO : constant Interrupt_ID := -- input/output possible,
++ System.OS_Interface.SIGIO; -- SIGPOLL alias (Solaris)
++
++ SIGXCPU : constant Interrupt_ID :=
++ System.OS_Interface.SIGXCPU; -- CPU time limit exceeded
++
++ SIGXFSZ : constant Interrupt_ID :=
++ System.OS_Interface.SIGXFSZ; -- filesize limit exceeded
++
++ SIGVTALRM : constant Interrupt_ID :=
++ System.OS_Interface.SIGVTALRM; -- virtual timer expired
++
++ SIGPROF : constant Interrupt_ID :=
++ System.OS_Interface.SIGPROF; -- profiling timer expired
++
++ SIGWINCH : constant Interrupt_ID :=
++ System.OS_Interface.SIGWINCH; -- window size change
++
++ SIGUSR1 : constant Interrupt_ID :=
++ System.OS_Interface.SIGUSR1; -- user defined signal 1
++
++ SIGUSR2 : constant Interrupt_ID :=
++ System.OS_Interface.SIGUSR2; -- user defined signal 2
++
++ SIGPWR : constant Interrupt_ID :=
++ System.OS_Interface.SIGPWR; -- power fail/restart
++
++end Ada.Interrupts.Names;
+--- /dev/null
++++ gcc/ada/a-intnam-openbsd.ads
+@@ -0,0 +1,133 @@
++------------------------------------------------------------------------------
++-- --
++-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
++-- --
++-- A D A . I N T E R R U P T S . N A M E S --
++-- --
++-- S p e c --
++-- --
++-- Copyright (C) 1991-2009, Free Software Foundation, Inc. --
++-- --
++-- GNARL 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/>. --
++-- --
++-- GNARL was developed by the GNARL team at Florida State University. --
++-- Extensive contributions were provided by Ada Core Technologies, Inc. --
++-- --
++-- Copyright (C) 2010 John Marino <draco@marino.st> --
++------------------------------------------------------------------------------
++
++-- This is the OpenBSD THREADS version of this package
++
++with System.OS_Interface;
++
++package Ada.Interrupts.Names is
++
++ -- Beware that the mapping of names to signals may be many-to-one. There
++ -- may be aliases. Also, for all signal names that are not supported on
++ -- the current system the value of the corresponding constant will be zero.
++
++ SIGHUP : constant Interrupt_ID :=
++ System.OS_Interface.SIGHUP; -- hangup
++
++ SIGINT : constant Interrupt_ID :=
++ System.OS_Interface.SIGINT; -- interrupt (rubout)
++
++ SIGQUIT : constant Interrupt_ID :=
++ System.OS_Interface.SIGQUIT; -- quit (ASCD FS)
++
++ SIGILL : constant Interrupt_ID :=
++ System.OS_Interface.SIGILL; -- illegal instruction (not reset)
++
++ SIGTRAP : constant Interrupt_ID :=
++ System.OS_Interface.SIGTRAP; -- trace trap (not reset)
++
++ SIGIOT : constant Interrupt_ID :=
++ System.OS_Interface.SIGIOT; -- IOT instruction
++
++ SIGABRT : constant Interrupt_ID := -- used by abort,
++ System.OS_Interface.SIGABRT; -- replace SIGIOT in the future
++
++ SIGFPE : constant Interrupt_ID :=
++ System.OS_Interface.SIGFPE; -- floating point exception
++
++ SIGKILL : constant Interrupt_ID :=
++ System.OS_Interface.SIGKILL; -- kill (cannot be caught or ignored)
++
++ SIGBUS : constant Interrupt_ID :=
++ System.OS_Interface.SIGBUS; -- bus error
++
++ SIGSEGV : constant Interrupt_ID :=
++ System.OS_Interface.SIGSEGV; -- segmentation violation
++
++ SIGPIPE : constant Interrupt_ID := -- write on a pipe with
++ System.OS_Interface.SIGPIPE; -- no one to read it
++
++ SIGALRM : constant Interrupt_ID :=
++ System.OS_Interface.SIGALRM; -- alarm clock
++
++ SIGTERM : constant Interrupt_ID :=
++ System.OS_Interface.SIGTERM; -- software termination signal from kill
++
++ SIGURG : constant Interrupt_ID :=
++ System.OS_Interface.SIGURG; -- urgent condition on IO channel
++
++ SIGSTOP : constant Interrupt_ID :=
++ System.OS_Interface.SIGSTOP; -- stop (cannot be caught or ignored)
++
++ SIGTSTP : constant Interrupt_ID :=
++ System.OS_Interface.SIGTSTP; -- user stop requested from tty
++
++ SIGCONT : constant Interrupt_ID :=
++ System.OS_Interface.SIGCONT; -- stopped process has been continued
++
++ SIGCHLD : constant Interrupt_ID :=
++ System.OS_Interface.SIGCHLD; -- 4.3BSD's/POSIX name for SIGCLD
++
++ SIGCLD : constant Interrupt_ID :=
++ System.OS_Interface.SIGCLD; -- child status change
++
++ SIGTTIN : constant Interrupt_ID :=
++ System.OS_Interface.SIGTTIN; -- background tty read attempted
++
++ SIGTTOU : constant Interrupt_ID :=
++ System.OS_Interface.SIGTTOU; -- background tty write attempted
++
++ SIGIO : constant Interrupt_ID := -- input/output possible,
++ System.OS_Interface.SIGIO; -- SIGPOLL alias (Solaris)
++
++ SIGXCPU : constant Interrupt_ID :=
++ System.OS_Interface.SIGXCPU; -- CPU time limit exceeded
++
++ SIGXFSZ : constant Interrupt_ID :=
++ System.OS_Interface.SIGXFSZ; -- filesize limit exceeded
++
++ SIGVTALRM : constant Interrupt_ID :=
++ System.OS_Interface.SIGVTALRM; -- virtual timer expired
++
++ SIGPROF : constant Interrupt_ID :=
++ System.OS_Interface.SIGPROF; -- profiling timer expired
++
++ SIGWINCH : constant Interrupt_ID :=
++ System.OS_Interface.SIGWINCH; -- window size change
++
++ SIGUSR1 : constant Interrupt_ID :=
++ System.OS_Interface.SIGUSR1; -- user defined signal 1
++
++ SIGUSR2 : constant Interrupt_ID :=
++ System.OS_Interface.SIGUSR2; -- user defined signal 2
++
++end Ada.Interrupts.Names;
+--- gcc/ada/adaint.c.orig
++++ gcc/ada/adaint.c
+@@ -27,6 +27,7 @@
+ * GNAT was originally developed by the GNAT team at New York University. *
+ * Extensive contributions were provided by Ada Core Technologies Inc. *
+ * *
++ * Copyright (C) 2010 John Marino <www.dragonlace.net> *
+ ****************************************************************************/
+
+ /* This file contains those routines named by Import pragmas in
+@@ -400,7 +401,11 @@
+ __gnat_current_time
+ (void)
+ {
++#if defined(__NetBSD__) && (__NetBSD__ > 5)
++ time_t res = __time50 (NULL);
++#else
+ time_t res = time (NULL);
++#endif
+ return (OS_Time) res;
+ }
+
+@@ -1047,6 +1052,7 @@
+ strcpy (path, "GNAT-XXXXXX");
+
+ #if (defined (__FreeBSD__) || defined (__NetBSD__) || defined (__OpenBSD__) \
++ || defined (__DragonFly__) \
+ || defined (linux) || defined(__GLIBC__)) && !defined (__vxworks)
+ return mkstemp (path);
+ #elif defined (__Lynx__)
+@@ -1195,7 +1201,49 @@
+ 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)
++ strcpy (tmp_filename, "/data/local/tmp/gnat-XXXXXX");
++ else
++ sprintf (tmp_filename, "%s/local/tmp/gnat-XXXXXX", datadir);
++
++ testfd = mkstemp (tmp_filename);
++ if (testfd != -1)
++ {
++ close (testfd);
++ return;
++ }
++
++ char *sdcard = getenv ("EXTERNAL_STORAGE");
++
++ if (sdcard == NULL)
++ strcpy (tmp_filename, "/sdcard/gnat-XXXXXX");
++ else
++ sprintf (tmp_filename, "%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 (__DragonFly__) \
+ || defined (__OpenBSD__) || defined(__GLIBC__)
+ #define MAX_SAFE_PATH 1000
+ char *tmpdir = getenv ("TMPDIR");
+@@ -1617,9 +1665,12 @@
+ /* Set access time to now in local time. */
+ t = time ((time_t) 0);
+ utimbuf.actime = mktime (localtime (&t));
+-
++#if defined(__NetBSD__) && (__NetBSD__ > 5)
++ __utime50 (name, &utimbuf);
++#else
+ utime (name, &utimbuf);
+ #endif
++#endif
+ }
+
+ /* Get the list of installed standard libraries from the
+@@ -2384,6 +2435,8 @@
+ int cores = 1;
+
+ #if defined (linux) || defined (sun) || defined (AIX) \
++ || defined (__FreeBSD__) || defined (__DragonFly__) \
++ || defined (__OpenBSD__) || defined (__NetBSD__) \
+ || (defined (__alpha__) && defined (_osf_)) || defined (__APPLE__)
+ cores = (int) sysconf (_SC_NPROCESSORS_ONLN);
+
+@@ -3421,25 +3474,214 @@
+ }
+ #endif
+
+-#if defined (IS_CROSS) \
+- || (! ((defined (sparc) || defined (i386)) && defined (sun) \
+- && defined (__SVR4)) \
+- && ! (defined (linux) && (defined (i386) || defined (__x86_64__))) \
+- && ! (defined (linux) && defined (__ia64__)) \
+- && ! (defined (linux) && defined (powerpc)) \
+- && ! defined (__FreeBSD__) \
+- && ! defined (__Lynx__) \
+- && ! defined (__hpux__) \
+- && ! defined (__APPLE__) \
+- && ! defined (_AIX) \
+- && ! (defined (__alpha__) && defined (__osf__)) \
+- && ! defined (VMS) \
+- && ! defined (__MINGW32__) \
+- && ! (defined (__mips) && defined (__sgi)))
+-
+-/* Dummy function to satisfy g-trasym.o. See the preprocessor conditional
+- just above for a list of native platforms that provide a non-dummy
+- version of this procedure in libaddr2line.a. */
++/* run-time symbolic traceback support */
++#if defined (__DragonFly__) \
++ || defined (__FreeBSD__) \
++ || defined (__OpenBSD__) \
++ || defined (__NetBSD__) \
++ || (defined (__sun__) && defined (__i386__) && defined (__SVR4))
++
++/* The above platforms use the external program /usr/bin/addr2line */
++#define EXTERNAL_SYMTRACE
++
++#elif defined (VMS) \
++ || defined (_AIX) \
++ || defined (__Lynx__) \
++ || defined (__hpux__) \
++ || defined (__APPLE__) \
++ || defined (__MINGW32__) \
++ || (defined (__mips) && defined (__sgi)) \
++ || (defined (__alpha__) && defined (__osf__)) \
++ || (defined (linux) && defined (i386)) \
++ || (defined (linux) && defined (powerpc)) \
++ || (defined (linux) && defined (__ia64__)) \
++ || (defined (linux) && defined (__x86_64__)) \
++ || (defined (__SVR4) && defined (__sun__) && defined (sparc))
++
++/* The above platforms use the system library libaddr2line.a */
++#define NATIVE_SYMTRACE
++#endif
++
++#if defined (EXTERNAL_SYMTRACE) && !defined (IS_CROSS)
++
++/*
++ 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.
++*/
++
++#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;
++}
++
++#elif defined (IS_CROSS) || !defined (NATIVE_SYMTRACE)
++
++/* run-time symbolic traceback support
++ Dummy function to satisfy g-trasym.o. */
+
+ void
+ convert_addresses (const char *file_name ATTRIBUTE_UNUSED,
+@@ -3686,3 +3928,110 @@
+ return (void *) syscall (__NR_gettid);
+ }
+ #endif
++
++
++
++
++#ifdef MARINO_DISABLED_THIS
++/* JRM 31 OCT 2010: For some reason, gnatmake wouldn't function correct when
++ strcpy or sprintf & friends were replaced. I had to back out the patches.
++ I'll leave the BSD routines here in case we ever want to try again. */
++
++
++/*
++ * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
++ *
++ * Permission to use, copy, modify, and distribute this software for any
++ * purpose with or without fee is hereby granted, provided that the above
++ * copyright notice and this permission notice appear in all copies.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
++ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
++ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
++ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++ */
++
++/*
++ * original function name: strlcpy
++ * Copy src to string dst of size siz. At most siz-1 characters
++ * will be copied. Always NUL terminates (unless siz == 0).
++ * Returns strlen(src); if retval >= siz, truncation occurred.
++ *
++ * $OpenBSD: strlcpy.c,v 1.11 2006/05/05 15:27:38 millert Exp $
++ * $FreeBSD: src/lib/libc/string/strlcpy.c,v 1.10 2008/10/19 delphij Exp $
++ * $DragonFly: src/lib/libc/string/strlcpy.c,v 1.4 2005/09/18 asmodai Exp $
++ */
++
++size_t
++bsd_strlcpy(char *dst, const char *src, size_t siz)
++{
++ char *d = dst;
++ const char *s = src;
++ size_t n = siz;
++
++ /* Copy as many bytes as will fit */
++ if (n != 0) {
++ while (--n != 0) {
++ if ((*d++ = *s++) == '\0')
++ break;
++ }
++ }
++
++ /* Not enough room in dst, add NUL and traverse rest of src */
++ if (n == 0) {
++ if (siz != 0)
++ *d = '\0'; /* NUL-terminate dst */
++ while (*s++)
++ ;
++ }
++
++ return(s - src - 1); /* count does not include NUL */
++}
++
++
++
++/*
++ * Original function name: strlcat
++ * Appends src to string dst of size siz (unlike strncat, siz is the
++ * full size of dst, not space left). At most siz-1 characters
++ * will be copied. Always NUL terminates (unless siz <= strlen(dst)).
++ * Returns strlen(src) + MIN(siz, strlen(initial dst)).
++ * If retval >= siz, truncation occurred.
++ *
++ * $OpenBSD: strlcat.c,v 1.13 2005/08/08 08:05:37 espie Exp $
++ * $FreeBSD: src/lib/libc/string/strlcat.c,v 1.11 2009/01/12 delphij Exp $
++ * $DragonFly: src/lib/libc/string/strlcat.c,v 1.4 2004/12/18 asmodai Exp $
++ */
++
++size_t
++bsd_strlcat(char *dst, const char *src, size_t siz)
++{
++ char *d = dst;
++ const char *s = src;
++ size_t n = siz;
++ size_t dlen;
++
++ /* Find the end of dst and adjust bytes left but don't go past end */
++ while (n-- != 0 && *d != '\0')
++ d++;
++ dlen = d - dst;
++ n = siz - dlen;
++
++ if (n == 0)
++ return(dlen + strlen(s));
++ while (*s != '\0') {
++ if (n != 1) {
++ *d++ = *s;
++ n--;
++ }
++ s++;
++ }
++ *d = '\0';
++
++ return(dlen + (s - src)); /* count does not include NUL */
++}
++#endif
++
+--- gcc/ada/cio.c.orig
++++ gcc/ada/cio.c
+@@ -27,6 +27,7 @@
+ * GNAT was originally developed by the GNAT team at New York University. *
+ * Extensive contributions were provided by Ada Core Technologies Inc. *
+ * *
++ * Copyright (C) 2011 John Marino <www.dragonlace.net> *
+ ****************************************************************************/
+
+ #ifdef IN_RTS
+@@ -42,7 +43,8 @@
+
+ /* Don't use macros on GNU/Linux since they cause incompatible changes between
+ glibc 2.0 and 2.1 */
+-#ifdef linux
++/* Android is The exception because it uses the BIONIC library */
++#if defined(linux) && !defined(__ANDROID__)
+ #undef putchar
+ #undef getchar
+ #undef fputc
+--- gcc/ada/cstreams.c.orig
++++ gcc/ada/cstreams.c
+@@ -27,6 +27,7 @@
+ * GNAT was originally developed by the GNAT team at New York University. *
+ * Extensive contributions were provided by Ada Core Technologies Inc. *
+ * *
++ * Copyright (C) 2010 John Marino <draco@marino.st> *
+ ****************************************************************************/
+
+ /* Routines required for implementing routines in Interfaces.C.Streams */
+@@ -50,9 +51,10 @@
+ #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 */
++/* Android is The exception because it uses the BIONIC library */
+
+ #ifdef stderr
+ # undef stderr
+@@ -173,7 +175,9 @@
+ *p = '\\';
+ }
+
+-#elif defined (sgi) || defined (__FreeBSD__)
++#elif defined (sgi) || defined (__FreeBSD__) \
++ || defined (__DragonFly__) \
++ || defined (__OpenBSD__)
+
+ /* Use realpath function which resolves links and references to . and ..
+ on those Unix systems that support it. Note that GNU/Linux provides it but
+--- gcc/ada/env.c.orig
++++ gcc/ada/env.c
+@@ -27,6 +27,7 @@
+ * GNAT was originally developed by the GNAT team at New York University. *
+ * Extensive contributions were provided by Ada Core Technologies Inc. *
+ * *
++ * Copyright (C) 2010 John Marino <draco@marino.st> *
+ ****************************************************************************/
+
+ /* Tru64 UNIX V4.0F <stdlib.h> declares unsetenv() only if AES_SOURCE (which
+@@ -172,7 +173,8 @@
+ LIB$SIGNAL (status);
+ }
+
+-#elif (defined (__vxworks) && defined (__RTP__)) || defined (__APPLE__)
++#elif (defined (__vxworks) && defined (__RTP__)) || defined (__APPLE__) \
++ || defined (__OpenBSD__)
+ setenv (name, value, 1);
+
+ #else
+@@ -299,6 +301,7 @@
+ }
+ #elif defined (__MINGW32__) || defined (__FreeBSD__) || defined (__APPLE__) \
+ || (defined (__vxworks) && defined (__RTP__)) || defined (__CYGWIN__) \
++ || defined (__DragonFly__) \
+ || defined (__NetBSD__) || defined (__OpenBSD__) || defined (__rtems__)
+ /* On Windows, FreeBSD and MacOS there is no function to clean all the
+ environment but there is a "clean" way to unset a variable. So go
+--- gcc/ada/errno.c.orig
++++ gcc/ada/errno.c
+@@ -27,6 +27,7 @@
+ * GNAT was originally developed by the GNAT team at New York University. *
+ * Extensive contributions were provided by Ada Core Technologies Inc. *
+ * *
++ * Copyright (C) 2011 John Marino <www.dragonlace.net> *
+ ****************************************************************************/
+
+ /* This file provides access to the C-language errno to the Ada interface
+@@ -39,6 +40,7 @@
+ #define _REENTRANT
+ #define _THREAD_SAFE
+ #define _SGI_MP_SOURCE
++#define GNAT_SET_ERRNO
+
+ #ifdef MaRTE
+
+@@ -52,6 +54,17 @@
+
+ #endif
+
++#ifdef __ANDROID__
++
++/* The ANDROID errno.h file also defines __set_errno as an external variable
++ for use with syscalls. It should not be referenced directly, but we are
++ going to do it anyway because the alternative solution is to rename all
++ uses of __set_errno in GNAT. */
++
++#undef GNAT_SET_ERRNO
++#endif
++
++
+ #include <errno.h>
+ int
+ __get_errno(void)
+@@ -59,8 +72,10 @@
+ return errno;
+ }
+
++#ifdef GNAT_SET_ERRNO
+ void
+ __set_errno(int err)
+ {
+ errno = err;
+ }
++#endif
+--- gcc/ada/g-comlin.adb.orig
++++ gcc/ada/g-comlin.adb
+@@ -27,6 +27,7 @@
+ -- GNAT was originally developed by the GNAT team at New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc. --
+ -- --
++-- Copyright (C) 2010 John Marino <draco@marino.st> --
+ ------------------------------------------------------------------------------
+
+ with Ada.Characters.Handling; use Ada.Characters.Handling;
+@@ -512,6 +513,7 @@
+ begin
+ Index_In_Switches := 0;
+ Switch_Length := 0;
++ Param := Parameter_None;
+
+ -- Remove all leading spaces first to make sure that Index points
+ -- at the start of the first switch.
+--- gcc/ada/g-expect.adb.orig
++++ gcc/ada/g-expect.adb
+@@ -29,6 +29,7 @@
+ -- GNAT was originally developed by the GNAT team at New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc. --
+ -- --
++-- Copyright (C) 2010 John Marino <draco@marino.st> --
+ ------------------------------------------------------------------------------
+
+ with System; use System;
+@@ -1333,15 +1334,21 @@
+
+ -- The following commands are not executed on Unix systems, and are only
+ -- required for Windows systems. We are now in the parent process.
++ -- Although the if-statement is redundant, it's here so the compiler
++ -- doesn't complain about uninitialized variables.
+
+- -- Restore the old descriptors
++ if No_Fork_On_Target then
++
++ -- Restore the old descriptors
++
++ Dup2 (Input, GNAT.OS_Lib.Standin);
++ Dup2 (Output, GNAT.OS_Lib.Standout);
++ Dup2 (Error, GNAT.OS_Lib.Standerr);
++ Close (Input);
++ Close (Output);
++ Close (Error);
++ end if;
+
+- Dup2 (Input, GNAT.OS_Lib.Standin);
+- Dup2 (Output, GNAT.OS_Lib.Standout);
+- Dup2 (Error, GNAT.OS_Lib.Standerr);
+- Close (Input);
+- Close (Output);
+- Close (Error);
+ end Set_Up_Child_Communications;
+
+ ---------------------------
+--- /dev/null
++++ gcc/ada/g-socthi-bsd.adb
+@@ -0,0 +1,379 @@
++------------------------------------------------------------------------------
++-- --
++-- 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-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. --
++-- --
++-- Copyright (C) 2010 John Marino <draco@marino.st> --
++------------------------------------------------------------------------------
++
++-- 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
++
++ Unknown_System_Error : constant C.Strings.chars_ptr :=
++ C.Strings.New_String ("Unknown system error");
++
++ 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
++ Res : constant C.int := Syscall_Accept (S, Addr, Addrlen);
++ begin
++
++ Disable_SIGPIPE (Res);
++ return Res;
++
++ 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 : C.int;
++ Arg : access C.int) return C.int
++ is
++ -- Currently all requests are of the FIONBIO type, so always calc flags
++ use Interfaces;
++ flags : constant Unsigned_32 :=
++ Unsigned_32 (C_Fcntl (S, SOSC.F_GETFL, 0));
++ nonblock : constant Unsigned_32 := Unsigned_32 (SOSC.FNDELAY);
++ enabled : constant Boolean := Arg.all = 1;
++ newval : C.int;
++ begin
++ if Req = SOSC.FIONBIO then
++ if enabled then
++ newval := C.int (flags or nonblock);
++ elsif (flags and nonblock) > 0 then
++ newval := C.int (flags - nonblock);
++ else
++ newval := C.int (flags);
++ end if;
++ return C_Fcntl (Fd => S, Cmd => SOSC.F_SETFL, Val => newval);
++ else
++ return C_Ioctl (Fd => S, Req => Req, Arg => Arg);
++ end if;
++ 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
++ Res : constant C.int := Syscall_Socket (Domain, Typ, Protocol);
++ begin
++
++ Disable_SIGPIPE (Res);
++ return Res;
++
++ 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 C.Strings.chars_ptr
++ is separate;
++
++end GNAT.Sockets.Thin;
+--- /dev/null
++++ gcc/ada/g-socthi-netbsd.adb
+@@ -0,0 +1,381 @@
++------------------------------------------------------------------------------
++-- --
++-- 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-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. --
++-- --
++-- Copyright (C) 2010, 2011 John Marino <www.dragonlace.net> --
++------------------------------------------------------------------------------
++
++-- 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 NetBSD 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.
++-- NetBSD uses binary compatibility functions that are forcing the use of
++-- their own files rather than sharing the *BSD versions.
++
++with GNAT.OS_Lib; use GNAT.OS_Lib;
++
++with Interfaces.C; use Interfaces.C;
++
++package body GNAT.Sockets.Thin is
++
++ Unknown_System_Error : constant C.Strings.chars_ptr :=
++ C.Strings.New_String ("Unknown system error");
++
++ 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, "__socket30");
++ -- 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
++ Res : constant C.int := Syscall_Accept (S, Addr, Addrlen);
++ begin
++
++ Disable_SIGPIPE (Res);
++ return Res;
++
++ 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 : C.int;
++ Arg : access C.int) return C.int
++ is
++ -- Currently all requests are of the FIONBIO type, so always calc flags
++ use Interfaces;
++ flags : constant Unsigned_32 :=
++ Unsigned_32 (C_Fcntl (S, SOSC.F_GETFL, 0));
++ nonblock : constant Unsigned_32 := Unsigned_32 (SOSC.FNDELAY);
++ enabled : constant Boolean := Arg.all = 1;
++ newval : C.int;
++ begin
++ if Req = SOSC.FIONBIO then
++ if enabled then
++ newval := C.int (flags or nonblock);
++ elsif (flags and nonblock) > 0 then
++ newval := C.int (flags - nonblock);
++ else
++ newval := C.int (flags);
++ end if;
++ return C_Fcntl (Fd => S, Cmd => SOSC.F_SETFL, Val => newval);
++ else
++ return C_Ioctl (Fd => S, Req => Req, Arg => Arg);
++ end if;
++ 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
++ Res : constant C.int := Syscall_Socket (Domain, Typ, Protocol);
++ begin
++
++ Disable_SIGPIPE (Res);
++ return Res;
++
++ 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 C.Strings.chars_ptr
++ is separate;
++
++end GNAT.Sockets.Thin;
+--- /dev/null
++++ gcc/ada/g-socthi-netbsd6.ads
+@@ -0,0 +1,263 @@
++------------------------------------------------------------------------------
++-- --
++-- GNAT COMPILER COMPONENTS --
++-- --
++-- G N A T . S O C K E T S . T H I N --
++-- --
++-- S p e c --
++-- --
++-- Copyright (C) 2001-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. --
++-- --
++-- Copyright (C) 2011 John Marino <www.dragonlace.net> --
++------------------------------------------------------------------------------
++
++-- 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 NetBSD 6+ version
++
++with Interfaces.C.Strings;
++
++with GNAT.OS_Lib;
++with GNAT.Sockets.Thin_Common;
++
++with System;
++with System.CRTL;
++
++package GNAT.Sockets.Thin is
++
++ -- This package is intended for hosts implementing BSD sockets with a
++ -- standard interface. It will be used as a default for all the platforms
++ -- that do not have a specific version of this file.
++
++ use Thin_Common;
++
++ package C renames Interfaces.C;
++
++ use type System.CRTL.ssize_t;
++
++ function Socket_Errno return Integer renames GNAT.OS_Lib.Errno;
++ -- Returns last socket error number
++
++ function Socket_Error_Message (Errno : Integer) return C.Strings.chars_ptr;
++ -- Returns the error message string for the error number Errno. If Errno is
++ -- not known, returns "Unknown system error".
++
++ function Host_Errno return Integer;
++ pragma Import (C, Host_Errno, "__gnat_get_h_errno");
++ -- Returns last host error number
++
++ package Host_Error_Messages is
++
++ function Host_Error_Message
++ (H_Errno : Integer) return C.Strings.chars_ptr;
++ -- Returns the error message string for the host error number H_Errno.
++ -- If H_Errno is not known, returns "Unknown system error".
++
++ end Host_Error_Messages;
++
++ --------------------------------
++ -- Standard library functions --
++ --------------------------------
++
++ function C_Accept
++ (S : C.int;
++ Addr : System.Address;
++ Addrlen : not null access C.int) return C.int;
++
++ function C_Bind
++ (S : C.int;
++ Name : System.Address;
++ Namelen : C.int) return C.int;
++
++ function C_Close
++ (Fd : C.int) return C.int;
++
++ function C_Connect
++ (S : C.int;
++ Name : System.Address;
++ Namelen : C.int) return C.int;
++
++ function C_Gethostname
++ (Name : System.Address;
++ Namelen : C.int) return C.int;
++
++ function C_Getpeername
++ (S : C.int;
++ Name : System.Address;
++ Namelen : not null access C.int) return C.int;
++
++ function C_Getsockname
++ (S : C.int;
++ Name : System.Address;
++ Namelen : not null access C.int) return C.int;
++
++ function C_Getsockopt
++ (S : C.int;
++ Level : C.int;
++ Optname : C.int;
++ Optval : System.Address;
++ Optlen : not null access C.int) return C.int;
++
++ function Socket_Ioctl
++ (S : C.int;
++ Req : C.int;
++ Arg : access C.int) return C.int;
++
++ function C_Listen
++ (S : C.int;
++ Backlog : C.int) return C.int;
++
++ function C_Recv
++ (S : C.int;
++ Msg : System.Address;
++ Len : C.int;
++ Flags : C.int) return C.int;
++
++ 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;
++
++ function C_Recvmsg
++ (S : C.int;
++ Msg : System.Address;
++ Flags : C.int) return System.CRTL.ssize_t;
++
++ function C_Select
++ (Nfds : C.int;
++ Readfds : access Fd_Set;
++ Writefds : access Fd_Set;
++ Exceptfds : access Fd_Set;
++ Timeout : Timeval_Access) return C.int;
++
++ function C_Sendmsg
++ (S : C.int;
++ Msg : System.Address;
++ Flags : C.int) return System.CRTL.ssize_t;
++
++ function C_Sendto
++ (S : C.int;
++ Msg : System.Address;
++ Len : C.int;
++ Flags : C.int;
++ To : System.Address;
++ Tolen : C.int) return C.int;
++
++ function C_Setsockopt
++ (S : C.int;
++ Level : C.int;
++ Optname : C.int;
++ Optval : System.Address;
++ Optlen : C.int) return C.int;
++
++ function C_Shutdown
++ (S : C.int;
++ How : C.int) return C.int;
++
++ function C_Socket
++ (Domain : C.int;
++ Typ : C.int;
++ Protocol : C.int) return C.int;
++
++ function C_System
++ (Command : System.Address) return C.int;
++
++ -------------------------------------------------------
++ -- Signalling file descriptors for selector abortion --
++ -------------------------------------------------------
++
++ package Signalling_Fds is
++
++ function Create (Fds : not null access Fd_Pair) return C.int;
++ pragma Convention (C, Create);
++ -- Create a pair of connected descriptors suitable for use with C_Select
++ -- (used for signalling in Selector objects).
++
++ function Read (Rsig : C.int) return C.int;
++ pragma Convention (C, Read);
++ -- Read one byte of data from rsig, the read end of a pair of signalling
++ -- fds created by Create_Signalling_Fds.
++
++ function Write (Wsig : C.int) return C.int;
++ pragma Convention (C, Write);
++ -- Write one byte of data to wsig, the write end of a pair of signalling
++ -- fds created by Create_Signalling_Fds.
++
++ procedure Close (Sig : C.int);
++ pragma Convention (C, Close);
++ -- Close one end of a pair of signalling fds (ignoring any error)
++
++ end Signalling_Fds;
++
++ -------------------------------------------
++ -- Nonreentrant network databases access --
++ -------------------------------------------
++
++ -- The following are used only on systems that have nonreentrant
++ -- getXXXbyYYY functions, and do NOT have corresponding getXXXbyYYY_
++ -- functions. Currently, LynxOS is the only such system.
++
++ function Nonreentrant_Gethostbyname
++ (Name : C.char_array) return Hostent_Access;
++
++ function Nonreentrant_Gethostbyaddr
++ (Addr : System.Address;
++ Addr_Len : C.int;
++ Addr_Type : C.int) return Hostent_Access;
++
++ function Nonreentrant_Getservbyname
++ (Name : C.char_array;
++ Proto : C.char_array) return Servent_Access;
++
++ function Nonreentrant_Getservbyport
++ (Port : C.int;
++ Proto : C.char_array) return Servent_Access;
++
++ procedure Initialize;
++ procedure Finalize;
++
++private
++ pragma Import (C, C_Bind, "bind");
++ pragma Import (C, C_Close, "close");
++ pragma Import (C, C_Gethostname, "gethostname");
++ pragma Import (C, C_Getpeername, "getpeername");
++ pragma Import (C, C_Getsockname, "getsockname");
++ pragma Import (C, C_Getsockopt, "getsockopt");
++ pragma Import (C, C_Listen, "listen");
++ pragma Import (C, C_Select, "__select50");
++ pragma Import (C, C_Setsockopt, "setsockopt");
++ pragma Import (C, C_Shutdown, "shutdown");
++ pragma Import (C, C_System, "system");
++
++ pragma Import (C, Nonreentrant_Gethostbyname, "gethostbyname");
++ pragma Import (C, Nonreentrant_Gethostbyaddr, "gethostbyaddr");
++ pragma Import (C, Nonreentrant_Getservbyname, "getservbyname");
++ pragma Import (C, Nonreentrant_Getservbyport, "getservbyport");
++
++end GNAT.Sockets.Thin;
+--- /dev/null
++++ gcc/ada/g-trasym-bsd.adb
+@@ -0,0 +1,150 @@
++------------------------------------------------------------------------------
++-- --
++-- GNAT RUN-TIME COMPONENTS --
++-- --
++-- G N A T . 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 GNAT.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 : Exception_Occurrence) return String is
++ begin
++ return Symbolic_Traceback (Tracebacks (E));
++ end Symbolic_Traceback;
++
++end GNAT.Traceback.Symbolic;
+--- gcc/ada/gnatchop.adb.orig
++++ gcc/ada/gnatchop.adb
+@@ -21,6 +21,7 @@
+ -- GNAT was originally developed by the GNAT team at New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc. --
+ -- --
++-- Copyright (C) 2010 John Marino <draco@marino.st> --
+ ------------------------------------------------------------------------------
+
+ with Ada.Characters.Conversions; use Ada.Characters.Conversions;
+@@ -45,7 +46,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'("gnatgcc");
+ -- May be modified by switch --GCC=
+
+ Gcc_Set : Boolean := False;
+--- gcc/ada/gnatlink.adb.orig
++++ gcc/ada/gnatlink.adb
+@@ -21,6 +21,7 @@
+ -- GNAT was originally developed by the GNAT team at New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc. --
+ -- --
++-- Copyright (C) 2010 John Marino <draco@marino.st> --
+ ------------------------------------------------------------------------------
+
+ -- Gnatlink usage: please consult the gnat documentation
+@@ -137,7 +138,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 ("gnatgcc", "gnatlink");
+
+ Read_Mode : constant String := "r" & ASCII.NUL;
+
+--- gcc/ada/gnatvsn.ads.orig
++++ gcc/ada/gnatvsn.ads
+@@ -27,6 +27,7 @@
+ -- GNAT was originally developed by the GNAT team at New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc. --
+ -- --
++-- Copyright (C) 2010 John Marino <draco@marino.st> --
+ ------------------------------------------------------------------------------
+
+ -- This package spec holds version information for the GNAT tools.
+@@ -34,7 +35,7 @@
+
+ package Gnatvsn is
+
+- Gnat_Static_Version_String : constant String := "GNU Ada";
++ Gnat_Static_Version_String : constant String := "GNAT AUX";
+ -- Static string identifying this version, that can be used as an argument
+ -- to e.g. pragma Ident.
+
+--- gcc/ada/gsocket.h.orig
++++ gcc/ada/gsocket.h
+@@ -27,6 +27,7 @@
+ * GNAT was originally developed by the GNAT team at New York University. *
+ * Extensive contributions were provided by Ada Core Technologies Inc. *
+ * *
++ * Copyright (C) 2010 John Marino <draco@marino.st> *
+ ****************************************************************************/
+
+ #if defined(__nucleus__) || defined(VTHREADS)
+@@ -194,7 +195,14 @@
+ #include <netdb.h>
+ #endif
+
++#if defined(__ANDROID__)
++#include <sys/select.h>
++#endif
++
+ #if defined (_AIX) || defined (__FreeBSD__) || defined (__hpux__) || \
++ defined (__OpenBSD__) || \
++ defined (__NetBSD__) || \
++ defined (__DragonFly__) || \
+ defined (__osf__) || defined (_WIN32) || defined (__APPLE__)
+ # define HAVE_THREAD_SAFE_GETxxxBYyyy 1
+
+@@ -227,7 +235,13 @@
+ # endif
+ #endif
+
+-#if defined (__FreeBSD__) || defined (__vxworks) || defined(__rtems__)
++#if defined (__FreeBSD__) \
++ || defined (__DragonFly__) \
++ || defined (__OpenBSD__) \
++ || defined (__NetBSD__) \
++ || defined (__ANDROID__) \
++ || defined (__vxworks) \
++ || defined(__rtems__)
+ # define Has_Sockaddr_Len 1
+ #else
+ # define Has_Sockaddr_Len 0
+--- gcc/ada/init.c.orig
++++ gcc/ada/init.c
+@@ -27,6 +27,7 @@
+ * GNAT was originally developed by the GNAT team at New York University. *
+ * Extensive contributions were provided by Ada Core Technologies Inc. *
+ * *
++ * Copyright (C) 2010, 2011 John Marino <www.dragonlace.net> *
+ ****************************************************************************/
+
+ /* This unit contains initialization circuits that are system dependent.
+@@ -519,7 +520,7 @@
+ /* GNU/Linux Section */
+ /*********************/
+
+-#elif defined (linux)
++#elif defined (linux) && !defined(__ANDROID__)
+
+ #include <signal.h>
+
+@@ -1724,7 +1725,7 @@
+ /* FreeBSD Section */
+ /*******************/
+
+-#elif defined (__FreeBSD__)
++#elif defined (__FreeBSD__) || defined (__DragonFly__)
+
+ #include <signal.h>
+ #include <sys/ucontext.h>
+@@ -1769,7 +1770,7 @@
+ }
+
+ void
+-__gnat_install_handler ()
++__gnat_install_handler (void)
+ {
+ struct sigaction act;
+
+@@ -1791,6 +1792,77 @@
+ }
+
+ /*******************/
++/* Android Section */
++/*******************/
++
++#elif defined(__ANDROID__)
++
++#include <signal.h>
++
++static void
++__gnat_error_handler (int sig,
++ struct siginfo *si ATTRIBUTE_UNUSED,
++ void *ucontext ATTRIBUTE_UNUSED)
++{
++ struct Exception_Data *exception;
++ const char *msg;
++
++ switch (sig)
++ {
++ case SIGFPE:
++ exception = &constraint_error;
++ msg = "SIGFPE";
++ break;
++
++ case SIGILL:
++ exception = &constraint_error;
++ msg = "SIGILL";
++ break;
++
++ case SIGSEGV:
++ exception = &storage_error;
++ msg = "stack overflow or erroneous memory access";
++ break;
++
++ case SIGBUS:
++ exception = &constraint_error;
++ msg = "SIGBUS";
++ break;
++
++ default:
++ exception = &program_error;
++ msg = "unhandled signal";
++ }
++
++ Raise_From_Signal_Handler (exception, msg);
++}
++
++void
++__gnat_install_handler (void)
++{
++ struct sigaction act;
++
++ act.sa_sigaction = __gnat_error_handler;
++ act.sa_flags = SA_NODEFER | SA_RESTART | SA_SIGINFO;
++ sigemptyset (&act.sa_mask);
++
++ /* Do not install handlers if interrupt state is "System". */
++ if (__gnat_get_interrupt_state (SIGABRT) != 's')
++ sigaction (SIGABRT, &act, NULL);
++ if (__gnat_get_interrupt_state (SIGFPE) != 's')
++ sigaction (SIGFPE, &act, NULL);
++ if (__gnat_get_interrupt_state (SIGILL) != 's')
++ sigaction (SIGILL, &act, NULL);
++ if (__gnat_get_interrupt_state (SIGBUS) != 's')
++ sigaction (SIGBUS, &act, NULL);
++ if (__gnat_get_interrupt_state (SIGSEGV) != 's')
++ sigaction (SIGSEGV, &act, NULL);
++
++ __gnat_handler_installed = 1;
++}
++
++
++/*******************/
+ /* VxWorks Section */
+ /*******************/
+
+@@ -2320,6 +2392,7 @@
+
+ #if defined (_WIN32) || defined (__INTERIX) \
+ || defined (__Lynx__) || defined(__NetBSD__) || defined(__FreeBSD__) \
++ || defined (__DragonFly__) \
+ || defined (__OpenBSD__)
+
+ #define HAVE_GNAT_INIT_FLOAT
+--- gcc/ada/initialize.c.orig
++++ gcc/ada/initialize.c
+@@ -27,6 +27,7 @@
+ * GNAT was originally developed by the GNAT team at New York University. *
+ * Extensive contributions were provided by Ada Core Technologies Inc. *
+ * *
++ * Copyright (C) 2010 John Marino <draco@marino.st> *
+ ****************************************************************************/
+
+ /* This unit provides default implementation for __gnat_initialize ()
+@@ -255,6 +256,7 @@
+ /******************************************/
+
+ #elif defined (__Lynx__) || defined (__FreeBSD__) || defined(__NetBSD__) \
++ || defined (__DragonFly__) \
+ || defined (__OpenBSD__)
+
+ extern void __gnat_init_float (void);
+--- gcc/ada/link.c.orig
++++ gcc/ada/link.c
+@@ -27,6 +27,7 @@
+ * GNAT was originally developed by the GNAT team at New York University. *
+ * Extensive contributions were provided by Ada Core Technologies Inc. *
+ * *
++ * Copyright (C) 2010, 2011 John Marino <www.dragonlace.net> *
+ ****************************************************************************/
+
+ /* This file contains host-specific parameters describing the behavior */
+@@ -187,7 +188,10 @@
+ const char *__gnat_default_libgcc_subdir = "lib";
+ #endif
+
+-#elif defined (__FreeBSD__)
++#elif defined (__FreeBSD__) \
++ || defined (__OpenBSD__) \
++ || defined (__NetBSD__) \
++ || defined (__DragonFly__)
+ const char *__gnat_object_file_option = "";
+ const char *__gnat_run_path_option = "-Wl,-rpath,";
+ char __gnat_shared_libgnat_default = STATIC;
+--- gcc/ada/make.adb.orig
++++ gcc/ada/make.adb
+@@ -21,6 +21,7 @@
+ -- GNAT was originally developed by the GNAT team at New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc. --
+ -- --
++-- Copyright (C) 2010 John Marino <draco@marino.st> --
+ ------------------------------------------------------------------------------
+
+ with ALI; use ALI;
+@@ -652,7 +653,7 @@
+ -- Compiler, Binder & Linker Data and Subprograms --
+ ----------------------------------------------------
+
+- Gcc : String_Access := Program_Name ("gcc", "gnatmake");
++ Gcc : String_Access := Program_Name ("gnatgcc", "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
+@@ -341,6 +341,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
+
+@@ -790,7 +795,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;
+
+@@ -1285,6 +1290,9 @@
+ Opts.Increment_Last;
+ Opts.Table (Opts.Last) :=
+ new String'(Name_Buffer (1 .. Name_Len));
++ if Name_Len = 2 and then Name_Buffer (1 .. 2) = "-R" then
++ Rpath_Disabled := True;
++ end if;
+ end if;
+
+ Current := Element.Next;
+--- gcc/ada/mlib-utl.adb.orig
++++ gcc/ada/mlib-utl.adb
+@@ -21,6 +21,7 @@
+ -- GNAT was originally developed by the GNAT team at New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc. --
+ -- --
++-- Copyright (C) 2010 John Marino <draco@marino.st> --
+ ------------------------------------------------------------------------------
+
+ with MLib.Fil; use MLib.Fil;
+@@ -412,7 +413,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 ("gnatgcc", "gnatmake");
+ end if;
+
+ Gcc_Exec := Locate_Exec_On_Path (Gcc_Name.all);
+--- gcc/ada/prj-makr.adb.orig
++++ gcc/ada/prj-makr.adb
+@@ -21,6 +21,7 @@
+ -- GNAT was originally developed by the GNAT team at New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc. --
+ -- --
++-- Copyright (C) 2010 John Marino <draco@marino.st> --
+ ------------------------------------------------------------------------------
+
+ with Csets;
+@@ -110,7 +111,7 @@
+
+ procedure Dup2 (Old_Fd, New_Fd : File_Descriptor);
+
+- Gcc : constant String := "gcc";
++ Gcc : constant String := "gnatgcc";
+ Gcc_Path : String_Access := null;
+
+ Non_Empty_Node : constant Project_Node_Id := 1;
+--- gcc/ada/s-fileio.adb.orig
++++ gcc/ada/s-fileio.adb
+@@ -231,7 +231,7 @@
+ Close_Status : int := 0;
+ Dup_Strm : Boolean := False;
+ File : AFCB_Ptr renames File_Ptr.all;
+- Errno : Integer;
++ Errno : Integer := 0;
+
+ begin
+ -- Take a task lock, to protect the global data value Open_Files
+--- /dev/null
++++ gcc/ada/s-osinte-android.ads
+@@ -0,0 +1,566 @@
++------------------------------------------------------------------------------
++-- --
++-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
++-- --
++-- S Y S T E M . O S _ I N T E R F A C E --
++-- --
++-- S p e c --
++-- --
++-- Copyright (C) 1991-1994, Florida State University --
++-- Copyright (C) 1995-2010, Free Software Foundation, Inc. --
++-- --
++-- GNARL 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. GNARL 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 GNARL; 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. --
++-- --
++-- GNARL was developed by the GNARL team at Florida State University. --
++-- Extensive contributions were provided by Ada Core Technologies, Inc. --
++-- --
++------------------------------------------------------------------------------
++
++-- This is a GNU/Linux (GNU/LinuxThreads) version of this package
++
++-- This package encapsulates all direct interfaces to OS services
++-- that are needed by the tasking run-time (libgnarl).
++
++-- PLEASE DO NOT add any with-clauses to this package or remove the pragma
++-- Preelaborate. This package is designed to be a bottom-level (leaf) package.
++
++with Ada.Unchecked_Conversion;
++with Interfaces.C;
++with System.Linux;
++
++package System.OS_Interface is
++ pragma Preelaborate;
++
++ subtype int is Interfaces.C.int;
++ subtype char is Interfaces.C.char;
++ subtype short is Interfaces.C.short;
++ subtype long is Interfaces.C.long;
++ subtype unsigned is Interfaces.C.unsigned;
++ subtype unsigned_short is Interfaces.C.unsigned_short;
++ subtype unsigned_long is Interfaces.C.unsigned_long;
++ subtype unsigned_char is Interfaces.C.unsigned_char;
++ subtype plain_char is Interfaces.C.plain_char;
++ subtype size_t is Interfaces.C.size_t;
++
++ -----------
++ -- Errno --
++ -----------
++
++ function errno return int;
++ pragma Import (C, errno, "__get_errno");
++
++ EAGAIN : constant := System.Linux.EAGAIN;
++ EINTR : constant := System.Linux.EINTR;
++ EINVAL : constant := System.Linux.EINVAL;
++ ENOMEM : constant := System.Linux.ENOMEM;
++ EPERM : constant := System.Linux.EPERM;
++ ETIMEDOUT : constant := System.Linux.ETIMEDOUT;
++
++ -------------
++ -- Signals --
++ -------------
++
++ Max_Interrupt : constant := 63;
++ type Signal is new int range 0 .. Max_Interrupt;
++ for Signal'Size use int'Size;
++
++ SIGHUP : constant := System.Linux.SIGHUP;
++ SIGINT : constant := System.Linux.SIGINT;
++ SIGQUIT : constant := System.Linux.SIGQUIT;
++ SIGILL : constant := System.Linux.SIGILL;
++ SIGTRAP : constant := System.Linux.SIGTRAP;
++ SIGIOT : constant := System.Linux.SIGIOT;
++ SIGABRT : constant := System.Linux.SIGABRT;
++ SIGFPE : constant := System.Linux.SIGFPE;
++ SIGKILL : constant := System.Linux.SIGKILL;
++ SIGBUS : constant := System.Linux.SIGBUS;
++ SIGSEGV : constant := System.Linux.SIGSEGV;
++ SIGPIPE : constant := System.Linux.SIGPIPE;
++ SIGALRM : constant := System.Linux.SIGALRM;
++ SIGTERM : constant := System.Linux.SIGTERM;
++ SIGUSR1 : constant := System.Linux.SIGUSR1;
++ SIGUSR2 : constant := System.Linux.SIGUSR2;
++ SIGCLD : constant := System.Linux.SIGCLD;
++ SIGCHLD : constant := System.Linux.SIGCHLD;
++ SIGPWR : constant := System.Linux.SIGPWR;
++ SIGWINCH : constant := System.Linux.SIGWINCH;
++ SIGURG : constant := System.Linux.SIGURG;
++ SIGPOLL : constant := System.Linux.SIGPOLL;
++ SIGIO : constant := System.Linux.SIGIO;
++ SIGLOST : constant := System.Linux.SIGLOST;
++ SIGSTOP : constant := System.Linux.SIGSTOP;
++ SIGTSTP : constant := System.Linux.SIGTSTP;
++ SIGCONT : constant := System.Linux.SIGCONT;
++ SIGTTIN : constant := System.Linux.SIGTTIN;
++ SIGTTOU : constant := System.Linux.SIGTTOU;
++ SIGVTALRM : constant := System.Linux.SIGVTALRM;
++ SIGPROF : constant := System.Linux.SIGPROF;
++ SIGXCPU : constant := System.Linux.SIGXCPU;
++ SIGXFSZ : constant := System.Linux.SIGXFSZ;
++ SIGUNUSED : constant := System.Linux.SIGUNUSED;
++ SIGSTKFLT : constant := System.Linux.SIGSTKFLT;
++ SIGLTHRRES : constant := System.Linux.SIGLTHRRES;
++ SIGLTHRCAN : constant := System.Linux.SIGLTHRCAN;
++ SIGLTHRDBG : constant := System.Linux.SIGLTHRDBG;
++
++ SIGADAABORT : constant := SIGABRT;
++ -- Change this if you want to use another signal for task abort.
++ -- SIGTERM might be a good one.
++
++ type Signal_Set is array (Natural range <>) of Signal;
++
++ Unmasked : constant Signal_Set := (
++ SIGTRAP,
++ -- To enable debugging on multithreaded applications, mark SIGTRAP to
++ -- be kept unmasked.
++
++ SIGBUS,
++
++ SIGTTIN, SIGTTOU, SIGTSTP,
++ -- Keep these three signals unmasked so that background processes
++ -- and IO behaves as normal "C" applications
++
++ SIGPROF,
++ -- To avoid confusing the profiler
++
++ SIGKILL, SIGSTOP,
++ -- These two signals actually cannot be masked;
++ -- POSIX simply won't allow it.
++
++ SIGLTHRRES, SIGLTHRCAN, SIGLTHRDBG);
++ -- These three signals are used by GNU/LinuxThreads starting from
++ -- glibc 2.1 (future 2.2).
++
++ Reserved : constant Signal_Set :=
++ -- I am not sure why the following two signals are reserved.
++ -- I guess they are not supported by this version of GNU/Linux.
++ (SIGVTALRM, SIGUNUSED);
++
++ type sigset_t is private;
++
++ function sigaddset (set : access sigset_t; sig : Signal) return int;
++ pragma Import (C, sigaddset, "sigaddset");
++
++ function sigdelset (set : access sigset_t; sig : Signal) return int;
++ pragma Import (C, sigdelset, "sigdelset");
++
++ function sigfillset (set : access sigset_t) return int;
++ pragma Import (C, sigfillset, "sigfillset");
++
++ function sigismember (set : access sigset_t; sig : Signal) return int;
++ pragma Import (C, sigismember, "sigismember");
++
++ function sigemptyset (set : access sigset_t) return int;
++ pragma Import (C, sigemptyset, "sigemptyset");
++
++ type union_type_3 is new String (1 .. 116);
++ type siginfo_t is record
++ si_signo : int;
++ si_code : int;
++ si_errno : int;
++ X_data : union_type_3;
++ end record;
++ pragma Convention (C, siginfo_t);
++
++ type struct_sigaction is record
++ sa_handler : System.Address;
++ sa_mask : sigset_t;
++ sa_flags : Interfaces.C.unsigned_long;
++ sa_restorer : System.Address;
++ end record;
++ pragma Convention (C, struct_sigaction);
++
++ type struct_sigaction_ptr is access all struct_sigaction;
++
++ type Machine_State is record
++ eip : unsigned_long;
++ ebx : unsigned_long;
++ esp : unsigned_long;
++ ebp : unsigned_long;
++ esi : unsigned_long;
++ edi : unsigned_long;
++ end record;
++ type Machine_State_Ptr is access all Machine_State;
++
++ SA_SIGINFO : constant := System.Linux.SA_SIGINFO;
++ SA_ONSTACK : constant := System.Linux.SA_ONSTACK;
++
++ SIG_BLOCK : constant := 0;
++ SIG_UNBLOCK : constant := 1;
++ SIG_SETMASK : constant := 2;
++
++ SIG_DFL : constant := 0;
++ SIG_IGN : constant := 1;
++
++ function sigaction
++ (sig : Signal;
++ act : struct_sigaction_ptr;
++ oact : struct_sigaction_ptr) return int;
++ pragma Import (C, sigaction, "sigaction");
++
++ ----------
++ -- Time --
++ ----------
++
++ type timespec is private;
++
++ function To_Duration (TS : timespec) return Duration;
++ pragma Inline (To_Duration);
++
++ function To_Timespec (D : Duration) return timespec;
++ pragma Inline (To_Timespec);
++
++ function sysconf (name : int) return long;
++ pragma Import (C, sysconf);
++
++ SC_CLK_TCK : constant := 2;
++ SC_NPROCESSORS_ONLN : constant := 84;
++
++ -------------------------
++ -- Priority Scheduling --
++ -------------------------
++
++ SCHED_OTHER : constant := 0;
++ SCHED_FIFO : constant := 1;
++ SCHED_RR : constant := 2;
++
++ function To_Target_Priority
++ (Prio : System.Any_Priority) return Interfaces.C.int;
++ -- Maps System.Any_Priority to a POSIX priority
++
++ -------------
++ -- Process --
++ -------------
++
++ type pid_t is private;
++
++ function kill (pid : pid_t; sig : Signal) return int;
++ pragma Import (C, kill, "kill");
++
++ function getpid return pid_t;
++ pragma Import (C, getpid, "getpid");
++
++ -------------
++ -- Threads --
++ -------------
++
++ type Thread_Body is access
++ function (arg : System.Address) return System.Address;
++ pragma Convention (C, Thread_Body);
++
++ function Thread_Body_Access is new
++ Ada.Unchecked_Conversion (System.Address, Thread_Body);
++
++ type pthread_t is new unsigned_long;
++ subtype Thread_Id is pthread_t;
++
++ function To_pthread_t is new Ada.Unchecked_Conversion
++ (unsigned_long, pthread_t);
++
++ type pthread_mutex_t is limited private;
++ type pthread_cond_t is limited private;
++ type pthread_attr_t is limited private;
++ type pthread_mutexattr_t is limited private;
++ type pthread_condattr_t is limited private;
++ type pthread_key_t is private;
++
++ PTHREAD_CREATE_DETACHED : constant := 1;
++
++ -----------
++ -- Stack --
++ -----------
++
++ type stack_t is record
++ ss_sp : System.Address;
++ ss_flags : int;
++ ss_size : size_t;
++ end record;
++ pragma Convention (C, stack_t);
++
++ function sigaltstack
++ (ss : not null access stack_t;
++ oss : access stack_t) return int;
++ pragma Import (C, sigaltstack, "sigaltstack");
++
++ Alternate_Stack : aliased System.Address;
++ pragma Import (C, Alternate_Stack, "__gnat_alternate_stack");
++ -- The alternate signal stack for stack overflows
++
++ Alternate_Stack_Size : constant := 16 * 1024;
++ -- This must be in keeping with init.c:__gnat_alternate_stack
++
++ function Get_Stack_Base (thread : pthread_t) return Address;
++ pragma Inline (Get_Stack_Base);
++ -- This is a dummy procedure to share some GNULLI files
++
++ ---------------------------------------
++ -- Nonstandard Thread Initialization --
++ ---------------------------------------
++
++ procedure pthread_init;
++ pragma Inline (pthread_init);
++ -- This is a dummy procedure to share some GNULLI files
++
++ -------------------------
++ -- POSIX.1c Section 3 --
++ -------------------------
++
++ function sigwait (set : access sigset_t; sig : access Signal) return int;
++ pragma Import (C, sigwait, "sigwait");
++
++ function pthread_kill (thread : pthread_t; sig : Signal) return int;
++ pragma Import (C, pthread_kill, "pthread_kill");
++
++ function pthread_sigmask
++ (how : int;
++ set : access sigset_t;
++ oset : access sigset_t) return int;
++ pragma Import (C, pthread_sigmask, "pthread_sigmask");
++
++ --------------------------
++ -- POSIX.1c Section 11 --
++ --------------------------
++
++ function pthread_mutexattr_init
++ (attr : access pthread_mutexattr_t) return int;
++ pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
++
++ function pthread_mutexattr_destroy
++ (attr : access pthread_mutexattr_t) return int;
++ pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
++
++ function pthread_mutex_init
++ (mutex : access pthread_mutex_t;
++ attr : access pthread_mutexattr_t) return int;
++ pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
++
++ function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
++ pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
++
++ function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
++ pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
++
++ function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
++ pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
++
++ function pthread_condattr_init
++ (attr : access pthread_condattr_t) return int;
++ pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
++
++ function pthread_condattr_destroy
++ (attr : access pthread_condattr_t) return int;
++ pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
++
++ function pthread_cond_init
++ (cond : access pthread_cond_t;
++ attr : access pthread_condattr_t) return int;
++ pragma Import (C, pthread_cond_init, "pthread_cond_init");
++
++ function pthread_cond_destroy (cond : access pthread_cond_t) return int;
++ pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
++
++ function pthread_cond_signal (cond : access pthread_cond_t) return int;
++ pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
++
++ function pthread_cond_wait
++ (cond : access pthread_cond_t;
++ mutex : access pthread_mutex_t) return int;
++ pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
++
++ function pthread_cond_timedwait
++ (cond : access pthread_cond_t;
++ mutex : access pthread_mutex_t;
++ abstime : access timespec) return int;
++ pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
++
++ --------------------------
++ -- POSIX.1c Section 13 --
++ --------------------------
++
++ type struct_sched_param is record
++ sched_priority : int; -- scheduling priority
++ end record;
++ pragma Convention (C, struct_sched_param);
++
++ function pthread_setschedparam
++ (thread : pthread_t;
++ policy : int;
++ param : access struct_sched_param) return int;
++ pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
++
++ function pthread_attr_setschedpolicy
++ (attr : access pthread_attr_t;
++ policy : int) return int;
++ pragma Import
++ (C, pthread_attr_setschedpolicy, "pthread_attr_setschedpolicy");
++
++ function sched_yield return int;
++ pragma Import (C, sched_yield, "sched_yield");
++
++ ---------------------------
++ -- P1003.1c - Section 16 --
++ ---------------------------
++
++ function pthread_attr_init
++ (attributes : access pthread_attr_t) return int;
++ pragma Import (C, pthread_attr_init, "pthread_attr_init");
++
++ function pthread_attr_destroy
++ (attributes : access pthread_attr_t) return int;
++ pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
++
++ function pthread_attr_setdetachstate
++ (attr : access pthread_attr_t;
++ detachstate : int) return int;
++ pragma Import
++ (C, pthread_attr_setdetachstate, "pthread_attr_setdetachstate");
++
++ function pthread_attr_setstacksize
++ (attr : access pthread_attr_t;
++ stacksize : size_t) return int;
++ pragma Import (C, pthread_attr_setstacksize, "pthread_attr_setstacksize");
++
++ function pthread_create
++ (thread : access pthread_t;
++ attributes : access pthread_attr_t;
++ start_routine : Thread_Body;
++ arg : System.Address) return int;
++ pragma Import (C, pthread_create, "pthread_create");
++
++ procedure pthread_exit (status : System.Address);
++ pragma Import (C, pthread_exit, "pthread_exit");
++
++ function pthread_self return pthread_t;
++ pragma Import (C, pthread_self, "pthread_self");
++
++ function lwp_self return System.Address;
++ pragma Import (C, lwp_self, "__gnat_lwp_self");
++
++ --------------------------
++ -- POSIX.1c Section 17 --
++ --------------------------
++
++ function pthread_setspecific
++ (key : pthread_key_t;
++ value : System.Address) return int;
++ pragma Import (C, pthread_setspecific, "pthread_setspecific");
++
++ function pthread_getspecific (key : pthread_key_t) return System.Address;
++ pragma Import (C, pthread_getspecific, "pthread_getspecific");
++
++ type destructor_pointer is access procedure (arg : System.Address);
++ pragma Convention (C, destructor_pointer);
++
++ function pthread_key_create
++ (key : access pthread_key_t;
++ destructor : destructor_pointer) return int;
++ pragma Import (C, pthread_key_create, "pthread_key_create");
++
++ CPU_SETSIZE : constant := 1_024;
++
++ type bit_field is array (1 .. CPU_SETSIZE) of Boolean;
++ for bit_field'Size use CPU_SETSIZE;
++ pragma Pack (bit_field);
++ pragma Convention (C, bit_field);
++
++ type cpu_set_t is record
++ bits : bit_field;
++ end record;
++ pragma Convention (C, cpu_set_t);
++
++ function pthread_setaffinity_np
++ (thread : pthread_t;
++ cpusetsize : size_t;
++ cpuset : access cpu_set_t) return int;
++ pragma Import (C, pthread_setaffinity_np, "pthread_setaffinity_np");
++ pragma Weak_External (pthread_setaffinity_np);
++ -- Use a weak symbol because this function may be available or not,
++ -- depending on the version of the system.
++
++ function pthread_attr_setaffinity_np
++ (attr : access pthread_attr_t;
++ cpusetsize : size_t;
++ cpuset : access cpu_set_t) return int;
++ pragma Import (C, pthread_attr_setaffinity_np,
++ "pthread_attr_setaffinity_np");
++ pragma Weak_External (pthread_attr_setaffinity_np);
++ -- Use a weak symbol because this function may be available or not,
++ -- depending on the version of the system.
++
++private
++
++ type sigset_t is array (0 .. 127) of unsigned_char;
++ pragma Convention (C, sigset_t);
++ for sigset_t'Alignment use Interfaces.C.unsigned_long'Alignment;
++
++ pragma Warnings (Off);
++ for struct_sigaction use record
++ sa_handler at Linux.sa_handler_pos range 0 .. Standard'Address_Size - 1;
++ sa_mask at Linux.sa_mask_pos range 0 .. 1023;
++ sa_flags at Linux.sa_flags_pos range 0 .. Standard'Address_Size - 1;
++ end record;
++ -- We intentionally leave sa_restorer unspecified and let the compiler
++ -- append it after the last field, so disable corresponding warning.
++ pragma Warnings (On);
++
++ type pid_t is new int;
++
++ type time_t is new long;
++
++ type timespec is record
++ tv_sec : time_t;
++ tv_nsec : long;
++ end record;
++ pragma Convention (C, timespec);
++
++ type pthread_attr_t is record
++ detachstate : int;
++ schedpolicy : int;
++ schedparam : struct_sched_param;
++ inheritsched : int;
++ scope : int;
++ guardsize : size_t;
++ stackaddr_set : int;
++ stackaddr : System.Address;
++ stacksize : size_t;
++ end record;
++ pragma Convention (C, pthread_attr_t);
++
++ type pthread_condattr_t is record
++ dummy : int;
++ end record;
++ pragma Convention (C, pthread_condattr_t);
++
++ type pthread_mutexattr_t is record
++ mutexkind : int;
++ end record;
++ pragma Convention (C, pthread_mutexattr_t);
++
++ type pthread_mutex_t is new System.Linux.pthread_mutex_t;
++
++ type unsigned_long_long_t is mod 2 ** 64;
++ -- Interfaces.C.Extensions isn't preelaborated so cannot be with-ed
++
++ type pthread_cond_t is array (0 .. 47) of unsigned_char;
++ pragma Convention (C, pthread_cond_t);
++ for pthread_cond_t'Alignment use unsigned_long_long_t'Alignment;
++
++ type pthread_key_t is new unsigned;
++
++end System.OS_Interface;
+--- /dev/null
++++ gcc/ada/s-osinte-dragonfly.adb
+@@ -0,0 +1,117 @@
++------------------------------------------------------------------------------
++-- --
++-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
++-- --
++-- S Y S T E M . O S _ I N T E R F A C E --
++-- --
++-- B o d y --
++-- --
++-- Copyright (C) 1991-2009, Free Software Foundation, Inc. --
++-- --
++-- GNARL 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/>. --
++-- --
++-- GNARL was developed by the GNARL team at Florida State University. It is --
++-- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
++-- State University (http://www.gnat.com). --
++-- --
++-- Copyright (C) 2010 John Marino <draco@marino.st> --
++------------------------------------------------------------------------------
++
++-- This is the DragonFly THREADS version of this package
++
++with Interfaces.C; use Interfaces.C;
++
++package body System.OS_Interface is
++
++ -----------
++ -- Errno --
++ -----------
++
++ function Errno return int is
++ type int_ptr is access all int;
++
++ function internal_errno return int_ptr;
++ pragma Import (C, internal_errno, "__get_errno");
++
++ begin
++ return (internal_errno.all);
++ end Errno;
++
++ --------------------
++ -- Get_Stack_Base --
++ --------------------
++
++ function Get_Stack_Base (thread : pthread_t) return Address is
++ pragma Unreferenced (thread);
++ begin
++ return Null_Address;
++ end Get_Stack_Base;
++
++ ------------------
++ -- pthread_init --
++ ------------------
++
++ procedure pthread_init is
++ begin
++ null;
++ end pthread_init;
++
++ -----------------
++ -- To_Duration --
++ -----------------
++
++ function To_Duration (TS : timespec) return Duration is
++ begin
++ return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
++ end To_Duration;
++
++ ------------------------
++ -- To_Target_Priority --
++ ------------------------
++
++ function To_Target_Priority
++ (Prio : System.Any_Priority) return Interfaces.C.int
++ is
++ begin
++ return Interfaces.C.int (Prio);
++ end To_Target_Priority;
++
++ -----------------
++ -- To_Timespec --
++ -----------------
++
++ function To_Timespec (D : Duration) return timespec is
++ S : time_t;
++ F : Duration;
++
++ begin
++ S := time_t (Long_Long_Integer (D));
++ F := D - Duration (S);
++
++ -- If F has negative value due to a round-up, adjust for positive F
++ -- value.
++
++ if F < 0.0 then
++ S := S - 1;
++ F := F + 1.0;
++ end if;
++
++ return timespec'(tv_sec => S,
++ tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
++ end To_Timespec;
++
++end System.OS_Interface;
+--- /dev/null
++++ gcc/ada/s-osinte-dragonfly.ads
+@@ -0,0 +1,648 @@
++------------------------------------------------------------------------------
++-- --
++-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
++-- --
++-- S Y S T E M . O S _ I N T E R F A C E --
++-- --
++-- S p e c --
++-- --
++-- Copyright (C) 1991-1994, Florida State University --
++-- Copyright (C) 1995-2009, Free Software Foundation, Inc. --
++-- --
++-- GNARL 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. GNARL 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 GNARL; 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. --
++-- --
++-- GNARL was developed by the GNARL team at Florida State University. It is --
++-- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
++-- State University (http://www.gnat.com). --
++-- --
++-- Copyright (C) 2010 John Marino <draco@marino.st> --
++------------------------------------------------------------------------------
++
++-- This is the DragonFly BSD PTHREADS version of this package
++
++-- This package encapsulates all direct interfaces to OS services
++-- that are needed by the tasking run-time (libgnarl).
++
++-- PLEASE DO NOT add any with-clauses to this package or remove the pragma
++-- Preelaborate. This package is designed to be a bottom-level (leaf) package.
++
++with Ada.Unchecked_Conversion;
++
++with Interfaces.C;
++
++package System.OS_Interface is
++ pragma Preelaborate;
++
++ pragma Linker_Options ("-pthread");
++
++ subtype int is Interfaces.C.int;
++ subtype short is Interfaces.C.short;
++ subtype long is Interfaces.C.long;
++ subtype unsigned is Interfaces.C.unsigned;
++ subtype unsigned_short is Interfaces.C.unsigned_short;
++ subtype unsigned_long is Interfaces.C.unsigned_long;
++ subtype unsigned_char is Interfaces.C.unsigned_char;
++ subtype plain_char is Interfaces.C.plain_char;
++ subtype size_t is Interfaces.C.size_t;
++
++ -----------
++ -- Errno --
++ -----------
++
++ function Errno return int;
++ pragma Inline (Errno);
++
++ EAGAIN : constant := 35;
++ EINTR : constant := 4;
++ EINVAL : constant := 22;
++ ENOMEM : constant := 12;
++ ETIMEDOUT : constant := 60;
++
++ -------------
++ -- Signals --
++ -------------
++
++ Max_Interrupt : constant := 31;
++ type Signal is new int range 0 .. Max_Interrupt;
++ for Signal'Size use int'Size;
++
++ SIGHUP : constant := 1; -- hangup
++ SIGINT : constant := 2; -- interrupt (rubout)
++ SIGQUIT : constant := 3; -- quit (ASCD FS)
++ SIGILL : constant := 4; -- illegal instruction (not reset)
++ SIGTRAP : constant := 5; -- trace trap (not reset)
++ SIGIOT : constant := 6; -- IOT instruction
++ SIGABRT : constant := 6; -- used by abort, replace SIGIOT in the future
++ SIGEMT : constant := 7; -- EMT instruction
++ SIGFPE : constant := 8; -- floating point exception
++ SIGKILL : constant := 9; -- kill (cannot be caught or ignored)
++ SIGBUS : constant := 10; -- bus error
++ SIGSEGV : constant := 11; -- segmentation violation
++ SIGSYS : constant := 12; -- bad argument to system call
++ SIGPIPE : constant := 13; -- write on a pipe with no one to read it
++ SIGALRM : constant := 14; -- alarm clock
++ SIGTERM : constant := 15; -- software termination signal from kill
++ SIGURG : constant := 16; -- urgent condition on IO channel
++ SIGSTOP : constant := 17; -- stop (cannot be caught or ignored)
++ SIGTSTP : constant := 18; -- user stop requested from tty
++ SIGCONT : constant := 19; -- stopped process has been continued
++ SIGCLD : constant := 20; -- alias for SIGCHLD
++ SIGCHLD : constant := 20; -- child status change
++ SIGTTIN : constant := 21; -- background tty read attempted
++ SIGTTOU : constant := 22; -- background tty write attempted
++ SIGIO : constant := 23; -- I/O possible (Solaris SIGPOLL alias)
++ SIGXCPU : constant := 24; -- CPU time limit exceeded
++ SIGXFSZ : constant := 25; -- filesize limit exceeded
++ SIGVTALRM : constant := 26; -- virtual timer expired
++ SIGPROF : constant := 27; -- profiling timer expired
++ SIGWINCH : constant := 28; -- window size change
++ SIGINFO : constant := 29; -- information request (BSD)
++ SIGUSR1 : constant := 30; -- user defined signal 1
++ SIGUSR2 : constant := 31; -- user defined signal 2
++
++ SIGADAABORT : constant := SIGABRT;
++ -- Change this if you want to use another signal for task abort.
++ -- SIGTERM might be a good one.
++
++ type Signal_Set is array (Natural range <>) of Signal;
++
++ -- Interrupts that must be unmasked at all times. DragonFlyBSD
++ -- pthreads will not allow an application to mask out any
++ -- interrupt needed by the threads library.
++ Unmasked : constant Signal_Set :=
++ (SIGTRAP, SIGBUS, SIGTTIN, SIGTTOU, SIGTSTP);
++
++ -- DragonFlyBSD will uses SIGPROF for timing. Do not allow a
++ -- handler to attach to this signal.
++ Reserved : constant Signal_Set := (0 .. 0 => SIGPROF);
++
++ type sigset_t is private;
++
++ function sigaddset
++ (set : access sigset_t;
++ sig : Signal) return int;
++ pragma Import (C, sigaddset, "sigaddset");
++
++ function sigdelset
++ (set : access sigset_t;
++ sig : Signal) return int;
++ pragma Import (C, sigdelset, "sigdelset");
++
++ function sigfillset (set : access sigset_t) return int;
++ pragma Import (C, sigfillset, "sigfillset");
++
++ function sigismember
++ (set : access sigset_t;
++ sig : Signal) return int;
++ pragma Import (C, sigismember, "sigismember");
++
++ function sigemptyset (set : access sigset_t) return int;
++ pragma Import (C, sigemptyset, "sigemptyset");
++
++ -- sigcontext is architecture dependent, so define it private
++ type struct_sigcontext is private;
++
++ type old_struct_sigaction is record
++ sa_handler : System.Address;
++ sa_mask : sigset_t;
++ sa_flags : int;
++ end record;
++ pragma Convention (C, old_struct_sigaction);
++
++ type new_struct_sigaction is record
++ sa_handler : System.Address;
++ sa_flags : int;
++ sa_mask : sigset_t;
++ end record;
++ pragma Convention (C, new_struct_sigaction);
++
++ subtype struct_sigaction is new_struct_sigaction;
++ type struct_sigaction_ptr is access all struct_sigaction;
++
++ SIG_BLOCK : constant := 1;
++ SIG_UNBLOCK : constant := 2;
++ SIG_SETMASK : constant := 3;
++
++ SIG_DFL : constant := 0;
++ SIG_IGN : constant := 1;
++
++ SA_SIGINFO : constant := 16#0040#;
++ SA_ONSTACK : constant := 16#0001#;
++
++ function sigaction
++ (sig : Signal;
++ act : struct_sigaction_ptr;
++ oact : struct_sigaction_ptr) return int;
++ pragma Import (C, sigaction, "sigaction");
++
++ ----------
++ -- Time --
++ ----------
++
++ Time_Slice_Supported : constant Boolean := True;
++ -- Indicates whether time slicing is supported (i.e SCHED_RR is supported)
++
++ type timespec is private;
++
++ function nanosleep (rqtp, rmtp : access timespec) return int;
++ pragma Import (C, nanosleep, "nanosleep");
++
++ type clockid_t is private;
++
++ CLOCK_REALTIME : constant clockid_t;
++
++ function clock_gettime
++ (clock_id : clockid_t;
++ tp : access timespec)
++ return int;
++ pragma Import (C, clock_gettime, "clock_gettime");
++
++ function To_Duration (TS : timespec) return Duration;
++ pragma Inline (To_Duration);
++
++ function To_Timespec (D : Duration) return timespec;
++ pragma Inline (To_Timespec);
++
++ type struct_timezone is record
++ tz_minuteswest : int;
++ tz_dsttime : int;
++ end record;
++ pragma Convention (C, struct_timezone);
++
++ procedure usleep (useconds : unsigned_long);
++ pragma Import (C, usleep, "usleep");
++
++ -------------------------
++ -- Priority Scheduling --
++ -------------------------
++
++ SCHED_FIFO : constant := 1;
++ SCHED_OTHER : constant := 2;
++ SCHED_RR : constant := 3;
++
++ function To_Target_Priority
++ (Prio : System.Any_Priority) return Interfaces.C.int;
++ -- Maps System.Any_Priority to a POSIX priority
++
++ -------------
++ -- Process --
++ -------------
++
++ type pid_t is private;
++
++ function kill (pid : pid_t; sig : Signal) return int;
++ pragma Import (C, kill, "kill");
++
++ function getpid return pid_t;
++ pragma Import (C, getpid, "getpid");
++
++ ---------
++ -- LWP --
++ ---------
++
++ function lwp_self return System.Address;
++ -- lwp_self does not exist on this thread library, revert to pthread_self
++ -- which is the closest approximation (with getpid). This function is
++ -- needed to share 7staprop.adb across POSIX-like targets.
++ pragma Import (C, lwp_self, "pthread_self");
++
++ -------------
++ -- Threads --
++ -------------
++
++ type Thread_Body is access
++ function (arg : System.Address) return System.Address;
++ pragma Convention (C, Thread_Body);
++
++ function Thread_Body_Access is new
++ Ada.Unchecked_Conversion (System.Address, Thread_Body);
++
++ type pthread_t is private;
++ subtype Thread_Id is pthread_t;
++
++ type pthread_mutex_t is limited private;
++ type pthread_cond_t is limited private;
++ type pthread_attr_t is limited private;
++ type pthread_mutexattr_t is limited private;
++ type pthread_condattr_t is limited private;
++ type pthread_key_t is private;
++
++ PTHREAD_CREATE_DETACHED : constant := 1;
++ PTHREAD_CREATE_JOINABLE : constant := 0;
++
++ PTHREAD_SCOPE_PROCESS : constant := 0;
++ PTHREAD_SCOPE_SYSTEM : constant := 2;
++
++ -----------
++ -- Stack --
++ -----------
++
++ type stack_t is record
++ ss_sp : System.Address;
++ ss_size : size_t;
++ ss_flags : int;
++ end record;
++ pragma Convention (C, stack_t);
++
++ function sigaltstack
++ (ss : not null access stack_t;
++ oss : access stack_t) return int;
++ pragma Import (C, sigaltstack, "sigaltstack");
++
++ Alternate_Stack : aliased System.Address;
++ -- This is a dummy definition, never used (Alternate_Stack_Size is null)
++
++ Alternate_Stack_Size : constant := 0;
++ -- No alternate signal stack is used on this platform
++
++ Stack_Base_Available : constant Boolean := False;
++ -- Indicates whether the stack base is available on this target. This
++ -- allows us to share s-osinte.adb between all the FSU run time. Note that
++ -- this value can only be true if pthread_t has a complete definition that
++ -- corresponds exactly to the C header files.
++
++ function Get_Stack_Base (thread : pthread_t) return Address;
++ pragma Inline (Get_Stack_Base);
++ -- returns the stack base of the specified thread. Only call this function
++ -- when Stack_Base_Available is True.
++
++ function Get_Page_Size return size_t;
++ function Get_Page_Size return Address;
++ pragma Import (C, Get_Page_Size, "getpagesize");
++ -- Returns the size of a page
++
++ PROT_NONE : constant := 0;
++ PROT_READ : constant := 1;
++ PROT_WRITE : constant := 2;
++ PROT_EXEC : constant := 4;
++ PROT_ALL : constant := PROT_READ + PROT_WRITE + PROT_EXEC;
++ PROT_ON : constant := PROT_NONE;
++ PROT_OFF : constant := PROT_ALL;
++
++ function mprotect (addr : Address; len : size_t; prot : int) return int;
++ pragma Import (C, mprotect);
++
++ ---------------------------------------
++ -- Nonstandard Thread Initialization --
++ ---------------------------------------
++
++ -- FSU_THREADS requires pthread_init, which is nonstandard and this should
++ -- be invoked during the elaboration of s-taprop.adb.
++
++ -- DragonFlyBSD does not require this so we provide an empty Ada body
++
++ procedure pthread_init;
++
++ -------------------------
++ -- POSIX.1c Section 3 --
++ -------------------------
++
++ function sigwait
++ (set : access sigset_t;
++ sig : access Signal) return int;
++ pragma Import (C, sigwait, "sigwait");
++
++ function pthread_kill
++ (thread : pthread_t;
++ sig : Signal) return int;
++ pragma Import (C, pthread_kill, "pthread_kill");
++
++ function pthread_sigmask
++ (how : int;
++ set : access sigset_t;
++ oset : access sigset_t) return int;
++ pragma Import (C, pthread_sigmask, "pthread_sigmask");
++
++ --------------------------
++ -- POSIX.1c Section 11 --
++ --------------------------
++
++ function pthread_mutexattr_init
++ (attr : access pthread_mutexattr_t) return int;
++ pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
++
++ function pthread_mutexattr_destroy
++ (attr : access pthread_mutexattr_t) return int;
++ pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
++
++ function pthread_mutex_init
++ (mutex : access pthread_mutex_t;
++ attr : access pthread_mutexattr_t) return int;
++ pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
++
++ function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
++ pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
++
++ function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
++ pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
++
++ function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
++ pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
++
++ function pthread_condattr_init
++ (attr : access pthread_condattr_t) return int;
++ pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
++
++ function pthread_condattr_destroy
++ (attr : access pthread_condattr_t) return int;
++ pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
++
++ function pthread_cond_init
++ (cond : access pthread_cond_t;
++ attr : access pthread_condattr_t) return int;
++ pragma Import (C, pthread_cond_init, "pthread_cond_init");
++
++ function pthread_cond_destroy (cond : access pthread_cond_t) return int;
++ pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
++
++ function pthread_cond_signal (cond : access pthread_cond_t) return int;
++ pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
++
++ function pthread_cond_wait
++ (cond : access pthread_cond_t;
++ mutex : access pthread_mutex_t) return int;
++ pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
++
++ function pthread_cond_timedwait
++ (cond : access pthread_cond_t;
++ mutex : access pthread_mutex_t;
++ abstime : access timespec) return int;
++ pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
++
++ Relative_Timed_Wait : constant Boolean := False;
++ -- pthread_cond_timedwait requires an absolute delay time
++
++ --------------------------
++ -- POSIX.1c Section 13 --
++ --------------------------
++
++ PTHREAD_PRIO_NONE : constant := 0;
++ PTHREAD_PRIO_PROTECT : constant := 2;
++ PTHREAD_PRIO_INHERIT : constant := 1;
++
++ function pthread_mutexattr_setprotocol
++ (attr : access pthread_mutexattr_t;
++ protocol : int) return int;
++ pragma Import
++ (C, pthread_mutexattr_setprotocol, "pthread_mutexattr_setprotocol");
++
++ function pthread_mutexattr_getprotocol
++ (attr : access pthread_mutexattr_t;
++ protocol : access int) return int;
++ pragma Import
++ (C, pthread_mutexattr_getprotocol, "pthread_mutexattr_getprotocol");
++
++ function pthread_mutexattr_setprioceiling
++ (attr : access pthread_mutexattr_t;
++ prioceiling : int) return int;
++ pragma Import
++ (C, pthread_mutexattr_setprioceiling,
++ "pthread_mutexattr_setprioceiling");
++
++ function pthread_mutexattr_getprioceiling
++ (attr : access pthread_mutexattr_t;
++ prioceiling : access int) return int;
++ pragma Import
++ (C, pthread_mutexattr_getprioceiling,
++ "pthread_mutexattr_getprioceiling");
++
++ type struct_sched_param is record
++ sched_priority : int;
++ end record;
++ pragma Convention (C, struct_sched_param);
++
++ function pthread_getschedparam
++ (thread : pthread_t;
++ policy : access int;
++ param : access struct_sched_param) return int;
++ pragma Import (C, pthread_getschedparam, "pthread_getschedparam");
++
++ function pthread_setschedparam
++ (thread : pthread_t;
++ policy : int;
++ param : access struct_sched_param) return int;
++ pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
++
++ function pthread_attr_setscope
++ (attr : access pthread_attr_t;
++ contentionscope : int) return int;
++ pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
++
++ function pthread_attr_getscope
++ (attr : access pthread_attr_t;
++ contentionscope : access int) return int;
++ pragma Import (C, pthread_attr_getscope, "pthread_attr_getscope");
++
++ function pthread_attr_setinheritsched
++ (attr : access pthread_attr_t;
++ inheritsched : int) return int;
++ pragma Import
++ (C, pthread_attr_setinheritsched, "pthread_attr_setinheritsched");
++
++ function pthread_attr_getinheritsched
++ (attr : access pthread_attr_t;
++ inheritsched : access int) return int;
++ pragma Import
++ (C, pthread_attr_getinheritsched, "pthread_attr_getinheritsched");
++
++ function pthread_attr_setschedpolicy
++ (attr : access pthread_attr_t;
++ policy : int) return int;
++ pragma Import (C, pthread_attr_setschedpolicy,
++ "pthread_attr_setschedpolicy");
++
++ function pthread_attr_getschedpolicy
++ (attr : access pthread_attr_t;
++ policy : access int) return int;
++ pragma Import (C, pthread_attr_getschedpolicy,
++ "pthread_attr_getschedpolicy");
++
++ function pthread_attr_setschedparam
++ (attr : access pthread_attr_t;
++ sched_param : int) return int;
++ pragma Import (C, pthread_attr_setschedparam, "pthread_attr_setschedparam");
++
++ function pthread_attr_getschedparam
++ (attr : access pthread_attr_t;
++ sched_param : access int) return int;
++ pragma Import (C, pthread_attr_getschedparam, "pthread_attr_getschedparam");
++
++ function sched_yield return int;
++ pragma Import (C, sched_yield, "pthread_yield");
++
++ --------------------------
++ -- P1003.1c Section 16 --
++ --------------------------
++
++ function pthread_attr_init (attributes : access pthread_attr_t) return int;
++ pragma Import (C, pthread_attr_init, "pthread_attr_init");
++
++ function pthread_attr_destroy
++ (attributes : access pthread_attr_t) return int;
++ pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
++
++ function pthread_attr_setdetachstate
++ (attr : access pthread_attr_t;
++ detachstate : int) return int;
++ pragma Import
++ (C, pthread_attr_setdetachstate, "pthread_attr_setdetachstate");
++
++ function pthread_attr_getdetachstate
++ (attr : access pthread_attr_t;
++ detachstate : access int) return int;
++ pragma Import
++ (C, pthread_attr_getdetachstate, "pthread_attr_getdetachstate");
++
++ function pthread_attr_getstacksize
++ (attr : access pthread_attr_t;
++ stacksize : access size_t) return int;
++ pragma Import
++ (C, pthread_attr_getstacksize, "pthread_attr_getstacksize");
++
++ function pthread_attr_setstacksize
++ (attr : access pthread_attr_t;
++ stacksize : size_t) return int;
++ pragma Import
++ (C, pthread_attr_setstacksize, "pthread_attr_setstacksize");
++
++ function pthread_create
++ (thread : access pthread_t;
++ attributes : access pthread_attr_t;
++ start_routine : Thread_Body;
++ arg : System.Address) return int;
++ pragma Import (C, pthread_create, "pthread_create");
++
++ function pthread_detach (thread : pthread_t) return int;
++ pragma Import (C, pthread_detach, "pthread_detach");
++
++ procedure pthread_exit (status : System.Address);
++ pragma Import (C, pthread_exit, "pthread_exit");
++
++ function pthread_self return pthread_t;
++ pragma Import (C, pthread_self, "pthread_self");
++
++ --------------------------
++ -- POSIX.1c Section 17 --
++ --------------------------
++
++ function pthread_setspecific
++ (key : pthread_key_t;
++ value : System.Address) return int;
++ pragma Import (C, pthread_setspecific, "pthread_setspecific");
++
++ function pthread_getspecific (key : pthread_key_t) return System.Address;
++ pragma Import (C, pthread_getspecific, "pthread_getspecific");
++
++ type destructor_pointer is access procedure (arg : System.Address);
++ pragma Convention (C, destructor_pointer);
++
++ function pthread_key_create
++ (key : access pthread_key_t;
++ destructor : destructor_pointer) return int;
++ pragma Import (C, pthread_key_create, "pthread_key_create");
++
++ ------------------------------------
++ -- Non-portable Pthread Functions --
++ ------------------------------------
++
++ function pthread_set_name_np
++ (thread : pthread_t;
++ name : System.Address) return int;
++ pragma Import (C, pthread_set_name_np, "pthread_set_name_np");
++
++private
++
++ type sigset_t is array (1 .. 4) of unsigned;
++
++ -- In DragonFlyBSD the component sa_handler turns out to
++ -- be one a union type, and the selector is a macro:
++ -- #define sa_handler __sigaction_u._handler
++ -- #define sa_sigaction __sigaction_u._sigaction
++
++ -- Should we add a signal_context type here ???
++ -- How could it be done independent of the CPU architecture ???
++ -- sigcontext type is opaque, so it is architecturally neutral.
++ -- It is always passed as an access type, so define it as an empty record
++ -- since the contents are not used anywhere.
++
++ type struct_sigcontext is null record;
++ pragma Convention (C, struct_sigcontext);
++
++ type pid_t is new int;
++
++ type time_t is new long;
++
++ type timespec is record
++ tv_sec : time_t;
++ tv_nsec : long;
++ end record;
++ pragma Convention (C, timespec);
++
++ type clockid_t is new int;
++ CLOCK_REALTIME : constant clockid_t := 0;
++
++ type pthread_t is new System.Address;
++ type pthread_attr_t is new System.Address;
++ type pthread_mutex_t is new System.Address;
++ type pthread_mutexattr_t is new System.Address;
++ type pthread_cond_t is new System.Address;
++ type pthread_condattr_t is new System.Address;
++ type pthread_key_t is new int;
++
++end System.OS_Interface;
+--- gcc/ada/s-osinte-freebsd.adb.orig
++++ gcc/ada/s-osinte-freebsd.adb
+@@ -28,6 +28,7 @@
+ -- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
+ -- State University (http://www.gnat.com). --
+ -- --
++-- Copyright (C) 2010 John Marino <draco@marino.st> --
+ ------------------------------------------------------------------------------
+
+ -- This is the FreeBSD THREADS version of this package
+@@ -44,7 +45,7 @@
+ type int_ptr is access all int;
+
+ function internal_errno return int_ptr;
+- pragma Import (C, internal_errno, "__error");
++ pragma Import (C, internal_errno, "__get_errno");
+
+ begin
+ return (internal_errno.all);
+@@ -57,7 +58,7 @@
+ function Get_Stack_Base (thread : pthread_t) return Address is
+ pragma Unreferenced (thread);
+ begin
+- return (0);
++ return Null_Address;
+ end Get_Stack_Base;
+
+ ------------------
+@@ -75,7 +76,7 @@
+
+ function To_Duration (TS : timespec) return Duration is
+ begin
+- return Duration (TS.ts_sec) + Duration (TS.ts_nsec) / 10#1#E9;
++ return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
+ end To_Duration;
+
+ ------------------------
+@@ -108,8 +109,8 @@
+ F := F + 1.0;
+ end if;
+
+- return timespec'(ts_sec => S,
+- ts_nsec => long (Long_Long_Integer (F * 10#1#E9)));
++ return timespec'(tv_sec => S,
++ tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
+ end To_Timespec;
+
+ end System.OS_Interface;
+--- /dev/null
++++ gcc/ada/s-osinte-freebsd32.ads
+@@ -0,0 +1,648 @@
++------------------------------------------------------------------------------
++-- --
++-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
++-- --
++-- S Y S T E M . O S _ I N T E R F A C E --
++-- --
++-- S p e c --
++-- --
++-- Copyright (C) 1991-1994, Florida State University --
++-- Copyright (C) 1995-2009, Free Software Foundation, Inc. --
++-- --
++-- GNARL 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. GNARL 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 GNARL; 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. --
++-- --
++-- GNARL was developed by the GNARL team at Florida State University. It is --
++-- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
++-- State University (http://www.gnat.com). --
++-- --
++-- Copyright (C) 2010 John Marino <draco@marino.st> --
++------------------------------------------------------------------------------
++
++-- This is the FreeBSD PTHREADS version of this package
++
++-- This package encapsulates all direct interfaces to OS services
++-- that are needed by the tasking run-time (libgnarl).
++
++-- PLEASE DO NOT add any with-clauses to this package or remove the pragma
++-- Preelaborate. This package is designed to be a bottom-level (leaf) package.
++
++with Ada.Unchecked_Conversion;
++
++with Interfaces.C;
++
++package System.OS_Interface is
++ pragma Preelaborate;
++
++ pragma Linker_Options ("-pthread");
++
++ subtype int is Interfaces.C.int;
++ subtype short is Interfaces.C.short;
++ subtype long is Interfaces.C.long;
++ subtype unsigned is Interfaces.C.unsigned;
++ subtype unsigned_short is Interfaces.C.unsigned_short;
++ subtype unsigned_long is Interfaces.C.unsigned_long;
++ subtype unsigned_char is Interfaces.C.unsigned_char;
++ subtype plain_char is Interfaces.C.plain_char;
++ subtype size_t is Interfaces.C.size_t;
++
++ -----------
++ -- Errno --
++ -----------
++
++ function Errno return int;
++ pragma Inline (Errno);
++
++ EAGAIN : constant := 35;
++ EINTR : constant := 4;
++ EINVAL : constant := 22;
++ ENOMEM : constant := 12;
++ ETIMEDOUT : constant := 60;
++
++ -------------
++ -- Signals --
++ -------------
++
++ Max_Interrupt : constant := 31;
++ type Signal is new int range 0 .. Max_Interrupt;
++ for Signal'Size use int'Size;
++
++ SIGHUP : constant := 1; -- hangup
++ SIGINT : constant := 2; -- interrupt (rubout)
++ SIGQUIT : constant := 3; -- quit (ASCD FS)
++ SIGILL : constant := 4; -- illegal instruction (not reset)
++ SIGTRAP : constant := 5; -- trace trap (not reset)
++ SIGIOT : constant := 6; -- IOT instruction
++ SIGABRT : constant := 6; -- used by abort, replace SIGIOT in the future
++ SIGEMT : constant := 7; -- EMT instruction
++ SIGFPE : constant := 8; -- floating point exception
++ SIGKILL : constant := 9; -- kill (cannot be caught or ignored)
++ SIGBUS : constant := 10; -- bus error
++ SIGSEGV : constant := 11; -- segmentation violation
++ SIGSYS : constant := 12; -- bad argument to system call
++ SIGPIPE : constant := 13; -- write on a pipe with no one to read it
++ SIGALRM : constant := 14; -- alarm clock
++ SIGTERM : constant := 15; -- software termination signal from kill
++ SIGURG : constant := 16; -- urgent condition on IO channel
++ SIGSTOP : constant := 17; -- stop (cannot be caught or ignored)
++ SIGTSTP : constant := 18; -- user stop requested from tty
++ SIGCONT : constant := 19; -- stopped process has been continued
++ SIGCLD : constant := 20; -- alias for SIGCHLD
++ SIGCHLD : constant := 20; -- child status change
++ SIGTTIN : constant := 21; -- background tty read attempted
++ SIGTTOU : constant := 22; -- background tty write attempted
++ SIGIO : constant := 23; -- I/O possible (Solaris SIGPOLL alias)
++ SIGXCPU : constant := 24; -- CPU time limit exceeded
++ SIGXFSZ : constant := 25; -- filesize limit exceeded
++ SIGVTALRM : constant := 26; -- virtual timer expired
++ SIGPROF : constant := 27; -- profiling timer expired
++ SIGWINCH : constant := 28; -- window size change
++ SIGINFO : constant := 29; -- information request (BSD)
++ SIGUSR1 : constant := 30; -- user defined signal 1
++ SIGUSR2 : constant := 31; -- user defined signal 2
++
++ SIGADAABORT : constant := SIGABRT;
++ -- Change this if you want to use another signal for task abort.
++ -- SIGTERM might be a good one.
++
++ type Signal_Set is array (Natural range <>) of Signal;
++
++ -- Interrupts that must be unmasked at all times. FreeBSD
++ -- pthreads will not allow an application to mask out any
++ -- interrupt needed by the threads library.
++ Unmasked : constant Signal_Set :=
++ (SIGTRAP, SIGBUS, SIGTTIN, SIGTTOU, SIGTSTP);
++
++ -- FreeBSD will uses SIGPROF for timing. Do not allow a
++ -- handler to attach to this signal.
++ Reserved : constant Signal_Set := (0 .. 0 => SIGPROF);
++
++ type sigset_t is private;
++
++ function sigaddset
++ (set : access sigset_t;
++ sig : Signal) return int;
++ pragma Import (C, sigaddset, "sigaddset");
++
++ function sigdelset
++ (set : access sigset_t;
++ sig : Signal) return int;
++ pragma Import (C, sigdelset, "sigdelset");
++
++ function sigfillset (set : access sigset_t) return int;
++ pragma Import (C, sigfillset, "sigfillset");
++
++ function sigismember
++ (set : access sigset_t;
++ sig : Signal) return int;
++ pragma Import (C, sigismember, "sigismember");
++
++ function sigemptyset (set : access sigset_t) return int;
++ pragma Import (C, sigemptyset, "sigemptyset");
++
++ -- sigcontext is architecture dependent, so define it private
++ type struct_sigcontext is private;
++
++ type old_struct_sigaction is record
++ sa_handler : System.Address;
++ sa_mask : sigset_t;
++ sa_flags : int;
++ end record;
++ pragma Convention (C, old_struct_sigaction);
++
++ type new_struct_sigaction is record
++ sa_handler : System.Address;
++ sa_flags : int;
++ sa_mask : sigset_t;
++ end record;
++ pragma Convention (C, new_struct_sigaction);
++
++ subtype struct_sigaction is new_struct_sigaction;
++ type struct_sigaction_ptr is access all struct_sigaction;
++
++ SIG_BLOCK : constant := 1;
++ SIG_UNBLOCK : constant := 2;
++ SIG_SETMASK : constant := 3;
++
++ SIG_DFL : constant := 0;
++ SIG_IGN : constant := 1;
++
++ SA_SIGINFO : constant := 16#0040#;
++ SA_ONSTACK : constant := 16#0001#;
++
++ function sigaction
++ (sig : Signal;
++ act : struct_sigaction_ptr;
++ oact : struct_sigaction_ptr) return int;
++ pragma Import (C, sigaction, "sigaction");
++
++ ----------
++ -- Time --
++ ----------
++
++ Time_Slice_Supported : constant Boolean := True;
++ -- Indicates whether time slicing is supported (i.e SCHED_RR is supported)
++
++ type timespec is private;
++
++ function nanosleep (rqtp, rmtp : access timespec) return int;
++ pragma Import (C, nanosleep, "nanosleep");
++
++ type clockid_t is private;
++
++ CLOCK_REALTIME : constant clockid_t;
++
++ function clock_gettime
++ (clock_id : clockid_t;
++ tp : access timespec)
++ return int;
++ pragma Import (C, clock_gettime, "clock_gettime");
++
++ function To_Duration (TS : timespec) return Duration;
++ pragma Inline (To_Duration);
++
++ function To_Timespec (D : Duration) return timespec;
++ pragma Inline (To_Timespec);
++
++ type struct_timezone is record
++ tz_minuteswest : int;
++ tz_dsttime : int;
++ end record;
++ pragma Convention (C, struct_timezone);
++
++ procedure usleep (useconds : unsigned_long);
++ pragma Import (C, usleep, "usleep");
++
++ -------------------------
++ -- Priority Scheduling --
++ -------------------------
++
++ SCHED_FIFO : constant := 1;
++ SCHED_OTHER : constant := 2;
++ SCHED_RR : constant := 3;
++
++ function To_Target_Priority
++ (Prio : System.Any_Priority) return Interfaces.C.int;
++ -- Maps System.Any_Priority to a POSIX priority
++
++ -------------
++ -- Process --
++ -------------
++
++ type pid_t is private;
++
++ function kill (pid : pid_t; sig : Signal) return int;
++ pragma Import (C, kill, "kill");
++
++ function getpid return pid_t;
++ pragma Import (C, getpid, "getpid");
++
++ ---------
++ -- LWP --
++ ---------
++
++ function lwp_self return System.Address;
++ -- lwp_self does not exist on this thread library, revert to pthread_self
++ -- which is the closest approximation (with getpid). This function is
++ -- needed to share 7staprop.adb across POSIX-like targets.
++ pragma Import (C, lwp_self, "pthread_self");
++
++ -------------
++ -- Threads --
++ -------------
++
++ type Thread_Body is access
++ function (arg : System.Address) return System.Address;
++ pragma Convention (C, Thread_Body);
++
++ function Thread_Body_Access is new
++ Ada.Unchecked_Conversion (System.Address, Thread_Body);
++
++ type pthread_t is private;
++ subtype Thread_Id is pthread_t;
++
++ type pthread_mutex_t is limited private;
++ type pthread_cond_t is limited private;
++ type pthread_attr_t is limited private;
++ type pthread_mutexattr_t is limited private;
++ type pthread_condattr_t is limited private;
++ type pthread_key_t is private;
++
++ PTHREAD_CREATE_DETACHED : constant := 1;
++ PTHREAD_CREATE_JOINABLE : constant := 0;
++
++ PTHREAD_SCOPE_PROCESS : constant := 0;
++ PTHREAD_SCOPE_SYSTEM : constant := 2;
++
++ -----------
++ -- Stack --
++ -----------
++
++ type stack_t is record
++ ss_sp : System.Address;
++ ss_size : size_t;
++ ss_flags : int;
++ end record;
++ pragma Convention (C, stack_t);
++
++ function sigaltstack
++ (ss : not null access stack_t;
++ oss : access stack_t) return int;
++ pragma Import (C, sigaltstack, "sigaltstack");
++
++ Alternate_Stack : aliased System.Address;
++ -- This is a dummy definition, never used (Alternate_Stack_Size is null)
++
++ Alternate_Stack_Size : constant := 0;
++ -- No alternate signal stack is used on this platform
++
++ Stack_Base_Available : constant Boolean := False;
++ -- Indicates whether the stack base is available on this target. This
++ -- allows us to share s-osinte.adb between all the FSU run time. Note that
++ -- this value can only be true if pthread_t has a complete definition that
++ -- corresponds exactly to the C header files.
++
++ function Get_Stack_Base (thread : pthread_t) return Address;
++ pragma Inline (Get_Stack_Base);
++ -- returns the stack base of the specified thread. Only call this function
++ -- when Stack_Base_Available is True.
++
++ function Get_Page_Size return size_t;
++ function Get_Page_Size return Address;
++ pragma Import (C, Get_Page_Size, "getpagesize");
++ -- Returns the size of a page
++
++ PROT_NONE : constant := 0;
++ PROT_READ : constant := 1;
++ PROT_WRITE : constant := 2;
++ PROT_EXEC : constant := 4;
++ PROT_ALL : constant := PROT_READ + PROT_WRITE + PROT_EXEC;
++ PROT_ON : constant := PROT_NONE;
++ PROT_OFF : constant := PROT_ALL;
++
++ function mprotect (addr : Address; len : size_t; prot : int) return int;
++ pragma Import (C, mprotect);
++
++ ---------------------------------------
++ -- Nonstandard Thread Initialization --
++ ---------------------------------------
++
++ -- FSU_THREADS requires pthread_init, which is nonstandard and this should
++ -- be invoked during the elaboration of s-taprop.adb.
++
++ -- FreeBSD does not require this so we provide an empty Ada body
++
++ procedure pthread_init;
++
++ -------------------------
++ -- POSIX.1c Section 3 --
++ -------------------------
++
++ function sigwait
++ (set : access sigset_t;
++ sig : access Signal) return int;
++ pragma Import (C, sigwait, "sigwait");
++
++ function pthread_kill
++ (thread : pthread_t;
++ sig : Signal) return int;
++ pragma Import (C, pthread_kill, "pthread_kill");
++
++ function pthread_sigmask
++ (how : int;
++ set : access sigset_t;
++ oset : access sigset_t) return int;
++ pragma Import (C, pthread_sigmask, "pthread_sigmask");
++
++ --------------------------
++ -- POSIX.1c Section 11 --
++ --------------------------
++
++ function pthread_mutexattr_init
++ (attr : access pthread_mutexattr_t) return int;
++ pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
++
++ function pthread_mutexattr_destroy
++ (attr : access pthread_mutexattr_t) return int;
++ pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
++
++ function pthread_mutex_init
++ (mutex : access pthread_mutex_t;
++ attr : access pthread_mutexattr_t) return int;
++ pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
++
++ function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
++ pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
++
++ function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
++ pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
++
++ function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
++ pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
++
++ function pthread_condattr_init
++ (attr : access pthread_condattr_t) return int;
++ pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
++
++ function pthread_condattr_destroy
++ (attr : access pthread_condattr_t) return int;
++ pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
++
++ function pthread_cond_init
++ (cond : access pthread_cond_t;
++ attr : access pthread_condattr_t) return int;
++ pragma Import (C, pthread_cond_init, "pthread_cond_init");
++
++ function pthread_cond_destroy (cond : access pthread_cond_t) return int;
++ pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
++
++ function pthread_cond_signal (cond : access pthread_cond_t) return int;
++ pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
++
++ function pthread_cond_wait
++ (cond : access pthread_cond_t;
++ mutex : access pthread_mutex_t) return int;
++ pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
++
++ function pthread_cond_timedwait
++ (cond : access pthread_cond_t;
++ mutex : access pthread_mutex_t;
++ abstime : access timespec) return int;
++ pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
++
++ Relative_Timed_Wait : constant Boolean := False;
++ -- pthread_cond_timedwait requires an absolute delay time
++
++ --------------------------
++ -- POSIX.1c Section 13 --
++ --------------------------
++
++ PTHREAD_PRIO_NONE : constant := 0;
++ PTHREAD_PRIO_PROTECT : constant := 2;
++ PTHREAD_PRIO_INHERIT : constant := 1;
++
++ function pthread_mutexattr_setprotocol
++ (attr : access pthread_mutexattr_t;
++ protocol : int) return int;
++ pragma Import
++ (C, pthread_mutexattr_setprotocol, "pthread_mutexattr_setprotocol");
++
++ function pthread_mutexattr_getprotocol
++ (attr : access pthread_mutexattr_t;
++ protocol : access int) return int;
++ pragma Import
++ (C, pthread_mutexattr_getprotocol, "pthread_mutexattr_getprotocol");
++
++ function pthread_mutexattr_setprioceiling
++ (attr : access pthread_mutexattr_t;
++ prioceiling : int) return int;
++ pragma Import
++ (C, pthread_mutexattr_setprioceiling,
++ "pthread_mutexattr_setprioceiling");
++
++ function pthread_mutexattr_getprioceiling
++ (attr : access pthread_mutexattr_t;
++ prioceiling : access int) return int;
++ pragma Import
++ (C, pthread_mutexattr_getprioceiling,
++ "pthread_mutexattr_getprioceiling");
++
++ type struct_sched_param is record
++ sched_priority : int;
++ end record;
++ pragma Convention (C, struct_sched_param);
++
++ function pthread_getschedparam
++ (thread : pthread_t;
++ policy : access int;
++ param : access struct_sched_param) return int;
++ pragma Import (C, pthread_getschedparam, "pthread_getschedparam");
++
++ function pthread_setschedparam
++ (thread : pthread_t;
++ policy : int;
++ param : access struct_sched_param) return int;
++ pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
++
++ function pthread_attr_setscope
++ (attr : access pthread_attr_t;
++ contentionscope : int) return int;
++ pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
++
++ function pthread_attr_getscope
++ (attr : access pthread_attr_t;
++ contentionscope : access int) return int;
++ pragma Import (C, pthread_attr_getscope, "pthread_attr_getscope");
++
++ function pthread_attr_setinheritsched
++ (attr : access pthread_attr_t;
++ inheritsched : int) return int;
++ pragma Import
++ (C, pthread_attr_setinheritsched, "pthread_attr_setinheritsched");
++
++ function pthread_attr_getinheritsched
++ (attr : access pthread_attr_t;
++ inheritsched : access int) return int;
++ pragma Import
++ (C, pthread_attr_getinheritsched, "pthread_attr_getinheritsched");
++
++ function pthread_attr_setschedpolicy
++ (attr : access pthread_attr_t;
++ policy : int) return int;
++ pragma Import (C, pthread_attr_setschedpolicy,
++ "pthread_attr_setschedpolicy");
++
++ function pthread_attr_getschedpolicy
++ (attr : access pthread_attr_t;
++ policy : access int) return int;
++ pragma Import (C, pthread_attr_getschedpolicy,
++ "pthread_attr_getschedpolicy");
++
++ function pthread_attr_setschedparam
++ (attr : access pthread_attr_t;
++ sched_param : int) return int;
++ pragma Import (C, pthread_attr_setschedparam, "pthread_attr_setschedparam");
++
++ function pthread_attr_getschedparam
++ (attr : access pthread_attr_t;
++ sched_param : access int) return int;
++ pragma Import (C, pthread_attr_getschedparam, "pthread_attr_getschedparam");
++
++ function sched_yield return int;
++ pragma Import (C, sched_yield, "pthread_yield");
++
++ --------------------------
++ -- P1003.1c Section 16 --
++ --------------------------
++
++ function pthread_attr_init (attributes : access pthread_attr_t) return int;
++ pragma Import (C, pthread_attr_init, "pthread_attr_init");
++
++ function pthread_attr_destroy
++ (attributes : access pthread_attr_t) return int;
++ pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
++
++ function pthread_attr_setdetachstate
++ (attr : access pthread_attr_t;
++ detachstate : int) return int;
++ pragma Import
++ (C, pthread_attr_setdetachstate, "pthread_attr_setdetachstate");
++
++ function pthread_attr_getdetachstate
++ (attr : access pthread_attr_t;
++ detachstate : access int) return int;
++ pragma Import
++ (C, pthread_attr_getdetachstate, "pthread_attr_getdetachstate");
++
++ function pthread_attr_getstacksize
++ (attr : access pthread_attr_t;
++ stacksize : access size_t) return int;
++ pragma Import
++ (C, pthread_attr_getstacksize, "pthread_attr_getstacksize");
++
++ function pthread_attr_setstacksize
++ (attr : access pthread_attr_t;
++ stacksize : size_t) return int;
++ pragma Import
++ (C, pthread_attr_setstacksize, "pthread_attr_setstacksize");
++
++ function pthread_create
++ (thread : access pthread_t;
++ attributes : access pthread_attr_t;
++ start_routine : Thread_Body;
++ arg : System.Address) return int;
++ pragma Import (C, pthread_create, "pthread_create");
++
++ function pthread_detach (thread : pthread_t) return int;
++ pragma Import (C, pthread_detach, "pthread_detach");
++
++ procedure pthread_exit (status : System.Address);
++ pragma Import (C, pthread_exit, "pthread_exit");
++
++ function pthread_self return pthread_t;
++ pragma Import (C, pthread_self, "pthread_self");
++
++ --------------------------
++ -- POSIX.1c Section 17 --
++ --------------------------
++
++ function pthread_setspecific
++ (key : pthread_key_t;
++ value : System.Address) return int;
++ pragma Import (C, pthread_setspecific, "pthread_setspecific");
++
++ function pthread_getspecific (key : pthread_key_t) return System.Address;
++ pragma Import (C, pthread_getspecific, "pthread_getspecific");
++
++ type destructor_pointer is access procedure (arg : System.Address);
++ pragma Convention (C, destructor_pointer);
++
++ function pthread_key_create
++ (key : access pthread_key_t;
++ destructor : destructor_pointer) return int;
++ pragma Import (C, pthread_key_create, "pthread_key_create");
++
++ ------------------------------------
++ -- Non-portable Pthread Functions --
++ ------------------------------------
++
++ function pthread_set_name_np
++ (thread : pthread_t;
++ name : System.Address) return int;
++ pragma Import (C, pthread_set_name_np, "pthread_set_name_np");
++
++private
++
++ type sigset_t is array (1 .. 4) of unsigned;
++
++ -- In FreeBSD the component sa_handler turns out to
++ -- be one a union type, and the selector is a macro:
++ -- #define sa_handler __sigaction_u._handler
++ -- #define sa_sigaction __sigaction_u._sigaction
++
++ -- Should we add a signal_context type here ???
++ -- How could it be done independent of the CPU architecture ???
++ -- sigcontext type is opaque, so it is architecturally neutral.
++ -- It is always passed as an access type, so define it as an empty record
++ -- since the contents are not used anywhere.
++
++ type struct_sigcontext is null record;
++ pragma Convention (C, struct_sigcontext);
++
++ type pid_t is new int;
++
++ type time_t is new int;
++
++ type timespec is record
++ tv_sec : time_t;
++ tv_nsec : long;
++ end record;
++ pragma Convention (C, timespec);
++
++ type clockid_t is new int;
++ CLOCK_REALTIME : constant clockid_t := 0;
++
++ type pthread_t is new System.Address;
++ type pthread_attr_t is new System.Address;
++ type pthread_mutex_t is new System.Address;
++ type pthread_mutexattr_t is new System.Address;
++ type pthread_cond_t is new System.Address;
++ type pthread_condattr_t is new System.Address;
++ type pthread_key_t is new int;
++
++end System.OS_Interface;
+--- /dev/null
++++ gcc/ada/s-osinte-freebsd64.ads
+@@ -0,0 +1,649 @@
++------------------------------------------------------------------------------
++-- --
++-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
++-- --
++-- S Y S T E M . O S _ I N T E R F A C E --
++-- --
++-- S p e c --
++-- --
++-- Copyright (C) 1991-1994, Florida State University --
++-- Copyright (C) 1995-2009, Free Software Foundation, Inc. --
++-- --
++-- GNARL 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. GNARL 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 GNARL; 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. --
++-- --
++-- GNARL was developed by the GNARL team at Florida State University. It is --
++-- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
++-- State University (http://www.gnat.com). --
++-- --
++-- Copyright (C) 2010 John Marino <draco@marino.st> --
++------------------------------------------------------------------------------
++
++-- This is the FreeBSD PTHREADS version of this package
++
++-- This package encapsulates all direct interfaces to OS services
++-- that are needed by the tasking run-time (libgnarl).
++
++-- PLEASE DO NOT add any with-clauses to this package or remove the pragma
++-- Preelaborate. This package is designed to be a bottom-level (leaf) package.
++
++with Ada.Unchecked_Conversion;
++
++with Interfaces.C;
++
++package System.OS_Interface is
++ pragma Preelaborate;
++
++ pragma Linker_Options ("-pthread");
++
++ subtype int is Interfaces.C.int;
++ subtype short is Interfaces.C.short;
++ subtype long is Interfaces.C.long;
++ subtype unsigned is Interfaces.C.unsigned;
++ subtype unsigned_short is Interfaces.C.unsigned_short;
++ subtype unsigned_long is Interfaces.C.unsigned_long;
++ subtype unsigned_char is Interfaces.C.unsigned_char;
++ subtype plain_char is Interfaces.C.plain_char;
++ subtype size_t is Interfaces.C.size_t;
++ subtype int64_t is Interfaces.Integer_64;
++
++ -----------
++ -- Errno --
++ -----------
++
++ function Errno return int;
++ pragma Inline (Errno);
++
++ EAGAIN : constant := 35;
++ EINTR : constant := 4;
++ EINVAL : constant := 22;
++ ENOMEM : constant := 12;
++ ETIMEDOUT : constant := 60;
++
++ -------------
++ -- Signals --
++ -------------
++
++ Max_Interrupt : constant := 31;
++ type Signal is new int range 0 .. Max_Interrupt;
++ for Signal'Size use int'Size;
++
++ SIGHUP : constant := 1; -- hangup
++ SIGINT : constant := 2; -- interrupt (rubout)
++ SIGQUIT : constant := 3; -- quit (ASCD FS)
++ SIGILL : constant := 4; -- illegal instruction (not reset)
++ SIGTRAP : constant := 5; -- trace trap (not reset)
++ SIGIOT : constant := 6; -- IOT instruction
++ SIGABRT : constant := 6; -- used by abort, replace SIGIOT in the future
++ SIGEMT : constant := 7; -- EMT instruction
++ SIGFPE : constant := 8; -- floating point exception
++ SIGKILL : constant := 9; -- kill (cannot be caught or ignored)
++ SIGBUS : constant := 10; -- bus error
++ SIGSEGV : constant := 11; -- segmentation violation
++ SIGSYS : constant := 12; -- bad argument to system call
++ SIGPIPE : constant := 13; -- write on a pipe with no one to read it
++ SIGALRM : constant := 14; -- alarm clock
++ SIGTERM : constant := 15; -- software termination signal from kill
++ SIGURG : constant := 16; -- urgent condition on IO channel
++ SIGSTOP : constant := 17; -- stop (cannot be caught or ignored)
++ SIGTSTP : constant := 18; -- user stop requested from tty
++ SIGCONT : constant := 19; -- stopped process has been continued
++ SIGCLD : constant := 20; -- alias for SIGCHLD
++ SIGCHLD : constant := 20; -- child status change
++ SIGTTIN : constant := 21; -- background tty read attempted
++ SIGTTOU : constant := 22; -- background tty write attempted
++ SIGIO : constant := 23; -- I/O possible (Solaris SIGPOLL alias)
++ SIGXCPU : constant := 24; -- CPU time limit exceeded
++ SIGXFSZ : constant := 25; -- filesize limit exceeded
++ SIGVTALRM : constant := 26; -- virtual timer expired
++ SIGPROF : constant := 27; -- profiling timer expired
++ SIGWINCH : constant := 28; -- window size change
++ SIGINFO : constant := 29; -- information request (BSD)
++ SIGUSR1 : constant := 30; -- user defined signal 1
++ SIGUSR2 : constant := 31; -- user defined signal 2
++
++ SIGADAABORT : constant := SIGABRT;
++ -- Change this if you want to use another signal for task abort.
++ -- SIGTERM might be a good one.
++
++ type Signal_Set is array (Natural range <>) of Signal;
++
++ -- Interrupts that must be unmasked at all times. FreeBSD
++ -- pthreads will not allow an application to mask out any
++ -- interrupt needed by the threads library.
++ Unmasked : constant Signal_Set :=
++ (SIGTRAP, SIGBUS, SIGTTIN, SIGTTOU, SIGTSTP);
++
++ -- FreeBSD will uses SIGPROF for timing. Do not allow a
++ -- handler to attach to this signal.
++ Reserved : constant Signal_Set := (0 .. 0 => SIGPROF);
++
++ type sigset_t is private;
++
++ function sigaddset
++ (set : access sigset_t;
++ sig : Signal) return int;
++ pragma Import (C, sigaddset, "sigaddset");
++
++ function sigdelset
++ (set : access sigset_t;
++ sig : Signal) return int;
++ pragma Import (C, sigdelset, "sigdelset");
++
++ function sigfillset (set : access sigset_t) return int;
++ pragma Import (C, sigfillset, "sigfillset");
++
++ function sigismember
++ (set : access sigset_t;
++ sig : Signal) return int;
++ pragma Import (C, sigismember, "sigismember");
++
++ function sigemptyset (set : access sigset_t) return int;
++ pragma Import (C, sigemptyset, "sigemptyset");
++
++ -- sigcontext is architecture dependent, so define it private
++ type struct_sigcontext is private;
++
++ type old_struct_sigaction is record
++ sa_handler : System.Address;
++ sa_mask : sigset_t;
++ sa_flags : int;
++ end record;
++ pragma Convention (C, old_struct_sigaction);
++
++ type new_struct_sigaction is record
++ sa_handler : System.Address;
++ sa_flags : int;
++ sa_mask : sigset_t;
++ end record;
++ pragma Convention (C, new_struct_sigaction);
++
++ subtype struct_sigaction is new_struct_sigaction;
++ type struct_sigaction_ptr is access all struct_sigaction;
++
++ SIG_BLOCK : constant := 1;
++ SIG_UNBLOCK : constant := 2;
++ SIG_SETMASK : constant := 3;
++
++ SIG_DFL : constant := 0;
++ SIG_IGN : constant := 1;
++
++ SA_SIGINFO : constant := 16#0040#;
++ SA_ONSTACK : constant := 16#0001#;
++
++ function sigaction
++ (sig : Signal;
++ act : struct_sigaction_ptr;
++ oact : struct_sigaction_ptr) return int;
++ pragma Import (C, sigaction, "sigaction");
++
++ ----------
++ -- Time --
++ ----------
++
++ Time_Slice_Supported : constant Boolean := True;
++ -- Indicates whether time slicing is supported (i.e SCHED_RR is supported)
++
++ type timespec is private;
++
++ function nanosleep (rqtp, rmtp : access timespec) return int;
++ pragma Import (C, nanosleep, "nanosleep");
++
++ type clockid_t is private;
++
++ CLOCK_REALTIME : constant clockid_t;
++
++ function clock_gettime
++ (clock_id : clockid_t;
++ tp : access timespec)
++ return int;
++ pragma Import (C, clock_gettime, "clock_gettime");
++
++ function To_Duration (TS : timespec) return Duration;
++ pragma Inline (To_Duration);
++
++ function To_Timespec (D : Duration) return timespec;
++ pragma Inline (To_Timespec);
++
++ type struct_timezone is record
++ tz_minuteswest : int;
++ tz_dsttime : int;
++ end record;
++ pragma Convention (C, struct_timezone);
++
++ procedure usleep (useconds : unsigned_long);
++ pragma Import (C, usleep, "usleep");
++
++ -------------------------
++ -- Priority Scheduling --
++ -------------------------
++
++ SCHED_FIFO : constant := 1;
++ SCHED_OTHER : constant := 2;
++ SCHED_RR : constant := 3;
++
++ function To_Target_Priority
++ (Prio : System.Any_Priority) return Interfaces.C.int;
++ -- Maps System.Any_Priority to a POSIX priority
++
++ -------------
++ -- Process --
++ -------------
++
++ type pid_t is private;
++
++ function kill (pid : pid_t; sig : Signal) return int;
++ pragma Import (C, kill, "kill");
++
++ function getpid return pid_t;
++ pragma Import (C, getpid, "getpid");
++
++ ---------
++ -- LWP --
++ ---------
++
++ function lwp_self return System.Address;
++ -- lwp_self does not exist on this thread library, revert to pthread_self
++ -- which is the closest approximation (with getpid). This function is
++ -- needed to share 7staprop.adb across POSIX-like targets.
++ pragma Import (C, lwp_self, "pthread_self");
++
++ -------------
++ -- Threads --
++ -------------
++
++ type Thread_Body is access
++ function (arg : System.Address) return System.Address;
++ pragma Convention (C, Thread_Body);
++
++ function Thread_Body_Access is new
++ Ada.Unchecked_Conversion (System.Address, Thread_Body);
++
++ type pthread_t is private;
++ subtype Thread_Id is pthread_t;
++
++ type pthread_mutex_t is limited private;
++ type pthread_cond_t is limited private;
++ type pthread_attr_t is limited private;
++ type pthread_mutexattr_t is limited private;
++ type pthread_condattr_t is limited private;
++ type pthread_key_t is private;
++
++ PTHREAD_CREATE_DETACHED : constant := 1;
++ PTHREAD_CREATE_JOINABLE : constant := 0;
++
++ PTHREAD_SCOPE_PROCESS : constant := 0;
++ PTHREAD_SCOPE_SYSTEM : constant := 2;
++
++ -----------
++ -- Stack --
++ -----------
++
++ type stack_t is record
++ ss_sp : System.Address;
++ ss_size : size_t;
++ ss_flags : int;
++ end record;
++ pragma Convention (C, stack_t);
++
++ function sigaltstack
++ (ss : not null access stack_t;
++ oss : access stack_t) return int;
++ pragma Import (C, sigaltstack, "sigaltstack");
++
++ Alternate_Stack : aliased System.Address;
++ -- This is a dummy definition, never used (Alternate_Stack_Size is null)
++
++ Alternate_Stack_Size : constant := 0;
++ -- No alternate signal stack is used on this platform
++
++ Stack_Base_Available : constant Boolean := False;
++ -- Indicates whether the stack base is available on this target. This
++ -- allows us to share s-osinte.adb between all the FSU run time. Note that
++ -- this value can only be true if pthread_t has a complete definition that
++ -- corresponds exactly to the C header files.
++
++ function Get_Stack_Base (thread : pthread_t) return Address;
++ pragma Inline (Get_Stack_Base);
++ -- returns the stack base of the specified thread. Only call this function
++ -- when Stack_Base_Available is True.
++
++ function Get_Page_Size return size_t;
++ function Get_Page_Size return Address;
++ pragma Import (C, Get_Page_Size, "getpagesize");
++ -- Returns the size of a page
++
++ PROT_NONE : constant := 0;
++ PROT_READ : constant := 1;
++ PROT_WRITE : constant := 2;
++ PROT_EXEC : constant := 4;
++ PROT_ALL : constant := PROT_READ + PROT_WRITE + PROT_EXEC;
++ PROT_ON : constant := PROT_NONE;
++ PROT_OFF : constant := PROT_ALL;
++
++ function mprotect (addr : Address; len : size_t; prot : int) return int;
++ pragma Import (C, mprotect);
++
++ ---------------------------------------
++ -- Nonstandard Thread Initialization --
++ ---------------------------------------
++
++ -- FSU_THREADS requires pthread_init, which is nonstandard and this should
++ -- be invoked during the elaboration of s-taprop.adb.
++
++ -- FreeBSD does not require this so we provide an empty Ada body
++
++ procedure pthread_init;
++
++ -------------------------
++ -- POSIX.1c Section 3 --
++ -------------------------
++
++ function sigwait
++ (set : access sigset_t;
++ sig : access Signal) return int;
++ pragma Import (C, sigwait, "sigwait");
++
++ function pthread_kill
++ (thread : pthread_t;
++ sig : Signal) return int;
++ pragma Import (C, pthread_kill, "pthread_kill");
++
++ function pthread_sigmask
++ (how : int;
++ set : access sigset_t;
++ oset : access sigset_t) return int;
++ pragma Import (C, pthread_sigmask, "pthread_sigmask");
++
++ --------------------------
++ -- POSIX.1c Section 11 --
++ --------------------------
++
++ function pthread_mutexattr_init
++ (attr : access pthread_mutexattr_t) return int;
++ pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
++
++ function pthread_mutexattr_destroy
++ (attr : access pthread_mutexattr_t) return int;
++ pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
++
++ function pthread_mutex_init
++ (mutex : access pthread_mutex_t;
++ attr : access pthread_mutexattr_t) return int;
++ pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
++
++ function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
++ pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
++
++ function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
++ pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
++
++ function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
++ pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
++
++ function pthread_condattr_init
++ (attr : access pthread_condattr_t) return int;
++ pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
++
++ function pthread_condattr_destroy
++ (attr : access pthread_condattr_t) return int;
++ pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
++
++ function pthread_cond_init
++ (cond : access pthread_cond_t;
++ attr : access pthread_condattr_t) return int;
++ pragma Import (C, pthread_cond_init, "pthread_cond_init");
++
++ function pthread_cond_destroy (cond : access pthread_cond_t) return int;
++ pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
++
++ function pthread_cond_signal (cond : access pthread_cond_t) return int;
++ pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
++
++ function pthread_cond_wait
++ (cond : access pthread_cond_t;
++ mutex : access pthread_mutex_t) return int;
++ pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
++
++ function pthread_cond_timedwait
++ (cond : access pthread_cond_t;
++ mutex : access pthread_mutex_t;
++ abstime : access timespec) return int;
++ pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
++
++ Relative_Timed_Wait : constant Boolean := False;
++ -- pthread_cond_timedwait requires an absolute delay time
++
++ --------------------------
++ -- POSIX.1c Section 13 --
++ --------------------------
++
++ PTHREAD_PRIO_NONE : constant := 0;
++ PTHREAD_PRIO_PROTECT : constant := 2;
++ PTHREAD_PRIO_INHERIT : constant := 1;
++
++ function pthread_mutexattr_setprotocol
++ (attr : access pthread_mutexattr_t;
++ protocol : int) return int;
++ pragma Import
++ (C, pthread_mutexattr_setprotocol, "pthread_mutexattr_setprotocol");
++
++ function pthread_mutexattr_getprotocol
++ (attr : access pthread_mutexattr_t;
++ protocol : access int) return int;
++ pragma Import
++ (C, pthread_mutexattr_getprotocol, "pthread_mutexattr_getprotocol");
++
++ function pthread_mutexattr_setprioceiling
++ (attr : access pthread_mutexattr_t;
++ prioceiling : int) return int;
++ pragma Import
++ (C, pthread_mutexattr_setprioceiling,
++ "pthread_mutexattr_setprioceiling");
++
++ function pthread_mutexattr_getprioceiling
++ (attr : access pthread_mutexattr_t;
++ prioceiling : access int) return int;
++ pragma Import
++ (C, pthread_mutexattr_getprioceiling,
++ "pthread_mutexattr_getprioceiling");
++
++ type struct_sched_param is record
++ sched_priority : int;
++ end record;
++ pragma Convention (C, struct_sched_param);
++
++ function pthread_getschedparam
++ (thread : pthread_t;
++ policy : access int;
++ param : access struct_sched_param) return int;
++ pragma Import (C, pthread_getschedparam, "pthread_getschedparam");
++
++ function pthread_setschedparam
++ (thread : pthread_t;
++ policy : int;
++ param : access struct_sched_param) return int;
++ pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
++
++ function pthread_attr_setscope
++ (attr : access pthread_attr_t;
++ contentionscope : int) return int;
++ pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
++
++ function pthread_attr_getscope
++ (attr : access pthread_attr_t;
++ contentionscope : access int) return int;
++ pragma Import (C, pthread_attr_getscope, "pthread_attr_getscope");
++
++ function pthread_attr_setinheritsched
++ (attr : access pthread_attr_t;
++ inheritsched : int) return int;
++ pragma Import
++ (C, pthread_attr_setinheritsched, "pthread_attr_setinheritsched");
++
++ function pthread_attr_getinheritsched
++ (attr : access pthread_attr_t;
++ inheritsched : access int) return int;
++ pragma Import
++ (C, pthread_attr_getinheritsched, "pthread_attr_getinheritsched");
++
++ function pthread_attr_setschedpolicy
++ (attr : access pthread_attr_t;
++ policy : int) return int;
++ pragma Import (C, pthread_attr_setschedpolicy,
++ "pthread_attr_setschedpolicy");
++
++ function pthread_attr_getschedpolicy
++ (attr : access pthread_attr_t;
++ policy : access int) return int;
++ pragma Import (C, pthread_attr_getschedpolicy,
++ "pthread_attr_getschedpolicy");
++
++ function pthread_attr_setschedparam
++ (attr : access pthread_attr_t;
++ sched_param : int) return int;
++ pragma Import (C, pthread_attr_setschedparam, "pthread_attr_setschedparam");
++
++ function pthread_attr_getschedparam
++ (attr : access pthread_attr_t;
++ sched_param : access int) return int;
++ pragma Import (C, pthread_attr_getschedparam, "pthread_attr_getschedparam");
++
++ function sched_yield return int;
++ pragma Import (C, sched_yield, "pthread_yield");
++
++ --------------------------
++ -- P1003.1c Section 16 --
++ --------------------------
++
++ function pthread_attr_init (attributes : access pthread_attr_t) return int;
++ pragma Import (C, pthread_attr_init, "pthread_attr_init");
++
++ function pthread_attr_destroy
++ (attributes : access pthread_attr_t) return int;
++ pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
++
++ function pthread_attr_setdetachstate
++ (attr : access pthread_attr_t;
++ detachstate : int) return int;
++ pragma Import
++ (C, pthread_attr_setdetachstate, "pthread_attr_setdetachstate");
++
++ function pthread_attr_getdetachstate
++ (attr : access pthread_attr_t;
++ detachstate : access int) return int;
++ pragma Import
++ (C, pthread_attr_getdetachstate, "pthread_attr_getdetachstate");
++
++ function pthread_attr_getstacksize
++ (attr : access pthread_attr_t;
++ stacksize : access size_t) return int;
++ pragma Import
++ (C, pthread_attr_getstacksize, "pthread_attr_getstacksize");
++
++ function pthread_attr_setstacksize
++ (attr : access pthread_attr_t;
++ stacksize : size_t) return int;
++ pragma Import
++ (C, pthread_attr_setstacksize, "pthread_attr_setstacksize");
++
++ function pthread_create
++ (thread : access pthread_t;
++ attributes : access pthread_attr_t;
++ start_routine : Thread_Body;
++ arg : System.Address) return int;
++ pragma Import (C, pthread_create, "pthread_create");
++
++ function pthread_detach (thread : pthread_t) return int;
++ pragma Import (C, pthread_detach, "pthread_detach");
++
++ procedure pthread_exit (status : System.Address);
++ pragma Import (C, pthread_exit, "pthread_exit");
++
++ function pthread_self return pthread_t;
++ pragma Import (C, pthread_self, "pthread_self");
++
++ --------------------------
++ -- POSIX.1c Section 17 --
++ --------------------------
++
++ function pthread_setspecific
++ (key : pthread_key_t;
++ value : System.Address) return int;
++ pragma Import (C, pthread_setspecific, "pthread_setspecific");
++
++ function pthread_getspecific (key : pthread_key_t) return System.Address;
++ pragma Import (C, pthread_getspecific, "pthread_getspecific");
++
++ type destructor_pointer is access procedure (arg : System.Address);
++ pragma Convention (C, destructor_pointer);
++
++ function pthread_key_create
++ (key : access pthread_key_t;
++ destructor : destructor_pointer) return int;
++ pragma Import (C, pthread_key_create, "pthread_key_create");
++
++ ------------------------------------
++ -- Non-portable Pthread Functions --
++ ------------------------------------
++
++ function pthread_set_name_np
++ (thread : pthread_t;
++ name : System.Address) return int;
++ pragma Import (C, pthread_set_name_np, "pthread_set_name_np");
++
++private
++
++ type sigset_t is array (1 .. 4) of unsigned;
++
++ -- In FreeBSD the component sa_handler turns out to
++ -- be one a union type, and the selector is a macro:
++ -- #define sa_handler __sigaction_u._handler
++ -- #define sa_sigaction __sigaction_u._sigaction
++
++ -- Should we add a signal_context type here ???
++ -- How could it be done independent of the CPU architecture ???
++ -- sigcontext type is opaque, so it is architecturally neutral.
++ -- It is always passed as an access type, so define it as an empty record
++ -- since the contents are not used anywhere.
++
++ type struct_sigcontext is null record;
++ pragma Convention (C, struct_sigcontext);
++
++ type pid_t is new int;
++
++ type time_t is new int64_t;
++
++ type timespec is record
++ tv_sec : time_t;
++ tv_nsec : long;
++ end record;
++ pragma Convention (C, timespec);
++
++ type clockid_t is new int;
++ CLOCK_REALTIME : constant clockid_t := 0;
++
++ type pthread_t is new System.Address;
++ type pthread_attr_t is new System.Address;
++ type pthread_mutex_t is new System.Address;
++ type pthread_mutexattr_t is new System.Address;
++ type pthread_cond_t is new System.Address;
++ type pthread_condattr_t is new System.Address;
++ type pthread_key_t is new int;
++
++end System.OS_Interface;
+--- /dev/null
++++ gcc/ada/s-osinte-netbsd.adb
+@@ -0,0 +1,141 @@
++------------------------------------------------------------------------------
++-- --
++-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
++-- --
++-- S Y S T E M . O S _ I N T E R F A C E --
++-- --
++-- B o d y --
++-- --
++-- Copyright (C) 1991-2009, Free Software Foundation, Inc. --
++-- --
++-- GNARL 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/>. --
++-- --
++-- GNARL was developed by the GNARL team at Florida State University. It is --
++-- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
++-- State University (http://www.gnat.com). --
++-- --
++-- Copyright (C) 2010 John Marino <draco@marino.st> --
++------------------------------------------------------------------------------
++
++-- This is the NetBSD THREADS version of this package
++
++with Interfaces.C; use Interfaces.C;
++
++package body System.OS_Interface is
++
++ -----------
++ -- Errno --
++ -----------
++
++ function Errno return int is
++ type int_ptr is access all int;
++
++ function internal_errno return int_ptr;
++ pragma Import (C, internal_errno, "__errno");
++
++ begin
++ return (internal_errno.all);
++ end Errno;
++
++ --------------------
++ -- Get_Stack_Base --
++ --------------------
++
++ function Get_Stack_Base (thread : pthread_t) return Address is
++ pragma Unreferenced (thread);
++ begin
++ return Null_Address;
++ end Get_Stack_Base;
++
++ ------------------
++ -- pthread_init --
++ ------------------
++
++ procedure pthread_init is
++ begin
++ null;
++ end pthread_init;
++
++ -----------------------------------
++ -- pthread_mutexattr_setprotocol --
++ -----------------------------------
++
++ function pthread_mutexattr_setprotocol
++ (attr : access pthread_mutexattr_t;
++ protocol : int) return int is
++ pragma Unreferenced (attr, protocol);
++ begin
++ return 0;
++ end pthread_mutexattr_setprotocol;
++
++ --------------------------------------
++ -- pthread_mutexattr_setprioceiling --
++ --------------------------------------
++
++ function pthread_mutexattr_setprioceiling
++ (attr : access pthread_mutexattr_t;
++ prioceiling : int) return int is
++ pragma Unreferenced (attr, prioceiling);
++ begin
++ return 0;
++ end pthread_mutexattr_setprioceiling;
++
++ -----------------
++ -- To_Duration --
++ -----------------
++
++ function To_Duration (TS : timespec) return Duration is
++ begin
++ return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
++ end To_Duration;
++
++ ------------------------
++ -- To_Target_Priority --
++ ------------------------
++
++ function To_Target_Priority
++ (Prio : System.Any_Priority) return Interfaces.C.int
++ is
++ begin
++ return Interfaces.C.int (Prio);
++ end To_Target_Priority;
++
++ -----------------
++ -- To_Timespec --
++ -----------------
++
++ function To_Timespec (D : Duration) return timespec is
++ S : time_t;
++ F : Duration;
++
++ begin
++ S := time_t (Long_Long_Integer (D));
++ F := D - Duration (S);
++
++ -- If F has negative value due to a round-up, adjust for positive F
++ -- value.
++
++ if F < 0.0 then
++ S := S - 1;
++ F := F + 1.0;
++ end if;
++
++ return timespec'(tv_sec => S,
++ tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
++ end To_Timespec;
++
++end System.OS_Interface;
+--- /dev/null
++++ gcc/ada/s-osinte-netbsd.ads
+@@ -0,0 +1,674 @@
++------------------------------------------------------------------------------
++-- --
++-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
++-- --
++-- S Y S T E M . O S _ I N T E R F A C E --
++-- --
++-- S p e c --
++-- --
++-- Copyright (C) 1991-1994, Florida State University --
++-- Copyright (C) 1995-2009, Free Software Foundation, Inc. --
++-- --
++-- GNARL 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. GNARL 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 GNARL; 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. --
++-- --
++-- GNARL was developed by the GNARL team at Florida State University. It is --
++-- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
++-- State University (http://www.gnat.com). --
++-- --
++-- Copyright (C) 2010 John Marino <draco@marino.st> --
++------------------------------------------------------------------------------
++
++-- This is the NetBSD PTHREADS version of this package.
++-- It is based off of the FreeBSD PTHREADS as of 4.2.3.
++
++-- This package encapsulates all direct interfaces to OS services
++-- that are needed by the tasking run-time (libgnarl).
++
++-- PLEASE DO NOT add any with-clauses to this package or remove the pragma
++-- Preelaborate. This package is designed to be a bottom-level (leaf) package.
++
++with Ada.Unchecked_Conversion;
++
++with Interfaces.C;
++
++package System.OS_Interface is
++ pragma Preelaborate;
++
++ pragma Linker_Options ("-pthread");
++
++ subtype int is Interfaces.C.int;
++ subtype short is Interfaces.C.short;
++ subtype long is Interfaces.C.long;
++ subtype unsigned is Interfaces.C.unsigned;
++ subtype unsigned_short is Interfaces.C.unsigned_short;
++ subtype unsigned_long is Interfaces.C.unsigned_long;
++ subtype unsigned_char is Interfaces.C.unsigned_char;
++ subtype plain_char is Interfaces.C.plain_char;
++ subtype size_t is Interfaces.C.size_t;
++
++ -----------
++ -- Errno --
++ -----------
++
++ function Errno return int;
++ pragma Inline (Errno);
++
++ EAGAIN : constant := 35;
++ EINTR : constant := 4;
++ EINVAL : constant := 22;
++ ENOMEM : constant := 12;
++ ETIMEDOUT : constant := 60;
++
++ -------------
++ -- Signals --
++ -------------
++
++ Max_Interrupt : constant := 63;
++ type Signal is new int range 0 .. Max_Interrupt;
++ for Signal'Size use int'Size;
++
++ SIGHUP : constant := 1; -- hangup
++ SIGINT : constant := 2; -- interrupt (rubout)
++ SIGQUIT : constant := 3; -- quit (ASCD FS)
++ SIGILL : constant := 4; -- illegal instruction (not reset)
++ SIGTRAP : constant := 5; -- trace trap (not reset)
++ SIGIOT : constant := 6; -- IOT instruction
++ SIGABRT : constant := 6; -- used by abort, replace SIGIOT in the future
++ SIGEMT : constant := 7; -- EMT instruction
++ SIGFPE : constant := 8; -- floating point exception
++ SIGKILL : constant := 9; -- kill (cannot be caught or ignored)
++ SIGBUS : constant := 10; -- bus error
++ SIGSEGV : constant := 11; -- segmentation violation
++ SIGSYS : constant := 12; -- bad argument to system call
++ SIGPIPE : constant := 13; -- write on a pipe with no one to read it
++ SIGALRM : constant := 14; -- alarm clock
++ SIGTERM : constant := 15; -- software termination signal from kill
++ SIGURG : constant := 16; -- urgent condition on IO channel
++ SIGSTOP : constant := 17; -- stop (cannot be caught or ignored)
++ SIGTSTP : constant := 18; -- user stop requested from tty
++ SIGCONT : constant := 19; -- stopped process has been continued
++ SIGCLD : constant := 20; -- alias for SIGCHLD
++ SIGCHLD : constant := 20; -- child status change
++ SIGTTIN : constant := 21; -- background tty read attempted
++ SIGTTOU : constant := 22; -- background tty write attempted
++ SIGIO : constant := 23; -- I/O possible (Solaris SIGPOLL alias)
++ SIGXCPU : constant := 24; -- CPU time limit exceeded
++ SIGXFSZ : constant := 25; -- filesize limit exceeded
++ SIGVTALRM : constant := 26; -- virtual timer expired
++ SIGPROF : constant := 27; -- profiling timer expired
++ SIGWINCH : constant := 28; -- window size change
++ SIGINFO : constant := 29; -- information request (BSD)
++ SIGUSR1 : constant := 30; -- user defined signal 1
++ SIGUSR2 : constant := 31; -- user defined signal 2
++ SIGPWR : constant := 32; -- power fail/restart (not reset when caught)
++
++ SIGADAABORT : constant := SIGABRT;
++ -- Change this if you want to use another signal for task abort.
++ -- SIGTERM might be a good one.
++
++ type Signal_Set is array (Natural range <>) of Signal;
++
++ -- Interrupts that must be unmasked at all times. NetBSD
++ -- pthreads will not allow an application to mask out any
++ -- interrupt needed by the threads library.
++ Unmasked : constant Signal_Set :=
++ (SIGTRAP, SIGBUS, SIGTTIN, SIGTTOU, SIGTSTP);
++
++ -- NetBSD will uses SIGPROF for timing. Do not allow a
++ -- handler to attach to this signal.
++ Reserved : constant Signal_Set := (0 .. 0 => SIGPROF);
++
++ type sigset_t is private;
++
++ function sigaddset
++ (set : access sigset_t;
++ sig : Signal) return int;
++ pragma Import (C, sigaddset, "__sigaddset14");
++
++ function sigdelset
++ (set : access sigset_t;
++ sig : Signal) return int;
++ pragma Import (C, sigdelset, "__sigdelset14");
++
++ function sigfillset (set : access sigset_t) return int;
++ pragma Import (C, sigfillset, "__sigfillset14");
++
++ function sigismember
++ (set : access sigset_t;
++ sig : Signal) return int;
++ pragma Import (C, sigismember, "__sigismember14");
++
++ function sigemptyset (set : access sigset_t) return int;
++ pragma Import (C, sigemptyset, "__sigemptyset14");
++
++ -- sigcontext is architecture dependent, so define it private
++ type struct_sigcontext is private;
++
++ type old_struct_sigaction is record
++ sa_handler : System.Address;
++ sa_mask : sigset_t;
++ sa_flags : int;
++ end record;
++ pragma Convention (C, old_struct_sigaction);
++
++ type new_struct_sigaction is record
++ sa_handler : System.Address;
++ sa_flags : int;
++ sa_mask : sigset_t;
++ end record;
++ pragma Convention (C, new_struct_sigaction);
++
++ subtype struct_sigaction is new_struct_sigaction;
++ type struct_sigaction_ptr is access all struct_sigaction;
++
++ SIG_BLOCK : constant := 1;
++ SIG_UNBLOCK : constant := 2;
++ SIG_SETMASK : constant := 3;
++
++ SIG_DFL : constant := 0;
++ SIG_IGN : constant := 1;
++ SIG_ERR : constant := -1;
++ SIG_HOLD : constant := 3;
++
++ SA_SIGINFO : constant := 16#0040#;
++ SA_ONSTACK : constant := 16#0001#;
++
++ function sigaction
++ (sig : Signal;
++ act : struct_sigaction_ptr;
++ oact : struct_sigaction_ptr) return int;
++ pragma Import (C, sigaction, "__sigaction14");
++
++ ----------
++ -- Time --
++ ----------
++
++ Time_Slice_Supported : constant Boolean := True;
++ -- Indicates whether time slicing is supported (i.e SCHED_RR is supported)
++
++ type timespec is private;
++
++ function nanosleep (rqtp, rmtp : access timespec) return int;
++ pragma Import (C, nanosleep, "nanosleep");
++
++ type clockid_t is private;
++
++ CLOCK_REALTIME : constant clockid_t;
++
++ function clock_gettime
++ (clock_id : clockid_t;
++ tp : access timespec)
++ return int;
++ pragma Import (C, clock_gettime, "clock_gettime");
++
++ function To_Duration (TS : timespec) return Duration;
++ pragma Inline (To_Duration);
++
++ function To_Timespec (D : Duration) return timespec;
++ pragma Inline (To_Timespec);
++
++ type struct_timezone is record
++ tz_minuteswest : int;
++ tz_dsttime : int;
++ end record;
++ pragma Convention (C, struct_timezone);
++
++ -------------------------
++ -- Priority Scheduling --
++ -------------------------
++
++ SCHED_FIFO : constant := 1;
++ SCHED_OTHER : constant := 2;
++ SCHED_RR : constant := 3;
++
++ function To_Target_Priority
++ (Prio : System.Any_Priority) return Interfaces.C.int;
++ -- Maps System.Any_Priority to a POSIX priority
++
++ -------------
++ -- Process --
++ -------------
++
++ type pid_t is private;
++
++ function kill (pid : pid_t; sig : Signal) return int;
++ pragma Import (C, kill, "kill");
++
++ function getpid return pid_t;
++ pragma Import (C, getpid, "getpid");
++
++ ---------
++ -- LWP --
++ ---------
++
++ function lwp_self return System.Address;
++ -- lwp_self does not exist on this thread library, revert to pthread_self
++ -- which is the closest approximation (with getpid). This function is
++ -- needed to share 7staprop.adb across POSIX-like targets.
++ pragma Import (C, lwp_self, "pthread_self");
++
++ -------------
++ -- Threads --
++ -------------
++
++ type Thread_Body is access
++ function (arg : System.Address) return System.Address;
++ pragma Convention (C, Thread_Body);
++
++ function Thread_Body_Access is new
++ Ada.Unchecked_Conversion (System.Address, Thread_Body);
++
++ type pthread_t is private;
++ subtype Thread_Id is pthread_t;
++
++ type pthread_mutex_t is limited private;
++ type pthread_cond_t is limited private;
++ type pthread_attr_t is limited private;
++ type pthread_mutexattr_t is limited private;
++ type pthread_condattr_t is limited private;
++ type pthread_key_t is private;
++
++ PTHREAD_CREATE_DETACHED : constant := 1;
++ PTHREAD_CREATE_JOINABLE : constant := 0;
++
++ PTHREAD_SCOPE_PROCESS : constant := 0;
++ PTHREAD_SCOPE_SYSTEM : constant := 2;
++
++ -----------
++ -- Stack --
++ -----------
++
++ type stack_t is record
++ ss_sp : System.Address;
++ ss_size : size_t;
++ ss_flags : int;
++ end record;
++ pragma Convention (C, stack_t);
++
++ function sigaltstack
++ (ss : not null access stack_t;
++ oss : access stack_t) return int;
++ pragma Import (C, sigaltstack, "sigaltstack");
++
++ Alternate_Stack : aliased System.Address;
++ -- This is a dummy definition, never used (Alternate_Stack_Size is null)
++
++ Alternate_Stack_Size : constant := 0;
++ -- No alternate signal stack is used on this platform
++
++ Stack_Base_Available : constant Boolean := False;
++ -- Indicates whether the stack base is available on this target. This
++ -- allows us to share s-osinte.adb between all the FSU run time. Note that
++ -- this value can only be true if pthread_t has a complete definition that
++ -- corresponds exactly to the C header files.
++
++ function Get_Stack_Base (thread : pthread_t) return Address;
++ pragma Inline (Get_Stack_Base);
++ -- returns the stack base of the specified thread. Only call this function
++ -- when Stack_Base_Available is True.
++
++ function Get_Page_Size return size_t;
++ function Get_Page_Size return Address;
++ pragma Import (C, Get_Page_Size, "getpagesize");
++ -- Returns the size of a page
++
++ PROT_NONE : constant := 0;
++ PROT_READ : constant := 1;
++ PROT_WRITE : constant := 2;
++ PROT_EXEC : constant := 4;
++ PROT_ALL : constant := PROT_READ + PROT_WRITE + PROT_EXEC;
++ PROT_ON : constant := PROT_NONE;
++ PROT_OFF : constant := PROT_ALL;
++
++ function mprotect (addr : Address; len : size_t; prot : int) return int;
++ pragma Import (C, mprotect);
++
++ ---------------------------------------
++ -- Nonstandard Thread Initialization --
++ ---------------------------------------
++
++ -- FSU_THREADS requires pthread_init, which is nonstandard and this should
++ -- be invoked during the elaboration of s-taprop.adb.
++
++ -- NetBSD does not require this so we provide an empty Ada body
++
++ procedure pthread_init;
++
++ -------------------------
++ -- POSIX.1c Section 3 --
++ -------------------------
++
++ function sigwait
++ (set : access sigset_t;
++ sig : access Signal) return int;
++ pragma Import (C, sigwait, "sigwait");
++
++ function pthread_kill
++ (thread : pthread_t;
++ sig : Signal) return int;
++ pragma Import (C, pthread_kill, "pthread_kill");
++
++ function pthread_sigmask
++ (how : int;
++ set : access sigset_t;
++ oset : access sigset_t) return int;
++ pragma Import (C, pthread_sigmask, "pthread_sigmask");
++
++ --------------------------
++ -- POSIX.1c Section 11 --
++ --------------------------
++
++ function pthread_mutexattr_init
++ (attr : access pthread_mutexattr_t) return int;
++ pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
++
++ function pthread_mutexattr_destroy
++ (attr : access pthread_mutexattr_t) return int;
++ pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
++
++ function pthread_mutex_init
++ (mutex : access pthread_mutex_t;
++ attr : access pthread_mutexattr_t) return int;
++ pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
++
++ function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
++ pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
++
++ function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
++ pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
++
++ function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
++ pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
++
++ function pthread_condattr_init
++ (attr : access pthread_condattr_t) return int;
++ pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
++
++ function pthread_condattr_destroy
++ (attr : access pthread_condattr_t) return int;
++ pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
++
++ function pthread_cond_init
++ (cond : access pthread_cond_t;
++ attr : access pthread_condattr_t) return int;
++ pragma Import (C, pthread_cond_init, "pthread_cond_init");
++
++ function pthread_cond_destroy (cond : access pthread_cond_t) return int;
++ pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
++
++ function pthread_cond_signal (cond : access pthread_cond_t) return int;
++ pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
++
++ function pthread_cond_wait
++ (cond : access pthread_cond_t;
++ mutex : access pthread_mutex_t) return int;
++ pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
++
++ function pthread_cond_timedwait
++ (cond : access pthread_cond_t;
++ mutex : access pthread_mutex_t;
++ abstime : access timespec) return int;
++ pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
++
++ Relative_Timed_Wait : constant Boolean := False;
++ -- pthread_cond_timedwait requires an absolute delay time
++
++ --------------------------
++ -- POSIX.1c Section 13 --
++ --------------------------
++
++ PTHREAD_PRIO_NONE : constant := 0;
++ PTHREAD_PRIO_PROTECT : constant := 2;
++ PTHREAD_PRIO_INHERIT : constant := 1;
++
++ function pthread_mutexattr_setprotocol
++ (attr : access pthread_mutexattr_t;
++ protocol : int) return int;
++
++ function pthread_mutexattr_setprioceiling
++ (attr : access pthread_mutexattr_t;
++ prioceiling : int) return int;
++
++ type struct_sched_param is record
++ sched_priority : int;
++ end record;
++ pragma Convention (C, struct_sched_param);
++
++ function pthread_getschedparam
++ (thread : pthread_t;
++ policy : access int;
++ param : access struct_sched_param) return int;
++ pragma Import (C, pthread_getschedparam, "pthread_getschedparam");
++
++ function pthread_setschedparam
++ (thread : pthread_t;
++ policy : int;
++ param : access struct_sched_param) return int;
++ pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
++
++ function pthread_attr_setscope
++ (attr : access pthread_attr_t;
++ contentionscope : int) return int;
++ pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
++
++ function pthread_attr_getscope
++ (attr : access pthread_attr_t;
++ contentionscope : access int) return int;
++ pragma Import (C, pthread_attr_getscope, "pthread_attr_getscope");
++
++ function pthread_attr_setinheritsched
++ (attr : access pthread_attr_t;
++ inheritsched : int) return int;
++ pragma Import
++ (C, pthread_attr_setinheritsched, "pthread_attr_setinheritsched");
++
++ function pthread_attr_getinheritsched
++ (attr : access pthread_attr_t;
++ inheritsched : access int) return int;
++ pragma Import
++ (C, pthread_attr_getinheritsched, "pthread_attr_getinheritsched");
++
++ function pthread_attr_setschedpolicy
++ (attr : access pthread_attr_t;
++ policy : int) return int;
++ pragma Import (C, pthread_attr_setschedpolicy,
++ "pthread_attr_setschedpolicy");
++
++ function pthread_attr_getschedpolicy
++ (attr : access pthread_attr_t;
++ policy : access int) return int;
++ pragma Import (C, pthread_attr_getschedpolicy,
++ "pthread_attr_getschedpolicy");
++
++ function pthread_attr_setschedparam
++ (attr : access pthread_attr_t;
++ sched_param : int) return int;
++ pragma Import (C, pthread_attr_setschedparam, "pthread_attr_setschedparam");
++
++ function pthread_attr_getschedparam
++ (attr : access pthread_attr_t;
++ sched_param : access int) return int;
++ pragma Import (C, pthread_attr_getschedparam, "pthread_attr_getschedparam");
++
++ function sched_yield return int;
++ pragma Import (C, sched_yield, "sched_yield");
++
++ --------------------------
++ -- P1003.1c Section 16 --
++ --------------------------
++
++ function pthread_attr_init (attributes : access pthread_attr_t) return int;
++ pragma Import (C, pthread_attr_init, "pthread_attr_init");
++
++ function pthread_attr_destroy
++ (attributes : access pthread_attr_t) return int;
++ pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
++
++ function pthread_attr_setdetachstate
++ (attr : access pthread_attr_t;
++ detachstate : int) return int;
++ pragma Import
++ (C, pthread_attr_setdetachstate, "pthread_attr_setdetachstate");
++
++ function pthread_attr_getdetachstate
++ (attr : access pthread_attr_t;
++ detachstate : access int) return int;
++ pragma Import
++ (C, pthread_attr_getdetachstate, "pthread_attr_getdetachstate");
++
++ function pthread_attr_getstacksize
++ (attr : access pthread_attr_t;
++ stacksize : access size_t) return int;
++ pragma Import
++ (C, pthread_attr_getstacksize, "pthread_attr_getstacksize");
++
++ function pthread_attr_setstacksize
++ (attr : access pthread_attr_t;
++ stacksize : size_t) return int;
++ pragma Import
++ (C, pthread_attr_setstacksize, "pthread_attr_setstacksize");
++
++ function pthread_create
++ (thread : access pthread_t;
++ attributes : access pthread_attr_t;
++ start_routine : Thread_Body;
++ arg : System.Address) return int;
++ pragma Import (C, pthread_create, "pthread_create");
++
++ function pthread_detach (thread : pthread_t) return int;
++ pragma Import (C, pthread_detach, "pthread_detach");
++
++ procedure pthread_exit (status : System.Address);
++ pragma Import (C, pthread_exit, "pthread_exit");
++
++ function pthread_self return pthread_t;
++ pragma Import (C, pthread_self, "pthread_self");
++
++ --------------------------
++ -- POSIX.1c Section 17 --
++ --------------------------
++
++ function pthread_setspecific
++ (key : pthread_key_t;
++ value : System.Address) return int;
++ pragma Import (C, pthread_setspecific, "pthread_setspecific");
++
++ function pthread_getspecific (key : pthread_key_t) return System.Address;
++ pragma Import (C, pthread_getspecific, "pthread_getspecific");
++
++ type destructor_pointer is access procedure (arg : System.Address);
++ pragma Convention (C, destructor_pointer);
++
++ function pthread_key_create
++ (key : access pthread_key_t;
++ destructor : destructor_pointer) return int;
++ pragma Import (C, pthread_key_create, "pthread_key_create");
++
++ ------------------------------------
++ -- Non-portable Pthread Functions --
++ ------------------------------------
++
++ function pthread_set_name_np
++ (thread : pthread_t;
++ name : System.Address) return int;
++ pragma Import (C, pthread_set_name_np, "pthread_set_name_np");
++
++private
++
++ type sigset_t is array (1 .. 4) of unsigned;
++
++ -- In NetBSD the component sa_handler turns out to
++ -- be one a union type, and the selector is a macro:
++ -- #define sa_handler __sigaction_u._handler
++ -- #define sa_sigaction __sigaction_u._sigaction
++
++ -- Should we add a signal_context type here ???
++ -- How could it be done independent of the CPU architecture ???
++ -- sigcontext type is opaque, so it is architecturally neutral.
++ -- It is always passed as an access type, so define it as an empty record
++ -- since the contents are not used anywhere.
++
++ type struct_sigcontext is null record;
++ pragma Convention (C, struct_sigcontext);
++
++ type pid_t is new int;
++
++ type time_t is new int;
++
++ type timespec is record
++ tv_sec : time_t;
++ tv_nsec : long;
++ end record;
++ pragma Convention (C, timespec);
++
++ type clockid_t is new int;
++ CLOCK_REALTIME : constant clockid_t := 0;
++
++ type pthread_t is new System.Address;
++ type pthread_attr_t is record
++ Pta_Magic : unsigned;
++ Pta_Flags : int;
++ Pta_Private : System.Address;
++ end record;
++ pragma Convention (C, pthread_attr_t);
++
++ -- PORT NOTE: The size of pthread_spin_t is defined in
++ -- /src/sys/arch/*/include/types.h
++ type pthread_spin_t is new unsigned_char;
++
++ type pthread_queue_t is record
++ Pthqh_First : pthread_t;
++ Pthqh_Last : System.Address;
++ end record;
++ pragma Convention (C, pthread_queue_t);
++
++ type pthread_mutex_t is record
++ Ptm_Majic : unsigned;
++ Ptm_Lock : pthread_spin_t;
++ Ptm_Interlock : pthread_spin_t;
++ Ptm_Owner : pthread_t;
++ Ptm_Block : pthread_queue_t;
++ Ptm_Private : System.Address;
++ end record;
++ pragma Convention (C, pthread_mutex_t);
++
++ type pthread_mutexattr_t is record
++ Ptma_Majic : unsigned;
++ Ptma_Private : System.Address;
++ end record;
++ pragma Convention (C, pthread_mutexattr_t);
++
++ type pthread_cond_t is record
++ Ptc_Magic : unsigned;
++ Ptc_Lock : pthread_spin_t;
++ Ptc_Waiters : pthread_queue_t;
++ Ptc_Mutex : pthread_mutex_t;
++ Ptc_Private : System.Address;
++ end record;
++ pragma Convention (C, pthread_cond_t);
++
++ type pthread_condattr_t is record
++ Ptca_Magic : unsigned;
++ Ptca_Private : System.Address;
++ end record;
++ pragma Convention (C, pthread_condattr_t);
++
++ type pthread_key_t is new int;
++
++end System.OS_Interface;
+--- /dev/null
++++ gcc/ada/s-osinte-netbsd6.ads
+@@ -0,0 +1,675 @@
++------------------------------------------------------------------------------
++-- --
++-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
++-- --
++-- S Y S T E M . O S _ I N T E R F A C E --
++-- --
++-- S p e c --
++-- --
++-- Copyright (C) 1991-1994, Florida State University --
++-- Copyright (C) 1995-2009, Free Software Foundation, Inc. --
++-- --
++-- GNARL 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. GNARL 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 GNARL; 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. --
++-- --
++-- GNARL was developed by the GNARL team at Florida State University. It is --
++-- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
++-- State University (http://www.gnat.com). --
++-- --
++-- Copyright (C) 2010, 2011 John Marino <www.dragonlace.net> --
++------------------------------------------------------------------------------
++
++-- This is the NetBSD 6+ PTHREADS version of this package.
++-- It is based off of the FreeBSD PTHREADS as of 4.2.3.
++
++-- This package encapsulates all direct interfaces to OS services
++-- that are needed by the tasking run-time (libgnarl).
++
++-- PLEASE DO NOT add any with-clauses to this package or remove the pragma
++-- Preelaborate. This package is designed to be a bottom-level (leaf) package.
++
++with Ada.Unchecked_Conversion;
++
++with Interfaces.C;
++
++package System.OS_Interface is
++ pragma Preelaborate;
++
++ pragma Linker_Options ("-pthread");
++
++ subtype int is Interfaces.C.int;
++ subtype short is Interfaces.C.short;
++ subtype long is Interfaces.C.long;
++ subtype unsigned is Interfaces.C.unsigned;
++ subtype unsigned_short is Interfaces.C.unsigned_short;
++ subtype unsigned_long is Interfaces.C.unsigned_long;
++ subtype unsigned_char is Interfaces.C.unsigned_char;
++ subtype plain_char is Interfaces.C.plain_char;
++ subtype size_t is Interfaces.C.size_t;
++ subtype int64_t is Interfaces.Integer_64;
++
++ -----------
++ -- Errno --
++ -----------
++
++ function Errno return int;
++ pragma Inline (Errno);
++
++ EAGAIN : constant := 35;
++ EINTR : constant := 4;
++ EINVAL : constant := 22;
++ ENOMEM : constant := 12;
++ ETIMEDOUT : constant := 60;
++
++ -------------
++ -- Signals --
++ -------------
++
++ Max_Interrupt : constant := 63;
++ type Signal is new int range 0 .. Max_Interrupt;
++ for Signal'Size use int'Size;
++
++ SIGHUP : constant := 1; -- hangup
++ SIGINT : constant := 2; -- interrupt (rubout)
++ SIGQUIT : constant := 3; -- quit (ASCD FS)
++ SIGILL : constant := 4; -- illegal instruction (not reset)
++ SIGTRAP : constant := 5; -- trace trap (not reset)
++ SIGIOT : constant := 6; -- IOT instruction
++ SIGABRT : constant := 6; -- used by abort, replace SIGIOT in the future
++ SIGEMT : constant := 7; -- EMT instruction
++ SIGFPE : constant := 8; -- floating point exception
++ SIGKILL : constant := 9; -- kill (cannot be caught or ignored)
++ SIGBUS : constant := 10; -- bus error
++ SIGSEGV : constant := 11; -- segmentation violation
++ SIGSYS : constant := 12; -- bad argument to system call
++ SIGPIPE : constant := 13; -- write on a pipe with no one to read it
++ SIGALRM : constant := 14; -- alarm clock
++ SIGTERM : constant := 15; -- software termination signal from kill
++ SIGURG : constant := 16; -- urgent condition on IO channel
++ SIGSTOP : constant := 17; -- stop (cannot be caught or ignored)
++ SIGTSTP : constant := 18; -- user stop requested from tty
++ SIGCONT : constant := 19; -- stopped process has been continued
++ SIGCLD : constant := 20; -- alias for SIGCHLD
++ SIGCHLD : constant := 20; -- child status change
++ SIGTTIN : constant := 21; -- background tty read attempted
++ SIGTTOU : constant := 22; -- background tty write attempted
++ SIGIO : constant := 23; -- I/O possible (Solaris SIGPOLL alias)
++ SIGXCPU : constant := 24; -- CPU time limit exceeded
++ SIGXFSZ : constant := 25; -- filesize limit exceeded
++ SIGVTALRM : constant := 26; -- virtual timer expired
++ SIGPROF : constant := 27; -- profiling timer expired
++ SIGWINCH : constant := 28; -- window size change
++ SIGINFO : constant := 29; -- information request (BSD)
++ SIGUSR1 : constant := 30; -- user defined signal 1
++ SIGUSR2 : constant := 31; -- user defined signal 2
++ SIGPWR : constant := 32; -- power fail/restart (not reset when caught)
++
++ SIGADAABORT : constant := SIGABRT;
++ -- Change this if you want to use another signal for task abort.
++ -- SIGTERM might be a good one.
++
++ type Signal_Set is array (Natural range <>) of Signal;
++
++ -- Interrupts that must be unmasked at all times. NetBSD
++ -- pthreads will not allow an application to mask out any
++ -- interrupt needed by the threads library.
++ Unmasked : constant Signal_Set :=
++ (SIGTRAP, SIGBUS, SIGTTIN, SIGTTOU, SIGTSTP);
++
++ -- NetBSD will uses SIGPROF for timing. Do not allow a
++ -- handler to attach to this signal.
++ Reserved : constant Signal_Set := (0 .. 0 => SIGPROF);
++
++ type sigset_t is private;
++
++ function sigaddset
++ (set : access sigset_t;
++ sig : Signal) return int;
++ pragma Import (C, sigaddset, "__sigaddset14");
++
++ function sigdelset
++ (set : access sigset_t;
++ sig : Signal) return int;
++ pragma Import (C, sigdelset, "__sigdelset14");
++
++ function sigfillset (set : access sigset_t) return int;
++ pragma Import (C, sigfillset, "__sigfillset14");
++
++ function sigismember
++ (set : access sigset_t;
++ sig : Signal) return int;
++ pragma Import (C, sigismember, "__sigismember14");
++
++ function sigemptyset (set : access sigset_t) return int;
++ pragma Import (C, sigemptyset, "__sigemptyset14");
++
++ -- sigcontext is architecture dependent, so define it private
++ type struct_sigcontext is private;
++
++ type old_struct_sigaction is record
++ sa_handler : System.Address;
++ sa_mask : sigset_t;
++ sa_flags : int;
++ end record;
++ pragma Convention (C, old_struct_sigaction);
++
++ type new_struct_sigaction is record
++ sa_handler : System.Address;
++ sa_flags : int;
++ sa_mask : sigset_t;
++ end record;
++ pragma Convention (C, new_struct_sigaction);
++
++ subtype struct_sigaction is new_struct_sigaction;
++ type struct_sigaction_ptr is access all struct_sigaction;
++
++ SIG_BLOCK : constant := 1;
++ SIG_UNBLOCK : constant := 2;
++ SIG_SETMASK : constant := 3;
++
++ SIG_DFL : constant := 0;
++ SIG_IGN : constant := 1;
++ SIG_ERR : constant := -1;
++ SIG_HOLD : constant := 3;
++
++ SA_SIGINFO : constant := 16#0040#;
++ SA_ONSTACK : constant := 16#0001#;
++
++ function sigaction
++ (sig : Signal;
++ act : struct_sigaction_ptr;
++ oact : struct_sigaction_ptr) return int;
++ pragma Import (C, sigaction, "__sigaction14");
++
++ ----------
++ -- Time --
++ ----------
++
++ Time_Slice_Supported : constant Boolean := True;
++ -- Indicates whether time slicing is supported (i.e SCHED_RR is supported)
++
++ type timespec is private;
++
++ function nanosleep (rqtp, rmtp : access timespec) return int;
++ pragma Import (C, nanosleep, "__nanosleep50");
++
++ type clockid_t is private;
++
++ CLOCK_REALTIME : constant clockid_t;
++
++ function clock_gettime
++ (clock_id : clockid_t;
++ tp : access timespec)
++ return int;
++ pragma Import (C, clock_gettime, "__clock_gettime50");
++
++ function To_Duration (TS : timespec) return Duration;
++ pragma Inline (To_Duration);
++
++ function To_Timespec (D : Duration) return timespec;
++ pragma Inline (To_Timespec);
++
++ type struct_timezone is record
++ tz_minuteswest : int;
++ tz_dsttime : int;
++ end record;
++ pragma Convention (C, struct_timezone);
++
++ -------------------------
++ -- Priority Scheduling --
++ -------------------------
++
++ SCHED_FIFO : constant := 1;
++ SCHED_OTHER : constant := 2;
++ SCHED_RR : constant := 3;
++
++ function To_Target_Priority
++ (Prio : System.Any_Priority) return Interfaces.C.int;
++ -- Maps System.Any_Priority to a POSIX priority
++
++ -------------
++ -- Process --
++ -------------
++
++ type pid_t is private;
++
++ function kill (pid : pid_t; sig : Signal) return int;
++ pragma Import (C, kill, "kill");
++
++ function getpid return pid_t;
++ pragma Import (C, getpid, "getpid");
++
++ ---------
++ -- LWP --
++ ---------
++
++ function lwp_self return System.Address;
++ -- lwp_self does not exist on this thread library, revert to pthread_self
++ -- which is the closest approximation (with getpid). This function is
++ -- needed to share 7staprop.adb across POSIX-like targets.
++ pragma Import (C, lwp_self, "pthread_self");
++
++ -------------
++ -- Threads --
++ -------------
++
++ type Thread_Body is access
++ function (arg : System.Address) return System.Address;
++ pragma Convention (C, Thread_Body);
++
++ function Thread_Body_Access is new
++ Ada.Unchecked_Conversion (System.Address, Thread_Body);
++
++ type pthread_t is private;
++ subtype Thread_Id is pthread_t;
++
++ type pthread_mutex_t is limited private;
++ type pthread_cond_t is limited private;
++ type pthread_attr_t is limited private;
++ type pthread_mutexattr_t is limited private;
++ type pthread_condattr_t is limited private;
++ type pthread_key_t is private;
++
++ PTHREAD_CREATE_DETACHED : constant := 1;
++ PTHREAD_CREATE_JOINABLE : constant := 0;
++
++ PTHREAD_SCOPE_PROCESS : constant := 0;
++ PTHREAD_SCOPE_SYSTEM : constant := 2;
++
++ -----------
++ -- Stack --
++ -----------
++
++ type stack_t is record
++ ss_sp : System.Address;
++ ss_size : size_t;
++ ss_flags : int;
++ end record;
++ pragma Convention (C, stack_t);
++
++ function sigaltstack
++ (ss : not null access stack_t;
++ oss : access stack_t) return int;
++ pragma Import (C, sigaltstack, "sigaltstack");
++
++ Alternate_Stack : aliased System.Address;
++ -- This is a dummy definition, never used (Alternate_Stack_Size is null)
++
++ Alternate_Stack_Size : constant := 0;
++ -- No alternate signal stack is used on this platform
++
++ Stack_Base_Available : constant Boolean := False;
++ -- Indicates whether the stack base is available on this target. This
++ -- allows us to share s-osinte.adb between all the FSU run time. Note that
++ -- this value can only be true if pthread_t has a complete definition that
++ -- corresponds exactly to the C header files.
++
++ function Get_Stack_Base (thread : pthread_t) return Address;
++ pragma Inline (Get_Stack_Base);
++ -- returns the stack base of the specified thread. Only call this function
++ -- when Stack_Base_Available is True.
++
++ function Get_Page_Size return size_t;
++ function Get_Page_Size return Address;
++ pragma Import (C, Get_Page_Size, "getpagesize");
++ -- Returns the size of a page
++
++ PROT_NONE : constant := 0;
++ PROT_READ : constant := 1;
++ PROT_WRITE : constant := 2;
++ PROT_EXEC : constant := 4;
++ PROT_ALL : constant := PROT_READ + PROT_WRITE + PROT_EXEC;
++ PROT_ON : constant := PROT_NONE;
++ PROT_OFF : constant := PROT_ALL;
++
++ function mprotect (addr : Address; len : size_t; prot : int) return int;
++ pragma Import (C, mprotect);
++
++ ---------------------------------------
++ -- Nonstandard Thread Initialization --
++ ---------------------------------------
++
++ -- FSU_THREADS requires pthread_init, which is nonstandard and this should
++ -- be invoked during the elaboration of s-taprop.adb.
++
++ -- NetBSD does not require this so we provide an empty Ada body
++
++ procedure pthread_init;
++
++ -------------------------
++ -- POSIX.1c Section 3 --
++ -------------------------
++
++ function sigwait
++ (set : access sigset_t;
++ sig : access Signal) return int;
++ pragma Import (C, sigwait, "sigwait");
++
++ function pthread_kill
++ (thread : pthread_t;
++ sig : Signal) return int;
++ pragma Import (C, pthread_kill, "pthread_kill");
++
++ function pthread_sigmask
++ (how : int;
++ set : access sigset_t;
++ oset : access sigset_t) return int;
++ pragma Import (C, pthread_sigmask, "pthread_sigmask");
++
++ --------------------------
++ -- POSIX.1c Section 11 --
++ --------------------------
++
++ function pthread_mutexattr_init
++ (attr : access pthread_mutexattr_t) return int;
++ pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
++
++ function pthread_mutexattr_destroy
++ (attr : access pthread_mutexattr_t) return int;
++ pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
++
++ function pthread_mutex_init
++ (mutex : access pthread_mutex_t;
++ attr : access pthread_mutexattr_t) return int;
++ pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
++
++ function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
++ pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
++
++ function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
++ pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
++
++ function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
++ pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
++
++ function pthread_condattr_init
++ (attr : access pthread_condattr_t) return int;
++ pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
++
++ function pthread_condattr_destroy
++ (attr : access pthread_condattr_t) return int;
++ pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
++
++ function pthread_cond_init
++ (cond : access pthread_cond_t;
++ attr : access pthread_condattr_t) return int;
++ pragma Import (C, pthread_cond_init, "pthread_cond_init");
++
++ function pthread_cond_destroy (cond : access pthread_cond_t) return int;
++ pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
++
++ function pthread_cond_signal (cond : access pthread_cond_t) return int;
++ pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
++
++ function pthread_cond_wait
++ (cond : access pthread_cond_t;
++ mutex : access pthread_mutex_t) return int;
++ pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
++
++ function pthread_cond_timedwait
++ (cond : access pthread_cond_t;
++ mutex : access pthread_mutex_t;
++ abstime : access timespec) return int;
++ pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
++
++ Relative_Timed_Wait : constant Boolean := False;
++ -- pthread_cond_timedwait requires an absolute delay time
++
++ --------------------------
++ -- POSIX.1c Section 13 --
++ --------------------------
++
++ PTHREAD_PRIO_NONE : constant := 0;
++ PTHREAD_PRIO_PROTECT : constant := 2;
++ PTHREAD_PRIO_INHERIT : constant := 1;
++
++ function pthread_mutexattr_setprotocol
++ (attr : access pthread_mutexattr_t;
++ protocol : int) return int;
++
++ function pthread_mutexattr_setprioceiling
++ (attr : access pthread_mutexattr_t;
++ prioceiling : int) return int;
++
++ type struct_sched_param is record
++ sched_priority : int;
++ end record;
++ pragma Convention (C, struct_sched_param);
++
++ function pthread_getschedparam
++ (thread : pthread_t;
++ policy : access int;
++ param : access struct_sched_param) return int;
++ pragma Import (C, pthread_getschedparam, "pthread_getschedparam");
++
++ function pthread_setschedparam
++ (thread : pthread_t;
++ policy : int;
++ param : access struct_sched_param) return int;
++ pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
++
++ function pthread_attr_setscope
++ (attr : access pthread_attr_t;
++ contentionscope : int) return int;
++ pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
++
++ function pthread_attr_getscope
++ (attr : access pthread_attr_t;
++ contentionscope : access int) return int;
++ pragma Import (C, pthread_attr_getscope, "pthread_attr_getscope");
++
++ function pthread_attr_setinheritsched
++ (attr : access pthread_attr_t;
++ inheritsched : int) return int;
++ pragma Import
++ (C, pthread_attr_setinheritsched, "pthread_attr_setinheritsched");
++
++ function pthread_attr_getinheritsched
++ (attr : access pthread_attr_t;
++ inheritsched : access int) return int;
++ pragma Import
++ (C, pthread_attr_getinheritsched, "pthread_attr_getinheritsched");
++
++ function pthread_attr_setschedpolicy
++ (attr : access pthread_attr_t;
++ policy : int) return int;
++ pragma Import (C, pthread_attr_setschedpolicy,
++ "pthread_attr_setschedpolicy");
++
++ function pthread_attr_getschedpolicy
++ (attr : access pthread_attr_t;
++ policy : access int) return int;
++ pragma Import (C, pthread_attr_getschedpolicy,
++ "pthread_attr_getschedpolicy");
++
++ function pthread_attr_setschedparam
++ (attr : access pthread_attr_t;
++ sched_param : int) return int;
++ pragma Import (C, pthread_attr_setschedparam, "pthread_attr_setschedparam");
++
++ function pthread_attr_getschedparam
++ (attr : access pthread_attr_t;
++ sched_param : access int) return int;
++ pragma Import (C, pthread_attr_getschedparam, "pthread_attr_getschedparam");
++
++ function sched_yield return int;
++ pragma Import (C, sched_yield, "sched_yield");
++
++ --------------------------
++ -- P1003.1c Section 16 --
++ --------------------------
++
++ function pthread_attr_init (attributes : access pthread_attr_t) return int;
++ pragma Import (C, pthread_attr_init, "pthread_attr_init");
++
++ function pthread_attr_destroy
++ (attributes : access pthread_attr_t) return int;
++ pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
++
++ function pthread_attr_setdetachstate
++ (attr : access pthread_attr_t;
++ detachstate : int) return int;
++ pragma Import
++ (C, pthread_attr_setdetachstate, "pthread_attr_setdetachstate");
++
++ function pthread_attr_getdetachstate
++ (attr : access pthread_attr_t;
++ detachstate : access int) return int;
++ pragma Import
++ (C, pthread_attr_getdetachstate, "pthread_attr_getdetachstate");
++
++ function pthread_attr_getstacksize
++ (attr : access pthread_attr_t;
++ stacksize : access size_t) return int;
++ pragma Import
++ (C, pthread_attr_getstacksize, "pthread_attr_getstacksize");
++
++ function pthread_attr_setstacksize
++ (attr : access pthread_attr_t;
++ stacksize : size_t) return int;
++ pragma Import
++ (C, pthread_attr_setstacksize, "pthread_attr_setstacksize");
++
++ function pthread_create
++ (thread : access pthread_t;
++ attributes : access pthread_attr_t;
++ start_routine : Thread_Body;
++ arg : System.Address) return int;
++ pragma Import (C, pthread_create, "pthread_create");
++
++ function pthread_detach (thread : pthread_t) return int;
++ pragma Import (C, pthread_detach, "pthread_detach");
++
++ procedure pthread_exit (status : System.Address);
++ pragma Import (C, pthread_exit, "pthread_exit");
++
++ function pthread_self return pthread_t;
++ pragma Import (C, pthread_self, "pthread_self");
++
++ --------------------------
++ -- POSIX.1c Section 17 --
++ --------------------------
++
++ function pthread_setspecific
++ (key : pthread_key_t;
++ value : System.Address) return int;
++ pragma Import (C, pthread_setspecific, "pthread_setspecific");
++
++ function pthread_getspecific (key : pthread_key_t) return System.Address;
++ pragma Import (C, pthread_getspecific, "pthread_getspecific");
++
++ type destructor_pointer is access procedure (arg : System.Address);
++ pragma Convention (C, destructor_pointer);
++
++ function pthread_key_create
++ (key : access pthread_key_t;
++ destructor : destructor_pointer) return int;
++ pragma Import (C, pthread_key_create, "pthread_key_create");
++
++ ------------------------------------
++ -- Non-portable Pthread Functions --
++ ------------------------------------
++
++ function pthread_set_name_np
++ (thread : pthread_t;
++ name : System.Address) return int;
++ pragma Import (C, pthread_set_name_np, "pthread_set_name_np");
++
++private
++
++ type sigset_t is array (1 .. 4) of unsigned;
++
++ -- In NetBSD the component sa_handler turns out to
++ -- be one a union type, and the selector is a macro:
++ -- #define sa_handler __sigaction_u._handler
++ -- #define sa_sigaction __sigaction_u._sigaction
++
++ -- Should we add a signal_context type here ???
++ -- How could it be done independent of the CPU architecture ???
++ -- sigcontext type is opaque, so it is architecturally neutral.
++ -- It is always passed as an access type, so define it as an empty record
++ -- since the contents are not used anywhere.
++
++ type struct_sigcontext is null record;
++ pragma Convention (C, struct_sigcontext);
++
++ type pid_t is new int;
++
++ type time_t is new int64_t;
++
++ type timespec is record
++ tv_sec : time_t;
++ tv_nsec : long;
++ end record;
++ pragma Convention (C, timespec);
++
++ type clockid_t is new int;
++ CLOCK_REALTIME : constant clockid_t := 0;
++
++ type pthread_t is new System.Address;
++ type pthread_attr_t is record
++ Pta_Magic : unsigned;
++ Pta_Flags : int;
++ Pta_Private : System.Address;
++ end record;
++ pragma Convention (C, pthread_attr_t);
++
++ -- PORT NOTE: The size of pthread_spin_t is defined in
++ -- /src/sys/arch/*/include/types.h
++ type pthread_spin_t is new unsigned_char;
++
++ type pthread_queue_t is record
++ Pthqh_First : pthread_t;
++ Pthqh_Last : System.Address;
++ end record;
++ pragma Convention (C, pthread_queue_t);
++
++ type pthread_mutex_t is record
++ Ptm_Majic : unsigned;
++ Ptm_Lock : pthread_spin_t;
++ Ptm_Interlock : pthread_spin_t;
++ Ptm_Owner : pthread_t;
++ Ptm_Block : pthread_queue_t;
++ Ptm_Private : System.Address;
++ end record;
++ pragma Convention (C, pthread_mutex_t);
++
++ type pthread_mutexattr_t is record
++ Ptma_Majic : unsigned;
++ Ptma_Private : System.Address;
++ end record;
++ pragma Convention (C, pthread_mutexattr_t);
++
++ type pthread_cond_t is record
++ Ptc_Magic : unsigned;
++ Ptc_Lock : pthread_spin_t;
++ Ptc_Waiters : pthread_queue_t;
++ Ptc_Mutex : pthread_mutex_t;
++ Ptc_Private : System.Address;
++ end record;
++ pragma Convention (C, pthread_cond_t);
++
++ type pthread_condattr_t is record
++ Ptca_Magic : unsigned;
++ Ptca_Private : System.Address;
++ end record;
++ pragma Convention (C, pthread_condattr_t);
++
++ type pthread_key_t is new int;
++
++end System.OS_Interface;
+--- /dev/null
++++ gcc/ada/s-osinte-openbsd.adb
+@@ -0,0 +1,117 @@
++------------------------------------------------------------------------------
++-- --
++-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
++-- --
++-- S Y S T E M . O S _ I N T E R F A C E --
++-- --
++-- B o d y --
++-- --
++-- Copyright (C) 1991-2009, Free Software Foundation, Inc. --
++-- --
++-- GNARL 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/>. --
++-- --
++-- GNARL was developed by the GNARL team at Florida State University. It is --
++-- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
++-- State University (http://www.gnat.com). --
++-- --
++-- Copyright (C) 2010 John Marino <draco@marino.st> --
++------------------------------------------------------------------------------
++
++-- This is the OpenBSD THREADS version of this package
++
++with Interfaces.C; use Interfaces.C;
++
++package body System.OS_Interface is
++
++ -----------
++ -- Errno --
++ -----------
++
++ function Errno return int is
++ type int_ptr is access all int;
++
++ function internal_errno return int_ptr;
++ pragma Import (C, internal_errno, "__errno");
++
++ begin
++ return (internal_errno.all);
++ end Errno;
++
++ --------------------
++ -- Get_Stack_Base --
++ --------------------
++
++ function Get_Stack_Base (thread : pthread_t) return Address is
++ pragma Unreferenced (thread);
++ begin
++ return Null_Address;
++ end Get_Stack_Base;
++
++ ------------------
++ -- pthread_init --
++ ------------------
++
++ procedure pthread_init is
++ begin
++ null;
++ end pthread_init;
++
++ -----------------
++ -- To_Duration --
++ -----------------
++
++ function To_Duration (TS : timespec) return Duration is
++ begin
++ return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
++ end To_Duration;
++
++ ------------------------
++ -- To_Target_Priority --
++ ------------------------
++
++ function To_Target_Priority
++ (Prio : System.Any_Priority) return Interfaces.C.int
++ is
++ begin
++ return Interfaces.C.int (Prio);
++ end To_Target_Priority;
++
++ -----------------
++ -- To_Timespec --
++ -----------------
++
++ function To_Timespec (D : Duration) return timespec is
++ S : time_t;
++ F : Duration;
++
++ begin
++ S := time_t (Long_Long_Integer (D));
++ F := D - Duration (S);
++
++ -- If F has negative value due to a round-up, adjust for positive F
++ -- value.
++
++ if F < 0.0 then
++ S := S - 1;
++ F := F + 1.0;
++ end if;
++
++ return timespec'(tv_sec => S,
++ tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
++ end To_Timespec;
++
++end System.OS_Interface;
+--- /dev/null
++++ gcc/ada/s-osinte-openbsd.ads
+@@ -0,0 +1,648 @@
++------------------------------------------------------------------------------
++-- --
++-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
++-- --
++-- S Y S T E M . O S _ I N T E R F A C E --
++-- --
++-- S p e c --
++-- --
++-- Copyright (C) 1991-1994, Florida State University --
++-- Copyright (C) 1995-2009, Free Software Foundation, Inc. --
++-- --
++-- GNARL 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. GNARL 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 GNARL; 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. --
++-- --
++-- GNARL was developed by the GNARL team at Florida State University. It is --
++-- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
++-- State University (http://www.gnat.com). --
++-- --
++-- Copyright (C) 2010 John Marino <draco@marino.st> --
++------------------------------------------------------------------------------
++
++-- This is the OpenBSD PTHREADS version of this package
++
++-- This package encapsulates all direct interfaces to OS services
++-- that are needed by the tasking run-time (libgnarl).
++
++-- PLEASE DO NOT add any with-clauses to this package or remove the pragma
++-- Preelaborate. This package is designed to be a bottom-level (leaf) package.
++
++with Ada.Unchecked_Conversion;
++
++with Interfaces.C;
++
++package System.OS_Interface is
++ pragma Preelaborate;
++
++ pragma Linker_Options ("-pthread");
++
++ subtype int is Interfaces.C.int;
++ subtype short is Interfaces.C.short;
++ subtype long is Interfaces.C.long;
++ subtype unsigned is Interfaces.C.unsigned;
++ subtype unsigned_short is Interfaces.C.unsigned_short;
++ subtype unsigned_long is Interfaces.C.unsigned_long;
++ subtype unsigned_char is Interfaces.C.unsigned_char;
++ subtype plain_char is Interfaces.C.plain_char;
++ subtype size_t is Interfaces.C.size_t;
++
++ -----------
++ -- Errno --
++ -----------
++
++ function Errno return int;
++ pragma Inline (Errno);
++
++ EAGAIN : constant := 35;
++ EINTR : constant := 4;
++ EINVAL : constant := 22;
++ ENOMEM : constant := 12;
++ ETIMEDOUT : constant := 60;
++
++ -------------
++ -- Signals --
++ -------------
++
++ Max_Interrupt : constant := 31;
++ type Signal is new int range 0 .. Max_Interrupt;
++ for Signal'Size use int'Size;
++
++ SIGHUP : constant := 1; -- hangup
++ SIGINT : constant := 2; -- interrupt (rubout)
++ SIGQUIT : constant := 3; -- quit (ASCD FS)
++ SIGILL : constant := 4; -- illegal instruction (not reset)
++ SIGTRAP : constant := 5; -- trace trap (not reset)
++ SIGIOT : constant := 6; -- IOT instruction
++ SIGABRT : constant := 6; -- used by abort, replace SIGIOT in the future
++ SIGEMT : constant := 7; -- EMT instruction
++ SIGFPE : constant := 8; -- floating point exception
++ SIGKILL : constant := 9; -- kill (cannot be caught or ignored)
++ SIGBUS : constant := 10; -- bus error
++ SIGSEGV : constant := 11; -- segmentation violation
++ SIGSYS : constant := 12; -- bad argument to system call
++ SIGPIPE : constant := 13; -- write on a pipe with no one to read it
++ SIGALRM : constant := 14; -- alarm clock
++ SIGTERM : constant := 15; -- software termination signal from kill
++ SIGURG : constant := 16; -- urgent condition on IO channel
++ SIGSTOP : constant := 17; -- stop (cannot be caught or ignored)
++ SIGTSTP : constant := 18; -- user stop requested from tty
++ SIGCONT : constant := 19; -- stopped process has been continued
++ SIGCLD : constant := 20; -- alias for SIGCHLD
++ SIGCHLD : constant := 20; -- child status change
++ SIGTTIN : constant := 21; -- background tty read attempted
++ SIGTTOU : constant := 22; -- background tty write attempted
++ SIGIO : constant := 23; -- I/O possible (Solaris SIGPOLL alias)
++ SIGXCPU : constant := 24; -- CPU time limit exceeded
++ SIGXFSZ : constant := 25; -- filesize limit exceeded
++ SIGVTALRM : constant := 26; -- virtual timer expired
++ SIGPROF : constant := 27; -- profiling timer expired
++ SIGWINCH : constant := 28; -- window size change
++ SIGINFO : constant := 29; -- information request (BSD)
++ SIGUSR1 : constant := 30; -- user defined signal 1
++ SIGUSR2 : constant := 31; -- user defined signal 2
++
++ SIGADAABORT : constant := SIGABRT;
++ -- Change this if you want to use another signal for task abort.
++ -- SIGTERM might be a good one.
++
++ type Signal_Set is array (Natural range <>) of Signal;
++
++ -- Interrupts that must be unmasked at all times. OpenBSD
++ -- pthreads will not allow an application to mask out any
++ -- interrupt needed by the threads library.
++ Unmasked : constant Signal_Set :=
++ (SIGTRAP, SIGBUS, SIGTTIN, SIGTTOU, SIGTSTP);
++
++ -- OpenBSD will uses SIGPROF for timing. Do not allow a
++ -- handler to attach to this signal.
++ Reserved : constant Signal_Set := (0 .. 0 => SIGPROF);
++
++ type sigset_t is private;
++
++ function sigaddset
++ (set : access sigset_t;
++ sig : Signal) return int;
++ pragma Import (C, sigaddset, "sigaddset");
++
++ function sigdelset
++ (set : access sigset_t;
++ sig : Signal) return int;
++ pragma Import (C, sigdelset, "sigdelset");
++
++ function sigfillset (set : access sigset_t) return int;
++ pragma Import (C, sigfillset, "sigfillset");
++
++ function sigismember
++ (set : access sigset_t;
++ sig : Signal) return int;
++ pragma Import (C, sigismember, "sigismember");
++
++ function sigemptyset (set : access sigset_t) return int;
++ pragma Import (C, sigemptyset, "sigemptyset");
++
++ -- sigcontext is architecture dependent, so define it private
++ type struct_sigcontext is private;
++
++ type old_struct_sigaction is record
++ sa_handler : System.Address;
++ sa_mask : sigset_t;
++ sa_flags : int;
++ end record;
++ pragma Convention (C, old_struct_sigaction);
++
++ type new_struct_sigaction is record
++ sa_handler : System.Address;
++ sa_flags : int;
++ sa_mask : sigset_t;
++ end record;
++ pragma Convention (C, new_struct_sigaction);
++
++ subtype struct_sigaction is new_struct_sigaction;
++ type struct_sigaction_ptr is access all struct_sigaction;
++
++ SIG_BLOCK : constant := 1;
++ SIG_UNBLOCK : constant := 2;
++ SIG_SETMASK : constant := 3;
++
++ SIG_DFL : constant := 0;
++ SIG_IGN : constant := 1;
++
++ SA_SIGINFO : constant := 16#0040#;
++ SA_ONSTACK : constant := 16#0001#;
++
++ function sigaction
++ (sig : Signal;
++ act : struct_sigaction_ptr;
++ oact : struct_sigaction_ptr) return int;
++ pragma Import (C, sigaction, "sigaction");
++
++ ----------
++ -- Time --
++ ----------
++
++ Time_Slice_Supported : constant Boolean := True;
++ -- Indicates whether time slicing is supported (i.e SCHED_RR is supported)
++
++ type timespec is private;
++
++ function nanosleep (rqtp, rmtp : access timespec) return int;
++ pragma Import (C, nanosleep, "nanosleep");
++
++ type clockid_t is private;
++
++ CLOCK_REALTIME : constant clockid_t;
++
++ function clock_gettime
++ (clock_id : clockid_t;
++ tp : access timespec)
++ return int;
++ pragma Import (C, clock_gettime, "clock_gettime");
++
++ function To_Duration (TS : timespec) return Duration;
++ pragma Inline (To_Duration);
++
++ function To_Timespec (D : Duration) return timespec;
++ pragma Inline (To_Timespec);
++
++ type struct_timezone is record
++ tz_minuteswest : int;
++ tz_dsttime : int;
++ end record;
++ pragma Convention (C, struct_timezone);
++
++ procedure usleep (useconds : unsigned_long);
++ pragma Import (C, usleep, "usleep");
++
++ -------------------------
++ -- Priority Scheduling --
++ -------------------------
++
++ SCHED_FIFO : constant := 1;
++ SCHED_OTHER : constant := 2;
++ SCHED_RR : constant := 3;
++
++ function To_Target_Priority
++ (Prio : System.Any_Priority) return Interfaces.C.int;
++ -- Maps System.Any_Priority to a POSIX priority
++
++ -------------
++ -- Process --
++ -------------
++
++ type pid_t is private;
++
++ function kill (pid : pid_t; sig : Signal) return int;
++ pragma Import (C, kill, "kill");
++
++ function getpid return pid_t;
++ pragma Import (C, getpid, "getpid");
++
++ ---------
++ -- LWP --
++ ---------
++
++ function lwp_self return System.Address;
++ -- lwp_self does not exist on this thread library, revert to pthread_self
++ -- which is the closest approximation (with getpid). This function is
++ -- needed to share 7staprop.adb across POSIX-like targets.
++ pragma Import (C, lwp_self, "pthread_self");
++
++ -------------
++ -- Threads --
++ -------------
++
++ type Thread_Body is access
++ function (arg : System.Address) return System.Address;
++ pragma Convention (C, Thread_Body);
++
++ function Thread_Body_Access is new
++ Ada.Unchecked_Conversion (System.Address, Thread_Body);
++
++ type pthread_t is private;
++ subtype Thread_Id is pthread_t;
++
++ type pthread_mutex_t is limited private;
++ type pthread_cond_t is limited private;
++ type pthread_attr_t is limited private;
++ type pthread_mutexattr_t is limited private;
++ type pthread_condattr_t is limited private;
++ type pthread_key_t is private;
++
++ PTHREAD_CREATE_DETACHED : constant := 1;
++ PTHREAD_CREATE_JOINABLE : constant := 0;
++
++ PTHREAD_SCOPE_PROCESS : constant := 0;
++ PTHREAD_SCOPE_SYSTEM : constant := 2;
++
++ -----------
++ -- Stack --
++ -----------
++
++ type stack_t is record
++ ss_sp : System.Address;
++ ss_size : size_t;
++ ss_flags : int;
++ end record;
++ pragma Convention (C, stack_t);
++
++ function sigaltstack
++ (ss : not null access stack_t;
++ oss : access stack_t) return int;
++ pragma Import (C, sigaltstack, "sigaltstack");
++
++ Alternate_Stack : aliased System.Address;
++ -- This is a dummy definition, never used (Alternate_Stack_Size is null)
++
++ Alternate_Stack_Size : constant := 0;
++ -- No alternate signal stack is used on this platform
++
++ Stack_Base_Available : constant Boolean := False;
++ -- Indicates whether the stack base is available on this target. This
++ -- allows us to share s-osinte.adb between all the FSU run time. Note that
++ -- this value can only be true if pthread_t has a complete definition that
++ -- corresponds exactly to the C header files.
++
++ function Get_Stack_Base (thread : pthread_t) return Address;
++ pragma Inline (Get_Stack_Base);
++ -- returns the stack base of the specified thread. Only call this function
++ -- when Stack_Base_Available is True.
++
++ function Get_Page_Size return size_t;
++ function Get_Page_Size return Address;
++ pragma Import (C, Get_Page_Size, "getpagesize");
++ -- Returns the size of a page
++
++ PROT_NONE : constant := 0;
++ PROT_READ : constant := 1;
++ PROT_WRITE : constant := 2;
++ PROT_EXEC : constant := 4;
++ PROT_ALL : constant := PROT_READ + PROT_WRITE + PROT_EXEC;
++ PROT_ON : constant := PROT_NONE;
++ PROT_OFF : constant := PROT_ALL;
++
++ function mprotect (addr : Address; len : size_t; prot : int) return int;
++ pragma Import (C, mprotect);
++
++ ---------------------------------------
++ -- Nonstandard Thread Initialization --
++ ---------------------------------------
++
++ -- FSU_THREADS requires pthread_init, which is nonstandard and this should
++ -- be invoked during the elaboration of s-taprop.adb.
++
++ -- OpenBSD does not require this so we provide an empty Ada body
++
++ procedure pthread_init;
++
++ -------------------------
++ -- POSIX.1c Section 3 --
++ -------------------------
++
++ function sigwait
++ (set : access sigset_t;
++ sig : access Signal) return int;
++ pragma Import (C, sigwait, "sigwait");
++
++ function pthread_kill
++ (thread : pthread_t;
++ sig : Signal) return int;
++ pragma Import (C, pthread_kill, "pthread_kill");
++
++ function pthread_sigmask
++ (how : int;
++ set : access sigset_t;
++ oset : access sigset_t) return int;
++ pragma Import (C, pthread_sigmask, "pthread_sigmask");
++
++ --------------------------
++ -- POSIX.1c Section 11 --
++ --------------------------
++
++ function pthread_mutexattr_init
++ (attr : access pthread_mutexattr_t) return int;
++ pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
++
++ function pthread_mutexattr_destroy
++ (attr : access pthread_mutexattr_t) return int;
++ pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
++
++ function pthread_mutex_init
++ (mutex : access pthread_mutex_t;
++ attr : access pthread_mutexattr_t) return int;
++ pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
++
++ function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
++ pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
++
++ function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
++ pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
++
++ function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
++ pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
++
++ function pthread_condattr_init
++ (attr : access pthread_condattr_t) return int;
++ pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
++
++ function pthread_condattr_destroy
++ (attr : access pthread_condattr_t) return int;
++ pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
++
++ function pthread_cond_init
++ (cond : access pthread_cond_t;
++ attr : access pthread_condattr_t) return int;
++ pragma Import (C, pthread_cond_init, "pthread_cond_init");
++
++ function pthread_cond_destroy (cond : access pthread_cond_t) return int;
++ pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
++
++ function pthread_cond_signal (cond : access pthread_cond_t) return int;
++ pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
++
++ function pthread_cond_wait
++ (cond : access pthread_cond_t;
++ mutex : access pthread_mutex_t) return int;
++ pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
++
++ function pthread_cond_timedwait
++ (cond : access pthread_cond_t;
++ mutex : access pthread_mutex_t;
++ abstime : access timespec) return int;
++ pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
++
++ Relative_Timed_Wait : constant Boolean := False;
++ -- pthread_cond_timedwait requires an absolute delay time
++
++ --------------------------
++ -- POSIX.1c Section 13 --
++ --------------------------
++
++ PTHREAD_PRIO_NONE : constant := 0;
++ PTHREAD_PRIO_PROTECT : constant := 2;
++ PTHREAD_PRIO_INHERIT : constant := 1;
++
++ function pthread_mutexattr_setprotocol
++ (attr : access pthread_mutexattr_t;
++ protocol : int) return int;
++ pragma Import
++ (C, pthread_mutexattr_setprotocol, "pthread_mutexattr_setprotocol");
++
++ function pthread_mutexattr_getprotocol
++ (attr : access pthread_mutexattr_t;
++ protocol : access int) return int;
++ pragma Import
++ (C, pthread_mutexattr_getprotocol, "pthread_mutexattr_getprotocol");
++
++ function pthread_mutexattr_setprioceiling
++ (attr : access pthread_mutexattr_t;
++ prioceiling : int) return int;
++ pragma Import
++ (C, pthread_mutexattr_setprioceiling,
++ "pthread_mutexattr_setprioceiling");
++
++ function pthread_mutexattr_getprioceiling
++ (attr : access pthread_mutexattr_t;
++ prioceiling : access int) return int;
++ pragma Import
++ (C, pthread_mutexattr_getprioceiling,
++ "pthread_mutexattr_getprioceiling");
++
++ type struct_sched_param is record
++ sched_priority : int;
++ end record;
++ pragma Convention (C, struct_sched_param);
++
++ function pthread_getschedparam
++ (thread : pthread_t;
++ policy : access int;
++ param : access struct_sched_param) return int;
++ pragma Import (C, pthread_getschedparam, "pthread_getschedparam");
++
++ function pthread_setschedparam
++ (thread : pthread_t;
++ policy : int;
++ param : access struct_sched_param) return int;
++ pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
++
++ function pthread_attr_setscope
++ (attr : access pthread_attr_t;
++ contentionscope : int) return int;
++ pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
++
++ function pthread_attr_getscope
++ (attr : access pthread_attr_t;
++ contentionscope : access int) return int;
++ pragma Import (C, pthread_attr_getscope, "pthread_attr_getscope");
++
++ function pthread_attr_setinheritsched
++ (attr : access pthread_attr_t;
++ inheritsched : int) return int;
++ pragma Import
++ (C, pthread_attr_setinheritsched, "pthread_attr_setinheritsched");
++
++ function pthread_attr_getinheritsched
++ (attr : access pthread_attr_t;
++ inheritsched : access int) return int;
++ pragma Import
++ (C, pthread_attr_getinheritsched, "pthread_attr_getinheritsched");
++
++ function pthread_attr_setschedpolicy
++ (attr : access pthread_attr_t;
++ policy : int) return int;
++ pragma Import (C, pthread_attr_setschedpolicy,
++ "pthread_attr_setschedpolicy");
++
++ function pthread_attr_getschedpolicy
++ (attr : access pthread_attr_t;
++ policy : access int) return int;
++ pragma Import (C, pthread_attr_getschedpolicy,
++ "pthread_attr_getschedpolicy");
++
++ function pthread_attr_setschedparam
++ (attr : access pthread_attr_t;
++ sched_param : int) return int;
++ pragma Import (C, pthread_attr_setschedparam, "pthread_attr_setschedparam");
++
++ function pthread_attr_getschedparam
++ (attr : access pthread_attr_t;
++ sched_param : access int) return int;
++ pragma Import (C, pthread_attr_getschedparam, "pthread_attr_getschedparam");
++
++ function sched_yield return int;
++ pragma Import (C, sched_yield, "pthread_yield");
++
++ --------------------------
++ -- P1003.1c Section 16 --
++ --------------------------
++
++ function pthread_attr_init (attributes : access pthread_attr_t) return int;
++ pragma Import (C, pthread_attr_init, "pthread_attr_init");
++
++ function pthread_attr_destroy
++ (attributes : access pthread_attr_t) return int;
++ pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
++
++ function pthread_attr_setdetachstate
++ (attr : access pthread_attr_t;
++ detachstate : int) return int;
++ pragma Import
++ (C, pthread_attr_setdetachstate, "pthread_attr_setdetachstate");
++
++ function pthread_attr_getdetachstate
++ (attr : access pthread_attr_t;
++ detachstate : access int) return int;
++ pragma Import
++ (C, pthread_attr_getdetachstate, "pthread_attr_getdetachstate");
++
++ function pthread_attr_getstacksize
++ (attr : access pthread_attr_t;
++ stacksize : access size_t) return int;
++ pragma Import
++ (C, pthread_attr_getstacksize, "pthread_attr_getstacksize");
++
++ function pthread_attr_setstacksize
++ (attr : access pthread_attr_t;
++ stacksize : size_t) return int;
++ pragma Import
++ (C, pthread_attr_setstacksize, "pthread_attr_setstacksize");
++
++ function pthread_create
++ (thread : access pthread_t;
++ attributes : access pthread_attr_t;
++ start_routine : Thread_Body;
++ arg : System.Address) return int;
++ pragma Import (C, pthread_create, "pthread_create");
++
++ function pthread_detach (thread : pthread_t) return int;
++ pragma Import (C, pthread_detach, "pthread_detach");
++
++ procedure pthread_exit (status : System.Address);
++ pragma Import (C, pthread_exit, "pthread_exit");
++
++ function pthread_self return pthread_t;
++ pragma Import (C, pthread_self, "pthread_self");
++
++ --------------------------
++ -- POSIX.1c Section 17 --
++ --------------------------
++
++ function pthread_setspecific
++ (key : pthread_key_t;
++ value : System.Address) return int;
++ pragma Import (C, pthread_setspecific, "pthread_setspecific");
++
++ function pthread_getspecific (key : pthread_key_t) return System.Address;
++ pragma Import (C, pthread_getspecific, "pthread_getspecific");
++
++ type destructor_pointer is access procedure (arg : System.Address);
++ pragma Convention (C, destructor_pointer);
++
++ function pthread_key_create
++ (key : access pthread_key_t;
++ destructor : destructor_pointer) return int;
++ pragma Import (C, pthread_key_create, "pthread_key_create");
++
++ ------------------------------------
++ -- Non-portable Pthread Functions --
++ ------------------------------------
++
++ function pthread_set_name_np
++ (thread : pthread_t;
++ name : System.Address) return int;
++ pragma Import (C, pthread_set_name_np, "pthread_set_name_np");
++
++private
++
++ type sigset_t is array (1 .. 4) of unsigned;
++
++ -- In OpenBSD the component sa_handler turns out to
++ -- be one a union type, and the selector is a macro:
++ -- #define sa_handler __sigaction_u._handler
++ -- #define sa_sigaction __sigaction_u._sigaction
++
++ -- Should we add a signal_context type here ???
++ -- How could it be done independent of the CPU architecture ???
++ -- sigcontext type is opaque, so it is architecturally neutral.
++ -- It is always passed as an access type, so define it as an empty record
++ -- since the contents are not used anywhere.
++
++ type struct_sigcontext is null record;
++ pragma Convention (C, struct_sigcontext);
++
++ type pid_t is new int;
++
++ type time_t is new int;
++
++ type timespec is record
++ tv_sec : time_t;
++ tv_nsec : long;
++ end record;
++ pragma Convention (C, timespec);
++
++ type clockid_t is new int;
++ CLOCK_REALTIME : constant clockid_t := 0;
++
++ type pthread_t is new System.Address;
++ type pthread_attr_t is new System.Address;
++ type pthread_mutex_t is new System.Address;
++ type pthread_mutexattr_t is new System.Address;
++ type pthread_cond_t is new System.Address;
++ type pthread_condattr_t is new System.Address;
++ type pthread_key_t is new int;
++
++end System.OS_Interface;
+--- /dev/null
++++ gcc/ada/s-osprim-bsd32.adb
+@@ -0,0 +1,186 @@
++------------------------------------------------------------------------------
++-- --
++-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
++-- --
++-- S Y S T E M . O S _ P R I M I T I V E S --
++-- --
++-- B o d y --
++-- --
++-- Copyright (C) 1998-2009, Free Software Foundation, Inc. --
++-- --
++-- GNARL 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/>. --
++-- --
++-- GNARL was developed by the GNARL team at Florida State University. --
++-- Extensive contributions were provided by Ada Core Technologies, Inc. --
++-- --
++-- Copyright (C) 2010, 2011 John Marino <www.dragonlace.net> --
++------------------------------------------------------------------------------
++
++-- This version is for BSD operating systems using 32-bit time types.
++
++with Interfaces.C;
++
++package body System.OS_Primitives is
++
++ -- ??? These definitions are duplicated from System.OS_Interface
++ -- because we don't want to depend on any package. Consider removing
++ -- these declarations in System.OS_Interface and move these ones in
++ -- the spec.
++
++ subtype int is Interfaces.C.int;
++ subtype long is Interfaces.C.long;
++
++ type time_t is new int;
++
++ type timespec is record
++ tv_sec : time_t;
++ tv_nsec : long;
++ end record;
++ pragma Convention (C, timespec);
++
++ type timezone is record
++ tz_minuteswest : int;
++ tz_dsttime : int;
++ end record;
++ pragma Convention (C, timezone);
++
++ function nanosleep (rqtp, rmtp : access timespec) return int;
++ pragma Import (C, nanosleep, "nanosleep");
++
++ -----------
++ -- Clock --
++ -----------
++
++ function Clock return Duration is
++ type timeval is array (1 .. 2) of Long_Integer;
++ tzresult : aliased timezone;
++
++ procedure timeval_to_duration
++ (T : not null access timeval;
++ sec : not null access Long_Integer;
++ usec : not null access Long_Integer);
++ pragma Import (C, timeval_to_duration, "__gnat_timeval_to_duration");
++
++ Micro : constant := 10**6;
++ sec : aliased Long_Integer;
++ usec : aliased Long_Integer;
++ TV : aliased timeval;
++ Result : int;
++
++ function gettimeofday
++ (Tv : access timeval;
++ Tz : access timezone) return int;
++ pragma Import (C, gettimeofday, "gettimeofday");
++
++ pragma Unreferenced (Result);
++ begin
++ -- The return codes for gettimeofday are as follows (from man pages):
++ -- EPERM settimeofday is called by someone other than the superuser
++ -- EINVAL Timezone (or something else) is invalid
++ -- EFAULT One of tv or tz pointed outside accessible address space
++
++ -- None of these codes signal a potential clock skew, hence the return
++ -- value is never checked.
++
++ Result := gettimeofday (TV'Access, tzresult'Access);
++ timeval_to_duration (TV'Access, sec'Access, usec'Access);
++ return Duration (sec) + Duration (usec) / Micro;
++ end Clock;
++
++ ---------------------
++ -- Monotonic_Clock --
++ ---------------------
++
++ function Monotonic_Clock return Duration renames Clock;
++
++ -----------------
++ -- To_Timespec --
++ -----------------
++
++ function To_Timespec (D : Duration) return timespec;
++
++ function To_Timespec (D : Duration) return timespec is
++ S : time_t;
++ F : Duration;
++
++ begin
++ S := time_t (Long_Long_Integer (D));
++ F := D - Duration (S);
++
++ -- If F has negative value due to a round-up, adjust for positive F
++ -- value.
++
++ if F < 0.0 then
++ S := S - 1;
++ F := F + 1.0;
++ end if;
++
++ return
++ timespec'(tv_sec => S,
++ tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
++ end To_Timespec;
++
++ -----------------
++ -- Timed_Delay --
++ -----------------
++
++ procedure Timed_Delay
++ (Time : Duration;
++ Mode : Integer)
++ is
++ Request : aliased timespec;
++ Remaind : aliased timespec;
++ Rel_Time : Duration;
++ Abs_Time : Duration;
++ Base_Time : constant Duration := Clock;
++ Check_Time : Duration := Base_Time;
++
++ Result : int;
++ pragma Unreferenced (Result);
++
++ begin
++ if Mode = Relative then
++ Rel_Time := Time;
++ Abs_Time := Time + Check_Time;
++ else
++ Rel_Time := Time - Check_Time;
++ Abs_Time := Time;
++ end if;
++
++ if Rel_Time > 0.0 then
++ loop
++ Request := To_Timespec (Rel_Time);
++ Result := nanosleep (Request'Access, Remaind'Access);
++ Check_Time := Clock;
++
++ exit when Abs_Time <= Check_Time or else Check_Time < Base_Time;
++
++ Rel_Time := Abs_Time - Check_Time;
++ end loop;
++ end if;
++ end Timed_Delay;
++
++ ----------------
++ -- Initialize --
++ ----------------
++
++ procedure Initialize is
++ begin
++ null;
++ end Initialize;
++
++end System.OS_Primitives;
+--- /dev/null
++++ gcc/ada/s-osprim-bsd64.adb
+@@ -0,0 +1,192 @@
++------------------------------------------------------------------------------
++-- --
++-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
++-- --
++-- S Y S T E M . O S _ P R I M I T I V E S --
++-- --
++-- B o d y --
++-- --
++-- Copyright (C) 1998-2009, Free Software Foundation, Inc. --
++-- --
++-- GNARL 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/>. --
++-- --
++-- GNARL was developed by the GNARL team at Florida State University. --
++-- Extensive contributions were provided by Ada Core Technologies, Inc. --
++-- --
++-- Copyright (C) 2010, 2011 John Marino <www.dragonlace.net> --
++------------------------------------------------------------------------------
++
++-- This version is for BSD operating systems using 64-bit time types.
++
++with Interfaces.C;
++
++package body System.OS_Primitives is
++
++ -- ??? These definitions are duplicated from System.OS_Interface
++ -- because we don't want to depend on any package. Consider removing
++ -- these declarations in System.OS_Interface and move these ones in
++ -- the spec.
++
++ subtype int is Interfaces.C.int;
++ subtype long is Interfaces.C.long;
++ subtype int64_t is Interfaces.Integer_64;
++
++ type time_t is new int64_t;
++
++ type timespec is record
++ tv_sec : time_t;
++ tv_nsec : long;
++ end record;
++ pragma Convention (C, timespec);
++
++ type timezone is record
++ tz_minuteswest : int;
++ tz_dsttime : int;
++ end record;
++ pragma Convention (C, timezone);
++
++ type timeval is record
++ tv_sec : time_t;
++ tv_usec : long; -- Not for NetBSD! FreeBSD/DragonFly
++ end record;
++ pragma Convention (C, timeval);
++
++ function nanosleep (rqtp, rmtp : access timespec) return int;
++ pragma Import (C, nanosleep, "nanosleep");
++
++ -----------
++ -- Clock --
++ -----------
++
++ function Clock return Duration is
++
++ procedure timeval_to_duration
++ (T : not null access timeval;
++ sec : not null access Long_Integer;
++ usec : not null access Long_Integer);
++ pragma Import (C, timeval_to_duration, "__gnat_timeval_to_duration");
++
++ Micro : constant := 10**6;
++ sec : aliased Long_Integer;
++ usec : aliased Long_Integer;
++ TV : aliased timeval;
++ tzresult : aliased timezone;
++ Result : int;
++
++ function gettimeofday
++ (Tv : access timeval;
++ Tz : access timezone) return int;
++ pragma Import (C, gettimeofday, "gettimeofday");
++
++ pragma Unreferenced (Result);
++ begin
++ -- The return codes for gettimeofday are as follows (from man pages):
++ -- EPERM settimeofday is called by someone other than the superuser
++ -- EINVAL Timezone (or something else) is invalid
++ -- EFAULT One of tv or tz pointed outside accessible address space
++
++ -- None of these codes signal a potential clock skew, hence the return
++ -- value is never checked.
++
++ Result := gettimeofday (TV'Access, tzresult'Access);
++ timeval_to_duration (TV'Access, sec'Access, usec'Access);
++ return Duration (sec) + Duration (usec) / Micro;
++ end Clock;
++
++ ---------------------
++ -- Monotonic_Clock --
++ ---------------------
++
++ function Monotonic_Clock return Duration renames Clock;
++
++ -----------------
++ -- To_Timespec --
++ -----------------
++
++ function To_Timespec (D : Duration) return timespec;
++
++ function To_Timespec (D : Duration) return timespec is
++ S : time_t;
++ F : Duration;
++
++ begin
++ S := time_t (Long_Long_Integer (D));
++ F := D - Duration (S);
++
++ -- If F has negative value due to a round-up, adjust for positive F
++ -- value.
++
++ if F < 0.0 then
++ S := S - 1;
++ F := F + 1.0;
++ end if;
++
++ return
++ timespec'(tv_sec => S,
++ tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
++ end To_Timespec;
++
++ -----------------
++ -- Timed_Delay --
++ -----------------
++
++ procedure Timed_Delay
++ (Time : Duration;
++ Mode : Integer)
++ is
++ Request : aliased timespec;
++ Remaind : aliased timespec;
++ Rel_Time : Duration;
++ Abs_Time : Duration;
++ Base_Time : constant Duration := Clock;
++ Check_Time : Duration := Base_Time;
++
++ Result : int;
++ pragma Unreferenced (Result);
++
++ begin
++ if Mode = Relative then
++ Rel_Time := Time;
++ Abs_Time := Time + Check_Time;
++ else
++ Rel_Time := Time - Check_Time;
++ Abs_Time := Time;
++ end if;
++
++ if Rel_Time > 0.0 then
++ loop
++ Request := To_Timespec (Rel_Time);
++ Result := nanosleep (Request'Access, Remaind'Access);
++ Check_Time := Clock;
++
++ exit when Abs_Time <= Check_Time or else Check_Time < Base_Time;
++
++ Rel_Time := Abs_Time - Check_Time;
++ end loop;
++ end if;
++ end Timed_Delay;
++
++ ----------------
++ -- Initialize --
++ ----------------
++
++ procedure Initialize is
++ begin
++ null;
++ end Initialize;
++
++end System.OS_Primitives;
+--- /dev/null
++++ gcc/ada/s-osprim-bsdn6.adb
+@@ -0,0 +1,193 @@
++------------------------------------------------------------------------------
++-- --
++-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
++-- --
++-- S Y S T E M . O S _ P R I M I T I V E S --
++-- --
++-- B o d y --
++-- --
++-- Copyright (C) 1998-2009, Free Software Foundation, Inc. --
++-- --
++-- GNARL 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/>. --
++-- --
++-- GNARL was developed by the GNARL team at Florida State University. --
++-- Extensive contributions were provided by Ada Core Technologies, Inc. --
++-- --
++-- Copyright (C) 2010, 2011 John Marino <www.dragonlace.net> --
++------------------------------------------------------------------------------
++
++-- This version is for NetBSD 6.0+
++-- It switches time type to 64 bits and uses compatibility functions
++
++with Interfaces.C;
++
++package body System.OS_Primitives is
++
++ -- ??? These definitions are duplicated from System.OS_Interface
++ -- because we don't want to depend on any package. Consider removing
++ -- these declarations in System.OS_Interface and move these ones in
++ -- the spec.
++
++ subtype int is Interfaces.C.int;
++ subtype long is Interfaces.C.long;
++ subtype int64_t is Interfaces.Integer_64;
++
++ type time_t is new int64_t;
++
++ type timespec is record
++ tv_sec : time_t;
++ tv_nsec : long;
++ end record;
++ pragma Convention (C, timespec);
++
++ type timezone is record
++ tz_minuteswest : int;
++ tz_dsttime : int;
++ end record;
++ pragma Convention (C, timezone);
++
++ type timeval is record
++ tv_sec : time_t;
++ tv_usec : int;
++ end record;
++ pragma Convention (C, timeval);
++
++ function nanosleep (rqtp, rmtp : access timespec) return int;
++ pragma Import (C, nanosleep, "__nanosleep50");
++
++ -----------
++ -- Clock --
++ -----------
++
++ function Clock return Duration is
++
++ procedure timeval_to_duration
++ (T : not null access timeval;
++ sec : not null access Long_Integer;
++ usec : not null access Long_Integer);
++ pragma Import (C, timeval_to_duration, "__gnat_timeval_to_duration");
++
++ Micro : constant := 10**6;
++ sec : aliased Long_Integer;
++ usec : aliased Long_Integer;
++ TV : aliased timeval;
++ tzresult : aliased timezone;
++ Result : int;
++
++ function gettimeofday
++ (Tv : access timeval;
++ Tz : access timezone) return int;
++ pragma Import (C, gettimeofday, "__gettimeofday50");
++
++ pragma Unreferenced (Result);
++ begin
++ -- The return codes for gettimeofday are as follows (from man pages):
++ -- EPERM settimeofday is called by someone other than the superuser
++ -- EINVAL Timezone (or something else) is invalid
++ -- EFAULT One of tv or tz pointed outside accessible address space
++
++ -- None of these codes signal a potential clock skew, hence the return
++ -- value is never checked.
++
++ Result := gettimeofday (TV'Access, tzresult'Access);
++ timeval_to_duration (TV'Access, sec'Access, usec'Access);
++ return Duration (sec) + Duration (usec) / Micro;
++ end Clock;
++
++ ---------------------
++ -- Monotonic_Clock --
++ ---------------------
++
++ function Monotonic_Clock return Duration renames Clock;
++
++ -----------------
++ -- To_Timespec --
++ -----------------
++
++ function To_Timespec (D : Duration) return timespec;
++
++ function To_Timespec (D : Duration) return timespec is
++ S : time_t;
++ F : Duration;
++
++ begin
++ S := time_t (Long_Long_Integer (D));
++ F := D - Duration (S);
++
++ -- If F has negative value due to a round-up, adjust for positive F
++ -- value.
++
++ if F < 0.0 then
++ S := S - 1;
++ F := F + 1.0;
++ end if;
++
++ return
++ timespec'(tv_sec => S,
++ tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
++ end To_Timespec;
++
++ -----------------
++ -- Timed_Delay --
++ -----------------
++
++ procedure Timed_Delay
++ (Time : Duration;
++ Mode : Integer)
++ is
++ Request : aliased timespec;
++ Remaind : aliased timespec;
++ Rel_Time : Duration;
++ Abs_Time : Duration;
++ Base_Time : constant Duration := Clock;
++ Check_Time : Duration := Base_Time;
++
++ Result : int;
++ pragma Unreferenced (Result);
++
++ begin
++ if Mode = Relative then
++ Rel_Time := Time;
++ Abs_Time := Time + Check_Time;
++ else
++ Rel_Time := Time - Check_Time;
++ Abs_Time := Time;
++ end if;
++
++ if Rel_Time > 0.0 then
++ loop
++ Request := To_Timespec (Rel_Time);
++ Result := nanosleep (Request'Access, Remaind'Access);
++ Check_Time := Clock;
++
++ exit when Abs_Time <= Check_Time or else Check_Time < Base_Time;
++
++ Rel_Time := Abs_Time - Check_Time;
++ end loop;
++ end if;
++ end Timed_Delay;
++
++ ----------------
++ -- Initialize --
++ ----------------
++
++ procedure Initialize is
++ begin
++ null;
++ end Initialize;
++
++end System.OS_Primitives;
+--- gcc/ada/s-rannum.adb.orig
++++ gcc/ada/s-rannum.adb
+@@ -27,6 +27,7 @@
+ -- GNAT was originally developed by the GNAT team at New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc. --
+ -- --
++-- Copyright (C) 2010 John Marino <draco@marino.st> --
+ ------------------------------------------------------------------------------
+
+ ------------------------------------------------------------------------------
+@@ -294,7 +295,7 @@
+ X : Real; -- Scaled mantissa
+ R : Unsigned_32; -- Supply of random bits
+ R_Bits : Natural; -- Number of bits left in R
+- K : Bit_Count; -- Next decrement to exponent
++ K : Bit_Count := 0; -- Next decrement to exponent
+
+ begin
+ Mantissa := Random (Gen) / 2**Extra_Bits;
+--- gcc/ada/s-stusta.adb.orig
++++ gcc/ada/s-stusta.adb
+@@ -29,6 +29,7 @@
+ -- GNARL was developed by the GNARL team at Florida State University. --
+ -- Extensive contributions were provided by Ada Core Technologies, Inc. --
+ -- --
++-- Copyright (C) 2010 John Marino <draco@marino.st --
+ ------------------------------------------------------------------------------
+
+ with System.Stack_Usage;
+@@ -235,7 +236,7 @@
+ ------------
+
+ procedure Print (Obj : Stack_Usage_Result) is
+- Pos : Positive;
++ Pos : Positive := 1;
+ begin
+
+ -- Simply trim the string containing the task name
+--- /dev/null
++++ gcc/ada/signal_android.c
+@@ -0,0 +1,77 @@
++/*
++ * Copyright (C) 2008 The Android Open Source Project
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * * Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * * Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in
++ * the documentation and/or other materials provided with the
++ * distribution.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
++ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
++ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
++ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
++ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
++ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
++ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
++ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
++ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
++ * SUCH DAMAGE.
++ */
++#include <limits.h> /* For LONG_BIT */
++#include <string.h> /* For memset() */
++
++typedef unsigned long sigset_t;
++
++
++int
++sigismember(sigset_t *set, int signum)
++{
++ unsigned long *local_set = (unsigned long *)set;
++ signum--;
++ return (int)((local_set[signum/LONG_BIT] >> (signum%LONG_BIT)) & 1);
++}
++
++
++int
++sigaddset(sigset_t *set, int signum)
++{
++ unsigned long *local_set = (unsigned long *)set;
++ signum--;
++ local_set[signum/LONG_BIT] |= 1UL << (signum%LONG_BIT);
++ return 0;
++}
++
++
++int
++sigdelset(sigset_t *set, int signum)
++{
++ unsigned long *local_set = (unsigned long *)set;
++ signum--;
++ local_set[signum/LONG_BIT] &= ~(1UL << (signum%LONG_BIT));
++ return 0;
++}
++
++
++int
++sigemptyset(sigset_t *set)
++{
++ memset(set, 0, sizeof *set);
++ return 0;
++}
++
++
++int
++sigfillset(sigset_t *set)
++{
++ memset(set, ~0, sizeof *set);
++ return 0;
++}
++
+--- gcc/ada/sysdep.c.orig
++++ gcc/ada/sysdep.c
+@@ -27,6 +27,7 @@
+ * GNAT was originally developed by the GNAT team at New York University. *
+ * Extensive contributions were provided by Ada Core Technologies Inc. *
+ * *
++ * Copyright (C) 2010 John Marino <draco@marino.st> *
+ ****************************************************************************/
+
+ /* This file contains system dependent symbols that are referenced in the
+@@ -368,6 +369,7 @@
+ || defined (__MACHTEN__) || defined (__hpux__) || defined (_AIX) \
+ || (defined (__svr4__) && defined (i386)) || defined (__Lynx__) \
+ || defined (__CYGWIN__) || defined (__FreeBSD__) || defined (__OpenBSD__) \
++ || defined (__DragonFly__) \
+ || defined (__GLIBC__) || defined (__APPLE__)
+
+ #ifdef __MINGW32__
+@@ -426,6 +428,7 @@
+ || defined (__CYGWIN32__) || defined (__MACHTEN__) || defined (__hpux__) \
+ || defined (_AIX) || (defined (__svr4__) && defined (i386)) \
+ || defined (__Lynx__) || defined (__FreeBSD__) || defined (__OpenBSD__) \
++ || defined (__DragonFly__) \
+ || defined (__GLIBC__) || defined (__APPLE__)
+ char c;
+ int nread;
+@@ -446,6 +449,7 @@
+ || defined (__osf__) || defined (__MACHTEN__) || defined (__hpux__) \
+ || defined (_AIX) || (defined (__svr4__) && defined (i386)) \
+ || defined (__Lynx__) || defined (__FreeBSD__) || defined (__OpenBSD__) \
++ || defined (__DragonFly__) \
+ || defined (__GLIBC__) || defined (__APPLE__)
+ eof_ch = termios_rec.c_cc[VEOF];
+
+@@ -937,6 +941,7 @@
+ struct tm */
+
+ #elif defined (__APPLE__) || defined (__FreeBSD__) || defined (linux) ||\
++ defined (__DragonFly__) ||\
+ (defined (__alpha__) && defined (__osf__)) || defined (__GLIBC__)
+ {
+ localtime_r (timer, &tp);
+--- /dev/null
++++ gcc/ada/system-dragonfly-x86_64.ads
+@@ -0,0 +1,147 @@
++------------------------------------------------------------------------------
++-- --
++-- GNAT RUN-TIME COMPONENTS --
++-- --
++-- S Y S T E M --
++-- --
++-- S p e c --
++-- (DragonFly BSD/x86_64 Version) --
++-- --
++-- Copyright (C) 1992-2009, Free Software Foundation, Inc. --
++-- --
++-- This specification is derived from the Ada Reference Manual for use with --
++-- GNAT. The copyright notice above, and the license provisions that follow --
++-- apply solely to the contents of the part following the private keyword. --
++-- --
++-- 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. --
++-- --
++-- Copyright (C) 2010 John Marino <draco@marino.st> --
++------------------------------------------------------------------------------
++
++package System is
++ pragma Pure;
++ -- Note that we take advantage of the implementation permission to make
++ -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
++ -- 2005, this is Pure in any case (AI-362).
++
++ type Name is (SYSTEM_NAME_GNAT);
++ System_Name : constant Name := SYSTEM_NAME_GNAT;
++
++ -- System-Dependent Named Numbers
++
++ Min_Int : constant := Long_Long_Integer'First;
++ Max_Int : constant := Long_Long_Integer'Last;
++
++ Max_Binary_Modulus : constant := 2 ** Long_Long_Integer'Size;
++ Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1;
++
++ Max_Base_Digits : constant := Long_Long_Float'Digits;
++ Max_Digits : constant := Long_Long_Float'Digits;
++
++ Max_Mantissa : constant := 63;
++ Fine_Delta : constant := 2.0 ** (-Max_Mantissa);
++
++ Tick : constant := 0.000_001;
++
++ -- Storage-related Declarations
++
++ type Address is private;
++ pragma Preelaborable_Initialization (Address);
++ Null_Address : constant Address;
++
++ Storage_Unit : constant := 8;
++ Word_Size : constant := 64;
++ Memory_Size : constant := 2 ** 64;
++
++ -- Address comparison
++
++ function "<" (Left, Right : Address) return Boolean;
++ function "<=" (Left, Right : Address) return Boolean;
++ function ">" (Left, Right : Address) return Boolean;
++ function ">=" (Left, Right : Address) return Boolean;
++ function "=" (Left, Right : Address) return Boolean;
++
++ pragma Import (Intrinsic, "<");
++ pragma Import (Intrinsic, "<=");
++ pragma Import (Intrinsic, ">");
++ pragma Import (Intrinsic, ">=");
++ pragma Import (Intrinsic, "=");
++
++ -- Other System-Dependent Declarations
++
++ type Bit_Order is (High_Order_First, Low_Order_First);
++ Default_Bit_Order : constant Bit_Order := Low_Order_First;
++ pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
++
++ -- Priority-related Declarations (RM D.1)
++
++ Max_Priority : constant Positive := 30;
++ Max_Interrupt_Priority : constant Positive := 31;
++
++ subtype Any_Priority is Integer range 0 .. 31;
++ subtype Priority is Any_Priority range 0 .. 30;
++ subtype Interrupt_Priority is Any_Priority range 31 .. 31;
++
++ Default_Priority : constant Priority := 15;
++
++private
++
++ type Address is mod Memory_Size;
++ Null_Address : constant Address := 0;
++
++ --------------------------------------
++ -- System Implementation Parameters --
++ --------------------------------------
++
++ -- These parameters provide information about the target that is used
++ -- by the compiler. They are in the private part of System, where they
++ -- can be accessed using the special circuitry in the Targparm unit
++ -- whose source should be consulted for more detailed descriptions
++ -- of the individual switch values.
++
++ Backend_Divide_Checks : constant Boolean := False;
++ Backend_Overflow_Checks : constant Boolean := True;
++ Command_Line_Args : constant Boolean := True;
++ Configurable_Run_Time : constant Boolean := False;
++ Denorm : constant Boolean := True;
++ Duration_32_Bits : constant Boolean := False;
++ Exit_Status_Supported : constant Boolean := True;
++ Fractional_Fixed_Ops : constant Boolean := False;
++ Frontend_Layout : constant Boolean := False;
++ Machine_Overflows : constant Boolean := False;
++ Machine_Rounds : constant Boolean := True;
++ OpenVMS : constant Boolean := False;
++ Preallocated_Stacks : constant Boolean := False;
++ Signed_Zeros : constant Boolean := True;
++ Stack_Check_Default : constant Boolean := False;
++ Stack_Check_Probes : constant Boolean := True;
++ Stack_Check_Limits : constant Boolean := False;
++ Support_64_Bit_Divides : constant Boolean := True;
++ Support_Aggregates : constant Boolean := True;
++ Support_Composite_Assign : constant Boolean := True;
++ Support_Composite_Compare : constant Boolean := True;
++ Support_Long_Shifts : constant Boolean := True;
++ Always_Compatible_Rep : constant Boolean := False;
++ Suppress_Standard_Library : constant Boolean := False;
++ Use_Ada_Main_Program_Name : constant Boolean := False;
++ ZCX_By_Default : constant Boolean := True;
++ GCC_ZCX_Support : constant Boolean := True;
++
++end System;
+--- /dev/null
++++ gcc/ada/system-dragonfly-x86.ads
+@@ -0,0 +1,147 @@
++------------------------------------------------------------------------------
++-- --
++-- GNAT RUN-TIME COMPONENTS --
++-- --
++-- S Y S T E M --
++-- --
++-- S p e c --
++-- (DragonFly BSD/x86 Version) --
++-- --
++-- Copyright (C) 1992-2009, Free Software Foundation, Inc. --
++-- --
++-- This specification is derived from the Ada Reference Manual for use with --
++-- GNAT. The copyright notice above, and the license provisions that follow --
++-- apply solely to the contents of the part following the private keyword. --
++-- --
++-- 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. --
++-- --
++-- Copyright (C) 2010 John Marino <draco@marino.st> --
++------------------------------------------------------------------------------
++
++package System is
++ pragma Pure;
++ -- Note that we take advantage of the implementation permission to make
++ -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
++ -- 2005, this is Pure in any case (AI-362).
++
++ type Name is (SYSTEM_NAME_GNAT);
++ System_Name : constant Name := SYSTEM_NAME_GNAT;
++
++ -- System-Dependent Named Numbers
++
++ Min_Int : constant := Long_Long_Integer'First;
++ Max_Int : constant := Long_Long_Integer'Last;
++
++ Max_Binary_Modulus : constant := 2 ** Long_Long_Integer'Size;
++ Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1;
++
++ Max_Base_Digits : constant := Long_Long_Float'Digits;
++ Max_Digits : constant := Long_Long_Float'Digits;
++
++ Max_Mantissa : constant := 63;
++ Fine_Delta : constant := 2.0 ** (-Max_Mantissa);
++
++ Tick : constant := 0.000_001;
++
++ -- Storage-related Declarations
++
++ type Address is private;
++ pragma Preelaborable_Initialization (Address);
++ Null_Address : constant Address;
++
++ Storage_Unit : constant := 8;
++ Word_Size : constant := 32;
++ Memory_Size : constant := 2 ** 32;
++
++ -- Address comparison
++
++ function "<" (Left, Right : Address) return Boolean;
++ function "<=" (Left, Right : Address) return Boolean;
++ function ">" (Left, Right : Address) return Boolean;
++ function ">=" (Left, Right : Address) return Boolean;
++ function "=" (Left, Right : Address) return Boolean;
++
++ pragma Import (Intrinsic, "<");
++ pragma Import (Intrinsic, "<=");
++ pragma Import (Intrinsic, ">");
++ pragma Import (Intrinsic, ">=");
++ pragma Import (Intrinsic, "=");
++
++ -- Other System-Dependent Declarations
++
++ type Bit_Order is (High_Order_First, Low_Order_First);
++ Default_Bit_Order : constant Bit_Order := Low_Order_First;
++ pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
++
++ -- Priority-related Declarations (RM D.1)
++
++ Max_Priority : constant Positive := 30;
++ Max_Interrupt_Priority : constant Positive := 31;
++
++ subtype Any_Priority is Integer range 0 .. 31;
++ subtype Priority is Any_Priority range 0 .. 30;
++ subtype Interrupt_Priority is Any_Priority range 31 .. 31;
++
++ Default_Priority : constant Priority := 15;
++
++private
++
++ type Address is mod Memory_Size;
++ Null_Address : constant Address := 0;
++
++ --------------------------------------
++ -- System Implementation Parameters --
++ --------------------------------------
++
++ -- These parameters provide information about the target that is used
++ -- by the compiler. They are in the private part of System, where they
++ -- can be accessed using the special circuitry in the Targparm unit
++ -- whose source should be consulted for more detailed descriptions
++ -- of the individual switch values.
++
++ Backend_Divide_Checks : constant Boolean := False;
++ Backend_Overflow_Checks : constant Boolean := True;
++ Command_Line_Args : constant Boolean := True;
++ Configurable_Run_Time : constant Boolean := False;
++ Denorm : constant Boolean := True;
++ Duration_32_Bits : constant Boolean := False;
++ Exit_Status_Supported : constant Boolean := True;
++ Fractional_Fixed_Ops : constant Boolean := False;
++ Frontend_Layout : constant Boolean := False;
++ Machine_Overflows : constant Boolean := False;
++ Machine_Rounds : constant Boolean := True;
++ OpenVMS : constant Boolean := False;
++ Preallocated_Stacks : constant Boolean := False;
++ Signed_Zeros : constant Boolean := True;
++ Stack_Check_Default : constant Boolean := False;
++ Stack_Check_Probes : constant Boolean := True;
++ Stack_Check_Limits : constant Boolean := False;
++ Support_64_Bit_Divides : constant Boolean := True;
++ Support_Aggregates : constant Boolean := True;
++ Support_Composite_Assign : constant Boolean := True;
++ Support_Composite_Compare : constant Boolean := True;
++ Support_Long_Shifts : constant Boolean := True;
++ Always_Compatible_Rep : constant Boolean := False;
++ Suppress_Standard_Library : constant Boolean := False;
++ Use_Ada_Main_Program_Name : constant Boolean := False;
++ ZCX_By_Default : constant Boolean := True;
++ GCC_ZCX_Support : constant Boolean := True;
++
++end System;
+--- gcc/ada/system-freebsd-x86_64.ads.orig
++++ gcc/ada/system-freebsd-x86_64.ads
+@@ -32,6 +32,7 @@
+ -- GNAT was originally developed by the GNAT team at New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc. --
+ -- --
++-- Copyright (C) 2010 John Marino <draco@marino.st> --
+ ------------------------------------------------------------------------------
+
+ package System is
+@@ -90,6 +91,7 @@
+ pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
+
+ -- Priority-related Declarations (RM D.1)
++ -- For FreeBSD 8.0, definitions found in <sys/priority.h>
+
+ Max_Priority : constant Positive := 30;
+ Max_Interrupt_Priority : constant Positive := 31;
+@@ -98,7 +100,7 @@
+ subtype Priority is Any_Priority range 0 .. 30;
+ subtype Interrupt_Priority is Any_Priority range 31 .. 31;
+
+- Default_Priority : constant Priority := 15;
++ Default_Priority : constant Priority := Max_Priority / 2;
+
+ private
+
+@@ -116,7 +118,7 @@
+ -- of the individual switch values.
+
+ Backend_Divide_Checks : constant Boolean := False;
+- Backend_Overflow_Checks : constant Boolean := False;
++ Backend_Overflow_Checks : constant Boolean := True;
+ Command_Line_Args : constant Boolean := True;
+ Configurable_Run_Time : constant Boolean := False;
+ Denorm : constant Boolean := True;
+--- gcc/ada/system-freebsd-x86.ads.orig
++++ gcc/ada/system-freebsd-x86.ads
+@@ -32,6 +32,7 @@
+ -- GNAT was originally developed by the GNAT team at New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc. --
+ -- --
++-- Copyright (C) 2010 John Marino <draco@marino.st> --
+ ------------------------------------------------------------------------------
+
+ package System is
+@@ -90,6 +91,7 @@
+ pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
+
+ -- Priority-related Declarations (RM D.1)
++ -- For FreeBSD 8.0, definitions found in <sys/priority.h>
+
+ Max_Priority : constant Positive := 30;
+ Max_Interrupt_Priority : constant Positive := 31;
+@@ -98,7 +100,7 @@
+ subtype Priority is Any_Priority range 0 .. 30;
+ subtype Interrupt_Priority is Any_Priority range 31 .. 31;
+
+- Default_Priority : constant Priority := 15;
++ Default_Priority : constant Priority := Max_Priority / 2;
+
+ private
+
+--- /dev/null
++++ gcc/ada/system-netbsd-x86_64.ads
+@@ -0,0 +1,147 @@
++------------------------------------------------------------------------------
++-- --
++-- GNAT RUN-TIME COMPONENTS --
++-- --
++-- S Y S T E M --
++-- --
++-- S p e c --
++-- (NetBSD/x86_64 Version) --
++-- --
++-- Copyright (C) 1992-2009, Free Software Foundation, Inc. --
++-- --
++-- This specification is derived from the Ada Reference Manual for use with --
++-- GNAT. The copyright notice above, and the license provisions that follow --
++-- apply solely to the contents of the part following the private keyword. --
++-- --
++-- 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. --
++-- --
++-- Copyright (C) 2010 John Marino <draco@marino.st> --
++------------------------------------------------------------------------------
++
++package System is
++ pragma Pure;
++ -- Note that we take advantage of the implementation permission to make
++ -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
++ -- 2005, this is Pure in any case (AI-362).
++
++ type Name is (SYSTEM_NAME_GNAT);
++ System_Name : constant Name := SYSTEM_NAME_GNAT;
++
++ -- System-Dependent Named Numbers
++
++ Min_Int : constant := Long_Long_Integer'First;
++ Max_Int : constant := Long_Long_Integer'Last;
++
++ Max_Binary_Modulus : constant := 2 ** Long_Long_Integer'Size;
++ Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1;
++
++ Max_Base_Digits : constant := Long_Long_Float'Digits;
++ Max_Digits : constant := Long_Long_Float'Digits;
++
++ Max_Mantissa : constant := 63;
++ Fine_Delta : constant := 2.0 ** (-Max_Mantissa);
++
++ Tick : constant := 0.000_001;
++
++ -- Storage-related Declarations
++
++ type Address is private;
++ pragma Preelaborable_Initialization (Address);
++ Null_Address : constant Address;
++
++ Storage_Unit : constant := 8;
++ Word_Size : constant := 64;
++ Memory_Size : constant := 2 ** 64;
++
++ -- Address comparison
++
++ function "<" (Left, Right : Address) return Boolean;
++ function "<=" (Left, Right : Address) return Boolean;
++ function ">" (Left, Right : Address) return Boolean;
++ function ">=" (Left, Right : Address) return Boolean;
++ function "=" (Left, Right : Address) return Boolean;
++
++ pragma Import (Intrinsic, "<");
++ pragma Import (Intrinsic, "<=");
++ pragma Import (Intrinsic, ">");
++ pragma Import (Intrinsic, ">=");
++ pragma Import (Intrinsic, "=");
++
++ -- Other System-Dependent Declarations
++
++ type Bit_Order is (High_Order_First, Low_Order_First);
++ Default_Bit_Order : constant Bit_Order := Low_Order_First;
++ pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
++
++ -- Priority-related Declarations (RM D.1)
++
++ Max_Priority : constant Positive := 30;
++ Max_Interrupt_Priority : constant Positive := 31;
++
++ subtype Any_Priority is Integer range 0 .. 31;
++ subtype Priority is Any_Priority range 0 .. 30;
++ subtype Interrupt_Priority is Any_Priority range 31 .. 31;
++
++ Default_Priority : constant Priority := 15;
++
++private
++
++ type Address is mod Memory_Size;
++ Null_Address : constant Address := 0;
++
++ --------------------------------------
++ -- System Implementation Parameters --
++ --------------------------------------
++
++ -- These parameters provide information about the target that is used
++ -- by the compiler. They are in the private part of System, where they
++ -- can be accessed using the special circuitry in the Targparm unit
++ -- whose source should be consulted for more detailed descriptions
++ -- of the individual switch values.
++
++ Backend_Divide_Checks : constant Boolean := False;
++ Backend_Overflow_Checks : constant Boolean := True;
++ Command_Line_Args : constant Boolean := True;
++ Configurable_Run_Time : constant Boolean := False;
++ Denorm : constant Boolean := True;
++ Duration_32_Bits : constant Boolean := False;
++ Exit_Status_Supported : constant Boolean := True;
++ Fractional_Fixed_Ops : constant Boolean := False;
++ Frontend_Layout : constant Boolean := False;
++ Machine_Overflows : constant Boolean := False;
++ Machine_Rounds : constant Boolean := True;
++ OpenVMS : constant Boolean := False;
++ Preallocated_Stacks : constant Boolean := False;
++ Signed_Zeros : constant Boolean := True;
++ Stack_Check_Default : constant Boolean := False;
++ Stack_Check_Probes : constant Boolean := True;
++ Stack_Check_Limits : constant Boolean := False;
++ Support_64_Bit_Divides : constant Boolean := True;
++ Support_Aggregates : constant Boolean := True;
++ Support_Composite_Assign : constant Boolean := True;
++ Support_Composite_Compare : constant Boolean := True;
++ Support_Long_Shifts : constant Boolean := True;
++ Always_Compatible_Rep : constant Boolean := True;
++ Suppress_Standard_Library : constant Boolean := False;
++ Use_Ada_Main_Program_Name : constant Boolean := False;
++ ZCX_By_Default : constant Boolean := True;
++ GCC_ZCX_Support : constant Boolean := True;
++
++end System;
+--- /dev/null
++++ gcc/ada/system-netbsd-x86.ads
+@@ -0,0 +1,147 @@
++------------------------------------------------------------------------------
++-- --
++-- GNAT RUN-TIME COMPONENTS --
++-- --
++-- S Y S T E M --
++-- --
++-- S p e c --
++-- (NetBSD/x86 Version) --
++-- --
++-- Copyright (C) 1992-2009, Free Software Foundation, Inc. --
++-- --
++-- This specification is derived from the Ada Reference Manual for use with --
++-- GNAT. The copyright notice above, and the license provisions that follow --
++-- apply solely to the contents of the part following the private keyword. --
++-- --
++-- 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. --
++-- --
++-- Copyright (C) 2010 John Marino <draco@marino.st> --
++------------------------------------------------------------------------------
++
++package System is
++ pragma Pure;
++ -- Note that we take advantage of the implementation permission to make
++ -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
++ -- 2005, this is Pure in any case (AI-362).
++
++ type Name is (SYSTEM_NAME_GNAT);
++ System_Name : constant Name := SYSTEM_NAME_GNAT;
++
++ -- System-Dependent Named Numbers
++
++ Min_Int : constant := Long_Long_Integer'First;
++ Max_Int : constant := Long_Long_Integer'Last;
++
++ Max_Binary_Modulus : constant := 2 ** Long_Long_Integer'Size;
++ Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1;
++
++ Max_Base_Digits : constant := Long_Long_Float'Digits;
++ Max_Digits : constant := Long_Long_Float'Digits;
++
++ Max_Mantissa : constant := 63;
++ Fine_Delta : constant := 2.0 ** (-Max_Mantissa);
++
++ Tick : constant := 0.000_001;
++
++ -- Storage-related Declarations
++
++ type Address is private;
++ pragma Preelaborable_Initialization (Address);
++ Null_Address : constant Address;
++
++ Storage_Unit : constant := 8;
++ Word_Size : constant := 32;
++ Memory_Size : constant := 2 ** 32;
++
++ -- Address comparison
++
++ function "<" (Left, Right : Address) return Boolean;
++ function "<=" (Left, Right : Address) return Boolean;
++ function ">" (Left, Right : Address) return Boolean;
++ function ">=" (Left, Right : Address) return Boolean;
++ function "=" (Left, Right : Address) return Boolean;
++
++ pragma Import (Intrinsic, "<");
++ pragma Import (Intrinsic, "<=");
++ pragma Import (Intrinsic, ">");
++ pragma Import (Intrinsic, ">=");
++ pragma Import (Intrinsic, "=");
++
++ -- Other System-Dependent Declarations
++
++ type Bit_Order is (High_Order_First, Low_Order_First);
++ Default_Bit_Order : constant Bit_Order := Low_Order_First;
++ pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
++
++ -- Priority-related Declarations (RM D.1)
++
++ Max_Priority : constant Positive := 30;
++ Max_Interrupt_Priority : constant Positive := 31;
++
++ subtype Any_Priority is Integer range 0 .. 31;
++ subtype Priority is Any_Priority range 0 .. 30;
++ subtype Interrupt_Priority is Any_Priority range 31 .. 31;
++
++ Default_Priority : constant Priority := 15;
++
++private
++
++ type Address is mod Memory_Size;
++ Null_Address : constant Address := 0;
++
++ --------------------------------------
++ -- System Implementation Parameters --
++ --------------------------------------
++
++ -- These parameters provide information about the target that is used
++ -- by the compiler. They are in the private part of System, where they
++ -- can be accessed using the special circuitry in the Targparm unit
++ -- whose source should be consulted for more detailed descriptions
++ -- of the individual switch values.
++
++ Backend_Divide_Checks : constant Boolean := False;
++ Backend_Overflow_Checks : constant Boolean := True;
++ Command_Line_Args : constant Boolean := True;
++ Configurable_Run_Time : constant Boolean := False;
++ Denorm : constant Boolean := True;
++ Duration_32_Bits : constant Boolean := False;
++ Exit_Status_Supported : constant Boolean := True;
++ Fractional_Fixed_Ops : constant Boolean := False;
++ Frontend_Layout : constant Boolean := False;
++ Machine_Overflows : constant Boolean := False;
++ Machine_Rounds : constant Boolean := True;
++ OpenVMS : constant Boolean := False;
++ Preallocated_Stacks : constant Boolean := False;
++ Signed_Zeros : constant Boolean := True;
++ Stack_Check_Default : constant Boolean := False;
++ Stack_Check_Probes : constant Boolean := True;
++ Stack_Check_Limits : constant Boolean := False;
++ Support_64_Bit_Divides : constant Boolean := True;
++ Support_Aggregates : constant Boolean := True;
++ Support_Composite_Assign : constant Boolean := True;
++ Support_Composite_Compare : constant Boolean := True;
++ Support_Long_Shifts : constant Boolean := True;
++ Always_Compatible_Rep : constant Boolean := False;
++ Suppress_Standard_Library : constant Boolean := False;
++ Use_Ada_Main_Program_Name : constant Boolean := False;
++ ZCX_By_Default : constant Boolean := True;
++ GCC_ZCX_Support : constant Boolean := True;
++
++end System;
+--- /dev/null
++++ gcc/ada/system-openbsd-x86_64.ads
+@@ -0,0 +1,147 @@
++------------------------------------------------------------------------------
++-- --
++-- GNAT RUN-TIME COMPONENTS --
++-- --
++-- S Y S T E M --
++-- --
++-- S p e c --
++-- (DragonFly BSD/x86_64 Version) --
++-- --
++-- Copyright (C) 1992-2009, Free Software Foundation, Inc. --
++-- --
++-- This specification is derived from the Ada Reference Manual for use with --
++-- GNAT. The copyright notice above, and the license provisions that follow --
++-- apply solely to the contents of the part following the private keyword. --
++-- --
++-- 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. --
++-- --
++-- Copyright (C) 2010 John Marino <draco@marino.st> --
++------------------------------------------------------------------------------
++
++package System is
++ pragma Pure;
++ -- Note that we take advantage of the implementation permission to make
++ -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
++ -- 2005, this is Pure in any case (AI-362).
++
++ type Name is (SYSTEM_NAME_GNAT);
++ System_Name : constant Name := SYSTEM_NAME_GNAT;
++
++ -- System-Dependent Named Numbers
++
++ Min_Int : constant := Long_Long_Integer'First;
++ Max_Int : constant := Long_Long_Integer'Last;
++
++ Max_Binary_Modulus : constant := 2 ** Long_Long_Integer'Size;
++ Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1;
++
++ Max_Base_Digits : constant := Long_Long_Float'Digits;
++ Max_Digits : constant := Long_Long_Float'Digits;
++
++ Max_Mantissa : constant := 63;
++ Fine_Delta : constant := 2.0 ** (-Max_Mantissa);
++
++ Tick : constant := 0.000_001;
++
++ -- Storage-related Declarations
++
++ type Address is private;
++ pragma Preelaborable_Initialization (Address);
++ Null_Address : constant Address;
++
++ Storage_Unit : constant := 8;
++ Word_Size : constant := 64;
++ Memory_Size : constant := 2 ** 64;
++
++ -- Address comparison
++
++ function "<" (Left, Right : Address) return Boolean;
++ function "<=" (Left, Right : Address) return Boolean;
++ function ">" (Left, Right : Address) return Boolean;
++ function ">=" (Left, Right : Address) return Boolean;
++ function "=" (Left, Right : Address) return Boolean;
++
++ pragma Import (Intrinsic, "<");
++ pragma Import (Intrinsic, "<=");
++ pragma Import (Intrinsic, ">");
++ pragma Import (Intrinsic, ">=");
++ pragma Import (Intrinsic, "=");
++
++ -- Other System-Dependent Declarations
++
++ type Bit_Order is (High_Order_First, Low_Order_First);
++ Default_Bit_Order : constant Bit_Order := Low_Order_First;
++ pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
++
++ -- Priority-related Declarations (RM D.1)
++
++ Max_Priority : constant Positive := 30;
++ Max_Interrupt_Priority : constant Positive := 31;
++
++ subtype Any_Priority is Integer range 0 .. 31;
++ subtype Priority is Any_Priority range 0 .. 30;
++ subtype Interrupt_Priority is Any_Priority range 31 .. 31;
++
++ Default_Priority : constant Priority := 15;
++
++private
++
++ type Address is mod Memory_Size;
++ Null_Address : constant Address := 0;
++
++ --------------------------------------
++ -- System Implementation Parameters --
++ --------------------------------------
++
++ -- These parameters provide information about the target that is used
++ -- by the compiler. They are in the private part of System, where they
++ -- can be accessed using the special circuitry in the Targparm unit
++ -- whose source should be consulted for more detailed descriptions
++ -- of the individual switch values.
++
++ Backend_Divide_Checks : constant Boolean := False;
++ Backend_Overflow_Checks : constant Boolean := True;
++ Command_Line_Args : constant Boolean := True;
++ Configurable_Run_Time : constant Boolean := False;
++ Denorm : constant Boolean := True;
++ Duration_32_Bits : constant Boolean := False;
++ Exit_Status_Supported : constant Boolean := True;
++ Fractional_Fixed_Ops : constant Boolean := False;
++ Frontend_Layout : constant Boolean := False;
++ Machine_Overflows : constant Boolean := False;
++ Machine_Rounds : constant Boolean := True;
++ OpenVMS : constant Boolean := False;
++ Preallocated_Stacks : constant Boolean := False;
++ Signed_Zeros : constant Boolean := True;
++ Stack_Check_Default : constant Boolean := False;
++ Stack_Check_Probes : constant Boolean := True;
++ Stack_Check_Limits : constant Boolean := False;
++ Support_64_Bit_Divides : constant Boolean := True;
++ Support_Aggregates : constant Boolean := True;
++ Support_Composite_Assign : constant Boolean := True;
++ Support_Composite_Compare : constant Boolean := True;
++ Support_Long_Shifts : constant Boolean := True;
++ Always_Compatible_Rep : constant Boolean := True;
++ Suppress_Standard_Library : constant Boolean := False;
++ Use_Ada_Main_Program_Name : constant Boolean := False;
++ ZCX_By_Default : constant Boolean := False;
++ GCC_ZCX_Support : constant Boolean := False;
++
++end System;
+--- /dev/null
++++ gcc/ada/system-openbsd-x86.ads
+@@ -0,0 +1,147 @@
++------------------------------------------------------------------------------
++-- --
++-- GNAT RUN-TIME COMPONENTS --
++-- --
++-- S Y S T E M --
++-- --
++-- S p e c --
++-- (DragonFly BSD/x86 Version) --
++-- --
++-- Copyright (C) 1992-2009, Free Software Foundation, Inc. --
++-- --
++-- This specification is derived from the Ada Reference Manual for use with --
++-- GNAT. The copyright notice above, and the license provisions that follow --
++-- apply solely to the contents of the part following the private keyword. --
++-- --
++-- 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. --
++-- --
++-- Copyright (C) 2010 John Marino <draco@marino.st> --
++------------------------------------------------------------------------------
++
++package System is
++ pragma Pure;
++ -- Note that we take advantage of the implementation permission to make
++ -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
++ -- 2005, this is Pure in any case (AI-362).
++
++ type Name is (SYSTEM_NAME_GNAT);
++ System_Name : constant Name := SYSTEM_NAME_GNAT;
++
++ -- System-Dependent Named Numbers
++
++ Min_Int : constant := Long_Long_Integer'First;
++ Max_Int : constant := Long_Long_Integer'Last;
++
++ Max_Binary_Modulus : constant := 2 ** Long_Long_Integer'Size;
++ Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1;
++
++ Max_Base_Digits : constant := Long_Long_Float'Digits;
++ Max_Digits : constant := Long_Long_Float'Digits;
++
++ Max_Mantissa : constant := 63;
++ Fine_Delta : constant := 2.0 ** (-Max_Mantissa);
++
++ Tick : constant := 0.000_001;
++
++ -- Storage-related Declarations
++
++ type Address is private;
++ pragma Preelaborable_Initialization (Address);
++ Null_Address : constant Address;
++
++ Storage_Unit : constant := 8;
++ Word_Size : constant := 32;
++ Memory_Size : constant := 2 ** 32;
++
++ -- Address comparison
++
++ function "<" (Left, Right : Address) return Boolean;
++ function "<=" (Left, Right : Address) return Boolean;
++ function ">" (Left, Right : Address) return Boolean;
++ function ">=" (Left, Right : Address) return Boolean;
++ function "=" (Left, Right : Address) return Boolean;
++
++ pragma Import (Intrinsic, "<");
++ pragma Import (Intrinsic, "<=");
++ pragma Import (Intrinsic, ">");
++ pragma Import (Intrinsic, ">=");
++ pragma Import (Intrinsic, "=");
++
++ -- Other System-Dependent Declarations
++
++ type Bit_Order is (High_Order_First, Low_Order_First);
++ Default_Bit_Order : constant Bit_Order := Low_Order_First;
++ pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
++
++ -- Priority-related Declarations (RM D.1)
++
++ Max_Priority : constant Positive := 30;
++ Max_Interrupt_Priority : constant Positive := 31;
++
++ subtype Any_Priority is Integer range 0 .. 31;
++ subtype Priority is Any_Priority range 0 .. 30;
++ subtype Interrupt_Priority is Any_Priority range 31 .. 31;
++
++ Default_Priority : constant Priority := 15;
++
++private
++
++ type Address is mod Memory_Size;
++ Null_Address : constant Address := 0;
++
++ --------------------------------------
++ -- System Implementation Parameters --
++ --------------------------------------
++
++ -- These parameters provide information about the target that is used
++ -- by the compiler. They are in the private part of System, where they
++ -- can be accessed using the special circuitry in the Targparm unit
++ -- whose source should be consulted for more detailed descriptions
++ -- of the individual switch values.
++
++ Backend_Divide_Checks : constant Boolean := False;
++ Backend_Overflow_Checks : constant Boolean := True;
++ Command_Line_Args : constant Boolean := True;
++ Configurable_Run_Time : constant Boolean := False;
++ Denorm : constant Boolean := True;
++ Duration_32_Bits : constant Boolean := False;
++ Exit_Status_Supported : constant Boolean := True;
++ Fractional_Fixed_Ops : constant Boolean := False;
++ Frontend_Layout : constant Boolean := False;
++ Machine_Overflows : constant Boolean := False;
++ Machine_Rounds : constant Boolean := True;
++ OpenVMS : constant Boolean := False;
++ Preallocated_Stacks : constant Boolean := False;
++ Signed_Zeros : constant Boolean := True;
++ Stack_Check_Default : constant Boolean := False;
++ Stack_Check_Probes : constant Boolean := True;
++ Stack_Check_Limits : constant Boolean := False;
++ Support_64_Bit_Divides : constant Boolean := True;
++ Support_Aggregates : constant Boolean := True;
++ Support_Composite_Assign : constant Boolean := True;
++ Support_Composite_Compare : constant Boolean := True;
++ Support_Long_Shifts : constant Boolean := True;
++ Always_Compatible_Rep : constant Boolean := True;
++ Suppress_Standard_Library : constant Boolean := False;
++ Use_Ada_Main_Program_Name : constant Boolean := False;
++ ZCX_By_Default : constant Boolean := False;
++ GCC_ZCX_Support : constant Boolean := False;
++
++end System;
+--- gcc/ada/tracebak.c.orig
++++ gcc/ada/tracebak.c
+@@ -199,24 +199,10 @@
+
+ */
+
+-/*--------------------------- Darwin 8 or newer ----------------------------*/
+-#if defined (__APPLE__) \
+- && defined (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) \
+- && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1040
+-
+-#define USE_GCC_UNWINDER
++/*--------------------------- PPC AIX/Darwin ----------------------------*/
+
+-#if defined (__i386__) || defined (__x86_64__)
+-#define PC_ADJUST -2
+-#elif defined (__ppc__) || defined (__ppc64__)
+-#define PC_ADJUST -4
+-#else
+-#error Unhandled darwin architecture.
+-#endif
+-
+-/*------------------------ PPC AIX/Older Darwin -------------------------*/
+-#elif ((defined (_POWER) && defined (_AIX)) \
+- || (defined (__APPLE__) && defined (__ppc__)))
++#if ((defined (_POWER) && defined (_AIX)) || \
++(defined (__ppc__) && defined (__APPLE__)))
+
+ #define USE_GENERIC_UNWINDER
+
+@@ -304,6 +290,24 @@
+ window of frame N-1 (positive offset from fp), in which we retrieve the
+ saved return address. We then end up with our caller's return address. */
+
++/*---------------------------- x86 *BSD --------------------------------*/
++
++#elif defined (__i386__) && \
++ ( defined (__NetBSD__) \
++ || defined (__FreeBSD__) \
++ || defined (__OpenBSD__) \
++ || defined (__DragonFly__) )
++
++#define USE_GCC_UNWINDER
++/* The generic unwinder is not used for this target because the default
++ implementation doesn't unwind on the BSD platforms. AMD64 targets use the
++ gcc unwinder for all platforms, so let's keep i386 consistent with that.
++*/
++
++#define PC_ADJUST -2
++/* The minimum size of call instructions on this architecture is 2 bytes */
++
++
+ /*------------------------------- x86 ----------------------------------*/
+
+ #elif defined (i386)
+--- gcc/ada/gcc-interface/Makefile.in.orig
++++ gcc/ada/gcc-interface/Makefile.in
+@@ -1,5 +1,6 @@
+ # Makefile for GNU Ada Compiler (GNAT).
+ # Copyright (C) 1994-2010 Free Software Foundation, Inc.
++# Copyright (C) 2010, 2011 John Marino <www.dragonlace.net>
+
+ #This file is part of GCC.
+
+@@ -1010,6 +1011,7 @@
+ a-numaux.adb<a-numaux-x86.adb \
+ a-numaux.ads<a-numaux-x86.ads \
+ a-intnam.ads<a-intnam-solaris.ads \
++ g-trasym.adb<g-trasym-bsd.adb \
+ s-inmaop.adb<s-inmaop-posix.adb \
+ s-intman.adb<s-intman-solaris.adb \
+ s-osinte.adb<s-osinte-solaris.adb \
+@@ -1171,17 +1173,24 @@
+ LIBRARY_VERSION := $(LIB_VERSION)
+ endif
+
++
++# FREEBSD i386
++# TOOL_TARGET_PAIRS probably does nothing, moved to gnattools/configure.ac
+ ifeq ($(strip $(filter-out %86 freebsd%,$(arch) $(osys))),)
+ LIBGNAT_TARGET_PAIRS = \
++ a-exetim.adb<a-exetim-posix.adb \
++ a-exetim.ads<a-exetim-default.ads \
+ a-intnam.ads<a-intnam-freebsd.ads \
+ a-numaux.adb<a-numaux-x86.adb \
+ a-numaux.ads<a-numaux-x86.ads \
+ g-bytswa.adb<g-bytswa-x86.adb \
++ g-socthi.adb<g-socthi-bsd.adb \
++ g-trasym.adb<g-trasym-bsd.adb \
+ s-inmaop.adb<s-inmaop-posix.adb \
+ s-intman.adb<s-intman-posix.adb \
+ s-osinte.adb<s-osinte-freebsd.adb \
+- s-osinte.ads<s-osinte-freebsd.ads \
+- s-osprim.adb<s-osprim-posix.adb \
++ s-osinte.ads<s-osinte-freebsd32.ads \
++ s-osprim.adb<s-osprim-bsd32.adb \
+ s-taprop.adb<s-taprop-posix.adb \
+ s-taspri.ads<s-taspri-posix.ads \
+ s-tpopsp.adb<s-tpopsp-posix.adb \
+@@ -1191,12 +1200,324 @@
+ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb
+ GNATLIB_SHARED = gnatlib-shared-dual
+
++ EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o
++ EXTRA_GNATRTL_TASKING_OBJS=a-exetim.o
++
++ EH_MECHANISM=-gcc
++ THREADSLIB= -lpthread
++ GMEM_LIB = gmemlib
++ LIBRARY_VERSION := $(LIB_VERSION)
++endif
++
++
++# FREEBSD AMD64
++# TOOL_TARGET_PAIRS probably does nothing, moved to gnattools/configure.ac
++ifeq ($(strip $(filter-out x86_64 freebsd%,$(arch) $(osys))),)
++ LIBGNAT_TARGET_PAIRS = \
++ a-exetim.adb<a-exetim-posix.adb \
++ a-exetim.ads<a-exetim-default.ads \
++ a-intnam.ads<a-intnam-freebsd.ads \
++ a-numaux.adb<a-numaux-x86.adb \
++ a-numaux.ads<a-numaux-x86.ads \
++ g-bytswa.adb<g-bytswa-x86.adb \
++ g-socthi.adb<g-socthi-bsd.adb \
++ g-trasym.adb<g-trasym-bsd.adb \
++ s-inmaop.adb<s-inmaop-posix.adb \
++ s-intman.adb<s-intman-posix.adb \
++ s-osinte.adb<s-osinte-freebsd.adb \
++ s-osinte.ads<s-osinte-freebsd64.ads \
++ s-osprim.adb<s-osprim-bsd64.adb \
++ s-taprop.adb<s-taprop-posix.adb \
++ s-taspri.ads<s-taspri-posix.ads \
++ s-tpopsp.adb<s-tpopsp-posix.adb \
++ system.ads<system-freebsd-x86_64.ads
++
++ TOOLS_TARGET_PAIRS=mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb
++ GNATLIB_SHARED = gnatlib-shared-dual
++
++ EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o
++ EXTRA_GNATRTL_TASKING_OBJS=a-exetim.o
++
++ EH_MECHANISM=-gcc
++ THREADSLIB= -lpthread
++ GMEM_LIB = gmemlib
++ LIBRARY_VERSION := $(LIB_VERSION)
++endif
++
++
++# DRAGONFLY i386
++# TOOL_TARGET_PAIRS probably does nothing, moved to gnattools/configure.ac
++ifeq ($(strip $(filter-out %86 dragonfly%,$(arch) $(osys))),)
++ LIBGNAT_TARGET_PAIRS = \
++ a-exetim.adb<a-exetim-posix.adb \
++ a-exetim.ads<a-exetim-default.ads \
++ a-intnam.ads<a-intnam-dragonfly.ads \
++ a-numaux.adb<a-numaux-x86.adb \
++ a-numaux.ads<a-numaux-x86.ads \
++ g-bytswa.adb<g-bytswa-x86.adb \
++ g-socthi.adb<g-socthi-bsd.adb \
++ g-trasym.adb<g-trasym-bsd.adb \
++ s-inmaop.adb<s-inmaop-posix.adb \
++ s-intman.adb<s-intman-posix.adb \
++ s-osinte.adb<s-osinte-dragonfly.adb \
++ s-osinte.ads<s-osinte-dragonfly.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.adb \
++ system.ads<system-dragonfly-x86.ads
++
++ TOOLS_TARGET_PAIRS = \
++ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb
++ GNATLIB_SHARED = gnatlib-shared-dual
++
++ EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o
++ EXTRA_GNATRTL_TASKING_OBJS=a-exetim.o
++
++ EH_MECHANISM=-gcc
++ THREADSLIB= -lpthread
++ GMEM_LIB = gmemlib
++ LIBRARY_VERSION := $(LIB_VERSION)
++endif
++
++
++# DRAGONFLY AMD64
++# TOOL_TARGET_PAIRS probably does nothing, moved to gnattools/configure.ac
++ifeq ($(strip $(filter-out x86_64 dragonfly%,$(arch) $(osys))),)
++ LIBGNAT_TARGET_PAIRS = \
++ a-exetim.adb<a-exetim-posix.adb \
++ a-exetim.ads<a-exetim-default.ads \
++ a-intnam.ads<a-intnam-dragonfly.ads \
++ a-numaux.adb<a-numaux-x86.adb \
++ a-numaux.ads<a-numaux-x86.ads \
++ g-bytswa.adb<g-bytswa-x86.adb \
++ g-socthi.adb<g-socthi-bsd.adb \
++ g-trasym.adb<g-trasym-bsd.adb \
++ s-inmaop.adb<s-inmaop-posix.adb \
++ s-intman.adb<s-intman-posix.adb \
++ s-osinte.adb<s-osinte-dragonfly.adb \
++ s-osinte.ads<s-osinte-dragonfly.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.adb \
++ system.ads<system-dragonfly-x86_64.ads
++
++ TOOLS_TARGET_PAIRS=mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb
++ GNATLIB_SHARED = gnatlib-shared-dual
++
++ EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o
++ EXTRA_GNATRTL_TASKING_OBJS=a-exetim.o
++
++ EH_MECHANISM=-gcc
++ THREADSLIB= -lpthread
++ GMEM_LIB = gmemlib
++ LIBRARY_VERSION := $(LIB_VERSION)
++endif
++
++
++# OPENBSD i386
++# TOOL_TARGET_PAIRS probably does nothing, moved to gnattools/configure.ac
++ifeq ($(strip $(filter-out %86 openbsd%,$(arch) $(osys))),)
++ LIBGNAT_TARGET_PAIRS = \
++ a-exetim.adb<a-exetim-posix.adb \
++ a-exetim.ads<a-exetim-default.ads \
++ a-intnam.ads<a-intnam-openbsd.ads \
++ a-numaux.adb<a-numaux-x86.adb \
++ a-numaux.ads<a-numaux-x86.ads \
++ g-bytswa.adb<g-bytswa-x86.adb \
++ g-socthi.adb<g-socthi-bsd.adb \
++ g-trasym.adb<g-trasym-bsd.adb \
++ s-inmaop.adb<s-inmaop-posix.adb \
++ s-intman.adb<s-intman-posix.adb \
++ s-osinte.adb<s-osinte-openbsd.adb \
++ s-osinte.ads<s-osinte-openbsd.ads \
++ s-osprim.adb<s-osprim-bsd32.adb \
++ s-taprop.adb<s-taprop-posix.adb \
++ s-taspri.ads<s-taspri-posix.ads \
++ s-tpopsp.adb<s-tpopsp-posix.adb \
++ system.ads<system-openbsd-x86.ads
++
++ TOOLS_TARGET_PAIRS = \
++ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb
++ GNATLIB_SHARED = gnatlib-shared-dual
++
++ EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o
++ EXTRA_GNATRTL_TASKING_OBJS=a-exetim.o
++
++ EH_MECHANISM=
++ THREADSLIB= -lpthread
++ GMEM_LIB =
++ LIBRARY_VERSION := $(LIB_VERSION)
++endif
++
++
++# OPENBSD AMD64
++# TOOL_TARGET_PAIRS probably does nothing, moved to gnattools/configure.ac
++ifeq ($(strip $(filter-out x86_64 openbsd%,$(arch) $(osys))),)
++ LIBGNAT_TARGET_PAIRS = \
++ a-exetim.adb<a-exetim-posix.adb \
++ a-exetim.ads<a-exetim-default.ads \
++ a-intnam.ads<a-intnam-openbsd.ads \
++ a-numaux.adb<a-numaux-x86.adb \
++ a-numaux.ads<a-numaux-x86.ads \
++ g-bytswa.adb<g-bytswa-x86.adb \
++ g-socthi.adb<g-socthi-bsd.adb \
++ g-trasym.adb<g-trasym-bsd.adb \
++ s-inmaop.adb<s-inmaop-posix.adb \
++ s-intman.adb<s-intman-posix.adb \
++ s-osinte.adb<s-osinte-openbsd.adb \
++ s-osinte.ads<s-osinte-openbsd.ads \
++ s-osprim.adb<s-osprim-bsd32.adb \
++ s-taprop.adb<s-taprop-posix.adb \
++ s-taspri.ads<s-taspri-posix.ads \
++ s-tpopsp.adb<s-tpopsp-posix.adb \
++ system.ads<system-openbsd-x86_64.ads
++
++ TOOLS_TARGET_PAIRS=mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb
++ GNATLIB_SHARED = gnatlib-shared-dual
++
++ EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o
++ EXTRA_GNATRTL_TASKING_OBJS=a-exetim.o
++
++ EH_MECHANISM=
++ THREADSLIB= -lpthread
++ GMEM_LIB =
++ LIBRARY_VERSION := $(LIB_VERSION)
++endif
++
++
++# NETBSD i386 (5+ only)
++# TOOL_TARGET_PAIRS probably does nothing, moved to gnattools/configure.ac
++ifeq ($(strip $(filter-out %86 netbsd%,$(arch) $(osys))),)
++ LIBGNAT_TARGET_PAIRS = \
++ a-exetim.adb<a-exetim-posix.adb \
++ a-exetim.ads<a-exetim-default.ads \
++ a-intnam.ads<a-intnam-netbsd.ads \
++ a-numaux.adb<a-numaux-x86.adb \
++ a-numaux.ads<a-numaux-x86.ads \
++ g-bytswa.adb<g-bytswa-x86.adb \
++ g-socthi.adb<g-socthi-netbsd.adb \
++ g-trasym.adb<g-trasym-bsd.adb \
++ s-inmaop.adb<s-inmaop-posix.adb \
++ s-intman.adb<s-intman-posix.adb \
++ s-osinte.adb<s-osinte-netbsd.adb \
++ s-taprop.adb<s-taprop-posix.adb \
++ s-taspri.ads<s-taspri-posix.ads \
++ s-tpopsp.adb<s-tpopsp-posix.adb \
++ system.ads<system-netbsd-x86.ads
++
++ ifeq ($(strip $(filter-out %86 netbsdelf5%,$(arch) $(osys))),)
++ LIBGNAT_TARGET_PAIRS+= \
++ s-osinte.ads<s-osinte-netbsd.ads \
++ s-osprim.adb<s-osprim-bsd32.adb
++ else
++ LIBGNAT_TARGET_PAIRS+= \
++ g-socthi.ads<g-socthi-netbsd6.ads \
++ s-osinte.ads<s-osinte-netbsd6.ads \
++ s-osprim.adb<s-osprim-bsdn6.adb
++ endif
++
++ TOOLS_TARGET_PAIRS = \
++ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb
++ GNATLIB_SHARED = gnatlib-shared-dual
++
++ EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o
++ EXTRA_GNATRTL_TASKING_OBJS=a-exetim.o
++
+ EH_MECHANISM=-gcc
+ THREADSLIB= -lpthread
+ GMEM_LIB = gmemlib
+ LIBRARY_VERSION := $(LIB_VERSION)
+ endif
+
++
++# NETBSD AMD64 (5+ only)
++# TOOL_TARGET_PAIRS probably does nothing, moved to gnattools/configure.ac
++ifeq ($(strip $(filter-out x86_64 netbsd%,$(arch) $(osys))),)
++ LIBGNAT_TARGET_PAIRS = \
++ a-exetim.adb<a-exetim-posix.adb \
++ a-exetim.ads<a-exetim-default.ads \
++ a-intnam.ads<a-intnam-netbsd.ads \
++ a-numaux.adb<a-numaux-x86.adb \
++ a-numaux.ads<a-numaux-x86.ads \
++ g-bytswa.adb<g-bytswa-x86.adb \
++ g-socthi.adb<g-socthi-netbsd.adb \
++ g-trasym.adb<g-trasym-bsd.adb \
++ s-inmaop.adb<s-inmaop-posix.adb \
++ s-intman.adb<s-intman-posix.adb \
++ s-osinte.adb<s-osinte-netbsd.adb \
++ s-taprop.adb<s-taprop-posix.adb \
++ s-taspri.ads<s-taspri-posix.ads \
++ s-tpopsp.adb<s-tpopsp-posix.adb \
++ system.ads<system-netbsd-x86_64.ads
++
++ ifeq ($(strip $(filter-out x86_64 netbsd5%,$(arch) $(osys))),)
++ LIBGNAT_TARGET_PAIRS+= \
++ s-osinte.ads<s-osinte-netbsd.ads \
++ s-osprim.adb<s-osprim-bsd32.adb
++ else
++ LIBGNAT_TARGET_PAIRS+= \
++ g-socthi.ads<g-socthi-netbsd6.ads \
++ s-osinte.ads<s-osinte-netbsd6.ads \
++ s-osprim.adb<s-osprim-bsdn6.adb
++ endif
++
++ TOOLS_TARGET_PAIRS=mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb
++ GNATLIB_SHARED = gnatlib-shared-dual
++
++ EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o
++ EXTRA_GNATRTL_TASKING_OBJS=a-exetim.o
++
++ EH_MECHANISM=-gcc
++ THREADSLIB= -lpthread
++ GMEM_LIB = gmemlib
++ LIBRARY_VERSION := $(LIB_VERSION)
++endif
++
++
++# ANDROID (ARM)
++# TOOL_TARGET_PAIRS probably does nothing, moved to gnattools/configure.ac
++ifeq ($(strip $(filter-out arm% android eabi,$(targ))),)
++ LIBGNAT_TARGET_PAIRS = \
++ a-intnam.ads<a-intnam-linux.ads \
++ g-trasym.ads<g-trasym-unimplemented.ads \
++ g-trasym.adb<g-trasym-unimplemented.adb \
++ s-inmaop.adb<s-inmaop-posix.adb \
++ s-intman.adb<s-intman-posix.adb \
++ s-linux.ads<s-linux.ads \
++ s-osinte.adb<s-osinte-posix.adb \
++ s-osinte.ads<s-osinte-android.ads \
++ s-osprim.adb<s-osprim-posix.adb \
++ s-taprop.adb<s-taprop-linux.adb \
++ s-tasinf.ads<s-tasinf-linux.ads \
++ s-tasinf.adb<s-tasinf-linux.adb \
++ s-taspri.ads<s-taspri-posix-noaltstack.ads \
++ s-tpopsp.adb<s-tpopsp-posix-foreign.adb
++
++ ifeq ($(strip $(filter-out arm%b,$(arch))),)
++ LIBGNAT_TARGET_PAIRS += \
++ system.ads<system-linux-armeb.ads
++ else
++ LIBGNAT_TARGET_PAIRS += \
++ system.ads<system-linux-armel.ads
++ endif
++
++ TOOLS_TARGET_PAIRS = \
++ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
++ indepsw.adb<indepsw-gnu.adb
++
++ EXTRA_LIBGNAT_SRCS+= signal_android.c
++ EXTRA_LIBGNAT_OBJS+= signal_android.o
++ EXTRA_GNATRTL_TASKING_OBJS= s-linux.o
++ EH_MECHANISM=
++ THREADSLIB=
++ GNATLIB_SHARED= gnatlib-shared-dual
++ GMEM_LIB= gmemlib
++ LIBRARY_VERSION:= $(LIB_VERSION)
++endif
++
++
+ ifeq ($(strip $(filter-out s390% linux%,$(arch) $(osys))),)
+ LIBGNAT_TARGET_PAIRS_COMMON = \
+ a-intnam.ads<a-intnam-linux.ads \
+--- gnattools/configure.orig
++++ gnattools/configure
+@@ -5,6 +5,7 @@
+ # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+ # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software
+ # Foundation, Inc.
++# Copyright (C) 2010 John Marino <draco@marino.st>
+ #
+ # This configure script is free software; the Free Software Foundation
+ # gives unlimited permission to copy, distribute and modify it.
+@@ -2058,7 +2059,27 @@
+ s390*-*-linux*)
+ TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb"
+ ;;
+- *86-*-freebsd*)
++ *86-*-freebsd* | x86_64-*-freebsd*)
++ TOOLS_TARGET_PAIRS="\
++ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
++ indepsw.adb<indepsw-gnu.adb"
++ ;;
++ *86-*-dragonfly* | x86_64-*-dragonfly*)
++ TOOLS_TARGET_PAIRS="\
++ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
++ indepsw.adb<indepsw-gnu.adb"
++ ;;
++ *86-*-openbsd* | x86_64-*-openbsd*)
++ TOOLS_TARGET_PAIRS="\
++ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
++ indepsw.adb<indepsw-gnu.adb"
++ ;;
++ *86-*-netbsdelf* | x86_64-*-netbsd*)
++ TOOLS_TARGET_PAIRS="\
++ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
++ indepsw.adb<indepsw-gnu.adb"
++ ;;
++ arm*-android-eabi)
+ TOOLS_TARGET_PAIRS="\
+ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
+ indepsw.adb<indepsw-gnu.adb"
+--- gnattools/configure.ac.orig
++++ gnattools/configure.ac
+@@ -1,5 +1,6 @@
+ # Configure script for libada.
+ # Copyright 2003, 2004, 2009 Free Software Foundation, Inc.
++# Copyright 2010 John Marino <draco@marino.st>
+ #
+ # This file is free software; you can redistribute it and/or modify it
+ # under the terms of the GNU General Public License as published by
+@@ -98,7 +99,27 @@
+ s390*-*-linux*)
+ TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb"
+ ;;
+- *86-*-freebsd*)
++ *86-*-freebsd* | x86_64-*-freebsd*)
++ TOOLS_TARGET_PAIRS="\
++ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
++ indepsw.adb<indepsw-gnu.adb"
++ ;;
++ *86-*-dragonfly* | x86_64-*-dragonfly*)
++ TOOLS_TARGET_PAIRS="\
++ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
++ indepsw.adb<indepsw-gnu.adb"
++ ;;
++ *86-*-openbsd* | x86_64-*-openbsd*)
++ TOOLS_TARGET_PAIRS="\
++ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
++ indepsw.adb<indepsw-gnu.adb"
++ ;;
++ *86-*-netbsdelf* | x86_64-*-netbsd*)
++ TOOLS_TARGET_PAIRS="\
++ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
++ indepsw.adb<indepsw-gnu.adb"
++ ;;
++ arm*-android-eabi)
+ TOOLS_TARGET_PAIRS="\
+ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
+ indepsw.adb<indepsw-gnu.adb"
diff --git a/lang/gnat-aux/files/diff-ada-testsuite b/lang/gnat-aux/files/diff-ada-testsuite
new file mode 100644
index 00000000000..e6b3c87938c
--- /dev/null
+++ b/lang/gnat-aux/files/diff-ada-testsuite
@@ -0,0 +1,190 @@
+--- 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
+@@ -35,6 +35,14 @@
+ echo "$@" >> $dir/acats.log
+ }
+
++inform () {
++ printf "%04d %7s" $1 $2
++}
++
++disinform () {
++ printf "\r"
++}
++
+ dir=`${PWDCMD-pwd}`
+
+ if [ "$testdir" = "" ]; then
+@@ -197,6 +205,18 @@
+ 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
+
+ for chapter in $chapters; do
+ display Running chapter $chapter ...
+@@ -207,10 +227,6 @@
+ 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`
+ glob_countn=`expr $glob_countn + $countn`
+ counti=0
+@@ -233,10 +249,13 @@
+ if [ $? -eq 0 ]; then
+ extraflags="$extraflags -gnat95"
+ 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
+@@ -260,6 +279,7 @@
+ cxh1001) extraflags="-a -f"; echo "pragma Normalize_Scalars;" > gnat.adc
+ esac
+ if [ "$main" = "" ]; then
++ disinform
+ display "FAIL: $i"
+ failed="${failed}${i} "
+ clean_dir
+@@ -268,6 +288,7 @@
+
+ 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
+@@ -282,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
+--- 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 { xfail arm*-*-* } }
++-- { dg-do run { xfail arm*-*-* *-*-openbsd* } }
+ -- { dg-options "-O2" }
+
+ -- This is an optimization test and its failure is only a missed optimization.
+--- /dev/null
++++ gcc/testsuite/gnat.dg/unchecked_convert5.txt
+@@ -0,0 +1,9 @@
++The test "unchecked_converted5.adb" was deleted because it only
++supportes the following targets:
++
++ hppa*
++ sparc*
++ powerpc*
++
++Currently I'm not working with any of those, so until that changes, the
++test will be absent to lower the "unsupported" test number.
+--- /dev/null
++++ gcc/testsuite/gnat.dg/unchecked_convert6.txt
+@@ -0,0 +1,9 @@
++The test "unchecked_converted6.adb" was deleted because it only
++supportes the following targets:
++
++ hppa*
++ sparc*
++ powerpc*
++
++Currently I'm not working with any of those, so until that changes, the
++test will be absent to lower the "unsupported" test number.
+--- gcc/testsuite/gnat.dg/unchecked_convert5.adb
++++ /dev/null
+@@ -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
++++ /dev/null
+@@ -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/gnat-aux/files/diff-core b/lang/gnat-aux/files/diff-core
new file mode 100644
index 00000000000..d6392393d3c
--- /dev/null
+++ b/lang/gnat-aux/files/diff-core
@@ -0,0 +1,1903 @@
+--- gcc/config.gcc.orig
++++ gcc/config.gcc
+@@ -529,7 +529,7 @@
+ extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o"
+ fbsd_major=`echo ${target} | sed -e 's/.*freebsd//g' | sed -e 's/\..*//g'`
+ tm_defines="${tm_defines} FBSD_MAJOR=${fbsd_major}"
+- tmake_file="t-slibgcc-elf-ver t-freebsd"
++ tmake_file="t-slibgcc-elf-ver t-libc-ok t-libgcc-pic t-exceptions"
+ case ${enable_threads} in
+ no)
+ fbsd_tm_file="${fbsd_tm_file} freebsd-nthr.h"
+@@ -545,6 +545,9 @@
+ ;;
+ esac
+ ;;
++ gnat | single)
++ # Let these non-posix thread selections fall through if requested
++ ;;
+ *)
+ echo 'Unknown thread configuration for FreeBSD'
+ exit 1
+@@ -561,6 +564,39 @@
+ # need_64bit_hwint=yes # system compiler has this for all arch!
+ use_gcc_stdint=wrap
+ ;;
++*-*-dragonfly*)
++ gas=yes
++ gnu_ld=yes
++ extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o"
++ tmake_file="t-slibgcc-elf-ver t-libc-ok t-libgcc-pic t-exceptions"
++ case ${enable_threads} in
++ "" | yes | posix)
++ thread_file='posix'
++ ;;
++ no | gnat | single)
++ # Let these non-posix thread selections fall through if requested
++ ;;
++ *)
++ echo 'Unknown thread configuration for DragonFly BSD'
++ exit 1
++ ;;
++ esac
++ extra_options="$extra_options rpath.opt dragonfly.opt"
++ default_use_cxa_atexit=yes
++ ;;
++*-android-eabi*)
++ extra_parts="crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o"
++ gas=yes
++ gnu_ld=yes
++ case ${enable_threads} in
++ "" | yes | posix) thread_file='posix' ;;
++ esac
++ tm_defines="$tm_defines DEFAULT_LIBC=LIBC_BIONIC ANDROID_DEFAULT=1"
++ extra_options="$extra_options linux.opt linux-android.opt"
++ default_use_cxa_atexit=yes
++ use_gcc_tgmath=no
++ use_gcc_stdint=wrap
++ ;;
+ *-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu | *-*-gnu* | *-*-kopensolaris*-gnu)
+ extra_options="$extra_options gnu-user.opt"
+ extra_parts="crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o"
+@@ -618,9 +654,11 @@
+ esac
+ ;;
+ *-*-netbsd*)
+- tmake_file="t-slibgcc-elf-ver t-libc-ok t-netbsd t-libgcc-pic"
++ tmake_file="t-slibgcc-elf-ver t-libc-ok t-libgcc-pic t-exceptions"
+ gas=yes
+ gnu_ld=yes
++ nbsd_major=`echo ${target} | sed -e 's/.*netbsd\(elf\)\{0,1\}//g' | sed -e 's/\..*//g'`
++ tm_defines="${tm_defines} NBSD_MAJOR=${nbsd_major}"
+
+ # NetBSD 2.0 and later get POSIX threads enabled by default.
+ # Allow them to be explicitly enabled on any other version.
+@@ -657,12 +695,22 @@
+ esac
+ ;;
+ *-*-openbsd*)
++ gas=yes
++ gnu_ld=yes
++ # Do NOT add crt*.o extra parts!
+ tmake_file="t-libc-ok t-openbsd t-libgcc-pic"
+ case ${enable_threads} in
+- yes)
++ "" | yes | posix)
+ thread_file='posix'
+ tmake_file="${tmake_file} t-openbsd-thread"
+ ;;
++ no | gnat | single)
++ # Let these non-posix thread selections fall through
++ ;;
++ *)
++ echo 'Unknown thread configuration for OpenBSD'
++ exit 1
++ ;;
+ esac
+ case ${target} in
+ *-*-openbsd2.*|*-*-openbsd3.[012])
+@@ -793,6 +841,24 @@
+ tm_file="dbxelf.h elfos.h newlib-stdint.h ${tm_file}"
+ extra_parts="crtinit.o crtfini.o"
+ ;;
++arm*-android-eabi*)
++ case $target in
++ arm*b-*)
++ tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
++ ;;
++ esac
++ tm_file="dbxelf.h elfos.h gnu-user.h linux.h linux-android.h glibc-stdint.h"
++ tm_file="$tm_file arm/elf.h arm/linux-gas.h arm/linux-elf.h arm/bpabi.h arm/linux-eabi.h"
++ tm_file="$tm_file ../../libgcc/config/arm/bpabi-lib.h arm/aout.h arm/arm.h"
++
++ tmake_file="t-slibgcc-elf-ver t-linux arm/t-arm"
++ tmake_file="$tmake_file arm/t-arm-elf arm/t-bpabi arm/t-linux-eabi t-slibgcc-libgcc"
++ tmake_file="$tmake_file arm/t-linux-androideabi arm/t-arm-softfp soft-fp/t-softfp"
++
++ # The BPABI long long divmod functions return a 128-bit value in registers r0-r3.
++ # Correctly modeling that requires the use of TImode.
++ need_64bit_hwint=yes
++ ;;
+ arm-wrs-vxworks)
+ tm_file="elfos.h arm/elf.h arm/aout.h ${tm_file} vx-common.h vxworks.h arm/vxworks.h"
+ extra_options="${extra_options} arm/vxworks.opt"
+@@ -1219,9 +1285,18 @@
+ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h ${fbsd_tm_file} i386/x86-64.h i386/freebsd.h i386/freebsd64.h"
+ tmake_file="${tmake_file} i386/t-crtstuff"
+ ;;
++i[34567]86-*-dragonfly*)
++ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h dragonfly.h dragonfly-stdint.h i386/dragonfly.h"
++ tmake_file="${tmake_file} i386/t-crtstuff"
++ ;;
++x86_64-*-dragonfly*)
++ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h dragonfly.h dragonfly-stdint.h i386/x86-64.h i386/dragonfly.h i386/dragonfly64.h"
++ tmake_file="${tmake_file} i386/t-crtstuff"
++ ;;
+ i[34567]86-*-netbsdelf*)
+- tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h netbsd.h netbsd-elf.h i386/netbsd-elf.h"
++ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h netbsd.h netbsd-elf.h i386/netbsd-elf.h netbsd-stdint.h"
+ extra_options="${extra_options} netbsd.opt netbsd-elf.opt"
++ tmake_file="${tmake_file} i386/t-crtstuff"
+ ;;
+ i[34567]86-*-netbsd*)
+ tm_file="${tm_file} i386/unix.h i386/bsd.h i386/gas.h i386/gstabs.h netbsd.h netbsd-aout.h i386/netbsd.h"
+@@ -1231,7 +1306,7 @@
+ use_collect2=yes
+ ;;
+ x86_64-*-netbsd*)
+- tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h netbsd.h netbsd-elf.h i386/x86-64.h i386/netbsd64.h"
++ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h netbsd.h netbsd-elf.h i386/x86-64.h i386/netbsd64.h netbsd-stdint.h"
+ extra_options="${extra_options} netbsd.opt netbsd-elf.opt"
+ tmake_file="${tmake_file} i386/t-crtstuff"
+ ;;
+@@ -1247,8 +1322,12 @@
+ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h"
+ tm_file="${tm_file} openbsd.h openbsd-stdint.h openbsd-libpthread.h i386/openbsdelf.h"
+ extra_options="${extra_options} openbsd.opt"
+- gas=yes
+- gnu_ld=yes
++ ;;
++x86_64-*-openbsd*)
++ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h"
++ tm_file="${tm_file} openbsd.h openbsd-libpthread.h i386/x86-64.h i386/openbsd64.h exec-stack.h"
++ extra_options="${extra_options} openbsd.opt"
++ tmake_file="${tmake_file} i386/t-crtstuff"
+ ;;
+ i[34567]86-*-linux* | i[34567]86-*-kfreebsd*-gnu | i[34567]86-*-knetbsd*-gnu | i[34567]86-*-gnu* | i[34567]86-*-kopensolaris*-gnu)
+ # Intel 80386's running GNU/*
+@@ -3673,6 +3752,11 @@
+ i[34567]86-*-freebsd* | x86_64-*-freebsd*)
+ tmake_file="${tmake_file} i386/t-fprules-softfp soft-fp/t-softfp"
+ ;;
++ i[34567]86-*-dragonfly* | x86_64-*-dragonfly*)
++ tmake_file="${tmake_file} i386/t-fprules-softfp soft-fp/t-softfp"
++ ;;
++ i[34567]86-*-openbsd* | x86_64-*-openbsd*)
++ ;;
+ ia64*-*-linux*)
+ tmake_file="${tmake_file} ia64/t-fprules-softfp soft-fp/t-softfp"
+ ;;
+--- gcc/crtstuff.c.orig
++++ gcc/crtstuff.c
+@@ -79,11 +79,19 @@
+ }
+ #endif
+
++#if defined(TARGET_DL_ITERATE_PHDR) && \
++ ( defined(__FreeBSD__) \
++ || defined(__OpenBSD__) \
++ || defined(__NetBSD__) \
++ || defined(__DragonFly__))
++#define BSD_DL_ITERATE_PHDR_AVAILABLE
++#endif
++
+ #if defined(OBJECT_FORMAT_ELF) \
+ && !defined(OBJECT_FORMAT_FLAT) \
+ && defined(HAVE_LD_EH_FRAME_HDR) \
+ && !defined(inhibit_libc) && !defined(CRTSTUFFT_O) \
+- && defined(__FreeBSD__) && __FreeBSD__ >= 7
++ && defined(BSD_DL_ITERATE_PHDR_AVAILABLE)
+ #include <link.h>
+ # define USE_PT_GNU_EH_FRAME
+ #endif
+--- gcc/DEV-PHASE.orig
++++ gcc/DEV-PHASE
+@@ -0,0 +1 @@
++release
+--- gcc/unwind-dw2-fde-glibc.c.orig
++++ gcc/unwind-dw2-fde-glibc.c
+@@ -53,13 +53,21 @@
+ #endif
+
+ #if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
+- && defined(__FreeBSD__) && __FreeBSD__ >= 7
++ && defined(TARGET_DL_ITERATE_PHDR) \
++ && (defined(__FreeBSD__) || defined(__DragonFly__))
+ # define ElfW __ElfN
+ # define USE_PT_GNU_EH_FRAME
+ #endif
+
+ #if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
+ && defined(TARGET_DL_ITERATE_PHDR) \
++ && (defined(__OpenBSD__) || defined(__NetBSD__))
++# define ElfW(n) Elf_##n
++# define USE_PT_GNU_EH_FRAME
++#endif
++
++#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
++ && defined(TARGET_DL_ITERATE_PHDR) \
+ && defined(__sun__) && defined(__svr4__)
+ # define USE_PT_GNU_EH_FRAME
+ #endif
+--- /dev/null
++++ gcc/config/dragonfly-stdint.h
+@@ -0,0 +1,56 @@
++/* Definitions for <stdint.h> types for DragonFly systems.
++ Copyright (C) 2009 Free Software Foundation, Inc.
++ Contributed by Gerald Pfeifer <gerald@pfeifer.com>.
++
++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.
++
++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/>. */
++
++#define SIG_ATOMIC_TYPE "int"
++
++#define INT8_TYPE "signed char"
++#define INT16_TYPE "short int"
++#define INT32_TYPE "int"
++#define INT64_TYPE (LONG_TYPE_SIZE == 64 ? "long int" : "long long int")
++#define UINT8_TYPE "unsigned char"
++#define UINT16_TYPE "short unsigned int"
++#define UINT32_TYPE "unsigned int"
++#define UINT64_TYPE (LONG_TYPE_SIZE == 64 ? "long unsigned int" : "long long unsigned int")
++
++#define INT_LEAST8_TYPE INT8_TYPE
++#define INT_LEAST16_TYPE INT16_TYPE
++#define INT_LEAST32_TYPE INT32_TYPE
++#define INT_LEAST64_TYPE INT64_TYPE
++#define UINT_LEAST8_TYPE UINT8_TYPE
++#define UINT_LEAST16_TYPE UINT16_TYPE
++#define UINT_LEAST32_TYPE UINT32_TYPE
++#define UINT_LEAST64_TYPE UINT64_TYPE
++
++#define INT_FAST8_TYPE INT32_TYPE
++#define INT_FAST16_TYPE INT32_TYPE
++#define INT_FAST32_TYPE INT32_TYPE
++#define INT_FAST64_TYPE INT64_TYPE
++#define UINT_FAST8_TYPE UINT32_TYPE
++#define UINT_FAST16_TYPE UINT32_TYPE
++#define UINT_FAST32_TYPE UINT32_TYPE
++#define UINT_FAST64_TYPE UINT64_TYPE
++
++#define INTPTR_TYPE (LONG_TYPE_SIZE == 64 ? INT64_TYPE : INT32_TYPE)
++#define UINTPTR_TYPE (LONG_TYPE_SIZE == 64 ? UINT64_TYPE : UINT32_TYPE)
+--- /dev/null
++++ gcc/config/dragonfly.h
+@@ -0,0 +1,141 @@
++/* Base configuration file for all DragonFly targets.
++ Copyright (C) 1999, 2000, 2001, 2007, 2008 Free Software Foundation, Inc.
++ Copyright (C) 2010-2012 John R. Marino <www.dragonlace.net>
++
++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 DragonFly configuration.
++ All DragonFly architectures should include this file, which will specify
++ their commonalities.
++
++ Adapted from gcc/config/freebsd.h by
++ Joerg Sonnenberger <joerg@bec.de>
++
++ Adapted from gcc/config/i386/freebsd-elf.h by
++ David O'Brien <obrien@FreeBSD.org>.
++ Further work by David O'Brien <obrien@FreeBSD.org> and
++ Loren J. Rittle <ljrittle@acm.org>. */
++
++/* JRM: 15 Nov 2010
++ SWITCH_TAKES_ARG & WORD_SWITCH_TAKES_ARG removed due to poisoning.
++ http://gcc.gnu.org/ml/gcc-patches/2010-10/msg02102.html
++ http://gcc.gnu.org/ml/gcc-patches/2010-10/msg02373.html */
++
++#undef TARGET_OS_CPP_BUILTINS
++#define TARGET_OS_CPP_BUILTINS() \
++ do \
++ { \
++ builtin_define_std ("unix"); \
++ builtin_define ("__DragonFly__"); \
++ builtin_assert ("system=unix"); \
++ builtin_assert ("system=bsd"); \
++ builtin_assert ("system=DragonFly"); \
++ } \
++ while (0)
++
++#undef CPP_SPEC
++#define CPP_SPEC \
++ "%(cpp_cpu) %(cpp_arch) %{posix:-D_POSIX_SOURCE}"
++
++#undef STARTFILE_SPEC
++#define STARTFILE_SPEC \
++ "%{!shared: \
++ %{pg:gcrt1.o%s} \
++ %{!pg: \
++ %{p:gcrt1.o%s} \
++ %{!p: \
++ %{profile: gcrt1.o%s} \
++ %{!profile: \
++ %{pie: Scrt1.o%s;:crt1.o%s}}}}} \
++ crti.o%s \
++ %{shared|pie:crtbeginS.o%s;:crtbegin.o%s}"
++
++#undef ENDFILE_SPEC
++#define ENDFILE_SPEC \
++ "%{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s"
++
++#undef LIB_SPEC
++#define LIB_SPEC \
++ "%{pthread:-lpthread} -lc"
++
++/* Provide a LINK_SPEC appropriate for DragonFly. Here we provide support
++ for the special GCC options -static and -shared, which allow us to
++ link things in one of these three modes by applying the appropriate
++ combinations of options at link-time.
++
++ When the -shared link option is used a final link is not being
++ done. */
++
++#define DFBSD_LINK_SPEC \
++ "%{p:%nconsider using '-pg' instead of '-p' with gprof(1)} \
++ %{v:-V} \
++ %{assert*} %{R*} %{rpath*} %{defsym*} \
++ %{shared:-Bshareable %{h*} %{soname*}} \
++ %{!shared: \
++ %{!static: \
++ %{rdynamic:-export-dynamic} \
++ -dynamic-linker %(dfbsd_dynamic_linker) } \
++ %{static:-Bstatic}} \
++ %{symbolic:-Bsymbolic}"
++
++#undef LINK_SPEC
++#define LINK_SPEC DFBSD_LINK_SPEC
++
++#define DFBSD_DYNAMIC_LINKER \
++ "/usr/libexec/ld-elf.so.2"
++
++#if defined(HAVE_LD_EH_FRAME_HDR)
++#define LINK_EH_SPEC \
++ "%{!static:--eh-frame-hdr}"
++#endif
++
++/* Use --as-needed -lgcc_s for eh support. */
++#ifdef HAVE_LD_AS_NEEDED
++#define USE_LD_AS_NEEDED 1
++#endif
++
++/************************[ Target stuff ]***********************************/
++
++/* All DragonFly Architectures support the ELF object file format. */
++#undef OBJECT_FORMAT_ELF
++#define OBJECT_FORMAT_ELF
++
++/* Don't assume anything about the header files. */
++#undef NO_IMPLICIT_EXTERN_C
++#define NO_IMPLICIT_EXTERN_C 1
++
++/* Follow DragonFly's standard headers (<machine/stdint.h>, etc...). */
++
++#undef WCHAR_TYPE
++#define WCHAR_TYPE "int"
++
++#undef WINT_TYPE
++#define WINT_TYPE "int"
++
++#define MATH_LIBRARY_PROFILE "m_p"
++
++/* Code generation parameters. */
++
++/* Use periods rather than dollar signs in special g++ assembler names.
++ This ensures the configuration knows our system correctly so we can link
++ with libraries compiled with the native cc. */
++#undef NO_DOLLAR_IN_LABEL
++
++/* Used by libgcc2.c. We support file locking with fcntl / F_SETLKW.
++ This enables the test coverage code to use file locking when exiting a
++ program, which avoids race conditions if the program has forked. */
++#define TARGET_POSIX_IO
+--- /dev/null
++++ gcc/config/dragonfly.opt
+@@ -0,0 +1,59 @@
++; DragonFlyBSD options.
++
++; Copyright (C) 2010
++; 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/>.
++
++; See the GCC internals manual (options.texi) for a description of this file's format.
++
++; Please try to keep this file in ASCII collating order.
++
++assert
++Driver Separate
++
++assert=
++Driver JoinedOrMissing
++
++defsym
++Driver Separate
++
++defsym=
++Driver JoinedOrMissing
++
++profile
++Driver
++
++pthread
++Driver
++
++rpath-link
++Driver Separate
++
++rpath-link=
++Driver JoinedOrMissing
++
++rpath=
++Driver JoinedOrMissing
++
++soname
++Driver Separate
++
++soname=
++Driver JoinedOrMissing
++
++; This comment is to ensure we retain the blank line above.
+--- /dev/null
++++ gcc/config/exec-stack.h
+@@ -0,0 +1,41 @@
++/* Enable stack execute around trampoline address.
++ Copyright (C) 2002 Free Software Foundation, Inc.
++
++This file is part of GNU CC.
++
++GNU CC 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 2, or (at your option)
++any later version.
++
++GNU CC 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 GNU CC; see the file COPYING. If not, write to
++the Free Software Foundation, 59 Temple Place - Suite 330,
++Boston, MA 02111-1307, USA. */
++
++#undef FINALIZE_TRAMPOLINE
++#define FINALIZE_TRAMPOLINE(TRAMP) \
++ emit_library_call(gen_rtx_SYMBOL_REF (Pmode, "__enable_execute_stack"), \
++ 0, VOIDmode, 1, memory_address (SImode, (TRAMP)), Pmode)
++
++#undef TRANSFER_FROM_TRAMPOLINE
++#define TRANSFER_FROM_TRAMPOLINE \
++extern void __enable_execute_stack (void *); \
++void \
++__enable_execute_stack (addr) \
++ void *addr; \
++{ \
++ long size = getpagesize (); \
++ long mask = ~(size-1); \
++ char *page = (char *) (((long) addr) & mask); \
++ char *end = (char *) ((((long) (addr + TRAMPOLINE_SIZE)) & mask) + size); \
++ \
++ if (mprotect (page, end - page, PROT_READ | PROT_WRITE | PROT_EXEC) < 0) \
++ perror ("mprotect of trampoline code"); \
++}
++
+--- /dev/null
++++ gcc/config/netbsd-stdint.h
+@@ -0,0 +1,56 @@
++/* Definitions for <stdint.h> types for NetBSD systems.
++ Copyright (C) 2009 Free Software Foundation, Inc.
++ Contributed by Gerald Pfeifer <gerald@pfeifer.com>.
++
++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.
++
++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/>. */
++
++#define SIG_ATOMIC_TYPE "int"
++
++#define INT8_TYPE "signed char"
++#define INT16_TYPE "short int"
++#define INT32_TYPE "int"
++#define INT64_TYPE (LONG_TYPE_SIZE == 64 ? "long int" : "long long int")
++#define UINT8_TYPE "unsigned char"
++#define UINT16_TYPE "short unsigned int"
++#define UINT32_TYPE "unsigned int"
++#define UINT64_TYPE (LONG_TYPE_SIZE == 64 ? "long unsigned int" : "long long unsigned int")
++
++#define INT_LEAST8_TYPE INT8_TYPE
++#define INT_LEAST16_TYPE INT16_TYPE
++#define INT_LEAST32_TYPE INT32_TYPE
++#define INT_LEAST64_TYPE INT64_TYPE
++#define UINT_LEAST8_TYPE UINT8_TYPE
++#define UINT_LEAST16_TYPE UINT16_TYPE
++#define UINT_LEAST32_TYPE UINT32_TYPE
++#define UINT_LEAST64_TYPE UINT64_TYPE
++
++#define INT_FAST8_TYPE INT32_TYPE
++#define INT_FAST16_TYPE INT32_TYPE
++#define INT_FAST32_TYPE INT32_TYPE
++#define INT_FAST64_TYPE INT64_TYPE
++#define UINT_FAST8_TYPE UINT32_TYPE
++#define UINT_FAST16_TYPE UINT32_TYPE
++#define UINT_FAST32_TYPE UINT32_TYPE
++#define UINT_FAST64_TYPE UINT64_TYPE
++
++#define INTPTR_TYPE (LONG_TYPE_SIZE == 64 ? INT64_TYPE : INT32_TYPE)
++#define UINTPTR_TYPE (LONG_TYPE_SIZE == 64 ? UINT64_TYPE : UINT32_TYPE)
+--- gcc/config/netbsd.h.orig
++++ gcc/config/netbsd.h
+@@ -22,7 +22,7 @@
+ #define NETBSD_OS_CPP_BUILTINS_COMMON() \
+ do \
+ { \
+- builtin_define ("__NetBSD__"); \
++ builtin_define_with_int_value ("__NetBSD__", NBSD_MAJOR); \
+ builtin_define ("__unix__"); \
+ builtin_assert ("system=bsd"); \
+ builtin_assert ("system=unix"); \
+--- /dev/null
++++ gcc/config/t-exceptions
+@@ -0,0 +1,7 @@
++# Use unwind-dw2-fde-glibc
++# Required to utilize dl_iterate_phdr functionality
++
++LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde-glibc.c \
++ $(srcdir)/unwind-sjlj.c $(srcdir)/gthr-gnat.c $(srcdir)/unwind-c.c
++LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h unwind-dw2-fde.c
++
+--- gcc/config/t-openbsd-thread.orig
++++ gcc/config/t-openbsd-thread
+@@ -1,3 +1,3 @@
+ # This is currently needed to compile libgcc2 for threads support
+-TARGET_LIBGCC2_CFLAGS=-pthread
++TARGET_LIBGCC2_CFLAGS += -pthread
+
+--- /dev/null
++++ gcc/config/i386/dragonfly-unwind.h
+@@ -0,0 +1,158 @@
++/* DWARF2 EH unwinding support for DragonFly BSD: AMD x86-64 and x86.
++ Copyright (C) 2010 John Marino <draco@marino.st> */
++
++/* Do code reading to identify a signal frame, and set the frame
++ state data appropriately. See unwind-dw2.c for the structs. */
++
++#include <sys/types.h>
++#include <sys/sysctl.h>
++#include <signal.h>
++#include <sys/ucontext.h>
++#include <machine/sigframe.h>
++
++
++#define REG_NAME(reg) sf_uc.uc_mcontext.mc_## reg
++
++#ifdef __x86_64__
++#define MD_FALLBACK_FRAME_STATE_FOR x86_64_dragonfly_fallback_frame_state
++
++
++static void
++x86_64_sigtramp_range (unsigned char **start, unsigned char **end)
++{
++ unsigned long ps_strings;
++ int mib[2];
++ size_t len;
++
++ mib[0] = CTL_KERN;
++ mib[1] = KERN_PS_STRINGS;
++ len = sizeof (ps_strings);
++ sysctl (mib, 2, &ps_strings, &len, NULL, 0);
++
++ *start = (unsigned char *)ps_strings - 32;
++ *end = (unsigned char *)ps_strings;
++}
++
++
++static _Unwind_Reason_Code
++x86_64_dragonfly_fallback_frame_state
++(struct _Unwind_Context *context, _Unwind_FrameState *fs)
++{
++ unsigned char *pc = context->ra;
++ unsigned char *sigtramp_start, *sigtramp_end;
++ struct sigframe *sf;
++ long new_cfa;
++
++ x86_64_sigtramp_range(&sigtramp_start, &sigtramp_end);
++ if (pc >= sigtramp_end || pc < sigtramp_start)
++ return _URC_END_OF_STACK;
++
++ sf = (struct sigframe *) context->cfa;
++ new_cfa = sf->REG_NAME(rsp);
++ fs->regs.cfa_how = CFA_REG_OFFSET;
++ /* Register 7 is rsp */
++ fs->regs.cfa_reg = 7;
++ fs->regs.cfa_offset = new_cfa - (long) context->cfa;
++
++ /* The SVR4 register numbering macros aren't usable in libgcc. */
++ fs->regs.reg[0].how = REG_SAVED_OFFSET;
++ fs->regs.reg[0].loc.offset = (long)&sf->REG_NAME(rax) - new_cfa;
++ fs->regs.reg[1].how = REG_SAVED_OFFSET;
++ fs->regs.reg[1].loc.offset = (long)&sf->REG_NAME(rdx) - new_cfa;
++ fs->regs.reg[2].how = REG_SAVED_OFFSET;
++ fs->regs.reg[2].loc.offset = (long)&sf->REG_NAME(rcx) - new_cfa;
++ fs->regs.reg[3].how = REG_SAVED_OFFSET;
++ fs->regs.reg[3].loc.offset = (long)&sf->REG_NAME(rbx) - new_cfa;
++ fs->regs.reg[4].how = REG_SAVED_OFFSET;
++ fs->regs.reg[4].loc.offset = (long)&sf->REG_NAME(rsi) - new_cfa;
++ fs->regs.reg[5].how = REG_SAVED_OFFSET;
++ fs->regs.reg[5].loc.offset = (long)&sf->REG_NAME(rdi) - new_cfa;
++ fs->regs.reg[6].how = REG_SAVED_OFFSET;
++ fs->regs.reg[6].loc.offset = (long)&sf->REG_NAME(rbp) - new_cfa;
++ fs->regs.reg[8].how = REG_SAVED_OFFSET;
++ fs->regs.reg[8].loc.offset = (long)&sf->REG_NAME(r8) - new_cfa;
++ fs->regs.reg[9].how = REG_SAVED_OFFSET;
++ fs->regs.reg[9].loc.offset = (long)&sf->REG_NAME(r9) - new_cfa;
++ fs->regs.reg[10].how = REG_SAVED_OFFSET;
++ fs->regs.reg[10].loc.offset = (long)&sf->REG_NAME(r10) - new_cfa;
++ fs->regs.reg[11].how = REG_SAVED_OFFSET;
++ fs->regs.reg[11].loc.offset = (long)&sf->REG_NAME(r11) - new_cfa;
++ fs->regs.reg[12].how = REG_SAVED_OFFSET;
++ fs->regs.reg[12].loc.offset = (long)&sf->REG_NAME(r12) - new_cfa;
++ fs->regs.reg[13].how = REG_SAVED_OFFSET;
++ fs->regs.reg[13].loc.offset = (long)&sf->REG_NAME(r13) - new_cfa;
++ fs->regs.reg[14].how = REG_SAVED_OFFSET;
++ fs->regs.reg[14].loc.offset = (long)&sf->REG_NAME(r14) - new_cfa;
++ fs->regs.reg[15].how = REG_SAVED_OFFSET;
++ fs->regs.reg[15].loc.offset = (long)&sf->REG_NAME(r15) - new_cfa;
++ fs->regs.reg[16].how = REG_SAVED_OFFSET;
++ fs->regs.reg[16].loc.offset = (long)&sf->REG_NAME(rip) - new_cfa;
++ fs->retaddr_column = 16;
++ fs->signal_frame = 1;
++ return _URC_NO_REASON;
++}
++
++#else /* Next section is for i386 */
++
++#define MD_FALLBACK_FRAME_STATE_FOR x86_dragonfly_fallback_frame_state
++
++
++static void
++x86_sigtramp_range (unsigned char **start, unsigned char **end)
++{
++ unsigned long ps_strings;
++ int mib[2];
++ size_t len;
++
++ mib[0] = CTL_KERN;
++ mib[1] = KERN_PS_STRINGS;
++ len = sizeof (ps_strings);
++ sysctl (mib, 2, &ps_strings, &len, NULL, 0);
++
++ *start = (unsigned char *)ps_strings - 128;
++ *end = (unsigned char *)ps_strings;
++}
++
++
++static _Unwind_Reason_Code
++x86_dragonfly_fallback_frame_state
++(struct _Unwind_Context *context, _Unwind_FrameState *fs)
++{
++ unsigned char *pc = context->ra;
++ unsigned char *sigtramp_start, *sigtramp_end;
++ struct sigframe *sf;
++ long new_cfa;
++
++ x86_sigtramp_range(&sigtramp_start, &sigtramp_end);
++
++ if (pc >= sigtramp_end || pc < sigtramp_start)
++ return _URC_END_OF_STACK;
++
++ sf = (struct sigframe *) context->cfa;
++ new_cfa = sf->REG_NAME(esp);
++ fs->regs.cfa_how = CFA_REG_OFFSET;
++ fs->regs.cfa_reg = 4;
++ fs->regs.cfa_offset = new_cfa - (long) context->cfa;
++
++ /* The SVR4 register numbering macros aren't usable in libgcc. */
++ fs->regs.reg[0].how = REG_SAVED_OFFSET;
++ fs->regs.reg[0].loc.offset = (long)&sf->REG_NAME(eax) - new_cfa;
++ fs->regs.reg[3].how = REG_SAVED_OFFSET;
++ fs->regs.reg[3].loc.offset = (long)&sf->REG_NAME(ebx) - new_cfa;
++ fs->regs.reg[1].how = REG_SAVED_OFFSET;
++ fs->regs.reg[1].loc.offset = (long)&sf->REG_NAME(ecx) - new_cfa;
++ fs->regs.reg[2].how = REG_SAVED_OFFSET;
++ fs->regs.reg[2].loc.offset = (long)&sf->REG_NAME(edx) - new_cfa;
++ fs->regs.reg[6].how = REG_SAVED_OFFSET;
++ fs->regs.reg[6].loc.offset = (long)&sf->REG_NAME(esi) - new_cfa;
++ fs->regs.reg[7].how = REG_SAVED_OFFSET;
++ fs->regs.reg[7].loc.offset = (long)&sf->REG_NAME(edi) - new_cfa;
++ fs->regs.reg[5].how = REG_SAVED_OFFSET;
++ fs->regs.reg[5].loc.offset = (long)&sf->REG_NAME(ebp) - new_cfa;
++ fs->regs.reg[8].how = REG_SAVED_OFFSET;
++ fs->regs.reg[8].loc.offset = (long)&sf->REG_NAME(eip) - new_cfa;
++ fs->retaddr_column = 8;
++ fs->signal_frame = 1;
++ return _URC_NO_REASON;
++}
++#endif /* ifdef __x86_64__ */
+--- /dev/null
++++ gcc/config/i386/dragonfly.h
+@@ -0,0 +1,107 @@
++/* Definitions for Intel 386 running DragonFly with ELF format
++ Copyright (C) 1996, 2000, 2002, 2004, 2007 Free Software Foundation, Inc.
++ Contributed by Eric Youngdale.
++ Modified for stabs-in-ELF by H.J. Lu.
++ Adapted from GNU/Linux version by John Polstra.
++ Continued development by David O'Brien <obrien@freebsd.org>
++ Copyright (C) 2010, 2011 John Marino <www.dragonlace.net>
++
++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/>. */
++
++
++#define TARGET_VERSION fprintf (stderr, " (i386 DragonFly/ELF)");
++
++/* Override the default comment-starter of "/". */
++#undef ASM_COMMENT_START
++#define ASM_COMMENT_START "#"
++
++#undef ASM_APP_ON
++#define ASM_APP_ON "#APP\n"
++
++#undef ASM_APP_OFF
++#define ASM_APP_OFF "#NO_APP\n"
++
++#undef DBX_REGISTER_NUMBER
++#define DBX_REGISTER_NUMBER(n) \
++ (TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n])
++
++#undef NO_PROFILE_COUNTERS
++#define NO_PROFILE_COUNTERS 1
++
++/* Tell final.c that we don't need a label passed to mcount. */
++
++#undef MCOUNT_NAME
++#define MCOUNT_NAME ".mcount"
++
++/* Make gcc agree with <machine/ansi.h>. */
++
++#undef SIZE_TYPE
++#define SIZE_TYPE (TARGET_64BIT ? "long unsigned int" : "unsigned int")
++
++#undef PTRDIFF_TYPE
++#define PTRDIFF_TYPE (TARGET_64BIT ? "long int" : "int")
++
++#undef WCHAR_TYPE_SIZE
++#define WCHAR_TYPE_SIZE (TARGET_64BIT ? 32 : BITS_PER_WORD)
++
++#undef SUBTARGET_EXTRA_SPECS /* i386.h bogusly defines it. */
++#define SUBTARGET_EXTRA_SPECS \
++ { "dfbsd_dynamic_linker", DFBSD_DYNAMIC_LINKER }
++
++
++/* A C statement to output to the stdio stream FILE an assembler
++ command to advance the location counter to a multiple of 1<<LOG
++ bytes if it is within MAX_SKIP bytes.
++
++ This is used to align code labels according to Intel recommendations. */
++
++#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN
++#undef ASM_OUTPUT_MAX_SKIP_ALIGN
++#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE, LOG, MAX_SKIP) \
++ if ((LOG) != 0) { \
++ if ((MAX_SKIP) == 0) fprintf ((FILE), "\t.p2align %d\n", (LOG)); \
++ else fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \
++ }
++#endif
++
++/* Don't default to pcc-struct-return, we want to retain compatibility with
++ older gcc versions AND pcc-struct-return is nonreentrant.
++ (even though the SVR4 ABI for the i386 says that records and unions are
++ returned in memory). */
++
++#undef DEFAULT_PCC_STRUCT_RETURN
++#define DEFAULT_PCC_STRUCT_RETURN 0
++
++/* DragonFly sets the rounding precision of the FPU to 53 bits, but GNAT
++ resets it to full precision. */
++#undef TARGET_96_ROUND_53_LONG_DOUBLE
++#define TARGET_96_ROUND_53_LONG_DOUBLE 0
++
++/* Put all *tf routines in libgcc. */
++#undef LIBGCC2_HAS_TF_MODE
++#define LIBGCC2_HAS_TF_MODE 1
++#define LIBGCC2_TF_CEXT q
++#define TF_SIZE 113
++
++/* Define this to be nonzero if static stack checking is supported. */
++#define STACK_CHECK_STATIC_BUILTIN 1
++
++/* Support for i386 has been removed from DragonFly for several releases */
++#define SUBTARGET32_DEFAULT_CPU "i486"
++
++/* Define location of OS-specific unwind support configuration. */
++#define MD_UNWIND_SUPPORT "config/i386/dragonfly-unwind.h"
+--- /dev/null
++++ gcc/config/i386/dragonfly64.h
+@@ -0,0 +1,5 @@
++/* Definitions for AMD x86_64 running DragonFly BSD with ELF Format */
++
++#undef TARGET_VERSION
++#define TARGET_VERSION fprintf (stderr, " (x86-64 DragonFly/ELF)");
++
+--- /dev/null
++++ gcc/config/i386/freebsd-unwind.h
+@@ -0,0 +1,184 @@
++/* DWARF2 EH unwinding support for FreeBSD: AMD x86-64 and x86.
++ Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
++ Copyright (C) 2010 John Marino <draco@marino.st>
++
++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 2, or (at your option)
++any later version.
++
++In addition to the permissions in the GNU General Public License, the
++Free Software Foundation gives you unlimited permission to link the
++compiled version of this file with other programs, and to distribute
++those programs without any restriction coming from the use of this
++file. (The General Public License restrictions do apply in other
++respects; for example, they cover modification of the file, and
++distribution when not linked into another program.)
++
++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 COPYING. If not, write to
++the Free Software Foundation, 51 Franklin Street, Fifth Floor,
++Boston, MA 02110-1301, USA. */
++
++/* Do code reading to identify a signal frame, and set the frame
++ state data appropriately. See unwind-dw2.c for the structs. */
++
++#include <sys/types.h>
++#include <sys/sysctl.h>
++#include <signal.h>
++#include <sys/ucontext.h>
++#include <machine/sigframe.h>
++
++
++#define REG_NAME(reg) sf_uc.uc_mcontext.mc_## reg
++
++#ifdef __x86_64__
++#define MD_FALLBACK_FRAME_STATE_FOR x86_64_freebsd_fallback_frame_state
++
++
++static void
++x86_64_sigtramp_range (unsigned char **start, unsigned char **end)
++{
++ unsigned long ps_strings;
++ int mib[2];
++ size_t len;
++
++ mib[0] = CTL_KERN;
++ mib[1] = KERN_PS_STRINGS;
++ len = sizeof (ps_strings);
++ sysctl (mib, 2, &ps_strings, &len, NULL, 0);
++
++ *start = (unsigned char *)ps_strings - 32;
++ *end = (unsigned char *)ps_strings;
++}
++
++
++static _Unwind_Reason_Code
++x86_64_freebsd_fallback_frame_state
++(struct _Unwind_Context *context, _Unwind_FrameState *fs)
++{
++ unsigned char *pc = context->ra;
++ unsigned char *sigtramp_start, *sigtramp_end;
++ struct sigframe *sf;
++ long new_cfa;
++
++ x86_64_sigtramp_range(&sigtramp_start, &sigtramp_end);
++ if (pc >= sigtramp_end || pc < sigtramp_start)
++ return _URC_END_OF_STACK;
++
++ sf = (struct sigframe *) context->cfa;
++ new_cfa = sf->REG_NAME(rsp);
++ fs->regs.cfa_how = CFA_REG_OFFSET;
++ /* Register 7 is rsp */
++ fs->regs.cfa_reg = 7;
++ fs->regs.cfa_offset = new_cfa - (long) context->cfa;
++
++ /* The SVR4 register numbering macros aren't usable in libgcc. */
++ fs->regs.reg[0].how = REG_SAVED_OFFSET;
++ fs->regs.reg[0].loc.offset = (long)&sf->REG_NAME(rax) - new_cfa;
++ fs->regs.reg[1].how = REG_SAVED_OFFSET;
++ fs->regs.reg[1].loc.offset = (long)&sf->REG_NAME(rdx) - new_cfa;
++ fs->regs.reg[2].how = REG_SAVED_OFFSET;
++ fs->regs.reg[2].loc.offset = (long)&sf->REG_NAME(rcx) - new_cfa;
++ fs->regs.reg[3].how = REG_SAVED_OFFSET;
++ fs->regs.reg[3].loc.offset = (long)&sf->REG_NAME(rbx) - new_cfa;
++ fs->regs.reg[4].how = REG_SAVED_OFFSET;
++ fs->regs.reg[4].loc.offset = (long)&sf->REG_NAME(rsi) - new_cfa;
++ fs->regs.reg[5].how = REG_SAVED_OFFSET;
++ fs->regs.reg[5].loc.offset = (long)&sf->REG_NAME(rdi) - new_cfa;
++ fs->regs.reg[6].how = REG_SAVED_OFFSET;
++ fs->regs.reg[6].loc.offset = (long)&sf->REG_NAME(rbp) - new_cfa;
++ fs->regs.reg[8].how = REG_SAVED_OFFSET;
++ fs->regs.reg[8].loc.offset = (long)&sf->REG_NAME(r8) - new_cfa;
++ fs->regs.reg[9].how = REG_SAVED_OFFSET;
++ fs->regs.reg[9].loc.offset = (long)&sf->REG_NAME(r9) - new_cfa;
++ fs->regs.reg[10].how = REG_SAVED_OFFSET;
++ fs->regs.reg[10].loc.offset = (long)&sf->REG_NAME(r10) - new_cfa;
++ fs->regs.reg[11].how = REG_SAVED_OFFSET;
++ fs->regs.reg[11].loc.offset = (long)&sf->REG_NAME(r11) - new_cfa;
++ fs->regs.reg[12].how = REG_SAVED_OFFSET;
++ fs->regs.reg[12].loc.offset = (long)&sf->REG_NAME(r12) - new_cfa;
++ fs->regs.reg[13].how = REG_SAVED_OFFSET;
++ fs->regs.reg[13].loc.offset = (long)&sf->REG_NAME(r13) - new_cfa;
++ fs->regs.reg[14].how = REG_SAVED_OFFSET;
++ fs->regs.reg[14].loc.offset = (long)&sf->REG_NAME(r14) - new_cfa;
++ fs->regs.reg[15].how = REG_SAVED_OFFSET;
++ fs->regs.reg[15].loc.offset = (long)&sf->REG_NAME(r15) - new_cfa;
++ fs->regs.reg[16].how = REG_SAVED_OFFSET;
++ fs->regs.reg[16].loc.offset = (long)&sf->REG_NAME(rip) - new_cfa;
++ fs->retaddr_column = 16;
++ fs->signal_frame = 1;
++ return _URC_NO_REASON;
++}
++
++#else /* Next section is for i386 */
++
++#define MD_FALLBACK_FRAME_STATE_FOR x86_freebsd_fallback_frame_state
++
++
++static void
++x86_sigtramp_range (unsigned char **start, unsigned char **end)
++{
++ unsigned long ps_strings;
++ int mib[2];
++ size_t len;
++
++ mib[0] = CTL_KERN;
++ mib[1] = KERN_PS_STRINGS;
++ len = sizeof (ps_strings);
++ sysctl (mib, 2, &ps_strings, &len, NULL, 0);
++
++ *start = (unsigned char *)ps_strings - 128;
++ *end = (unsigned char *)ps_strings;
++}
++
++
++static _Unwind_Reason_Code
++x86_freebsd_fallback_frame_state
++(struct _Unwind_Context *context, _Unwind_FrameState *fs)
++{
++ unsigned char *pc = context->ra;
++ unsigned char *sigtramp_start, *sigtramp_end;
++ struct sigframe *sf;
++ long new_cfa;
++
++ x86_sigtramp_range(&sigtramp_start, &sigtramp_end);
++
++ if (pc >= sigtramp_end || pc < sigtramp_start)
++ return _URC_END_OF_STACK;
++
++ sf = (struct sigframe *) context->cfa;
++ new_cfa = sf->REG_NAME(esp);
++ fs->regs.cfa_how = CFA_REG_OFFSET;
++ fs->regs.cfa_reg = 4;
++ fs->regs.cfa_offset = new_cfa - (long) context->cfa;
++
++ /* The SVR4 register numbering macros aren't usable in libgcc. */
++ fs->regs.reg[0].how = REG_SAVED_OFFSET;
++ fs->regs.reg[0].loc.offset = (long)&sf->REG_NAME(eax) - new_cfa;
++ fs->regs.reg[3].how = REG_SAVED_OFFSET;
++ fs->regs.reg[3].loc.offset = (long)&sf->REG_NAME(ebx) - new_cfa;
++ fs->regs.reg[1].how = REG_SAVED_OFFSET;
++ fs->regs.reg[1].loc.offset = (long)&sf->REG_NAME(ecx) - new_cfa;
++ fs->regs.reg[2].how = REG_SAVED_OFFSET;
++ fs->regs.reg[2].loc.offset = (long)&sf->REG_NAME(edx) - new_cfa;
++ fs->regs.reg[6].how = REG_SAVED_OFFSET;
++ fs->regs.reg[6].loc.offset = (long)&sf->REG_NAME(esi) - new_cfa;
++ fs->regs.reg[7].how = REG_SAVED_OFFSET;
++ fs->regs.reg[7].loc.offset = (long)&sf->REG_NAME(edi) - new_cfa;
++ fs->regs.reg[5].how = REG_SAVED_OFFSET;
++ fs->regs.reg[5].loc.offset = (long)&sf->REG_NAME(ebp) - new_cfa;
++ fs->regs.reg[8].how = REG_SAVED_OFFSET;
++ fs->regs.reg[8].loc.offset = (long)&sf->REG_NAME(eip) - new_cfa;
++ fs->retaddr_column = 8;
++ fs->signal_frame = 1;
++ return _URC_NO_REASON;
++}
++#endif /* ifdef __x86_64__ */
+--- gcc/config/i386/freebsd.h.orig
++++ gcc/config/i386/freebsd.h
+@@ -5,6 +5,7 @@
+ Modified for stabs-in-ELF by H.J. Lu.
+ Adapted from GNU/Linux version by John Polstra.
+ Continued development by David O'Brien <obrien@freebsd.org>
++ Copyright (C) 2010, 2011 John Marino <www.dragonlace.net>
+
+ This file is part of GCC.
+
+@@ -51,22 +52,22 @@
+
+ #undef SIZE_TYPE
+ #define SIZE_TYPE (TARGET_64BIT ? "long unsigned int" : "unsigned int")
+-
++
+ #undef PTRDIFF_TYPE
+ #define PTRDIFF_TYPE (TARGET_64BIT ? "long int" : "int")
+-
++
+ #undef WCHAR_TYPE_SIZE
+ #define WCHAR_TYPE_SIZE (TARGET_64BIT ? 32 : BITS_PER_WORD)
+
+ #undef SUBTARGET_EXTRA_SPECS /* i386.h bogusly defines it. */
+ #define SUBTARGET_EXTRA_SPECS \
+ { "fbsd_dynamic_linker", FBSD_DYNAMIC_LINKER }
+-
++
+ /* Provide a STARTFILE_SPEC appropriate for FreeBSD. Here we add
+- the magical crtbegin.o file (see crtstuff.c) which provides part
+- of the support for getting C++ file-scope static object constructed
++ the magical crtbegin.o file (see crtstuff.c) which provides part
++ of the support for getting C++ file-scope static object constructed
+ before entering `main'. */
+-
++
+ #undef STARTFILE_SPEC
+ #define STARTFILE_SPEC \
+ "%{!shared: \
+@@ -76,9 +77,9 @@
+ crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}"
+
+ /* Provide a ENDFILE_SPEC appropriate for FreeBSD. Here we tack on
+- the magical crtend.o file (see crtstuff.c) which provides part of
+- the support for getting C++ file-scope static object constructed
+- before entering `main', followed by a normal "finalizer" file,
++ the magical crtend.o file (see crtstuff.c) which provides part of
++ the support for getting C++ file-scope static object constructed
++ before entering `main', followed by a normal "finalizer" file,
+ `crtn.o'. */
+
+ #undef ENDFILE_SPEC
+@@ -129,10 +130,10 @@
+ #undef DEFAULT_PCC_STRUCT_RETURN
+ #define DEFAULT_PCC_STRUCT_RETURN 0
+
+-/* FreeBSD sets the rounding precision of the FPU to 53 bits. Let the
+- compiler get the contents of <float.h> and std::numeric_limits correct. */
++/* FreeBSD sets the rounding precision of the FPU to 53 bits, but GNAT
++ resets it to full precision. */
+ #undef TARGET_96_ROUND_53_LONG_DOUBLE
+-#define TARGET_96_ROUND_53_LONG_DOUBLE (!TARGET_64BIT)
++#define TARGET_96_ROUND_53_LONG_DOUBLE 0
+
+ /* Put all *tf routines in libgcc. */
+ #undef LIBGCC2_HAS_TF_MODE
+@@ -147,3 +148,39 @@
+ #if FBSD_MAJOR >= 6
+ #define SUBTARGET32_DEFAULT_CPU "i486"
+ #endif
++
++/* Define location of OS-specific unwind support configuration. */
++#define MD_UNWIND_SUPPORT "config/i386/freebsd-unwind.h"
++
++/* Through FreeBSD 8.2 at least, stack is denied execution rights by libthr
++ This only affects AMD64 since i386 ignores the nx bit (non-PAE)
++ However, it's still included in i386 because it's possible an AMD64
++ machine will be required to run a binary generated by i386 GNAT.
++ perms = PROT_READ | PROT_WRITE | PROT_EXEC;
++*/
++#define ENABLE_EXECUTE_STACK \
++extern void __enable_execute_stack (void *); \
++void \
++__enable_execute_stack (void *addr) \
++{ \
++ extern int getpagesize (void); \
++ extern int mprotect (void *, size_t, int); \
++ \
++ static int size; \
++ long mask; \
++ char *page, *ends; \
++ long page_addr = (long) addr; \
++ long ends_addr = (long) (addr + TRAMPOLINE_SIZE); \
++ int perms = 7; \
++ \
++ if (size == 0) \
++ { \
++ size = getpagesize(); \
++ } \
++ mask = ~((long) size - 1); \
++ page = (char *) (page_addr & mask); \
++ ends = (char *) ((ends_addr & mask) + size); \
++ (void) mprotect (page, ends - page, perms); \
++}
++
++
+--- gcc/config/i386/netbsd-elf.h.orig
++++ gcc/config/i386/netbsd-elf.h
+@@ -2,6 +2,7 @@
+ for i386/ELF NetBSD systems.
+ Copyright (C) 2001, 2002, 2004, 2007 Free Software Foundation, Inc.
+ Contributed by matthew green <mrg@eterna.com.au>
++ Copyright (C) 2010, 2011 John Marino <www.dragonlace.net>
+
+ This file is part of GCC.
+
+@@ -39,6 +40,7 @@
+
+ #undef LINK_SPEC
+ #define LINK_SPEC NETBSD_LINK_SPEC_ELF
++#define LINK_LIBGCC_SPEC "%D -R @EXEC_PREFIX@/lib"
+
+ #define NETBSD_ENTRY_POINT "__start"
+
+@@ -122,3 +124,14 @@
+ #define ENABLE_EXECUTE_STACK NETBSD_ENABLE_EXECUTE_STACK
+
+ #define TARGET_VERSION fprintf (stderr, " (NetBSD/i386 ELF)");
++
++/* ADDED FOR GNAT AUX SUPPORT */
++/* Define this to be nonzero if static stack checking is supported. */
++#define STACK_CHECK_STATIC_BUILTIN 1
++
++/* Define location of OS-specific unwind support configuration. */
++#define MD_UNWIND_SUPPORT "config/i386/netbsd-unwind.h"
++
++#if defined(HAVE_LD_EH_FRAME_HDR)
++#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
++#endif
+--- /dev/null
++++ gcc/config/i386/netbsd-unwind.h
+@@ -0,0 +1,169 @@
++/* DWARF2 EH unwinding support for x86 NetBSD
++ Copyright (C) 2010 John Marino (www.dragonlace.net) */
++
++/* Do code reading to identify a signal frame, and set the frame
++ state data appropriately. See unwind-dw2.c for the structs. */
++
++#include <sys/ucontext.h>
++#include <machine/frame.h>
++
++#define REG_NAME(reg) sf_uc.uc_mcontext.__gregs[_REG_## reg]
++
++#ifdef __x86_64__
++
++
++
++
++#define MD_FALLBACK_FRAME_STATE_FOR x86_64_netbsd_fallback_frame_state
++
++static _Unwind_Reason_Code
++x86_64_netbsd_fallback_frame_state
++(struct _Unwind_Context *context, _Unwind_FrameState *fs)
++{
++ /* signal_frame is sigframe_siginfo minus sf_ra handler return address */
++ struct signal_frame {
++ siginfo_t sf_si; /* actual saved siginfo */
++ ucontext_t sf_uc; /* actual saved ucontext */
++ };
++ struct signal_frame *sf;
++ long new_cfa;
++
++ /* We are looking for the following signal trampoline pattern. If we don't
++ find it, we are at the end of the stack and can't unwind.
++
++ <__sigtramp_siginfo_2+12>: mov $0xffffffffffffffff,%rdi
++ <__sigtramp_siginfo_2+19>: mov $0x1,%rax
++ <__sigtramp_siginfo_2+26>: syscall
++ */
++
++ if ( *(unsigned int *) (context->ra + 12) == 0xffc7c748
++ && *(unsigned int *) (context->ra + 16) == 0x48ffffff
++ && *(unsigned int *) (context->ra + 20) == 0x0001c0c7
++ && *(unsigned int *) (context->ra + 24) == 0x050f0000 )
++ {
++ sf = (struct signal_frame *) context->cfa;
++ new_cfa = sf->REG_NAME(RSP);
++ fs->regs.cfa_how = CFA_REG_OFFSET;
++ fs->regs.cfa_reg = 7;
++ fs->regs.cfa_offset = new_cfa - (long) context->cfa;
++ }
++ else
++ {
++ return _URC_END_OF_STACK;
++ }
++
++ /* The SVR4 register numbering macros aren't usable in libgcc. */
++ fs->regs.reg[ 0].how = REG_SAVED_OFFSET;
++ fs->regs.reg[ 0].loc.offset = (long)&sf->REG_NAME(RAX) - new_cfa;
++ fs->regs.reg[ 1].how = REG_SAVED_OFFSET;
++ fs->regs.reg[ 1].loc.offset = (long)&sf->REG_NAME(RDX) - new_cfa;
++ fs->regs.reg[ 2].how = REG_SAVED_OFFSET;
++ fs->regs.reg[ 2].loc.offset = (long)&sf->REG_NAME(RCX) - new_cfa;
++ fs->regs.reg[ 3].how = REG_SAVED_OFFSET;
++ fs->regs.reg[ 3].loc.offset = (long)&sf->REG_NAME(RBX) - new_cfa;
++ fs->regs.reg[ 4].how = REG_SAVED_OFFSET;
++ fs->regs.reg[ 4].loc.offset = (long)&sf->REG_NAME(RSI) - new_cfa;
++ fs->regs.reg[ 5].how = REG_SAVED_OFFSET;
++ fs->regs.reg[ 5].loc.offset = (long)&sf->REG_NAME(RDI) - new_cfa;
++ fs->regs.reg[ 6].how = REG_SAVED_OFFSET;
++ fs->regs.reg[ 6].loc.offset = (long)&sf->REG_NAME(RBP) - new_cfa;
++ fs->regs.reg[ 8].how = REG_SAVED_OFFSET;
++ fs->regs.reg[ 8].loc.offset = (long)&sf->REG_NAME(R8) - new_cfa;
++ fs->regs.reg[ 9].how = REG_SAVED_OFFSET;
++ fs->regs.reg[ 9].loc.offset = (long)&sf->REG_NAME(R9) - new_cfa;
++ fs->regs.reg[10].how = REG_SAVED_OFFSET;
++ fs->regs.reg[10].loc.offset = (long)&sf->REG_NAME(R10) - new_cfa;
++ fs->regs.reg[11].how = REG_SAVED_OFFSET;
++ fs->regs.reg[11].loc.offset = (long)&sf->REG_NAME(R11) - new_cfa;
++ fs->regs.reg[12].how = REG_SAVED_OFFSET;
++ fs->regs.reg[12].loc.offset = (long)&sf->REG_NAME(R12) - new_cfa;
++ fs->regs.reg[13].how = REG_SAVED_OFFSET;
++ fs->regs.reg[13].loc.offset = (long)&sf->REG_NAME(R13) - new_cfa;
++ fs->regs.reg[14].how = REG_SAVED_OFFSET;
++ fs->regs.reg[14].loc.offset = (long)&sf->REG_NAME(R14) - new_cfa;
++ fs->regs.reg[15].how = REG_SAVED_OFFSET;
++ fs->regs.reg[15].loc.offset = (long)&sf->REG_NAME(R15) - new_cfa;
++ fs->regs.reg[16].how = REG_SAVED_OFFSET;
++ fs->regs.reg[16].loc.offset = (long)&sf->REG_NAME(RIP) - new_cfa;
++ fs->retaddr_column = 16;
++ fs->signal_frame = 1;
++ return _URC_NO_REASON;
++}
++
++
++
++
++#else /* Next section is for i386 */
++
++
++
++
++#define MD_FALLBACK_FRAME_STATE_FOR x86_netbsd_fallback_frame_state
++
++static _Unwind_Reason_Code
++x86_netbsd_fallback_frame_state
++(struct _Unwind_Context *context, _Unwind_FrameState *fs)
++{
++ /* signal_frame is sigframe_siginfo minus sf_ra handler return address */
++ struct signal_frame {
++ int sf_signum; /* "signum" argument for handler" */
++ siginfo_t *sf_sip; /* "sip" argument for handler" */
++ ucontext_t *sf_ucp; /* "ucp" argument for handler" */
++ siginfo_t sf_si; /* actual saved siginfo */
++ ucontext_t sf_uc; /* actual saved ucontext */
++ };
++ struct signal_frame *sf;
++ long new_cfa;
++
++ /* We are looking for the following signal trampoline pattern. If we don't
++ find it, we are at the end of the stack and can't unwind.
++
++ <__sigtramp_siginfo_2+18>: movl $0xffffffff,0x4(%esp)
++ <__sigtramp_siginfo_2+26>: mov $0x1,%eax
++ <__sigtramp_siginfo_2+31>: int $0x80
++ */
++
++ if ( *(unsigned int *) (context->ra + 18) == 0x042444c7
++ && *(unsigned int *) (context->ra + 22) == 0xffffffff
++ && *(unsigned char *) (context->ra + 26) == 0xb8
++ && *(unsigned int *) (context->ra + 27) == 0x00000001
++ && *(unsigned short *) (context->ra + 31) == 0x80cd )
++ {
++ sf = (struct signal_frame *) context->cfa;
++ new_cfa = sf->REG_NAME(ESP);
++ fs->regs.cfa_how = CFA_REG_OFFSET;
++ fs->regs.cfa_reg = 4;
++ fs->regs.cfa_offset = new_cfa - (long) context->cfa;
++ }
++ else
++ {
++ return _URC_END_OF_STACK;
++ }
++
++ /* The SVR4 register numbering macros aren't usable in libgcc. */
++ fs->regs.reg[0].how = REG_SAVED_OFFSET;
++ fs->regs.reg[0].loc.offset = (long)&sf->REG_NAME(EAX) - new_cfa;
++ fs->regs.reg[3].how = REG_SAVED_OFFSET;
++ fs->regs.reg[3].loc.offset = (long)&sf->REG_NAME(EBX) - new_cfa;
++ fs->regs.reg[1].how = REG_SAVED_OFFSET;
++ fs->regs.reg[1].loc.offset = (long)&sf->REG_NAME(ECX) - new_cfa;
++ fs->regs.reg[2].how = REG_SAVED_OFFSET;
++ fs->regs.reg[2].loc.offset = (long)&sf->REG_NAME(EDX) - new_cfa;
++ fs->regs.reg[6].how = REG_SAVED_OFFSET;
++ fs->regs.reg[6].loc.offset = (long)&sf->REG_NAME(ESI) - new_cfa;
++ fs->regs.reg[7].how = REG_SAVED_OFFSET;
++ fs->regs.reg[7].loc.offset = (long)&sf->REG_NAME(EDI) - new_cfa;
++ fs->regs.reg[5].how = REG_SAVED_OFFSET;
++ fs->regs.reg[5].loc.offset = (long)&sf->REG_NAME(EBP) - new_cfa;
++ fs->regs.reg[8].how = REG_SAVED_OFFSET;
++ fs->regs.reg[8].loc.offset = (long)&sf->REG_NAME(EIP) - new_cfa;
++ fs->retaddr_column = 8;
++ fs->signal_frame = 1;
++ return _URC_NO_REASON;
++}
++
++
++
++
++#endif /* ifdef __x86_64__ */
++
+--- gcc/config/i386/netbsd64.h.orig
++++ gcc/config/i386/netbsd64.h
+@@ -2,6 +2,7 @@
+ for x86-64/ELF NetBSD systems.
+ Copyright (C) 2002, 2004, 2007 Free Software Foundation, Inc.
+ Contributed by Wasabi Systems, Inc.
++ Copyright (C) 2010, 2011 John Marino <www.dragonlace.net>
+
+ This file is part of GCC.
+
+@@ -70,3 +71,13 @@
+ #define ENABLE_EXECUTE_STACK NETBSD_ENABLE_EXECUTE_STACK
+
+ #define TARGET_VERSION fprintf (stderr, " (NetBSD/x86_64 ELF)");
++
++/* ADDED FOR GNAT AUX SUPPORT */
++/* Define this to be nonzero if static stack checking is supported. */
++#define STACK_CHECK_STATIC_BUILTIN 1
++
++#define MD_UNWIND_SUPPORT "config/i386/netbsd-unwind.h"
++
++#if defined(HAVE_LD_EH_FRAME_HDR)
++#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
++#endif
+--- /dev/null
++++ gcc/config/i386/openbsd-unwind32.h
+@@ -0,0 +1,77 @@
++/* DWARF2 EH unwinding support for x86 OpenBSD
++ Copyright (C) 2010 John Marino (www.dragonlace.net) */
++
++/* Do code reading to identify a signal frame, and set the frame
++ state data appropriately. See unwind-dw2.c for the structs. */
++
++#include <sys/param.h>
++#include <sys/sysctl.h>
++#include <machine/frame.h>
++/* machine/frame.h brings in sys/signal.h
++ sys/signal.h brings in machine/signal.h (sigcontext)
++ brings in sys/siginfo.h (siginfo_t) */
++
++
++#define REG_NAME(reg) sf_sc.sc_## reg
++#define MD_FALLBACK_FRAME_STATE_FOR x86_openbsd_fallback_frame_state
++
++
++static void
++x86_sigtramp_range (unsigned char **start, unsigned char **end)
++{
++ struct _ps_strings ps_strings;
++ int mib[2];
++ size_t len;
++
++ mib[0] = CTL_VM;
++ mib[1] = VM_PSSTRINGS;
++ len = sizeof (ps_strings);
++ sysctl (mib, 2, &ps_strings, &len, NULL, 0);
++
++ *start = (unsigned char *)ps_strings.val - 128;
++ *end = (unsigned char *)ps_strings.val;
++}
++
++
++static _Unwind_Reason_Code
++x86_openbsd_fallback_frame_state
++(struct _Unwind_Context *context, _Unwind_FrameState *fs)
++{
++ unsigned char *pc = context->ra;
++ unsigned char *sigtramp_start, *sigtramp_end;
++ struct sigframe *sf;
++ long new_cfa;
++
++ x86_sigtramp_range(&sigtramp_start, &sigtramp_end);
++
++ if (pc >= sigtramp_end || pc < sigtramp_start)
++ return _URC_END_OF_STACK;
++
++ sf = (struct sigframe *) context->cfa;
++ new_cfa = sf->REG_NAME(esp);
++
++ fs->regs.cfa_how = CFA_REG_OFFSET;
++ fs->regs.cfa_reg = 4;
++ fs->regs.cfa_offset = new_cfa - (long) context->cfa;
++
++ /* The SVR4 register numbering macros aren't usable in libgcc. */
++ fs->regs.reg[0].how = REG_SAVED_OFFSET;
++ fs->regs.reg[0].loc.offset = (long)&sf->REG_NAME(eax) - new_cfa;
++ fs->regs.reg[3].how = REG_SAVED_OFFSET;
++ fs->regs.reg[3].loc.offset = (long)&sf->REG_NAME(ebx) - new_cfa;
++ fs->regs.reg[1].how = REG_SAVED_OFFSET;
++ fs->regs.reg[1].loc.offset = (long)&sf->REG_NAME(ecx) - new_cfa;
++ fs->regs.reg[2].how = REG_SAVED_OFFSET;
++ fs->regs.reg[2].loc.offset = (long)&sf->REG_NAME(edx) - new_cfa;
++ fs->regs.reg[6].how = REG_SAVED_OFFSET;
++ fs->regs.reg[6].loc.offset = (long)&sf->REG_NAME(esi) - new_cfa;
++ fs->regs.reg[7].how = REG_SAVED_OFFSET;
++ fs->regs.reg[7].loc.offset = (long)&sf->REG_NAME(edi) - new_cfa;
++ fs->regs.reg[5].how = REG_SAVED_OFFSET;
++ fs->regs.reg[5].loc.offset = (long)&sf->REG_NAME(ebp) - new_cfa;
++ fs->regs.reg[8].how = REG_SAVED_OFFSET;
++ fs->regs.reg[8].loc.offset = (long)&sf->REG_NAME(eip) - new_cfa;
++ fs->retaddr_column = 8;
++ fs->signal_frame = 1;
++ return _URC_NO_REASON;
++}
+--- /dev/null
++++ gcc/config/i386/openbsd64.h
+@@ -0,0 +1,112 @@
++/* Definitions for AMD x86_64 running OpenBSD BSD with ELF Format */
++
++#undef TARGET_VERSION
++#define TARGET_VERSION fprintf (stderr, " (OpenBSD/x86-64 ELF)")
++
++/* This gets defined in tm.h->linux.h->svr4.h, and keeps us from using
++ libraries compiled with the native cc, so undef it. */
++#undef NO_DOLLAR_IN_LABEL
++
++/* Override the default comment-starter of "/". */
++#undef ASM_COMMENT_START
++#define ASM_COMMENT_START "#"
++
++/* Run-time target specifications */
++
++#define TARGET_OS_CPP_BUILTINS() \
++ do \
++ { \
++ OPENBSD_OS_CPP_BUILTINS_ELF(); \
++ if (TARGET_64BIT) \
++ OPENBSD_OS_CPP_BUILTINS_LP64(); \
++ } \
++ while (0)
++
++/* As an elf system, we need crtbegin/crtend stuff. */
++#undef STARTFILE_SPEC
++#define STARTFILE_SPEC "\
++ %{!shared: %{pg:gcrt0%O%s} %{!pg:%{p:gcrt0%O%s} %{!p:crt0%O%s}} \
++ crtbegin%O%s} %{shared:crtbeginS%O%s}"
++#undef ENDFILE_SPEC
++#define ENDFILE_SPEC "%{!shared:crtend%O%s} %{shared:crtendS%O%s}"
++
++/* Layout of source language data types. */
++
++/* This must agree with <machine/_types.h> */
++#undef SIZE_TYPE
++#define SIZE_TYPE "long unsigned int"
++
++#undef PTRDIFF_TYPE
++#define PTRDIFF_TYPE "long int"
++
++#undef WCHAR_TYPE
++#define WCHAR_TYPE "int"
++
++#undef WCHAR_TYPE_SIZE
++#define WCHAR_TYPE_SIZE 32
++
++/* Assembler format: overall framework. */
++
++#undef ASM_APP_ON
++#define ASM_APP_ON "#APP\n"
++
++#undef ASM_APP_OFF
++#define ASM_APP_OFF "#NO_APP\n"
++
++#undef SET_ASM_OP
++#define SET_ASM_OP "\t.set\t"
++
++/* The following macros were originally stolen from i386v4.h.
++ These have to be defined to get PIC code correct. */
++
++/* Assembler format: dispatch tables. */
++
++/* Assembler format: sections. */
++
++/* Stack & calling: aggregate returns. */
++
++/* Don't default to pcc-struct-return, because gcc is the only compiler, and
++ we want to retain compatibility with older gcc versions. */
++#define DEFAULT_PCC_STRUCT_RETURN 0
++
++/* Assembler format: alignment output. */
++
++/* Stack & calling: profiling. */
++
++/* OpenBSD's profiler recovers all information from the stack pointer.
++ The icky part is not here, but in machine/profile.h. */
++#undef FUNCTION_PROFILER
++#define FUNCTION_PROFILER(FILE, LABELNO) \
++ fputs (flag_pic ? "\tcall __mcount@PLT\n": "\tcall __mcount\n", FILE);
++
++/* Assembler format: exception region output. */
++
++/* Assembler format: alignment output. */
++
++/* Note that we pick up ASM_OUTPUT_MAX_SKIP_ALIGN from i386/gas.h */
++
++/* Note that we pick up ASM_OUTPUT_MI_THUNK from unix.h. */
++
++#undef LINK_SPEC
++#define LINK_SPEC \
++ "%{!shared:%{!nostdlib:%{!r*:%{!e*:-e __start}}}} \
++ %{shared:-shared} %{R*} \
++ %{static:-Bstatic} \
++ %{!static:-Bdynamic} \
++ %{assert*} \
++ %{!dynamic-linker:-dynamic-linker /usr/libexec/ld.so}"
++
++#define OBSD_HAS_CORRECT_SPECS
++
++#undef JUMP_TABLES_IN_TEXT_SECTION
++#define JUMP_TABLES_IN_TEXT_SECTION (flag_pic)
++
++/* ADDED FOR GNAT AUX SUPPORT */
++/* Define this to be nonzero if static stack checking is supported */
++#undef STACK_CHECK_STATIC_BUILTIN
++#define STACK_CHECK_STATIC_BUILTIN 1
++
++/* Ensure rounding is left to GNAT (Not required for AMD64) */
++#undef TARGET_96_ROUND_53_LONG_DOUBLE
++#define TARGET_96_ROUND_53_LONG_DOUBLE 1
++
+--- gcc/config/i386/openbsdelf.h.orig
++++ gcc/config/i386/openbsdelf.h
+@@ -1,6 +1,7 @@
+ /* Configuration for an OpenBSD i386 target.
+-
++
+ Copyright (C) 2005, 2007, 2009, 2010 Free Software Foundation, Inc.
++ Copyright (C) 2010, 2011 John Marino <www.dragonlace.net>
+
+ This file is part of GCC.
+
+@@ -82,7 +83,7 @@
+
+ /* The following macros were originally stolen from i386v4.h.
+ These have to be defined to get PIC code correct. */
+-
++
+ /* Assembler format: dispatch tables. */
+
+ /* Assembler format: sections. */
+@@ -132,3 +133,18 @@
+ -dynamic-linker /usr/libexec/ld.so"
+
+ #define OBSD_HAS_CORRECT_SPECS
++
++
++/* ADDED FOR GNAT AUX SUPPORT */
++/* Define this to be nonzero if static stack checking is supported */
++#undef STACK_CHECK_STATIC_BUILTIN
++#define STACK_CHECK_STATIC_BUILTIN 1
++
++/* Ensure rounding is left to GNAT (i386 only) */
++#undef TARGET_96_ROUND_53_LONG_DOUBLE
++#define TARGET_96_ROUND_53_LONG_DOUBLE 0
++
++/* Define location of OS-specific unwind support configuration.
++ Not required until OpenBSD changes from SJLJ to ZCX exceptions
++ When that happens, remove comments from first line and delete second line. */
++/*#define MD_UNWIND_SUPPORT "config/i386/openbsd-unwind32.h" */
+--- gcc/ginclude/stddef.h.orig
++++ gcc/ginclude/stddef.h
+@@ -1,5 +1,6 @@
+ /* Copyright (C) 1989, 1997, 1998, 1999, 2000, 2002, 2004, 2009
+ Free Software Foundation, Inc.
++ Copyright (C) 2010 John Marino <draco@marino.st>
+
+ This file is part of GCC.
+
+@@ -59,6 +60,10 @@
+ #include <sys/_types.h>
+ #endif
+
++#if defined (__DragonFly__)
++#include <sys/types.h>
++#endif
++
+ /* In 4.3bsd-net2, machine/ansi.h defines these symbols, which are
+ defined if the corresponding type is *not* defined.
+ FreeBSD-2.1 defines _MACHINE_ANSI_H_ instead of _ANSI_H_.
+@@ -136,6 +141,7 @@
+ #ifndef _BSD_PTRDIFF_T_
+ #ifndef ___int_ptrdiff_t_h
+ #ifndef _GCC_PTRDIFF_T
++#ifndef _PTRDIFF_T_DECLARED /* DragonFly BSD */
+ #define _PTRDIFF_T
+ #define _T_PTRDIFF_
+ #define _T_PTRDIFF
+@@ -144,10 +150,12 @@
+ #define _BSD_PTRDIFF_T_
+ #define ___int_ptrdiff_t_h
+ #define _GCC_PTRDIFF_T
++#define _PTRDIFF_T_DECLARED
+ #ifndef __PTRDIFF_TYPE__
+ #define __PTRDIFF_TYPE__ long int
+ #endif
+ typedef __PTRDIFF_TYPE__ ptrdiff_t;
++#endif /* _PTRDFF_T_DECLARED */
+ #endif /* _GCC_PTRDIFF_T */
+ #endif /* ___int_ptrdiff_t_h */
+ #endif /* _BSD_PTRDIFF_T_ */
+@@ -179,7 +187,7 @@
+ #ifndef _SIZE_T_DEFINED_
+ #ifndef _SIZE_T_DEFINED
+ #ifndef _BSD_SIZE_T_DEFINED_ /* Darwin */
+-#ifndef _SIZE_T_DECLARED /* FreeBSD 5 */
++#ifndef _SIZE_T_DECLARED /* FreeBSD 5, also DragonFly */
+ #ifndef ___int_size_t_h
+ #ifndef _GCC_SIZE_T
+ #ifndef _SIZET_
+@@ -196,12 +204,13 @@
+ #define _SIZE_T_DEFINED_
+ #define _SIZE_T_DEFINED
+ #define _BSD_SIZE_T_DEFINED_ /* Darwin */
+-#define _SIZE_T_DECLARED /* FreeBSD 5 */
++#define _SIZE_T_DECLARED /* FreeBSD 5, DragonFly */
+ #define ___int_size_t_h
+ #define _GCC_SIZE_T
+ #define _SIZET_
+-#if defined (__FreeBSD__) && (__FreeBSD__ >= 5)
+-/* __size_t is a typedef on FreeBSD 5!, must not trash it. */
++#if defined (__DragonFly__) || (defined (__FreeBSD__) && (__FreeBSD__ >= 5))
++/* __size_t is a typedef on FreeBSD 5!, must not trash it.
++ __size_t is also defined in <machine/stdint.h> on DragonFly BSD */
+ #else
+ #define __size_t
+ #endif
+@@ -253,7 +262,7 @@
+ #ifndef _BSD_WCHAR_T_
+ #ifndef _BSD_WCHAR_T_DEFINED_ /* Darwin */
+ #ifndef _BSD_RUNE_T_DEFINED_ /* Darwin */
+-#ifndef _WCHAR_T_DECLARED /* FreeBSD 5 */
++#ifndef _WCHAR_T_DECLARED /* FreeBSD 5, also DragonFly */
+ #ifndef _WCHAR_T_DEFINED_
+ #ifndef _WCHAR_T_DEFINED
+ #ifndef _WCHAR_T_H
+@@ -305,8 +314,10 @@
+ #endif
+ /* FreeBSD 5 can't be handled well using "traditional" logic above
+ since it no longer defines _BSD_RUNE_T_ yet still desires to export
+- rune_t in some cases... */
+-#if defined (__FreeBSD__) && (__FreeBSD__ >= 5)
++ rune_t in some cases...
++ DragonFly BSD inherited this quirk from FreeBSD 4.8.
++*/
++#if defined (__DragonFly__) || (defined (__FreeBSD__) && (__FreeBSD__ >= 5))
+ #if !defined (_ANSI_SOURCE) && !defined (_POSIX_SOURCE)
+ #if __BSD_VISIBLE
+ #ifndef _RUNE_T_DECLARED
+--- include/libiberty.h.orig
++++ include/libiberty.h
+@@ -2,6 +2,7 @@
+
+ Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+ 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
++ Copyright 2010, 2011 John Marino <http://www.dragonlace.net>
+
+ Note - certain prototypes declared in this header file are for
+ functions whoes implementation copyright does not belong to the
+@@ -102,7 +103,16 @@
+ to find the declaration so provide a fully prototyped one. If it
+ is 1, we found it so don't provide any declaration at all. */
+ #if !HAVE_DECL_BASENAME
+-#if defined (__GNU_LIBRARY__ ) || defined (__linux__) || defined (__FreeBSD__) || defined (__OpenBSD__) || defined(__NetBSD__) || defined (__CYGWIN__) || defined (__CYGWIN32__) || defined (__MINGW32__) || defined (HAVE_DECL_BASENAME)
++#if defined (__GNU_LIBRARY__) \
++ || defined (__linux__) \
++ || defined (__FreeBSD__) \
++ || defined (__OpenBSD__) \
++ || defined (__NetBSD__) \
++ || defined (__DragonFly__) \
++ || defined (__CYGWIN__) \
++ || defined (__CYGWIN32__) \
++ || defined (__MINGW32__) \
++ || defined (HAVE_DECL_BASENAME)
+ extern char *basename (const char *);
+ #else
+ /* Do not allow basename to be used if there is no prototype seen. We
+--- libgcc/config.host.orig
++++ libgcc/config.host
+@@ -1,6 +1,7 @@
+ # libgcc host-specific configuration file.
+ # Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
+ # 2008, 2009, 2010 Free Software Foundation, Inc.
++# Copyright 2010-2012 John Marino <http://www.dragonlace.net>
+
+ #This file is part of GCC.
+
+@@ -166,6 +167,8 @@
+ ;;
+ *-*-openbsd*)
+ ;;
++*-*-dragonfly*)
++ ;;
+ *-*-rtems*)
+ ;;
+ *-*-vxworks*)
+@@ -287,6 +290,14 @@
+ x86_64-*-freebsd*)
+ tmake_file="${tmake_file} i386/t-freebsd"
+ ;;
++i[34567]86-*-dragonfly*)
++ # define symbol versions (same as FreeBSD)
++ tmake_file="${tmake_file} i386/t-dragonfly"
++ ;;
++x86_64-*-dragonfly*)
++ # define symbol versions (same as FreeBSD)
++ tmake_file="${tmake_file} i386/t-dragonfly"
++ ;;
+ i[34567]86-*-netbsdelf*)
+ ;;
+ i[34567]86-*-netbsd*)
+@@ -297,6 +308,8 @@
+ ;;
+ i[34567]86-*-openbsd*)
+ ;;
++x86_64-*-openbsd*)
++ ;;
+ i[34567]86-*-linux* | i[34567]86-*-kfreebsd*-gnu | i[34567]86-*-knetbsd*-gnu | i[34567]86-*-gnu*)
+ extra_parts="$extra_parts crtprec32.o crtprec64.o crtprec80.o crtfastmath.o"
+ tmake_file="${tmake_file} i386/t-crtpc i386/t-crtfm"
+@@ -628,6 +641,9 @@
+ tmake_file="${tmake_file} t-softfp i386/${host_address}/t-fprules-softfp"
+ fi
+ ;;
++i[34567]86-*-dragonfly* | i[34567]86-*-netbsdelf*)
++ tmake_file="${tmake_file} t-softfp i386/32/t-fprules-softfp"
++ ;;
+ esac
+
+ case ${host} in
+--- /dev/null
++++ libgcc/config/i386/t-dragonfly
+@@ -0,0 +1,2 @@
++# Add support for the introduction of 128-bit long double.
++SHLIB_MAPFILES += $(srcdir)/config/i386/libgcc-bsd.ver
+--- gcc/configure.orig
++++ gcc/configure
+@@ -25843,6 +25843,20 @@
+ gcc_cv_target_dl_iterate_phdr=no
+ fi
+ ;;
++ *-*-dragonfly* | *-*-freebsd*)
++ if grep dl_iterate_phdr $target_header_dir/sys/link_elf.h > /dev/null 2>&1; then
++ gcc_cv_target_dl_iterate_phdr=yes
++ else
++ gcc_cv_target_dl_iterate_phdr=no
++ fi
++ ;;
++# *-*-netbsd* | *-*-openbsd*)
++# if grep dl_iterate_phdr $target_header_dir/link_elf.h > /dev/null 2>&1; then
++# gcc_cv_target_dl_iterate_phdr=yes
++# else
++# gcc_cv_target_dl_iterate_phdr=no
++# fi
++# ;;
+ esac
+
+ if test x$gcc_cv_target_dl_iterate_phdr = xyes; then
+--- gcc/Makefile.in.orig
++++ gcc/Makefile.in
+@@ -4322,7 +4322,7 @@
+ DESTDIR=$(@D) \
+ $(SHELL) $(srcdir)/doc/install.texi2html
+
+-MANFILES = doc/gcov.1 doc/cpp.1 doc/gcc.1 doc/gfdl.7 doc/gpl.7 doc/fsf-funding.7
++MANFILES = doc/gcov.1 doc/cpp.1 doc/gcc.1
+
+ generated-manpages: man
+
+@@ -4474,7 +4474,7 @@
+ # Install the driver last so that the window when things are
+ # broken is small.
+ install: install-common $(INSTALL_HEADERS) \
+- install-cpp install-man install-info install-@POSUB@ \
++ install-cpp install-man install-@POSUB@ \
+ install-driver install-lto-wrapper
+
+ ifeq ($(enable_plugin),yes)
+@@ -4665,10 +4665,7 @@
+ install-man: lang.install-man \
+ $(DESTDIR)$(man1dir)/$(GCC_INSTALL_NAME)$(man1ext) \
+ $(DESTDIR)$(man1dir)/$(CPP_INSTALL_NAME)$(man1ext) \
+- $(DESTDIR)$(man1dir)/$(GCOV_INSTALL_NAME)$(man1ext) \
+- $(DESTDIR)$(man7dir)/fsf-funding$(man7ext) \
+- $(DESTDIR)$(man7dir)/gfdl$(man7ext) \
+- $(DESTDIR)$(man7dir)/gpl$(man7ext)
++ $(DESTDIR)$(man1dir)/$(GCOV_INSTALL_NAME)$(man1ext)
+
+ $(DESTDIR)$(man7dir)/%$(man7ext): doc/%.7 installdirs
+ -rm -f $@
+--- configure.orig
++++ configure
+@@ -14200,7 +14200,7 @@
+ _ACEOF
+ if ac_fn_c_try_compile "$LINENO"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+-$as_echo "yes" >&6; }; stage1_cflags="$stage1_cflags -fkeep-inline-functions"
++$as_echo "yes" >&6; };
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
diff --git a/lang/gnat-aux/files/diff-cxx b/lang/gnat-aux/files/diff-cxx
new file mode 100644
index 00000000000..681373a359b
--- /dev/null
+++ b/lang/gnat-aux/files/diff-cxx
@@ -0,0 +1,917 @@
+--- libstdc++-v3/acinclude.m4.orig
++++ libstdc++-v3/acinclude.m4
+@@ -1753,7 +1753,7 @@
+ AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
+ GLIBCXX_ENABLE(clocale,auto,[[[=MODEL]]],
+ [use MODEL for target locale package],
+- [permit generic|gnu|ieee_1003.1-2001|yes|no|auto])
++ [permit generic|gnu|ieee_1003.1-2001|darwin|dragonfly|yes|no|auto])
+
+ # Deal with gettext issues. Default to not using it (=no) until we detect
+ # support for it later. Let the user turn it off via --e/d, but let that
+@@ -1780,6 +1780,9 @@
+ darwin* | freebsd*)
+ enable_clocale_flag=darwin
+ ;;
++ dragonfly*)
++ enable_clocale_flag_dragonfly
++ ;;
+ *)
+ enable_clocale_flag=generic
+ ;;
+@@ -1864,7 +1867,22 @@
+ CTIME_CC=config/locale/generic/time_members.cc
+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+ ;;
++ dragonfly)
++ AC_MSG_RESULT(darwin or freebsd)
+
++ CLOCALE_H=config/locale/generic/c_locale.h
++ CLOCALE_CC=config/locale/dragonfly/c_locale.cc
++ CCODECVT_CC=config/locale/generic/codecvt_members.cc
++ CCOLLATE_CC=config/locale/generic/collate_members.cc
++ CCTYPE_CC=config/locale/dragonfly/ctype_members.cc
++ CMESSAGES_H=config/locale/generic/messages_members.h
++ CMESSAGES_CC=config/locale/generic/messages_members.cc
++ CMONEY_CC=config/locale/generic/monetary_members.cc
++ CNUMERIC_CC=config/locale/generic/numeric_members.cc
++ CTIME_H=config/locale/generic/time_members.h
++ CTIME_CC=config/locale/generic/time_members.cc
++ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
++ ;;
+ gnu)
+ AC_MSG_RESULT(gnu)
+
+--- libstdc++-v3/configure.orig
++++ libstdc++-v3/configure
+@@ -15638,7 +15638,7 @@
+ if test "${enable_clocale+set}" = set; then :
+ enableval=$enable_clocale;
+ case "$enableval" in
+- generic|gnu|ieee_1003.1-2001|yes|no|auto) ;;
++ generic|gnu|ieee_1003.1-2001|darwin|dragonfly|yes|no|auto) ;;
+ *) as_fn_error "Unknown argument to enable/disable clocale" "$LINENO" 5 ;;
+ esac
+
+@@ -15676,6 +15676,9 @@
+ darwin* | freebsd*)
+ enable_clocale_flag=darwin
+ ;;
++ dragonfly*)
++ enable_clocale_flag=dragonfly
++ ;;
+ *)
+ enable_clocale_flag=generic
+ ;;
+@@ -15813,7 +15816,23 @@
+ CTIME_CC=config/locale/generic/time_members.cc
+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+ ;;
++ dragonfly)
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: dragonfly" >&5
++$as_echo "darwin or freebsd" >&6; }
+
++ CLOCALE_H=config/locale/generic/c_locale.h
++ CLOCALE_CC=config/locale/dragonfly/c_locale.cc
++ CCODECVT_CC=config/locale/generic/codecvt_members.cc
++ CCOLLATE_CC=config/locale/generic/collate_members.cc
++ CCTYPE_CC=config/locale/dragonfly/ctype_members.cc
++ CMESSAGES_H=config/locale/generic/messages_members.h
++ CMESSAGES_CC=config/locale/generic/messages_members.cc
++ CMONEY_CC=config/locale/generic/monetary_members.cc
++ CNUMERIC_CC=config/locale/generic/numeric_members.cc
++ CTIME_H=config/locale/generic/time_members.h
++ CTIME_CC=config/locale/generic/time_members.cc
++ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
++ ;;
+ gnu)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: gnu" >&5
+ $as_echo "gnu" >&6; }
+--- libstdc++-v3/configure.host.orig
++++ libstdc++-v3/configure.host
+@@ -233,6 +233,9 @@
+ os_include_dir="os/djgpp"
+ error_constants_dir="os/djgpp"
+ ;;
++ dragonfly*)
++ os_include_dir="os/bsd/dragonfly"
++ ;;
+ freebsd*)
+ os_include_dir="os/bsd/freebsd"
+ ;;
+--- /dev/null
++++ libstdc++-v3/config/locale/dragonfly/c_locale.cc
+@@ -0,0 +1,300 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library 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.
++
++// This library 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.
++
++// 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/>.
++
++//
++// ISO C++ 14882: 22.8 Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <cerrno> // For errno
++#include <cmath> // For isinf, finite, finitef, fabs
++#include <cstdlib> // For strof, strtold
++#include <cstring>
++#include <cstdio>
++#include <locale>
++#include <limits>
++
++#ifdef _GLIBCXX_HAVE_IEEEFP_H
++#include <ieeefp.h>
++#endif
++
++namespace std _GLIBCXX_VISIBILITY(default)
++{
++_GLIBCXX_BEGIN_NAMESPACE_VERSION
++
++ template<>
++ void
++ __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err,
++ const __c_locale&) throw()
++ {
++ // Assumes __s formatted for "C" locale.
++ char* __old = setlocale(LC_ALL, 0);
++ const size_t __len = strlen(__old) + 1;
++ char* __sav = new char[__len];
++ memcpy(__sav, __old, __len);
++ setlocale(LC_ALL, "C");
++ char* __sanity;
++ bool __overflow = false;
++
++#if !__FLT_HAS_INFINITY__
++ errno = 0;
++#endif
++
++#ifdef _GLIBCXX_HAVE_STRTOF
++ __v = strtof(__s, &__sanity);
++#else
++ double __d = strtod(__s, &__sanity);
++ __v = static_cast<float>(__d);
++#ifdef _GLIBCXX_HAVE_FINITEF
++ if (!finitef (__v))
++ __overflow = true;
++#elif defined (_GLIBCXX_HAVE_FINITE)
++ if (!finite (static_cast<double> (__v)))
++ __overflow = true;
++#elif defined (_GLIBCXX_HAVE_ISINF)
++ if (isinf (static_cast<double> (__v)))
++ __overflow = true;
++#else
++ if (fabs(__d) > numeric_limits<float>::max())
++ __overflow = true;
++#endif
++#endif // _GLIBCXX_HAVE_STRTOF
++
++ // _GLIBCXX_RESOLVE_LIB_DEFECTS
++ // 23. Num_get overflow result.
++ if (__sanity == __s || *__sanity != '\0')
++ {
++ __v = 0.0f;
++ __err = ios_base::failbit;
++ }
++ else if (__overflow
++#if __FLT_HAS_INFINITY__
++ || __v == numeric_limits<float>::infinity()
++ || __v == -numeric_limits<float>::infinity()
++#else
++ || ((__v > 1.0f || __v < -1.0f) && errno == ERANGE)
++#endif
++ )
++ {
++ if (__v > 0.0f)
++ __v = numeric_limits<float>::max();
++ else
++ __v = -numeric_limits<float>::max();
++ __err = ios_base::failbit;
++ }
++
++ setlocale(LC_ALL, __sav);
++ delete [] __sav;
++ }
++
++ template<>
++ void
++ __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err,
++ const __c_locale&) throw()
++ {
++ // Assumes __s formatted for "C" locale.
++ char* __old = setlocale(LC_ALL, 0);
++ const size_t __len = strlen(__old) + 1;
++ char* __sav = new char[__len];
++ memcpy(__sav, __old, __len);
++ setlocale(LC_ALL, "C");
++ char* __sanity;
++
++#if !__DBL_HAS_INFINITY__
++ errno = 0;
++#endif
++
++ __v = strtod(__s, &__sanity);
++
++ // _GLIBCXX_RESOLVE_LIB_DEFECTS
++ // 23. Num_get overflow result.
++ if (__sanity == __s || *__sanity != '\0')
++ {
++ __v = 0.0;
++ __err = ios_base::failbit;
++ }
++ else if (
++#if __DBL_HAS_INFINITY__
++ __v == numeric_limits<double>::infinity()
++ || __v == -numeric_limits<double>::infinity())
++#else
++ (__v > 1.0 || __v < -1.0) && errno == ERANGE)
++#endif
++ {
++ if (__v > 0.0)
++ __v = numeric_limits<double>::max();
++ else
++ __v = -numeric_limits<double>::max();
++ __err = ios_base::failbit;
++ }
++
++ setlocale(LC_ALL, __sav);
++ delete [] __sav;
++ }
++
++ template<>
++ void
++ __convert_to_v(const char* __s, long double& __v,
++ ios_base::iostate& __err, const __c_locale&) throw()
++ {
++ // Assumes __s formatted for "C" locale.
++ char* __old = setlocale(LC_ALL, 0);
++ const size_t __len = strlen(__old) + 1;
++ char* __sav = new char[__len];
++ memcpy(__sav, __old, __len);
++ setlocale(LC_ALL, "C");
++
++#if !__LDBL_HAS_INFINITY__
++ errno = 0;
++#endif
++
++#if defined(_GLIBCXX_HAVE_STRTOLD) && !defined(_GLIBCXX_HAVE_BROKEN_STRTOLD)
++ char* __sanity;
++ __v = strtold(__s, &__sanity);
++
++ // _GLIBCXX_RESOLVE_LIB_DEFECTS
++ // 23. Num_get overflow result.
++ if (__sanity == __s || *__sanity != '\0')
++#else
++ typedef char_traits<char>::int_type int_type;
++ int __p = sscanf(__s, "%Lf", &__v);
++
++ if (!__p || static_cast<int_type>(__p) == char_traits<char>::eof())
++#endif
++ {
++ __v = 0.0l;
++ __err = ios_base::failbit;
++ }
++ else if (
++#if __LDBL_HAS_INFINITY__
++ __v == numeric_limits<long double>::infinity()
++ || __v == -numeric_limits<long double>::infinity())
++#else
++ (__v > 1.0l || __v < -1.0l) && errno == ERANGE)
++#endif
++ {
++ if (__v > 0.0l)
++ __v = numeric_limits<long double>::max();
++ else
++ __v = -numeric_limits<long double>::max();
++ __err = ios_base::failbit;
++ }
++
++ setlocale(LC_ALL, __sav);
++ delete [] __sav;
++ }
++
++
++ /* DragonFly's implemenation of setlocale won't accept something like
++ "de_DE". According to nls manpage, the expected format is:
++ language[_territory][.codeset][@modifier], but it seems that both
++ the _territory and .codeset components are required.
++
++ As an attempt to correct for this, we'll tack on ".UTF-8" if
++ a period is not detected in the locale string.
++
++ There are no locales with modifiers on DragonFly so if found, they
++ will just be stripped off silently. e.g "de_DE@euro" will be reduced
++ to "de_DE". The UTF-8 default would be added after that.
++ */
++
++ void
++ locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s,
++ __c_locale)
++ {
++ const size_t size__s = (__s == NULL) ? 1 : strlen (__s);
++ const char UTF8[] = ".UTF-8";
++ char localspec[size__s + 6 + 1];
++
++ if (__s == NULL) {
++ localspec[0] = NULL;
++ } else {
++ strcpy (localspec, __s);
++ char * pch = strchr (localspec, '@');
++ if (pch != NULL)
++ *pch = 0;
++
++ if ( (strchr (__s, '.') == NULL)
++ && (strcmp (__s, "C") != 0)
++ && (strcmp (__s, "POSIX") != 0))
++ strncat (localspec, UTF8, 6);
++ }
++
++ const char * result = std::setlocale(LC_ALL, localspec);
++
++ if ((strcmp(result, "C") != 0) && (strcmp (result, localspec) != 0))
++ __throw_runtime_error(__N("locale::facet::_S_create_c_locale "
++ "name not valid"));
++ __cloc = 0;
++ }
++
++ void
++ locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
++ { __cloc = 0; }
++
++ __c_locale
++ locale::facet::_S_clone_c_locale(__c_locale&) throw()
++ { return __c_locale(); }
++
++ __c_locale
++ locale::facet::_S_lc_ctype_c_locale(__c_locale, const char*)
++ { return __c_locale(); }
++
++_GLIBCXX_END_NAMESPACE_VERSION
++} // namespace
++
++namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
++{
++_GLIBCXX_BEGIN_NAMESPACE_VERSION
++
++ const char* const category_names[6 + _GLIBCXX_NUM_CATEGORIES] =
++ {
++ "LC_CTYPE",
++ "LC_NUMERIC",
++ "LC_TIME",
++ "LC_COLLATE",
++ "LC_MONETARY",
++ "LC_MESSAGES"
++ };
++
++_GLIBCXX_END_NAMESPACE_VERSION
++} // namespace
++
++namespace std _GLIBCXX_VISIBILITY(default)
++{
++_GLIBCXX_BEGIN_NAMESPACE_VERSION
++
++ const char* const* const locale::_S_categories = __gnu_cxx::category_names;
++
++_GLIBCXX_END_NAMESPACE_VERSION
++} // namespace
++
++// XXX GLIBCXX_ABI Deprecated
++#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
++#define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \
++ extern "C" void ldbl (void) __attribute__ ((alias (#dbl)))
++_GLIBCXX_LDBL_COMPAT(_ZSt14__convert_to_vIdEvPKcRT_RSt12_Ios_IostateRKPi, _ZSt14__convert_to_vIeEvPKcRT_RSt12_Ios_IostateRKPi);
++#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
+--- /dev/null
++++ libstdc++-v3/config/locale/dragonfly/ctype_members.cc
+@@ -0,0 +1,172 @@
++// std::ctype implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library 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.
++
++// This library 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.
++
++// 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/>.
++
++//
++// ISO C++ 14882: 22.2.1.1.2 ctype virtual functions.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++#include <cstdlib>
++#include <cstring>
++#include <cstdio>
++
++namespace std _GLIBCXX_VISIBILITY(default)
++{
++ // NB: The other ctype<char> specializations are in src/locale.cc and
++ // various /config/os/* files.
++
++ ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
++ : ctype<char>(0, false, __refs)
++ {
++ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
++ {
++ this->_S_destroy_c_locale(this->_M_c_locale_ctype);
++ this->_S_create_c_locale(this->_M_c_locale_ctype, __s);
++ }
++ }
++
++ ctype_byname<char>::~ctype_byname()
++ { }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ ctype<wchar_t>::__wmask_type
++ ctype<wchar_t>::_M_convert_to_wmask(const mask /* __m */) const throw()
++ {
++ // This routine never gets called on DragonFly.
++ return 0;
++ };
++
++ wchar_t
++ ctype<wchar_t>::do_toupper(wchar_t __c) const
++ { return towupper(__c); }
++
++ const wchar_t*
++ ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const
++ {
++ while (__lo < __hi)
++ {
++ *__lo = towupper(*__lo);
++ ++__lo;
++ }
++ return __hi;
++ }
++
++ wchar_t
++ ctype<wchar_t>::do_tolower(wchar_t __c) const
++ { return towlower(__c); }
++
++ const wchar_t*
++ ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const
++ {
++ while (__lo < __hi)
++ {
++ *__lo = towlower(*__lo);
++ ++__lo;
++ }
++ return __hi;
++ }
++
++ wchar_t
++ ctype<wchar_t>::
++ do_widen(char __c) const
++ { return _M_widen[static_cast<unsigned char>(__c)]; }
++
++ const char*
++ ctype<wchar_t>::
++ do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
++ {
++ while (__lo < __hi)
++ {
++ *__dest = _M_widen[static_cast<unsigned char>(*__lo)];
++ ++__lo;
++ ++__dest;
++ }
++ return __hi;
++ }
++
++ char
++ ctype<wchar_t>::
++ do_narrow(wchar_t __wc, char __dfault) const
++ {
++ if (__wc >= 0 && __wc < 128 && _M_narrow_ok)
++ return _M_narrow[__wc];
++ const int __c = wctob(__wc);
++ return (__c == EOF ? __dfault : static_cast<char>(__c));
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault,
++ char* __dest) const
++ {
++ if (_M_narrow_ok)
++ while (__lo < __hi)
++ {
++ if (*__lo >= 0 && *__lo < 128)
++ *__dest = _M_narrow[*__lo];
++ else
++ {
++ const int __c = wctob(*__lo);
++ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
++ }
++ ++__lo;
++ ++__dest;
++ }
++ else
++ while (__lo < __hi)
++ {
++ const int __c = wctob(*__lo);
++ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
++ ++__lo;
++ ++__dest;
++ }
++ return __hi;
++ }
++
++ void
++ ctype<wchar_t>::_M_initialize_ctype() throw()
++ {
++ wint_t __i;
++ for (__i = 0; __i < 128; ++__i)
++ {
++ const int __c = wctob(__i);
++ if (__c == EOF)
++ break;
++ else
++ _M_narrow[__i] = static_cast<char>(__c);
++ }
++ if (__i == 128)
++ _M_narrow_ok = true;
++ else
++ _M_narrow_ok = false;
++ for (size_t __i = 0;
++ __i < sizeof(_M_widen) / sizeof(wint_t); ++__i)
++ _M_widen[__i] = btowc(__i);
++ }
++#endif // _GLIBCXX_USE_WCHAR_T
++}
+--- /dev/null
++++ libstdc++-v3/config/os/bsd/dragonfly/ctype_base.h
+@@ -0,0 +1,60 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 2000, 2003, 2009, 2010 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library 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.
++
++// This library 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.
++
++// 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/>.
++
++//
++// ISO C++ 14882: 22.1 Locales
++//
++
++// Information as gleaned from /usr/include/ctype.h on DragonFly.
++// Full details can be found from git repo at:
++// http://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/include/ctype.h
++
++namespace std _GLIBCXX_VISIBILITY(default)
++{
++_GLIBCXX_BEGIN_NAMESPACE_VERSION
++
++ /// @brief Base class for ctype.
++ struct ctype_base
++ {
++ // Non-standard typedefs.
++ typedef const unsigned char* __to_type;
++
++ // NB: Offsets into ctype<char>::_M_table force a particular size
++ // on the mask type. Because of this, we don't use an enum.
++ typedef uint16_t mask;
++ static const mask upper = _CTYPEMASK_U;
++ static const mask lower = _CTYPEMASK_L;
++ static const mask alpha = _CTYPEMASK_A;
++ static const mask digit = _CTYPEMASK_D;
++ static const mask xdigit = _CTYPEMASK_X;
++ static const mask space = _CTYPEMASK_S;
++ static const mask print = _CTYPEMASK_R;
++ static const mask graph = _CTYPEMASK_G;
++ static const mask cntrl = _CTYPEMASK_C;
++ static const mask punct = _CTYPEMASK_P;
++ static const mask alnum = _CTYPEMASK_A | _CTYPEMASK_D;
++ };
++
++_GLIBCXX_END_NAMESPACE_VERSION
++} // namespace
+--- /dev/null
++++ libstdc++-v3/config/os/bsd/dragonfly/ctype_inline.h
+@@ -0,0 +1,127 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 2000, 2003, 2004, 2005, 2009, 2010
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library 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.
++
++// This library 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.
++
++// 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/>.
++
++/** @file bits/ctype_inline.h
++ * This is an internal header file, included by other library headers.
++ * Do not attempt to use it directly. @headername{locale}
++ */
++
++//
++// ISO C++ 14882: 22.1 Locales
++//
++
++// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*)
++// functions go in ctype.cc
++
++namespace std _GLIBCXX_VISIBILITY(default)
++{
++_GLIBCXX_BEGIN_NAMESPACE_VERSION
++
++ bool
++ ctype<char>::
++ is(mask __m, char __c) const
++ { return _M_table[(unsigned char)(__c)] & __m; }
++
++ const char*
++ ctype<char>::
++ is(const char* __low, const char* __high, mask* __vec) const
++ {
++ while (__low < __high)
++ *__vec++ = _M_table[*__low++];
++ return __high;
++ }
++
++ const char*
++ ctype<char>::
++ scan_is(mask __m, const char* __low, const char* __high) const
++ {
++ while (__low < __high && !this->is(__m, *__low))
++ ++__low;
++ return __low;
++ }
++
++ const char*
++ ctype<char>::
++ scan_not(mask __m, const char* __low, const char* __high) const
++ {
++ while (__low < __high && this->is(__m, *__low) != 0)
++ ++__low;
++ return __low;
++ }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ inline bool
++ ctype<wchar_t>::
++ do_is(mask __m, wchar_t __c) const
++ {
++ return __libc_ctype_ [__c + 1] & __m;
++ }
++
++ inline const wchar_t*
++ ctype<wchar_t>::
++ do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const
++ {
++ for (; __lo < __hi; ++__vec, ++__lo)
++ {
++ mask __m = 0;
++ if (isupper (*__lo)) __m |= _CTYPEMASK_U;
++ if (islower (*__lo)) __m |= _CTYPEMASK_L;
++ if (isdigit (*__lo)) __m |= _CTYPEMASK_D;
++ if (isspace (*__lo)) __m |= _CTYPEMASK_S;
++ if (ispunct (*__lo)) __m |= _CTYPEMASK_P;
++ if (isblank (*__lo)) __m |= _CTYPEMASK_B;
++ if (iscntrl (*__lo)) __m |= _CTYPEMASK_C;
++ if (isalpha (*__lo)) __m |= _CTYPEMASK_A;
++ if (isgraph (*__lo)) __m |= _CTYPEMASK_G;
++ if (isprint (*__lo)) __m |= _CTYPEMASK_R;
++ if (isxdigit(*__lo)) __m |= _CTYPEMASK_X;
++ /* alnum already covered = alpha | digit */
++
++ *__vec = __m;
++ }
++ return __hi;
++ }
++
++ inline const wchar_t*
++ ctype<wchar_t>::
++ do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const
++ {
++ while (__lo < __hi && !(__libc_ctype_ [*__lo + 1] & __m))
++ ++__lo;
++ return __lo;
++ }
++
++ inline const wchar_t*
++ ctype<wchar_t>::
++ do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
++ {
++ while (__lo < __hi && (__libc_ctype_ [*__lo + 1] & __m))
++ ++__lo;
++ return __lo;
++ }
++#endif
++
++_GLIBCXX_END_NAMESPACE_VERSION
++} // namespace
+--- /dev/null
++++ libstdc++-v3/config/os/bsd/dragonfly/ctype_noninline.h
+@@ -0,0 +1,94 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2009, 2010
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library 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.
++
++// This library 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.
++
++// 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/>.
++
++/** @file bits/ctype_noninline.h
++ * This is an internal header file, included by other library headers.
++ * Do not attempt to use it directly. @headername{locale}
++ */
++
++//
++// ISO C++ 14882: 22.1 Locales
++//
++
++// Information as gleaned from /usr/include/ctype.h
++
++ extern "C" const __uint16_t __libc_C_ctype_[];
++
++ const ctype_base::mask*
++ ctype<char>::classic_table() throw()
++ { return __libc_C_ctype_ + 1; }
++
++ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
++ size_t __refs)
++ : facet(__refs), _M_del(__table != 0 && __del),
++ _M_toupper(NULL), _M_tolower(NULL),
++ _M_table(__table ? __table : classic_table())
++ {
++ memset(_M_widen, 0, sizeof(_M_widen));
++ _M_widen_ok = 0;
++ memset(_M_narrow, 0, sizeof(_M_narrow));
++ _M_narrow_ok = 0;
++ }
++
++ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
++ : facet(__refs), _M_del(__table != 0 && __del),
++ _M_toupper(NULL), _M_tolower(NULL),
++ _M_table(__table ? __table : classic_table())
++ {
++ memset(_M_widen, 0, sizeof(_M_widen));
++ _M_widen_ok = 0;
++ memset(_M_narrow, 0, sizeof(_M_narrow));
++ _M_narrow_ok = 0;
++ }
++
++ char
++ ctype<char>::do_toupper(char __c) const
++ { return ::toupper((int) __c); }
++
++ const char*
++ ctype<char>::do_toupper(char* __low, const char* __high) const
++ {
++ while (__low < __high)
++ {
++ *__low = ::toupper((int) *__low);
++ ++__low;
++ }
++ return __high;
++ }
++
++ char
++ ctype<char>::do_tolower(char __c) const
++ { return ::tolower((int) __c); }
++
++ const char*
++ ctype<char>::do_tolower(char* __low, const char* __high) const
++ {
++ while (__low < __high)
++ {
++ *__low = ::tolower((int) *__low);
++ ++__low;
++ }
++ return __high;
++ }
+--- /dev/null
++++ libstdc++-v3/config/os/bsd/dragonfly/os_defines.h
+@@ -0,0 +1,45 @@
++// Specific definitions for BSD -*- C++ -*-
++
++// Copyright (C) 2000, 2009, 2010 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library 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.
++
++// This library 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.
++
++// 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/>.
++
++/** @file bits/os_defines.h
++ * This is an internal header file, included by other library headers.
++ * Do not attempt to use it directly. @headername{iosfwd}
++ */
++
++#ifndef _GLIBCXX_OS_DEFINES
++#define _GLIBCXX_OS_DEFINES 1
++
++// System-specific #define, typedefs, corrections, etc, go here. This
++// file will come before all others.
++
++/* FreeBSD approach, likely a mistake for DragonFly.
++#define _GLIBCXX_USE_C99_CHECK 1
++#define _GLIBCXX_USE_C99_DYNAMIC (!(__ISO_C_VISIBLE >= 1999))
++#define _GLIBCXX_USE_C99_LONG_LONG_CHECK 1
++#define _GLIBCXX_USE_C99_LONG_LONG_DYNAMIC (_GLIBCXX_USE_C99_DYNAMIC || !defined __LONG_LONG_SUPPORTED)
++#define _GLIBCXX_USE_C99_FLOAT_TRANSCENDENTALS_CHECK 1
++#define _GLIBCXX_USE_C99_FLOAT_TRANSCENDENTALS_DYNAMIC defined _XOPEN_SOURCE
++*/
++
++#endif
diff --git a/lang/gnat-aux/files/diff-cxx-testsuite b/lang/gnat-aux/files/diff-cxx-testsuite
new file mode 100644
index 00000000000..16f2953280d
--- /dev/null
+++ b/lang/gnat-aux/files/diff-cxx-testsuite
@@ -0,0 +1,4547 @@
+--- gcc/testsuite/g++.dg/cdce3.C.orig
++++ gcc/testsuite/g++.dg/cdce3.C
+@@ -1,4 +1,4 @@
+-/* { dg-do run } */
++/* { dg-do run { target { ! "*-*-freebsd* *-*-dragonfly* *-*-netbsd*" } } } */
+ /* { dg-require-effective-target c99_runtime } */
+ /* { dg-skip-if "exp2* missing despite C99 runtime" { alpha*-dec-osf5* } } */
+ /* { dg-options "-O2 -fmath-errno -fdump-tree-cdce-details -DGNU_EXTENSION -DLARGE_LONG_DOUBLE -lm" { target { pow10 && large_long_double } } } */
+--- gcc/testsuite/g++.dg/uninit-pred-3_b.C.orig
++++ gcc/testsuite/g++.dg/uninit-pred-3_b.C
+@@ -65,7 +65,7 @@
+
+ void P (int64 t)
+ {
+- int cc; /* { dg-excess-errors "note: 'cc' was declared here" } */
++ int cc;
+ if (!GetC (&cc))
+ return;
+
+--- gcc/testsuite/gcc.dg/builtins-config.h.orig
++++ gcc/testsuite/gcc.dg/builtins-config.h
+@@ -13,8 +13,14 @@
+ /* PA HP-UX doesn't have the entire C99 runtime. */
+ #elif defined(__AVR__)
+ /* AVR doesn't have the entire C99 runtime. */
+-#elif defined(__FreeBSD__) && (__FreeBSD__ < 9)
+-/* FreeBSD up to version 8 lacks support for cexp and friends. */
++#elif defined(__FreeBSD__) && (__FreeBSD__ < 10)
++/* FreeBSD up to version 9 lacks support for cexp and friends. */
++#elif defined(__DragonFly__)
++/* As of DragonFly 2.13, Full C99 support is not available.
++ It has the same libm functionality as FreeBSD, which is missing
++ several long-double functions. */
++#elif defined(__NetBSD__)
++/* As of NetBSD 5.99, libm is nowhere close to supporting C99 */
+ #elif defined(__netware__)
+ /* NetWare doesn't have the entire C99 runtime. */
+ #elif defined(__vxworks)
+--- libstdc++-v3/testsuite/17_intro/headers/c++1998/stdc++.cc.orig
++++ libstdc++-v3/testsuite/17_intro/headers/c++1998/stdc++.cc
+@@ -1,5 +1,5 @@
+ // FreeBSD wants warning clean system headers:
+-// { dg-options "-Wall -Wsystem-headers" { target *-*-freebsd* } }
++// { dg-options "-Wall -Wsystem-headers" { target *-*-freebsd* *-*-dragonfly* } }
+ // { dg-do compile }
+ // 1999-05-12 bkoz
+
+--- libstdc++-v3/testsuite/17_intro/headers/c++1998/stdc++_multiple_inclusion.cc.orig
++++ libstdc++-v3/testsuite/17_intro/headers/c++1998/stdc++_multiple_inclusion.cc
+@@ -1,5 +1,5 @@
+ // FreeBSD wants warning clean system headers:
+-// { dg-options "-Wall -Wsystem-headers" { target *-*-freebsd* } }
++// { dg-options "-Wall -Wsystem-headers" { target *-*-freebsd* *-*-dragonfly* } }
+ // { dg-do compile }
+ // 1999-05-12 bkoz
+
+--- libstdc++-v3/testsuite/17_intro/headers/c++200x/stdc++.cc.orig
++++ libstdc++-v3/testsuite/17_intro/headers/c++200x/stdc++.cc
+@@ -1,5 +1,5 @@
+ // FreeBSD wants warning clean system headers:
+-// { dg-options "-Wall -Wsystem-headers" { target *-*-freebsd* } }
++// { dg-options "-Wall -Wsystem-headers" { target *-*-freebsd* *-*-dragonfly* } }
+ // { dg-options "-std=gnu++0x" }
+ // { dg-do compile }
+
+--- libstdc++-v3/testsuite/17_intro/headers/c++200x/stdc++_multiple_inclusion.cc.orig
++++ libstdc++-v3/testsuite/17_intro/headers/c++200x/stdc++_multiple_inclusion.cc
+@@ -1,5 +1,5 @@
+ // FreeBSD wants warning clean system headers:
+-// { dg-options "-Wall -Wsystem-headers" { target *-*-freebsd* } }
++// { dg-options "-Wall -Wsystem-headers" { target *-*-freebsd* *-*-dragonfly* } }
+ // { dg-options "-std=gnu++0x" }
+ // { dg-do compile }
+
+--- libstdc++-v3/testsuite/18_support/pthread_guard.cc.orig
++++ libstdc++-v3/testsuite/18_support/pthread_guard.cc
+@@ -16,8 +16,8 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* } }
+-// { dg-options "-pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-darwin* alpha*-*-osf* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* } }
++// { dg-options "-pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-darwin* alpha*-*-osf* } }
+
+ #include <cstdlib>
+ #include <pthread.h>
+--- libstdc++-v3/testsuite/20_util/shared_ptr/thread/default_weaktoshared.cc.orig
++++ libstdc++-v3/testsuite/20_util/shared_ptr/thread/default_weaktoshared.cc
+@@ -17,8 +17,8 @@
+
+ // 20.6.6.2 Template class shared_ptr [util.smartptr.shared]
+
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options "-pthread -std=gnu++0x" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options "-pthread -std=gnu++0x" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options "-pthreads -std=gnu++0x" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+
+--- libstdc++-v3/testsuite/20_util/shared_ptr/thread/mutex_weaktoshared.cc.orig
++++ libstdc++-v3/testsuite/20_util/shared_ptr/thread/mutex_weaktoshared.cc
+@@ -17,8 +17,8 @@
+
+ // 20.6.6.2 Template class shared_ptr [util.smartptr.shared]
+
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+
+--- libstdc++-v3/testsuite/21_strings/basic_string/pthread18185.cc.orig
++++ libstdc++-v3/testsuite/21_strings/basic_string/pthread18185.cc
+@@ -16,8 +16,8 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options "-pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options "-pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options "-pthreads" { target *-*-solaris* } }
+
+ #include <ext/new_allocator.h>
+--- libstdc++-v3/testsuite/21_strings/basic_string/pthread4.cc.orig
++++ libstdc++-v3/testsuite/21_strings/basic_string/pthread4.cc
+@@ -20,8 +20,8 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options "-pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options "-pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options "-pthreads" { target *-*-solaris* } }
+
+ #include <string>
+--- libstdc++-v3/testsuite/22_locale/locale/cons/12658_thread-1.cc.orig
++++ libstdc++-v3/testsuite/22_locale/locale/cons/12658_thread-1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options "-pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options "-pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options "-pthreads" { target *-*-solaris* } }
+ // { dg-require-namedlocale "en_US" }
+ // { dg-require-namedlocale "fr_FR" }
+--- libstdc++-v3/testsuite/22_locale/locale/cons/12658_thread-2.cc.orig
++++ libstdc++-v3/testsuite/22_locale/locale/cons/12658_thread-2.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options "-pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options "-pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options "-pthreads" { target *-*-solaris* } }
+ // { dg-require-namedlocale "en_US" }
+ // { dg-require-namedlocale "fr_FR" }
+--- libstdc++-v3/testsuite/23_containers/list/pthread1.cc.orig
++++ libstdc++-v3/testsuite/23_containers/list/pthread1.cc
+@@ -18,8 +18,8 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options "-pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options "-pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options "-pthreads" { target *-*-solaris* } }
+
+ // This multi-threading C++/STL/POSIX code adheres to rules outlined here:
+--- libstdc++-v3/testsuite/23_containers/list/pthread5.cc.orig
++++ libstdc++-v3/testsuite/23_containers/list/pthread5.cc
+@@ -20,8 +20,8 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options "-pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options "-pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options "-pthreads" { target *-*-solaris* } }
+
+ #include <vector>
+--- libstdc++-v3/testsuite/23_containers/map/pthread6.cc.orig
++++ libstdc++-v3/testsuite/23_containers/map/pthread6.cc
+@@ -19,8 +19,8 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options "-pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options "-pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options "-pthreads" { target *-*-solaris* } }
+
+ #include <string>
+--- libstdc++-v3/testsuite/23_containers/vector/debug/multithreaded_swap.cc.orig
++++ libstdc++-v3/testsuite/23_containers/vector/debug/multithreaded_swap.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/26_numerics/headers/cmath/c_math_dynamic.cc.orig
++++ libstdc++-v3/testsuite/26_numerics/headers/cmath/c_math_dynamic.cc
+@@ -19,7 +19,7 @@
+
+
+ // { dg-do link }
+-// { dg-options "-D_XOPEN_SOURCE" { target *-*-freebsd* } }
++// { dg-options "-D_XOPEN_SOURCE" { target *-*-freebsd* *-*-dragonfly* } }
+
+ #include <cmath>
+
+--- libstdc++-v3/testsuite/27_io/basic_ofstream/pthread2.cc.orig
++++ libstdc++-v3/testsuite/27_io/basic_ofstream/pthread2.cc
+@@ -19,8 +19,8 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options "-pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options "-pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options "-pthreads" { target *-*-solaris* } }
+
+ #include <fstream>
+--- libstdc++-v3/testsuite/27_io/basic_ostringstream/pthread3.cc.orig
++++ libstdc++-v3/testsuite/27_io/basic_ostringstream/pthread3.cc
+@@ -19,8 +19,8 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options "-pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options "-pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options "-pthreads" { target *-*-solaris* } }
+
+ #include <sstream>
+--- libstdc++-v3/testsuite/30_threads/async/42819.cc.orig
++++ libstdc++-v3/testsuite/30_threads/async/42819.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/async/any.cc.orig
++++ libstdc++-v3/testsuite/30_threads/async/any.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/async/async.cc.orig
++++ libstdc++-v3/testsuite/30_threads/async/async.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/async/sync.cc.orig
++++ libstdc++-v3/testsuite/30_threads/async/sync.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/call_once/39909.cc.orig
++++ libstdc++-v3/testsuite/30_threads/call_once/39909.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/call_once/call_once1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/call_once/call_once1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/condition_variable/cons/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/condition_variable/cons/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/condition_variable/members/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/condition_variable/members/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/condition_variable/members/2.cc.orig
++++ libstdc++-v3/testsuite/30_threads/condition_variable/members/2.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/condition_variable/native_handle/typesizes.cc.orig
++++ libstdc++-v3/testsuite/30_threads/condition_variable/native_handle/typesizes.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/condition_variable_any/cons/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/condition_variable_any/cons/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/condition_variable_any/members/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/condition_variable_any/members/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/condition_variable_any/members/2.cc.orig
++++ libstdc++-v3/testsuite/30_threads/condition_variable_any/members/2.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/future/cons/move.cc.orig
++++ libstdc++-v3/testsuite/30_threads/future/cons/move.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/future/members/45133.cc.orig
++++ libstdc++-v3/testsuite/30_threads/future/members/45133.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/future/members/get.cc.orig
++++ libstdc++-v3/testsuite/30_threads/future/members/get.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/future/members/get2.cc.orig
++++ libstdc++-v3/testsuite/30_threads/future/members/get2.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/future/members/valid.cc.orig
++++ libstdc++-v3/testsuite/30_threads/future/members/valid.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/future/members/wait.cc.orig
++++ libstdc++-v3/testsuite/30_threads/future/members/wait.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/future/members/wait_for.cc.orig
++++ libstdc++-v3/testsuite/30_threads/future/members/wait_for.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/future/members/wait_until.cc.orig
++++ libstdc++-v3/testsuite/30_threads/future/members/wait_until.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/lock/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/lock/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/lock/2.cc.orig
++++ libstdc++-v3/testsuite/30_threads/lock/2.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/lock/3.cc.orig
++++ libstdc++-v3/testsuite/30_threads/lock/3.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/lock/4.cc.orig
++++ libstdc++-v3/testsuite/30_threads/lock/4.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/lock_guard/cons/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/lock_guard/cons/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/mutex/cons/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/mutex/cons/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/mutex/dest/destructor_locked.cc.orig
++++ libstdc++-v3/testsuite/30_threads/mutex/dest/destructor_locked.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/mutex/lock/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/mutex/lock/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/mutex/native_handle/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/mutex/native_handle/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/mutex/native_handle/typesizes.cc.orig
++++ libstdc++-v3/testsuite/30_threads/mutex/native_handle/typesizes.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/mutex/try_lock/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/mutex/try_lock/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/mutex/try_lock/2.cc.orig
++++ libstdc++-v3/testsuite/30_threads/mutex/try_lock/2.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/mutex/unlock/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/mutex/unlock/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/packaged_task/cons/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/packaged_task/cons/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/packaged_task/cons/2.cc.orig
++++ libstdc++-v3/testsuite/30_threads/packaged_task/cons/2.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/packaged_task/cons/alloc.cc.orig
++++ libstdc++-v3/testsuite/30_threads/packaged_task/cons/alloc.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/packaged_task/cons/move.cc.orig
++++ libstdc++-v3/testsuite/30_threads/packaged_task/cons/move.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/packaged_task/cons/move_assign.cc.orig
++++ libstdc++-v3/testsuite/30_threads/packaged_task/cons/move_assign.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/packaged_task/members/get_future.cc.orig
++++ libstdc++-v3/testsuite/30_threads/packaged_task/members/get_future.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/packaged_task/members/get_future2.cc.orig
++++ libstdc++-v3/testsuite/30_threads/packaged_task/members/get_future2.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke.cc.orig
++++ libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke2.cc.orig
++++ libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke2.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke3.cc.orig
++++ libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke3.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke4.cc.orig
++++ libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke4.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke5.cc.orig
++++ libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke5.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/packaged_task/members/reset.cc.orig
++++ libstdc++-v3/testsuite/30_threads/packaged_task/members/reset.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/packaged_task/members/reset2.cc.orig
++++ libstdc++-v3/testsuite/30_threads/packaged_task/members/reset2.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/packaged_task/members/swap.cc.orig
++++ libstdc++-v3/testsuite/30_threads/packaged_task/members/swap.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/packaged_task/members/valid.cc.orig
++++ libstdc++-v3/testsuite/30_threads/packaged_task/members/valid.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/promise/cons/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/promise/cons/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/promise/cons/alloc.cc.orig
++++ libstdc++-v3/testsuite/30_threads/promise/cons/alloc.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/promise/cons/move.cc.orig
++++ libstdc++-v3/testsuite/30_threads/promise/cons/move.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/promise/cons/move_assign.cc.orig
++++ libstdc++-v3/testsuite/30_threads/promise/cons/move_assign.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/promise/members/get_future.cc.orig
++++ libstdc++-v3/testsuite/30_threads/promise/members/get_future.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/promise/members/get_future2.cc.orig
++++ libstdc++-v3/testsuite/30_threads/promise/members/get_future2.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/promise/members/set_exception.cc.orig
++++ libstdc++-v3/testsuite/30_threads/promise/members/set_exception.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/promise/members/set_exception2.cc.orig
++++ libstdc++-v3/testsuite/30_threads/promise/members/set_exception2.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/promise/members/set_value.cc.orig
++++ libstdc++-v3/testsuite/30_threads/promise/members/set_value.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/promise/members/set_value2.cc.orig
++++ libstdc++-v3/testsuite/30_threads/promise/members/set_value2.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/promise/members/set_value3.cc.orig
++++ libstdc++-v3/testsuite/30_threads/promise/members/set_value3.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/promise/members/swap.cc.orig
++++ libstdc++-v3/testsuite/30_threads/promise/members/swap.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/recursive_mutex/dest/destructor_locked.cc.orig
++++ libstdc++-v3/testsuite/30_threads/recursive_mutex/dest/destructor_locked.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/recursive_mutex/lock/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/recursive_mutex/lock/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/recursive_mutex/native_handle/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/recursive_mutex/native_handle/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/recursive_mutex/native_handle/typesizes.cc.orig
++++ libstdc++-v3/testsuite/30_threads/recursive_mutex/native_handle/typesizes.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/recursive_mutex/try_lock/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/recursive_mutex/try_lock/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/recursive_mutex/try_lock/2.cc.orig
++++ libstdc++-v3/testsuite/30_threads/recursive_mutex/try_lock/2.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/recursive_mutex/unlock/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/recursive_mutex/unlock/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/dest/destructor_locked.cc.orig
++++ libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/dest/destructor_locked.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/lock/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/lock/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/lock/2.cc.orig
++++ libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/lock/2.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/native_handle/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/native_handle/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/native_handle/typesizes.cc.orig
++++ libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/native_handle/typesizes.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock/2.cc.orig
++++ libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock/2.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options "-std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options "-std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options "-std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options "-std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_for/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_for/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_for/2.cc.orig
++++ libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_for/2.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_for/3.cc.orig
++++ libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_for/3.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_until/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_until/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_until/2.cc.orig
++++ libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_until/2.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/unlock/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/unlock/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/shared_future/cons/move.cc.orig
++++ libstdc++-v3/testsuite/30_threads/shared_future/cons/move.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/shared_future/members/45133.cc.orig
++++ libstdc++-v3/testsuite/30_threads/shared_future/members/45133.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/shared_future/members/get.cc.orig
++++ libstdc++-v3/testsuite/30_threads/shared_future/members/get.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/shared_future/members/get2.cc.orig
++++ libstdc++-v3/testsuite/30_threads/shared_future/members/get2.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/shared_future/members/valid.cc.orig
++++ libstdc++-v3/testsuite/30_threads/shared_future/members/valid.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/shared_future/members/wait.cc.orig
++++ libstdc++-v3/testsuite/30_threads/shared_future/members/wait.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/shared_future/members/wait_for.cc.orig
++++ libstdc++-v3/testsuite/30_threads/shared_future/members/wait_for.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/shared_future/members/wait_until.cc.orig
++++ libstdc++-v3/testsuite/30_threads/shared_future/members/wait_until.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/this_thread/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/this_thread/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/this_thread/2.cc.orig
++++ libstdc++-v3/testsuite/30_threads/this_thread/2.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/this_thread/3.cc.orig
++++ libstdc++-v3/testsuite/30_threads/this_thread/3.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/this_thread/4.cc.orig
++++ libstdc++-v3/testsuite/30_threads/this_thread/4.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/thread/cons/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/thread/cons/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/thread/cons/2.cc.orig
++++ libstdc++-v3/testsuite/30_threads/thread/cons/2.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/thread/cons/3.cc.orig
++++ libstdc++-v3/testsuite/30_threads/thread/cons/3.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/thread/cons/4.cc.orig
++++ libstdc++-v3/testsuite/30_threads/thread/cons/4.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/thread/cons/5.cc.orig
++++ libstdc++-v3/testsuite/30_threads/thread/cons/5.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/thread/cons/6.cc.orig
++++ libstdc++-v3/testsuite/30_threads/thread/cons/6.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/thread/cons/7.cc.orig
++++ libstdc++-v3/testsuite/30_threads/thread/cons/7.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/thread/cons/8.cc.orig
++++ libstdc++-v3/testsuite/30_threads/thread/cons/8.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/thread/cons/9.cc.orig
++++ libstdc++-v3/testsuite/30_threads/thread/cons/9.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/thread/cons/moveable.cc.orig
++++ libstdc++-v3/testsuite/30_threads/thread/cons/moveable.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/thread/members/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/thread/members/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/thread/members/2.cc.orig
++++ libstdc++-v3/testsuite/30_threads/thread/members/2.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/thread/members/3.cc.orig
++++ libstdc++-v3/testsuite/30_threads/thread/members/3.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/thread/members/4.cc.orig
++++ libstdc++-v3/testsuite/30_threads/thread/members/4.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/thread/members/5.cc.orig
++++ libstdc++-v3/testsuite/30_threads/thread/members/5.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/thread/members/hardware_concurrency.cc.orig
++++ libstdc++-v3/testsuite/30_threads/thread/members/hardware_concurrency.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/thread/swap/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/thread/swap/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/timed_mutex/cons/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/timed_mutex/cons/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/timed_mutex/dest/destructor_locked.cc.orig
++++ libstdc++-v3/testsuite/30_threads/timed_mutex/dest/destructor_locked.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/timed_mutex/lock/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/timed_mutex/lock/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/timed_mutex/native_handle/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/timed_mutex/native_handle/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/timed_mutex/native_handle/typesizes.cc.orig
++++ libstdc++-v3/testsuite/30_threads/timed_mutex/native_handle/typesizes.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock/2.cc.orig
++++ libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock/2.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_for/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_for/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_for/2.cc.orig
++++ libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_for/2.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_for/3.cc.orig
++++ libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_for/3.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/2.cc.orig
++++ libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/2.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/timed_mutex/unlock/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/timed_mutex/unlock/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/try_lock/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/try_lock/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/try_lock/2.cc.orig
++++ libstdc++-v3/testsuite/30_threads/try_lock/2.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/try_lock/3.cc.orig
++++ libstdc++-v3/testsuite/30_threads/try_lock/3.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/try_lock/4.cc.orig
++++ libstdc++-v3/testsuite/30_threads/try_lock/4.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/unique_lock/cons/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/unique_lock/cons/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/unique_lock/cons/2.cc.orig
++++ libstdc++-v3/testsuite/30_threads/unique_lock/cons/2.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/unique_lock/cons/3.cc.orig
++++ libstdc++-v3/testsuite/30_threads/unique_lock/cons/3.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/unique_lock/cons/4.cc.orig
++++ libstdc++-v3/testsuite/30_threads/unique_lock/cons/4.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/unique_lock/cons/5.cc.orig
++++ libstdc++-v3/testsuite/30_threads/unique_lock/cons/5.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/unique_lock/cons/6.cc.orig
++++ libstdc++-v3/testsuite/30_threads/unique_lock/cons/6.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/unique_lock/locking/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/unique_lock/locking/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/unique_lock/locking/2.cc.orig
++++ libstdc++-v3/testsuite/30_threads/unique_lock/locking/2.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/unique_lock/locking/3.cc.orig
++++ libstdc++-v3/testsuite/30_threads/unique_lock/locking/3.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/unique_lock/locking/4.cc.orig
++++ libstdc++-v3/testsuite/30_threads/unique_lock/locking/4.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/unique_lock/modifiers/1.cc.orig
++++ libstdc++-v3/testsuite/30_threads/unique_lock/modifiers/1.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/30_threads/unique_lock/modifiers/2.cc.orig
++++ libstdc++-v3/testsuite/30_threads/unique_lock/modifiers/2.cc
+@@ -1,5 +1,5 @@
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+ // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+ // { dg-require-cstdint "" }
+--- libstdc++-v3/testsuite/ext/rope/pthread7-rope.cc.orig
++++ libstdc++-v3/testsuite/ext/rope/pthread7-rope.cc
+@@ -18,8 +18,8 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options "-pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options "-pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options "-pthreads" { target *-*-solaris* } }
+
+ #include <ext/rope>
+--- libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/thread/default_weaktoshared.cc.orig
++++ libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/thread/default_weaktoshared.cc
+@@ -17,8 +17,8 @@
+
+ // TR1 2.2.2 Template class shared_ptr [tr.util.smartptr.shared]
+
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options "-pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options "-pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options "-pthreads" { target *-*-solaris* } }
+
+ #include <tr1/memory>
+--- libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/thread/mutex_weaktoshared.cc.orig
++++ libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/thread/mutex_weaktoshared.cc
+@@ -17,8 +17,8 @@
+
+ // TR1 2.2.2 Template class shared_ptr [tr.util.smartptr.shared]
+
+-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+-// { dg-options "-pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
++// { dg-options "-pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
+ // { dg-options "-pthreads" { target *-*-solaris* } }
+
+ #include <tr1/memory>
+--- libstdc++-v3/testsuite/lib/libstdc++.exp.orig
++++ libstdc++-v3/testsuite/lib/libstdc++.exp
+@@ -865,17 +865,18 @@
+ set f [open $src "w"]
+ puts $f "#include <locale>"
+ puts $f "#include <cstdio>"
+- puts $f "using namespace std;"
++ puts $f "using namespace std;"
+ puts $f "int main (int argc, char** argv)"
+ puts $f "{"
++ puts $f " const char* mlx = *(argv + 1);"
+ puts $f " try"
+ puts $f " {"
+- puts $f " locale(*(argv + 1));"
++ puts $f " locale((char*)(mlx));"
+ puts $f " return 0;"
+ puts $f " }"
+ puts $f " catch(...)"
+ puts $f " {"
+- puts $f " printf(\"locale '%s' not supported\\n\", *(argv + 1));"
++ puts $f " printf(\"locale '%s' not supported\\n\", mlx);"
+ puts $f " return 1;"
+ puts $f " }"
+ puts $f "}"
+--- libstdc++-v3/testsuite/23_containers/deque/debug/assign4_neg.cc.orig
++++ libstdc++-v3/testsuite/23_containers/deque/debug/assign4_neg.cc
+@@ -15,6 +15,7 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+ //
++// { dg-require-debug-mode "" }
+ // { dg-do run { xfail *-*-* } }
+
+ #include <debug/deque>
+--- libstdc++-v3/testsuite/23_containers/deque/debug/construct4_neg.cc.orig
++++ libstdc++-v3/testsuite/23_containers/deque/debug/construct4_neg.cc
+@@ -15,6 +15,7 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+ //
++// { dg-require-debug-mode "" }
+ // { dg-do run { xfail *-*-* } }
+
+ #include <debug/deque>
+--- libstdc++-v3/testsuite/23_containers/deque/debug/insert4_neg.cc.orig
++++ libstdc++-v3/testsuite/23_containers/deque/debug/insert4_neg.cc
+@@ -15,6 +15,7 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+ //
++// { dg-require-debug-mode "" }
+ // { dg-do run { xfail *-*-* } }
+
+ #include <debug/deque>
+--- libstdc++-v3/testsuite/23_containers/list/debug/assign4_neg.cc.orig
++++ libstdc++-v3/testsuite/23_containers/list/debug/assign4_neg.cc
+@@ -15,6 +15,7 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+ //
++// { dg-require-debug-mode "" }
+ // { dg-do run { xfail *-*-* } }
+
+ #include <debug/list>
+--- libstdc++-v3/testsuite/23_containers/list/debug/construct4_neg.cc.orig
++++ libstdc++-v3/testsuite/23_containers/list/debug/construct4_neg.cc
+@@ -15,6 +15,7 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+ //
++// { dg-require-debug-mode "" }
+ // { dg-do run { xfail *-*-* } }
+
+ #include <debug/list>
+--- libstdc++-v3/testsuite/23_containers/list/debug/insert4_neg.cc.orig
++++ libstdc++-v3/testsuite/23_containers/list/debug/insert4_neg.cc
+@@ -15,6 +15,7 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+ //
++// { dg-require-debug-mode "" }
+ // { dg-do run { xfail *-*-* } }
+
+ #include <debug/list>
+--- libstdc++-v3/testsuite/23_containers/map/debug/construct4_neg.cc.orig
++++ libstdc++-v3/testsuite/23_containers/map/debug/construct4_neg.cc
+@@ -15,6 +15,7 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+ //
++// { dg-require-debug-mode "" }
+ // { dg-do run { xfail *-*-* } }
+
+ #include <debug/map>
+--- libstdc++-v3/testsuite/23_containers/map/debug/insert4_neg.cc.orig
++++ libstdc++-v3/testsuite/23_containers/map/debug/insert4_neg.cc
+@@ -15,6 +15,7 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+ //
++// { dg-require-debug-mode "" }
+ // { dg-do run { xfail *-*-* } }
+
+ #include <debug/map>
+--- libstdc++-v3/testsuite/23_containers/multimap/debug/construct4_neg.cc.orig
++++ libstdc++-v3/testsuite/23_containers/multimap/debug/construct4_neg.cc
+@@ -15,6 +15,7 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+ //
++// { dg-require-debug-mode "" }
+ // { dg-do run { xfail *-*-* } }
+
+ #include <debug/map>
+--- libstdc++-v3/testsuite/23_containers/multimap/debug/insert4_neg.cc.orig
++++ libstdc++-v3/testsuite/23_containers/multimap/debug/insert4_neg.cc
+@@ -15,6 +15,7 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+ //
++// { dg-require-debug-mode "" }
+ // { dg-do run { xfail *-*-* } }
+
+ #include <debug/map>
+--- libstdc++-v3/testsuite/23_containers/multiset/debug/construct4_neg.cc.orig
++++ libstdc++-v3/testsuite/23_containers/multiset/debug/construct4_neg.cc
+@@ -15,6 +15,7 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+ //
++// { dg-require-debug-mode "" }
+ // { dg-do run { xfail *-*-* } }
+
+ #include <debug/set>
+--- libstdc++-v3/testsuite/23_containers/multiset/debug/insert4_neg.cc.orig
++++ libstdc++-v3/testsuite/23_containers/multiset/debug/insert4_neg.cc
+@@ -15,6 +15,7 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+ //
++// { dg-require-debug-mode "" }
+ // { dg-do run { xfail *-*-* } }
+
+ #include <debug/set>
+--- libstdc++-v3/testsuite/23_containers/set/debug/construct4_neg.cc.orig
++++ libstdc++-v3/testsuite/23_containers/set/debug/construct4_neg.cc
+@@ -15,6 +15,7 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+ //
++// { dg-require-debug-mode "" }
+ // { dg-do run { xfail *-*-* } }
+
+ #include <debug/set>
+--- libstdc++-v3/testsuite/23_containers/set/debug/insert4_neg.cc.orig
++++ libstdc++-v3/testsuite/23_containers/set/debug/insert4_neg.cc
+@@ -15,6 +15,7 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+ //
++// { dg-require-debug-mode "" }
+ // { dg-do run { xfail *-*-* } }
+
+ #include <debug/set>
+--- libstdc++-v3/testsuite/23_containers/unordered_map/debug/construct4_neg.cc.orig
++++ libstdc++-v3/testsuite/23_containers/unordered_map/debug/construct4_neg.cc
+@@ -15,6 +15,7 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+ //
++// { dg-require-debug-mode "" }
+ // { dg-options "-std=gnu++0x" }
+ // { dg-do run { xfail *-*-* } }
+
+--- libstdc++-v3/testsuite/23_containers/unordered_map/debug/insert4_neg.cc.orig
++++ libstdc++-v3/testsuite/23_containers/unordered_map/debug/insert4_neg.cc
+@@ -15,6 +15,7 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+ //
++// { dg-require-debug-mode "" }
+ // { dg-options "-std=gnu++0x" }
+ // { dg-do run { xfail *-*-* } }
+
+--- libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/construct4_neg.cc.orig
++++ libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/construct4_neg.cc
+@@ -15,6 +15,7 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+ //
++// { dg-require-debug-mode "" }
+ // { dg-options "-std=gnu++0x" }
+ // { dg-do run { xfail *-*-* } }
+
+--- libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/insert4_neg.cc.orig
++++ libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/insert4_neg.cc
+@@ -15,6 +15,7 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+ //
++// { dg-require-debug-mode "" }
+ // { dg-options "-std=gnu++0x" }
+ // { dg-do run { xfail *-*-* } }
+
+--- libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/construct4_neg.cc.orig
++++ libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/construct4_neg.cc
+@@ -15,6 +15,7 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+ //
++// { dg-require-debug-mode "" }
+ // { dg-options "-std=gnu++0x" }
+ // { dg-do run { xfail *-*-* } }
+
+--- libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/insert4_neg.cc.orig
++++ libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/insert4_neg.cc
+@@ -15,6 +15,7 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+ //
++// { dg-require-debug-mode "" }
+ // { dg-options "-std=gnu++0x" }
+ // { dg-do run { xfail *-*-* } }
+
+--- libstdc++-v3/testsuite/23_containers/unordered_set/debug/construct4_neg.cc.orig
++++ libstdc++-v3/testsuite/23_containers/unordered_set/debug/construct4_neg.cc
+@@ -15,6 +15,7 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+ //
++// { dg-require-debug-mode "" }
+ // { dg-options "-std=gnu++0x" }
+ // { dg-do run { xfail *-*-* } }
+
+--- libstdc++-v3/testsuite/23_containers/unordered_set/debug/insert4_neg.cc.orig
++++ libstdc++-v3/testsuite/23_containers/unordered_set/debug/insert4_neg.cc
+@@ -15,6 +15,7 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+ //
++// { dg-require-debug-mode "" }
+ // { dg-options "-std=gnu++0x" }
+ // { dg-do run { xfail *-*-* } }
+
+--- libstdc++-v3/testsuite/23_containers/vector/debug/assign4_neg.cc.orig
++++ libstdc++-v3/testsuite/23_containers/vector/debug/assign4_neg.cc
+@@ -15,6 +15,7 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+ //
++// { dg-require-debug-mode "" }
+ // { dg-do run { xfail *-*-* } }
+
+ #include <debug/vector>
+--- libstdc++-v3/testsuite/23_containers/vector/debug/construct4_neg.cc.orig
++++ libstdc++-v3/testsuite/23_containers/vector/debug/construct4_neg.cc
+@@ -15,6 +15,7 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+ //
++// { dg-require-debug-mode "" }
+ // { dg-do run { xfail *-*-* } }
+
+ #include <debug/vector>
+--- libstdc++-v3/testsuite/23_containers/vector/debug/insert4_neg.cc.orig
++++ libstdc++-v3/testsuite/23_containers/vector/debug/insert4_neg.cc
+@@ -15,6 +15,7 @@
+ // with this library; see the file COPYING3. If not see
+ // <http://www.gnu.org/licenses/>.
+ //
++// { dg-require-debug-mode "" }
+ // { dg-do run { xfail *-*-* } }
+
+ #include <debug/vector>
+--- libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/2.cc.orig
++++ libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/2.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_US.ISO-8859-1" }
++// { dg-require-namedlocale "en_US.ISO8859-1" }
+
+ // 2003-02-06 Petur Runolfsson <peturr02@ru.is>
+
+@@ -27,14 +27,14 @@
+ // Required instantiation
+ // codecvt<wchar_t, char, mbstate_t>
+ //
+-// Baseline test in ISO-8859-1 locale
++// Baseline test in ISO8859-1 locale
+ void test02()
+ {
+ using namespace std;
+ bool test __attribute__((unused)) = true;
+ typedef codecvt<wchar_t, char, mbstate_t> w_codecvt;
+
+- locale loc = locale("en_US.ISO-8859-1");
++ locale loc = locale("en_US.ISO8859-1");
+ locale::global(loc);
+ const w_codecvt* cvt = &use_facet<w_codecvt>(loc);
+
+--- libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/3.cc.orig
++++ libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/3.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_US.ISO-8859-15" }
++// { dg-require-namedlocale "en_US.ISO8859-15" }
+
+ // 2003-02-06 Petur Runolfsson <peturr02@ru.is>
+
+@@ -27,14 +27,14 @@
+ // Required instantiation
+ // codecvt<wchar_t, char, mbstate_t>
+ //
+-// Baseline test in ISO-8859-15 locale
++// Baseline test in ISO8859-15 locale
+ void test03()
+ {
+ using namespace std;
+ bool test __attribute__((unused)) = true;
+ typedef codecvt<wchar_t, char, mbstate_t> w_codecvt;
+
+- locale loc = locale("en_US.ISO-8859-15");
++ locale loc = locale("en_US.ISO8859-15");
+ locale::global(loc);
+ const w_codecvt* cvt = &use_facet<w_codecvt>(loc);
+
+--- libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/2.cc.orig
++++ libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/2.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_US.ISO-8859-1" }
++// { dg-require-namedlocale "en_US.ISO8859-1" }
+
+ // 2003-02-06 Petur Runolfsson <peturr02@ru.is>
+
+@@ -27,19 +27,19 @@
+ // Required instantiation
+ // codecvt<wchar_t, char, mbstate_t>
+ //
+-// Test do_encoding with ISO-8859-1 locale.
++// Test do_encoding with ISO8859-1 locale.
+ void test02()
+ {
+ using namespace std;
+ typedef codecvt<wchar_t, char, mbstate_t> w_codecvt;
+ bool test __attribute__((unused)) = true;
+
+- locale loc = locale("en_US.ISO-8859-1");
++ locale loc = locale("en_US.ISO8859-1");
+ locale::global(loc);
+ const w_codecvt* cvt = &use_facet<w_codecvt>(loc);
+
+ int i = cvt->encoding();
+- VERIFY( i == 1 ); // ISO-8859-1 is a single-byte encoding
++ VERIFY( i == 1 ); // ISO8859-1 is a single-byte encoding
+ }
+
+ int main ()
+--- libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/3.cc.orig
++++ libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/3.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_US.ISO-8859-15" }
++// { dg-require-namedlocale "en_US.ISO8859-15" }
+
+ // 2003-02-06 Petur Runolfsson <peturr02@ru.is>
+
+@@ -27,19 +27,19 @@
+ // Required instantiation
+ // codecvt<wchar_t, char, mbstate_t>
+ //
+-// Test do_encoding with ISO-8859-15 locale.
++// Test do_encoding with ISO8859-15 locale.
+ void test03()
+ {
+ using namespace std;
+ typedef codecvt<wchar_t, char, mbstate_t> w_codecvt;
+ bool test __attribute__((unused)) = true;
+
+- locale loc = locale("en_US.ISO-8859-15");
++ locale loc = locale("en_US.ISO8859-15");
+ locale::global(loc);
+ const w_codecvt* cvt = &use_facet<w_codecvt>(loc);
+
+ int i = cvt->encoding();
+- VERIFY( i == 1 ); // ISO-8859-15 is a single-byte encoding
++ VERIFY( i == 1 ); // ISO8859-15 is a single-byte encoding
+ }
+
+ int main ()
+--- libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/2.cc.orig
++++ libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/2.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_US.ISO-8859-1" }
++// { dg-require-namedlocale "en_US.ISO8859-1" }
+
+ // 2003-02-06 Petur Runolfsson <peturr02@ru.is>
+
+@@ -41,7 +41,7 @@
+ // Required instantiation
+ // codecvt<wchar_t, char, mbstate_t>
+ //
+-// Baseline test for ISO-8859-1. Converts entire charset.
++// Baseline test for ISO8859-1. Converts entire charset.
+ void test02()
+ {
+ using namespace std;
+@@ -90,7 +90,7 @@
+ wmemset(i_ref, 0xdeadbeef, size + 1);
+ int_type* ito_next;
+
+- locale loc = locale("en_US.ISO-8859-1");
++ locale loc = locale("en_US.ISO8859-1");
+ locale::global(loc);
+ const w_codecvt* cvt = &use_facet<w_codecvt>(loc);
+
+--- libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/3.cc.orig
++++ libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/3.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_US.ISO-8859-15" }
++// { dg-require-namedlocale "en_US.ISO8859-15" }
+
+ // 2003-02-06 Petur Runolfsson <peturr02@ru.is>
+
+@@ -41,7 +41,7 @@
+ // Required instantiation
+ // codecvt<wchar_t, char, mbstate_t>
+ //
+-// Baseline test for ISO-8859-15. Converts entire charset.
++// Baseline test for ISO8859-15. Converts entire charset.
+ void test03()
+ {
+ using namespace std;
+@@ -104,7 +104,7 @@
+ wmemset(i_ref, 0xdeadbeef, size + 1);
+ int_type* ito_next;
+
+- locale loc = locale("en_US.ISO-8859-15");
++ locale loc = locale("en_US.ISO8859-15");
+ locale::global(loc);
+ const w_codecvt* cvt = &use_facet<w_codecvt>(loc);
+
+--- libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/2.cc.orig
++++ libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/2.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_US.ISO-8859-1" }
++// { dg-require-namedlocale "en_US.ISO8859-1" }
+
+ // 2003-02-06 Petur Runolfsson <peturr02@ru.is>
+
+@@ -63,7 +63,7 @@
+ "\xff";
+ int size = strlen(e_lit);
+
+- locale loc = locale("en_US.ISO-8859-1");
++ locale loc = locale("en_US.ISO8859-1");
+ locale::global(loc);
+ const w_codecvt* cvt = &use_facet<w_codecvt>(loc);
+
+--- libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/3.cc.orig
++++ libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/3.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_US.ISO-8859-15" }
++// { dg-require-namedlocale "en_US.ISO8859-15" }
+
+ // 2003-02-06 Petur Runolfsson <peturr02@ru.is>
+
+@@ -63,7 +63,7 @@
+ "\xff";
+ int size = strlen(e_lit);
+
+- locale loc = locale("en_US.ISO-8859-15");
++ locale loc = locale("en_US.ISO8859-15");
+ locale::global(loc);
+ const w_codecvt* cvt = &use_facet<w_codecvt>(loc);
+
+--- libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/2.cc.orig
++++ libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/2.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_US.ISO-8859-1" }
++// { dg-require-namedlocale "en_US.ISO8859-1" }
+
+ // 2003-02-06 Petur Runolfsson <peturr02@ru.is>
+
+@@ -32,12 +32,12 @@
+ bool test __attribute__((unused)) = true;
+ typedef codecvt<wchar_t, char, mbstate_t> w_codecvt;
+
+- locale loc = locale("en_US.ISO-8859-1");
++ locale loc = locale("en_US.ISO8859-1");
+ locale::global(loc);
+ const w_codecvt* cvt = &use_facet<w_codecvt>(loc);
+
+ int k = cvt->max_length();
+- VERIFY( k == 1 ); // ISO-8859-1 is a single-byte encoding
++ VERIFY( k == 1 ); // ISO8859-1 is a single-byte encoding
+ }
+
+ int main ()
+--- libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/3.cc.orig
++++ libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/3.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_US.ISO-8859-15" }
++// { dg-require-namedlocale "en_US.ISO8859-15" }
+
+ // 2003-02-06 Petur Runolfsson <peturr02@ru.is>
+
+@@ -32,12 +32,12 @@
+ bool test __attribute__((unused)) = true;
+ typedef codecvt<wchar_t, char, mbstate_t> w_codecvt;
+
+- locale loc = locale("en_US.ISO-8859-15");
++ locale loc = locale("en_US.ISO8859-15");
+ locale::global(loc);
+ const w_codecvt* cvt = &use_facet<w_codecvt>(loc);
+
+ int k = cvt->max_length();
+- VERIFY( k == 1 ); // ISO-8859-15 is a single-byte encoding
++ VERIFY( k == 1 ); // ISO8859-15 is a single-byte encoding
+ }
+
+ int main ()
+--- libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/2.cc.orig
++++ libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/2.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_US.ISO-8859-1" }
++// { dg-require-namedlocale "en_US.ISO8859-1" }
+
+ // 2003-02-06 Petur Runolfsson <peturr02@ru.is>
+
+@@ -88,7 +88,7 @@
+ memset(e_ref, 0xf0, size + 1);
+ ext_type* eto_next;
+
+- locale loc = locale("en_US.ISO-8859-1");
++ locale loc = locale("en_US.ISO8859-1");
+ locale::global(loc);
+ const w_codecvt* cvt = &use_facet<w_codecvt>(loc);
+
+--- libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/3.cc.orig
++++ libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/3.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_US.ISO-8859-15" }
++// { dg-require-namedlocale "en_US.ISO8859-15" }
+
+ // 2003-02-06 Petur Runolfsson <peturr02@ru.is>
+
+@@ -102,7 +102,7 @@
+ memset(e_ref, 0xf0, size + 1);
+ ext_type* eto_next;
+
+- locale loc = locale("en_US.ISO-8859-15");
++ locale loc = locale("en_US.ISO8859-15");
+ locale::global(loc);
+ const w_codecvt* cvt = &use_facet<w_codecvt>(loc);
+
+--- libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/7.cc.orig
++++ libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/7.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_US.ISO-8859-1" }
++// { dg-require-namedlocale "en_US.ISO8859-1" }
+
+ // 2003-02-06 Petur Runolfsson <peturr02@ru.is>
+
+@@ -60,7 +60,7 @@
+ memset(e_ref, 0xf0, size + 1);
+ ext_type* eto_next;
+
+- locale loc = locale("en_US.ISO-8859-1");
++ locale loc = locale("en_US.ISO8859-1");
+ locale::global(loc);
+ const w_codecvt* cvt = &use_facet<w_codecvt>(loc);
+
+--- libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/2.cc.orig
++++ libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/2.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_US.ISO-8859-1" }
++// { dg-require-namedlocale "en_US.ISO8859-1" }
+
+ // 2003-02-06 Petur Runolfsson <peturr02@ru.is>
+
+@@ -73,7 +73,7 @@
+ memset(e_ref, 0xf0, size + 1);
+ ext_type* eto_next;
+
+- locale loc = locale("en_US.ISO-8859-1");
++ locale loc = locale("en_US.ISO8859-1");
+ locale::global(loc);
+ const w_codecvt* cvt = &use_facet<w_codecvt>(loc);
+
+--- libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/3.cc.orig
++++ libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/3.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_US.ISO-8859-15" }
++// { dg-require-namedlocale "en_US.ISO8859-15" }
+
+ // 2003-02-06 Petur Runolfsson <peturr02@ru.is>
+
+@@ -87,7 +87,7 @@
+ memset(e_ref, 0xf0, size + 1);
+ ext_type* eto_next;
+
+- locale loc = locale("en_US.ISO-8859-15");
++ locale loc = locale("en_US.ISO8859-15");
+ locale::global(loc);
+ const w_codecvt* cvt = &use_facet<w_codecvt>(loc);
+
+--- libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/2.cc.orig
++++ libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/2.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_US.ISO-8859-1" }
++// { dg-require-namedlocale "en_US.ISO8859-1" }
+
+ // 2003-03-12 Petur Runolfsson <peturr02@ru.is>
+
+@@ -31,7 +31,7 @@
+ using namespace std;
+ bool test __attribute__((unused)) = true;
+
+- locale loc = locale("en_US.ISO-8859-1");
++ locale loc = locale("en_US.ISO8859-1");
+ const ctype<wchar_t>& wct = use_facet<ctype<wchar_t> >(loc);
+
+ char c = 0xff;
+--- libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/9520.cc.orig
++++ libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/9520.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "de_DE.ISO-8859-15@euro" }
++// { dg-require-namedlocale "de_DE.ISO8859-15@euro" }
+
+ // 2003-05-03 Petur Runolfsson <peturr02@ru.is>
+
+@@ -36,7 +36,7 @@
+ putc(static_cast<unsigned char>(i), file);
+ fclose(file);
+
+- locale loc (locale("de_DE.ISO-8859-15@euro"));
++ locale loc (locale("de_DE.ISO8859-15@euro"));
+ wchar_t buf[1];
+ wfilebuf fb;
+ fb.pubimbue(loc);
+--- libstdc++-v3/testsuite/27_io/objects/wchar_t/9520.cc.orig
++++ libstdc++-v3/testsuite/27_io/objects/wchar_t/9520.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "de_DE.ISO-8859-15@euro" }
++// { dg-require-namedlocale "de_DE.ISO8859-15@euro" }
+
+ // 2003-04-30 Petur Runolfsson <peturr02@ru.is>
+
+@@ -35,7 +35,7 @@
+ putc(static_cast<unsigned char>(i), file);
+ fclose(file);
+
+- locale loc (locale("de_DE.ISO-8859-15@euro"));
++ locale loc (locale("de_DE.ISO8859-15@euro"));
+ locale::global(loc); // Set locale for stdin
+
+ VERIFY( freopen(name, "r", stdin) );
+--- libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/char/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -32,6 +32,6 @@
+ using namespace __gnu_test;
+ func_callback two;
+ two.push_back(&test01);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -32,6 +32,6 @@
+ using namespace __gnu_test;
+ func_callback two;
+ two.push_back(&test01);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/codecvt/encoding/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/codecvt/encoding/char/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -32,6 +32,6 @@
+ using namespace __gnu_test;
+ func_callback two;
+ two.push_back(&test01);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/codecvt/encoding/wchar_t/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -32,6 +32,6 @@
+ using namespace __gnu_test;
+ func_callback two;
+ two.push_back(&test01);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/codecvt/in/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/codecvt/in/char/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -32,6 +32,6 @@
+ using namespace __gnu_test;
+ func_callback two;
+ two.push_back(&test01);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/codecvt/in/wchar_t/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -32,6 +32,6 @@
+ using namespace __gnu_test;
+ func_callback two;
+ two.push_back(&test01);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/codecvt/length/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/codecvt/length/char/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -32,6 +32,6 @@
+ using namespace __gnu_test;
+ func_callback two;
+ two.push_back(&test01);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/codecvt/length/wchar_t/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -32,6 +32,6 @@
+ using namespace __gnu_test;
+ func_callback two;
+ two.push_back(&test01);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/codecvt/max_length/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/codecvt/max_length/char/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -32,6 +32,6 @@
+ using namespace __gnu_test;
+ func_callback two;
+ two.push_back(&test01);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -32,6 +32,6 @@
+ using namespace __gnu_test;
+ func_callback two;
+ two.push_back(&test01);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/codecvt/out/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/codecvt/out/char/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -32,6 +32,6 @@
+ using namespace __gnu_test;
+ func_callback two;
+ two.push_back(&test01);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/codecvt/out/wchar_t/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -32,6 +32,6 @@
+ using namespace __gnu_test;
+ func_callback two;
+ two.push_back(&test01);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/codecvt/unshift/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/codecvt/unshift/char/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -32,6 +32,6 @@
+ using namespace __gnu_test;
+ func_callback two;
+ two.push_back(&test01);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/codecvt/unshift/wchar_t/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -32,6 +32,6 @@
+ using namespace __gnu_test;
+ func_callback two;
+ two.push_back(&test01);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/collate/compare/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/collate/compare/char/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+ // { dg-require-namedlocale "fr_FR" }
+ // { dg-require-namedlocale "en_US" }
+ // { dg-require-namedlocale "de_DE" }
+@@ -40,6 +40,6 @@
+ func_callback two;
+ two.push_back(&test01);
+ two.push_back(&test02);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/collate/compare/wchar_t/wrapped_locale.cc
+@@ -2,7 +2,7 @@
+ // { dg-xfail-if "" { "*-*-hpux11.23" } { "*" } { "" } } */
+ // { dg-options "-finput-charset=ISO8859-1" }
+ // { dg-require-iconv "ISO8859-1" }
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+ // { dg-require-namedlocale "en_US" }
+ // { dg-require-namedlocale "fr_FR" }
+ // { dg-require-namedlocale "de_DE" }
+@@ -44,6 +44,6 @@
+ func_callback two;
+ two.push_back(&test01);
+ two.push_back(&test02);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/collate/hash/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/collate/hash/char/wrapped_locale.cc
+@@ -1,7 +1,7 @@
+ // { dg-require-namedlocale "en_US" }
+ // { dg-require-namedlocale "fr_FR" }
+ // { dg-require-namedlocale "de_DE" }
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -40,6 +40,6 @@
+ func_callback two;
+ two.push_back(&test01);
+ two.push_back(&test02);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/collate/hash/wchar_t/wrapped_locale.cc
+@@ -2,7 +2,7 @@
+ // { dg-xfail-if "" { "*-*-hpux11.23" } { "*" } { "" } } */
+ // { dg-options "-finput-charset=ISO8859-1" }
+ // { dg-require-iconv "ISO8859-1" }
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+ // { dg-require-namedlocale "en_US" }
+ // { dg-require-namedlocale "fr_FR" }
+ // { dg-require-namedlocale "de_DE" }
+@@ -44,6 +44,6 @@
+ func_callback two;
+ two.push_back(&test01);
+ two.push_back(&test02);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/collate/transform/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/collate/transform/char/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+ // { dg-require-namedlocale "en_US" }
+ // { dg-require-namedlocale "fr_FR" }
+ // { dg-require-namedlocale "de_DE" }
+@@ -35,6 +35,6 @@
+ using namespace __gnu_test;
+ func_callback two;
+ two.push_back(&test02);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/collate/transform/wchar_t/wrapped_locale.cc
+@@ -2,7 +2,7 @@
+ // { dg-xfail-if "" { "*-*-hpux11.23" } { "*" } { "" } } */
+ // { dg-options "-finput-charset=ISO8859-1" }
+ // { dg-require-iconv "ISO8859-1" }
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+ // { dg-require-namedlocale "en_US" }
+ // { dg-require-namedlocale "fr_FR" }
+ // { dg-require-namedlocale "de_DE" }
+@@ -39,6 +39,6 @@
+ using namespace __gnu_test;
+ func_callback two;
+ two.push_back(&test02);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/ctype/cons/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/ctype/cons/char/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -32,6 +32,6 @@
+ using namespace __gnu_test;
+ func_callback two;
+ two.push_back(&test01);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/ctype/is/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/ctype/is/char/wrapped_locale.cc
+@@ -1,5 +1,5 @@
+ // { dg-require-namedlocale "de_DE" }
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -43,6 +43,6 @@
+ two.push_back(&test01);
+ two.push_back(&test02);
+ two.push_back(&test03);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/ctype/is/wchar_t/wrapped_locale.cc
+@@ -1,5 +1,5 @@
+ // { dg-require-namedlocale "de_DE" }
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -38,6 +38,6 @@
+ func_callback two;
+ two.push_back(&test01);
+ two.push_back(&test02);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/ctype/narrow/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/ctype/narrow/char/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -37,6 +37,6 @@
+ func_callback two;
+ two.push_back(&test01);
+ two.push_back(&test02);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -37,6 +37,6 @@
+ func_callback two;
+ two.push_back(&test01);
+ two.push_back(&test02);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/ctype/scan/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/ctype/scan/char/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -32,6 +32,6 @@
+ using namespace __gnu_test;
+ func_callback two;
+ two.push_back(&test01);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/ctype/scan/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/ctype/scan/wchar_t/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -32,6 +32,6 @@
+ using namespace __gnu_test;
+ func_callback two;
+ two.push_back(&test01);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/ctype/to/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/ctype/to/char/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -32,6 +32,6 @@
+ using namespace __gnu_test;
+ func_callback two;
+ two.push_back(&test01);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/ctype/to/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/ctype/to/wchar_t/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -32,6 +32,6 @@
+ using namespace __gnu_test;
+ func_callback two;
+ two.push_back(&test01);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/ctype/widen/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/ctype/widen/char/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -32,6 +32,6 @@
+ using namespace __gnu_test;
+ func_callback two;
+ two.push_back(&test01);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -32,6 +32,6 @@
+ using namespace __gnu_test;
+ func_callback two;
+ two.push_back(&test01);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/locale/cons/40184.cc.orig
++++ libstdc++-v3/testsuite/22_locale/locale/cons/40184.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // Copyright (C) 2009 Free Software Foundation
+ //
+@@ -29,7 +29,7 @@
+ using namespace std;
+ bool test __attribute__((unused)) = true;
+
+- locale locf(locale("C"), "ja_JP.eucjp", locale::monetary);
++ locale locf(locale("C"), "ja_JP.eucJP", locale::monetary);
+
+ const moneypunct<wchar_t, false>& mpf =
+ use_facet<moneypunct<wchar_t, false> >(locf);
+@@ -40,7 +40,7 @@
+
+ VERIFY( mpf.curr_symbol() == mpf_copy.curr_symbol() );
+
+- locale loct(locale("C"), "ja_JP.eucjp", locale::monetary);
++ locale loct(locale("C"), "ja_JP.eucJP", locale::monetary);
+
+ const moneypunct<wchar_t, true>& mpt =
+ use_facet<moneypunct<wchar_t, true> >(loct);
+--- libstdc++-v3/testsuite/22_locale/messages/members/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/messages/members/char/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+ // { dg-require-namedlocale "de_DE" }
+ // { dg-require-namedlocale "fr_FR" }
+ // { dg-require-namedlocale "en_US" }
+@@ -45,6 +45,6 @@
+ two.push_back(&test01);
+ two.push_back(&test02);
+ two.push_back(&test03);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/money_get/get/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/money_get/get/char/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+ // { dg-require-namedlocale "de_DE@euro" }
+ // { dg-require-namedlocale "en_HK" }
+
+@@ -69,6 +69,6 @@
+ two.push_back(&test06);
+ two.push_back(&test07);
+ two.push_back(&test08);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+ // { dg-require-namedlocale "de_DE@euro" }
+ // { dg-require-namedlocale "en_HK" }
+
+@@ -69,6 +69,6 @@
+ two.push_back(&test06);
+ two.push_back(&test07);
+ two.push_back(&test08);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/money_put/put/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/money_put/put/char/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+ // { dg-require-namedlocale "de_DE@euro" }
+ // { dg-require-namedlocale "en_HK" }
+
+@@ -59,6 +59,6 @@
+ two.push_back(&test04);
+ two.push_back(&test05);
+ two.push_back(&test06);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+ // { dg-require-namedlocale "de_DE@euro" }
+ // { dg-require-namedlocale "en_HK" }
+
+@@ -59,6 +59,6 @@
+ two.push_back(&test04);
+ two.push_back(&test05);
+ two.push_back(&test06);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/moneypunct/members/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/moneypunct/members/char/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+ // { dg-require-namedlocale "de_DE" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+@@ -38,6 +38,6 @@
+ func_callback two;
+ two.push_back(&test01);
+ two.push_back(&test02);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/moneypunct/members/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/moneypunct/members/wchar_t/wrapped_locale.cc
+@@ -1,5 +1,5 @@
+ // { dg-require-namedlocale "de_DE" }
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -38,6 +38,6 @@
+ func_callback two;
+ two.push_back(&test01);
+ two.push_back(&test02);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/num_get/get/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/num_get/get/char/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+ // { dg-require-namedlocale "de_DE" }
+ // { dg-require-namedlocale "en_HK" }
+
+@@ -59,6 +59,6 @@
+ two.push_back(&test04);
+ two.push_back(&test05);
+ two.push_back(&test06);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+ // { dg-require-namedlocale "de_DE" }
+ // { dg-require-namedlocale "en_HK" }
+
+@@ -59,6 +59,6 @@
+ two.push_back(&test04);
+ two.push_back(&test05);
+ two.push_back(&test06);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/num_put/put/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/num_put/put/char/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+ // { dg-require-namedlocale "de_DE" }
+ // { dg-require-namedlocale "en_HK" }
+ // { dg-require-namedlocale "es_ES" }
+@@ -55,6 +55,6 @@
+ two.push_back(&test03);
+ two.push_back(&test04);
+ two.push_back(&test05);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+ // { dg-require-namedlocale "de_DE" }
+ // { dg-require-namedlocale "en_HK" }
+
+@@ -54,6 +54,6 @@
+ two.push_back(&test03);
+ two.push_back(&test04);
+ two.push_back(&test05);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/numpunct/members/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/numpunct/members/char/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+ // { dg-require-namedlocale "de_DE" }
+ // { dg-require-namedlocale "en_US" }
+ // { dg-require-namedlocale "is_IS" }
+@@ -40,6 +40,6 @@
+ func_callback two;
+ two.push_back(&test01);
+ two.push_back(&test02);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/numpunct/members/wchar_t/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+ // { dg-require-namedlocale "de_DE" }
+ // { dg-require-namedlocale "en_US" }
+ // { dg-require-namedlocale "is_IS" }
+@@ -40,6 +40,6 @@
+ func_callback two;
+ two.push_back(&test01);
+ two.push_back(&test02);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/time_get/date_order/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/date_order/char/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -32,6 +32,6 @@
+ using namespace __gnu_test;
+ func_callback two;
+ two.push_back(&test01);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/time_get/date_order/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/date_order/wchar_t/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -32,6 +32,6 @@
+ using namespace __gnu_test;
+ func_callback two;
+ two.push_back(&test01);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/time_get/get_date/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_date/char/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+ // { dg-require-namedlocale "de_DE" }
+ // { dg-require-namedlocale "en_HK" }
+
+@@ -44,6 +44,6 @@
+ two.push_back(&test01);
+ two.push_back(&test02);
+ two.push_back(&test03);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+ // { dg-require-namedlocale "de_DE" }
+ // { dg-require-namedlocale "en_HK" }
+
+@@ -44,6 +44,6 @@
+ two.push_back(&test01);
+ two.push_back(&test02);
+ two.push_back(&test03);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+ // { dg-require-namedlocale "de_DE" }
+ // { dg-require-namedlocale "en_HK" }
+
+@@ -44,6 +44,6 @@
+ two.push_back(&test01);
+ two.push_back(&test02);
+ two.push_back(&test03);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+ // { dg-require-namedlocale "de_DE" }
+ // { dg-require-namedlocale "en_HK" }
+
+@@ -44,6 +44,6 @@
+ two.push_back(&test01);
+ two.push_back(&test02);
+ two.push_back(&test03);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/time_get/get_time/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_time/char/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+ // { dg-require-namedlocale "de_DE" }
+ // { dg-require-namedlocale "en_HK" }
+
+@@ -44,6 +44,6 @@
+ two.push_back(&test01);
+ two.push_back(&test02);
+ two.push_back(&test03);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+ // { dg-require-namedlocale "de_DE" }
+ // { dg-require-namedlocale "en_HK" }
+
+@@ -44,6 +44,6 @@
+ two.push_back(&test01);
+ two.push_back(&test02);
+ two.push_back(&test03);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+ // { dg-require-namedlocale "de_DE" }
+ // { dg-require-namedlocale "en_HK" }
+
+@@ -44,6 +44,6 @@
+ two.push_back(&test01);
+ two.push_back(&test02);
+ two.push_back(&test03);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/wrapped_locale.cc
+@@ -1,6 +1,6 @@
+ // { dg-require-namedlocale "en_HK" }
+ // { dg-require-namedlocale "de_DE" }
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -44,6 +44,6 @@
+ two.push_back(&test01);
+ two.push_back(&test02);
+ two.push_back(&test03);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/time_get/get_year/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_year/char/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -37,6 +37,6 @@
+ func_callback two;
+ two.push_back(&test01);
+ two.push_back(&test03);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -37,6 +37,6 @@
+ func_callback two;
+ two.push_back(&test01);
+ two.push_back(&test03);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/time_put/put/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_put/put/char/wrapped_locale.cc
+@@ -80,6 +80,6 @@
+ two.push_back(&test08);
+ two.push_back(&test09);
+ two.push_back(&test10);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/wrapped_locale.cc
+@@ -2,7 +2,7 @@
+ // { dg-require-namedlocale "en_HK" }
+ // { dg-require-namedlocale "es_ES" }
+ // { dg-require-namedlocale "fr_FR@euro" }
+-// { dg-require-namedlocale "ja_JP.eucjp" }
++// { dg-require-namedlocale "ja_JP.eucJP" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -81,6 +81,6 @@
+ two.push_back(&test08);
+ two.push_back(&test09);
+ two.push_back(&test10);
+- run_tests_wrapped_locale("ja_JP.eucjp", two);
++ run_tests_wrapped_locale("ja_JP.eucJP", two);
+ return 0;
+ }
+--- libstdc++-v3/testsuite/22_locale/money_get/get/char/16.cc.orig
++++ libstdc++-v3/testsuite/22_locale/money_get/get/char/16.cc
+@@ -1,5 +1,5 @@
+ // { dg-require-namedlocale "de_DE@euro" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2004-03-02 Paolo Carlini <pcarlini@suse.de>
+
+@@ -37,7 +37,7 @@
+ // basic construction
+ locale loc_c = locale::classic();
+ locale loc_de = locale("de_DE@euro");
+- locale loc_hk = locale("en_HK");
++ locale loc_hk = locale("zh_HK");
+ VERIFY( loc_hk != loc_de );
+ VERIFY( loc_c != loc_hk );
+
+--- libstdc++-v3/testsuite/22_locale/money_get/get/char/18.cc.orig
++++ libstdc++-v3/testsuite/22_locale/money_get/get/char/18.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2004-03-15 Paolo Carlini <pcarlini@suse.de>
+
+@@ -36,7 +36,7 @@
+
+ // basic construction
+ locale loc_c = locale::classic();
+- locale loc_hk = locale("en_HK");
++ locale loc_hk = locale("zh_HK");
+ VERIFY( loc_c != loc_hk );
+
+ iterator_type end, end01, end02;
+--- libstdc++-v3/testsuite/22_locale/money_get/get/char/2.cc.orig
++++ libstdc++-v3/testsuite/22_locale/money_get/get/char/2.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-09-12 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -35,7 +35,7 @@
+
+ // basic construction
+ locale loc_c = locale::classic();
+- locale loc_hk = locale("en_HK");
++ locale loc_hk = locale("zh_HK");
+ VERIFY( loc_c != loc_hk );
+
+ // total EPA budget FY 2002
+@@ -80,7 +80,7 @@
+ VERIFY( result11 == digits4 );
+ VERIFY( err11 == ios_base::eofbit );
+
+- // for the "en_HK" locale the parsing of the very same input streams must
++ // for the "zh_HK" locale the parsing of the very same input streams must
+ // be successful without showbase too, since the symbol field appears in
+ // the first positions in the format and the symbol, when present, must be
+ // consumed.
+--- libstdc++-v3/testsuite/22_locale/money_get/get/char/4.cc.orig
++++ libstdc++-v3/testsuite/22_locale/money_get/get/char/4.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-09-12 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -35,7 +35,7 @@
+
+ // basic construction
+ locale loc_c = locale::classic();
+- locale loc_hk = locale("en_HK");
++ locale loc_hk = locale("zh_HK");
+ VERIFY( loc_c != loc_hk );
+
+ // input less than frac_digits
+--- libstdc++-v3/testsuite/22_locale/money_get/get/char/wrapped_env.cc.orig
++++ libstdc++-v3/testsuite/22_locale/money_get/get/char/wrapped_env.cc
+@@ -1,6 +1,6 @@
+ // { dg-require-namedlocale "de_DE" }
+ // { dg-require-namedlocale "de_DE@euro" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+--- libstdc++-v3/testsuite/22_locale/money_get/get/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/money_get/get/char/wrapped_locale.cc
+@@ -1,6 +1,6 @@
+ // { dg-require-namedlocale "ja_JP.eucjp" }
+ // { dg-require-namedlocale "de_DE@euro" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+--- libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/16.cc.orig
++++ libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/16.cc
+@@ -1,5 +1,5 @@
+ // { dg-require-namedlocale "de_DE@euro" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2004-03-02 Paolo Carlini <pcarlini@suse.de>
+
+@@ -37,7 +37,7 @@
+ // basic construction
+ locale loc_c = locale::classic();
+ locale loc_de = locale("de_DE@euro");
+- locale loc_hk = locale("en_HK");
++ locale loc_hk = locale("zh_HK");
+ VERIFY( loc_hk != loc_de );
+ VERIFY( loc_c != loc_hk );
+
+--- libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/18.cc.orig
++++ libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/18.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2004-03-15 Paolo Carlini <pcarlini@suse.de>
+
+@@ -36,7 +36,7 @@
+
+ // basic construction
+ locale loc_c = locale::classic();
+- locale loc_hk = locale("en_HK");
++ locale loc_hk = locale("zh_HK");
+ VERIFY( loc_c != loc_hk );
+
+ iterator_type end, end01, end02;
+--- libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/2.cc.orig
++++ libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/2.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-09-12 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -35,7 +35,7 @@
+
+ // basic construction
+ locale loc_c = locale::classic();
+- locale loc_hk = locale("en_HK");
++ locale loc_hk = locale("zh_HK");
+ VERIFY( loc_c != loc_hk );
+
+ // total EPA budget FY 2002
+@@ -80,7 +80,7 @@
+ VERIFY( result11 == digits4 );
+ VERIFY( err11 == ios_base::eofbit );
+
+- // for the "en_HK" locale the parsing of the very same input streams must
++ // for the "zh_HK" locale the parsing of the very same input streams must
+ // be successful without showbase too, since the symbol field appears in
+ // the first positions in the format and the symbol, when present, must be
+ // consumed.
+--- libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/4.cc.orig
++++ libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/4.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-09-12 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -35,7 +35,7 @@
+
+ // basic construction
+ locale loc_c = locale::classic();
+- locale loc_hk = locale("en_HK");
++ locale loc_hk = locale("zh_HK");
+ VERIFY( loc_c != loc_hk );
+
+ // input less than frac_digits
+--- libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/wrapped_env.cc.orig
++++ libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/wrapped_env.cc
+@@ -1,6 +1,6 @@
+ // { dg-require-namedlocale "de_DE" }
+ // { dg-require-namedlocale "de_DE@euro" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+--- libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/money_get/get/wchar_t/wrapped_locale.cc
+@@ -1,6 +1,6 @@
+ // { dg-require-namedlocale "ja_JP.eucjp" }
+ // { dg-require-namedlocale "de_DE@euro" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+--- libstdc++-v3/testsuite/22_locale/money_put/put/char/2.cc.orig
++++ libstdc++-v3/testsuite/22_locale/money_put/put/char/2.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-08-27 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -36,7 +36,7 @@
+
+ // basic construction
+ locale loc_c = locale::classic();
+- locale loc_hk = locale("en_HK");
++ locale loc_hk = locale("zh_HK");
+ VERIFY( loc_c != loc_hk );
+
+ // sanity check the data is correct.
+--- libstdc++-v3/testsuite/22_locale/money_put/put/char/wrapped_env.cc.orig
++++ libstdc++-v3/testsuite/22_locale/money_put/put/char/wrapped_env.cc
+@@ -1,6 +1,6 @@
+ // { dg-require-namedlocale "de_DE" }
+ // { dg-require-namedlocale "de_DE@euro" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+--- libstdc++-v3/testsuite/22_locale/money_put/put/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/money_put/put/char/wrapped_locale.cc
+@@ -1,6 +1,6 @@
+ // { dg-require-namedlocale "ja_JP.eucjp" }
+ // { dg-require-namedlocale "de_DE@euro" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+--- libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/2.cc.orig
++++ libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/2.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-08-27 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -36,7 +36,7 @@
+
+ // basic construction
+ locale loc_c = locale::classic();
+- locale loc_hk = locale("en_HK");
++ locale loc_hk = locale("zh_HK");
+ VERIFY( loc_c != loc_hk );
+
+ // sanity check the data is correct.
+--- libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/wrapped_env.cc.orig
++++ libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/wrapped_env.cc
+@@ -1,6 +1,6 @@
+ // { dg-require-namedlocale "de_DE" }
+ // { dg-require-namedlocale "de_DE@euro" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+--- libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/money_put/put/wchar_t/wrapped_locale.cc
+@@ -1,6 +1,6 @@
+ // { dg-require-namedlocale "ja_JP.eucjp" }
+ // { dg-require-namedlocale "de_DE@euro" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+--- libstdc++-v3/testsuite/22_locale/num_get/get/char/3.cc.orig
++++ libstdc++-v3/testsuite/22_locale/num_get/get/char/3.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-11-21 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -34,7 +34,7 @@
+
+ // basic construction
+ locale loc_c = locale::classic();
+- locale loc_hk = locale("en_HK");
++ locale loc_hk = locale("zh_HK");
+ VERIFY( loc_c != loc_hk );
+
+ // sanity check the data is correct.
+--- libstdc++-v3/testsuite/22_locale/num_get/get/char/wrapped_env.cc.orig
++++ libstdc++-v3/testsuite/22_locale/num_get/get/char/wrapped_env.cc
+@@ -1,5 +1,5 @@
+ // { dg-require-namedlocale "de_DE" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+--- libstdc++-v3/testsuite/22_locale/num_get/get/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/num_get/get/char/wrapped_locale.cc
+@@ -1,6 +1,6 @@
+ // { dg-require-namedlocale "ja_JP.eucjp" }
+ // { dg-require-namedlocale "de_DE" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+--- libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/3.cc.orig
++++ libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/3.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-11-21 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -34,7 +34,7 @@
+
+ // basic construction
+ locale loc_c = locale::classic();
+- locale loc_hk = locale("en_HK");
++ locale loc_hk = locale("zh_HK");
+ VERIFY( loc_c != loc_hk );
+
+ // sanity check the data is correct.
+--- libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/wrapped_env.cc.orig
++++ libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/wrapped_env.cc
+@@ -1,5 +1,5 @@
+ // { dg-require-namedlocale "de_DE" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+--- libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/wrapped_locale.cc
+@@ -1,6 +1,6 @@
+ // { dg-require-namedlocale "ja_JP.eucjp" }
+ // { dg-require-namedlocale "de_DE" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+--- libstdc++-v3/testsuite/22_locale/num_put/put/char/3.cc.orig
++++ libstdc++-v3/testsuite/22_locale/num_put/put/char/3.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-11-19 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -34,7 +34,7 @@
+
+ // basic construction
+ locale loc_c = locale::classic();
+- locale loc_hk = locale("en_HK");
++ locale loc_hk = locale("zh_HK");
+ VERIFY( loc_c != loc_hk );
+
+ // sanity check the data is correct.
+--- libstdc++-v3/testsuite/22_locale/num_put/put/char/wrapped_env.cc.orig
++++ libstdc++-v3/testsuite/22_locale/num_put/put/char/wrapped_env.cc
+@@ -1,5 +1,5 @@
+ // { dg-require-namedlocale "de_DE" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+ // { dg-require-namedlocale "es_ES" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+--- libstdc++-v3/testsuite/22_locale/num_put/put/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/num_put/put/char/wrapped_locale.cc
+@@ -1,6 +1,6 @@
+ // { dg-require-namedlocale "ja_JP.eucjp" }
+ // { dg-require-namedlocale "de_DE" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+ // { dg-require-namedlocale "es_ES" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+--- libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/3.cc.orig
++++ libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/3.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-11-19 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -34,7 +34,7 @@
+
+ // basic construction
+ locale loc_c = locale::classic();
+- locale loc_hk = locale("en_HK");
++ locale loc_hk = locale("zh_HK");
+ VERIFY( loc_c != loc_hk );
+
+ // sanity check the data is correct.
+--- libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/wrapped_env.cc.orig
++++ libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/wrapped_env.cc
+@@ -1,5 +1,5 @@
+ // { dg-require-namedlocale "de_DE" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+--- libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/wrapped_locale.cc
+@@ -1,6 +1,6 @@
+ // { dg-require-namedlocale "ja_JP.eucjp" }
+ // { dg-require-namedlocale "de_DE" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+--- libstdc++-v3/testsuite/22_locale/time_get/get_date/char/2.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_date/char/2.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+ // { dg-require-namedlocale "de_DE" }
+
+ // 2001-09-21 Benjamin Kosnik <bkoz@redhat.com>
+@@ -36,7 +36,7 @@
+
+ // basic construction and sanity checks.
+ locale loc_c = locale::classic();
+- locale loc_hk = locale("en_HK");
++ locale loc_hk = locale("zh_HK");
+ locale loc_de = locale("de_DE");
+ VERIFY( loc_hk != loc_c );
+ VERIFY( loc_hk != loc_de );
+@@ -76,7 +76,7 @@
+ VERIFY( time10.tm_year == time_bday.tm_year );
+ VERIFY( errorstate == ios_base::eofbit );
+
+- // inspection of named locales, en_HK
++ // inspection of named locales, zh_HK
+ iss.imbue(loc_hk);
+ iss.str("Sunday, April 04, 1971");
+ iterator_type is_it20(iss);
+--- libstdc++-v3/testsuite/22_locale/time_get/get_date/char/wrapped_env.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_date/char/wrapped_env.cc
+@@ -1,5 +1,5 @@
+ // { dg-require-namedlocale "de_DE" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+--- libstdc++-v3/testsuite/22_locale/time_get/get_date/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_date/char/wrapped_locale.cc
+@@ -1,6 +1,6 @@
+ // { dg-require-namedlocale "ja_JP.eucjp" }
+ // { dg-require-namedlocale "de_DE" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+--- libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/2.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/2.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+ // { dg-require-namedlocale "de_DE" }
+
+ // 2001-09-21 Benjamin Kosnik <bkoz@redhat.com>
+@@ -36,7 +36,7 @@
+
+ // basic construction and sanity checks.
+ locale loc_c = locale::classic();
+- locale loc_hk = locale("en_HK");
++ locale loc_hk = locale("zh_HK");
+ locale loc_de = locale("de_DE");
+ VERIFY( loc_hk != loc_c );
+ VERIFY( loc_hk != loc_de );
+@@ -76,7 +76,7 @@
+ VERIFY( time10.tm_year == time_bday.tm_year );
+ VERIFY( errorstate == ios_base::eofbit );
+
+- // inspection of named locales, en_HK
++ // inspection of named locales, zh_HK
+ iss.imbue(loc_hk);
+ iss.str(L"Sunday, April 04, 1971");
+ iterator_type is_it20(iss);
+--- libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/wrapped_env.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/wrapped_env.cc
+@@ -1,5 +1,5 @@
+ // { dg-require-namedlocale "de_DE" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+--- libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/wrapped_locale.cc
+@@ -1,6 +1,6 @@
+ // { dg-require-namedlocale "ja_JP.eucjp" }
+ // { dg-require-namedlocale "de_DE" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+--- libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/2.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/2.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+ // { dg-require-namedlocale "de_DE" }
+
+ // 2001-09-21 Benjamin Kosnik <bkoz@redhat.com>
+@@ -35,7 +35,7 @@
+
+ // basic construction and sanity checks.
+ locale loc_c = locale::classic();
+- locale loc_hk = locale("en_HK");
++ locale loc_hk = locale("zh_HK");
+ locale loc_de = locale("de_DE");
+ VERIFY( loc_hk != loc_c );
+ VERIFY( loc_hk != loc_de );
+@@ -63,7 +63,7 @@
+ VERIFY( time10.tm_mon == time_bday.tm_mon );
+ VERIFY( errorstate == ios_base::eofbit );
+
+- // inspection of named locales, en_HK
++ // inspection of named locales, zh_HK
+ iss.imbue(loc_hk);
+ const time_get<char>& tim_get2 = use_facet<time_get<char> >(iss.getloc());
+ iss.str("April");
+--- libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/wrapped_env.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/wrapped_env.cc
+@@ -1,5 +1,5 @@
+ // { dg-require-namedlocale "de_DE" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+--- libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/wrapped_locale.cc
+@@ -1,6 +1,6 @@
+ // { dg-require-namedlocale "ja_JP.eucjp" }
+ // { dg-require-namedlocale "de_DE" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+--- libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/2.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/2.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+ // { dg-require-namedlocale "de_DE" }
+
+ // 2001-09-21 Benjamin Kosnik <bkoz@redhat.com>
+@@ -36,7 +36,7 @@
+
+ // basic construction and sanity checks.
+ locale loc_c = locale::classic();
+- locale loc_hk = locale("en_HK");
++ locale loc_hk = locale("zh_HK");
+ locale loc_de = locale("de_DE");
+ VERIFY( loc_hk != loc_c );
+ VERIFY( loc_hk != loc_de );
+@@ -64,7 +64,7 @@
+ VERIFY( time10.tm_mon == time_bday.tm_mon );
+ VERIFY( errorstate == ios_base::eofbit );
+
+- // inspection of named locales, en_HK
++ // inspection of named locales, zh_HK
+ iss.imbue(loc_hk);
+ const time_get<wchar_t>& tim_get2 = use_facet<time_get<wchar_t> >(iss.getloc());
+ iss.str(L"April");
+--- libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/wrapped_env.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/wrapped_env.cc
+@@ -1,5 +1,5 @@
+ // { dg-require-namedlocale "de_DE" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+--- libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_monthname/wchar_t/wrapped_locale.cc
+@@ -1,6 +1,6 @@
+ // { dg-require-namedlocale "ja_JP.eucjp" }
+ // { dg-require-namedlocale "de_DE" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+--- libstdc++-v3/testsuite/22_locale/time_get/get_time/char/2.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_time/char/2.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-09-21 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -35,7 +35,7 @@
+
+ // basic construction and sanity check
+ locale loc_c = locale::classic();
+- locale loc_hk = locale("en_HK");
++ locale loc_hk = locale("zh_HK");
+ VERIFY( loc_hk != loc_c );
+
+ const string empty;
+@@ -48,7 +48,7 @@
+ const ios_base::iostate good = ios_base::goodbit;
+ ios_base::iostate errorstate = good;
+
+- // inspection of named locales, en_HK
++ // inspection of named locales, zh_HK
+ iss.imbue(loc_hk);
+ iss.str("12:00:00 PST");
+ // Hong Kong in California! Well, they have Paris in Vegas... this
+--- libstdc++-v3/testsuite/22_locale/time_get/get_time/char/wrapped_env.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_time/char/wrapped_env.cc
+@@ -1,5 +1,5 @@
+ // { dg-require-namedlocale "de_DE" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+--- libstdc++-v3/testsuite/22_locale/time_get/get_time/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_time/char/wrapped_locale.cc
+@@ -1,6 +1,6 @@
+ // { dg-require-namedlocale "ja_JP.eucjp" }
+ // { dg-require-namedlocale "de_DE" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+--- libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/2.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/2.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-09-21 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -35,7 +35,7 @@
+
+ // basic construction and sanity check
+ locale loc_c = locale::classic();
+- locale loc_hk = locale("en_HK");
++ locale loc_hk = locale("zh_HK");
+ VERIFY( loc_hk != loc_c );
+
+ const wstring empty;
+@@ -48,7 +48,7 @@
+ const ios_base::iostate good = ios_base::goodbit;
+ ios_base::iostate errorstate = good;
+
+- // inspection of named locales, en_HK
++ // inspection of named locales, zh_HK
+ iss.imbue(loc_hk);
+ iss.str(L"12:00:00 PST");
+ // Hong Kong in California! Well, they have Paris in Vegas... this
+--- libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/wrapped_env.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/wrapped_env.cc
+@@ -1,5 +1,5 @@
+ // { dg-require-namedlocale "de_DE" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+--- libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/wrapped_locale.cc
+@@ -1,6 +1,6 @@
+ // { dg-require-namedlocale "ja_JP.eucjp" }
+ // { dg-require-namedlocale "de_DE" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+--- libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/2.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/2.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+ // { dg-require-namedlocale "de_DE" }
+
+ // 2001-09-21 Benjamin Kosnik <bkoz@redhat.com>
+@@ -36,7 +36,7 @@
+
+ // basic construction and sanity checks.
+ locale loc_c = locale::classic();
+- locale loc_hk = locale("en_HK");
++ locale loc_hk = locale("zh_HK");
+ locale loc_de = locale("de_DE");
+ VERIFY( loc_hk != loc_c );
+ VERIFY( loc_hk != loc_de );
+@@ -65,7 +65,7 @@
+ VERIFY( time10.tm_wday == time_bday.tm_wday );
+ VERIFY( errorstate == ios_base::eofbit );
+
+- // inspection of named locales, en_HK
++ // inspection of named locales, zh_HK
+ iss.imbue(loc_hk);
+ iss.str("Sunday");
+ iterator_type is_it20(iss);
+--- libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/wrapped_env.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/wrapped_env.cc
+@@ -1,5 +1,5 @@
+ // { dg-require-namedlocale "de_DE" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+--- libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/wrapped_locale.cc
+@@ -1,6 +1,6 @@
+ // { dg-require-namedlocale "ja_JP.eucjp" }
+ // { dg-require-namedlocale "de_DE" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+
+--- libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/2.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/2.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+ // { dg-require-namedlocale "de_DE" }
+
+ // 2001-09-21 Benjamin Kosnik <bkoz@redhat.com>
+@@ -36,7 +36,7 @@
+
+ // basic construction and sanity checks.
+ locale loc_c = locale::classic();
+- locale loc_hk = locale("en_HK");
++ locale loc_hk = locale("zh_HK");
+ locale loc_de = locale("de_DE");
+ VERIFY( loc_hk != loc_c );
+ VERIFY( loc_hk != loc_de );
+@@ -65,7 +65,7 @@
+ VERIFY( time10.tm_wday == time_bday.tm_wday );
+ VERIFY( errorstate == ios_base::eofbit );
+
+- // inspection of named locales, en_HK
++ // inspection of named locales, zh_HK
+ iss.imbue(loc_hk);
+ iss.str(L"Sunday");
+ iterator_type is_it20(iss);
+--- libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/wrapped_env.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/wrapped_env.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+ // { dg-require-namedlocale "de_DE" }
+
+ // 2001-08-15 Benjamin Kosnik <bkoz@redhat.com>
+--- libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_weekday/wchar_t/wrapped_locale.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+ // { dg-require-namedlocale "de_DE" }
+ // { dg-require-namedlocale "ja_JP.eucjp" }
+
+--- libstdc++-v3/testsuite/22_locale/time_put/put/char/3.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_put/put/char/3.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-09-17 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -38,7 +38,7 @@
+
+ // basic construction and sanity check.
+ locale loc_c = locale::classic();
+- locale loc_hk = locale("en_HK");
++ locale loc_hk = locale("zh_HK");
+ VERIFY( loc_hk != loc_c );
+
+ // create an ostream-derived object, cache the time_put facet
+--- libstdc++-v3/testsuite/22_locale/time_put/put/char/7.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_put/put/char/7.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-09-17 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -41,7 +41,7 @@
+
+ // basic construction and sanity check
+ locale loc_c = locale::classic();
+- locale loc_hk = locale("en_HK");
++ locale loc_hk = locale("zh_HK");
+ VERIFY( loc_hk != loc_c );
+
+ // create an ostream-derived object, cache the time_put facet
+--- libstdc++-v3/testsuite/22_locale/time_put/put/char/wrapped_env.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_put/put/char/wrapped_env.cc
+@@ -1,5 +1,5 @@
+ // { dg-require-namedlocale "de_DE" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+ // { dg-require-namedlocale "es_ES" }
+ // { dg-require-namedlocale "fr_FR@euro" }
+
+--- libstdc++-v3/testsuite/22_locale/time_put/put/char/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_put/put/char/wrapped_locale.cc
+@@ -1,5 +1,5 @@
+ // { dg-require-namedlocale "de_DE" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+ // { dg-require-namedlocale "es_ES" }
+ // { dg-require-namedlocale "fr_FR@euro" }
+
+--- libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/3.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/3.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-09-17 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -38,7 +38,7 @@
+
+ // basic construction and sanity check
+ locale loc_c = locale::classic();
+- locale loc_hk = locale("en_HK");
++ locale loc_hk = locale("zh_HK");
+ VERIFY( loc_hk != loc_c );
+
+ // create an ostream-derived object, cache the time_put facet
+--- libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/7.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/7.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+
+ // 2001-09-17 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -41,7 +41,7 @@
+
+ // basic construction and sanity check
+ locale loc_c = locale::classic();
+- locale loc_hk = locale("en_HK");
++ locale loc_hk = locale("zh_HK");
+ VERIFY( loc_hk != loc_c );
+
+ // create an ostream-derived object, cache the time_put facet
+--- libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/wrapped_env.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/wrapped_env.cc
+@@ -1,5 +1,5 @@
+ // { dg-require-namedlocale "de_DE" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+ // { dg-require-namedlocale "es_ES" }
+ // { dg-require-namedlocale "fr_FR@euro" }
+
+--- libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/wrapped_locale.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_put/put/wchar_t/wrapped_locale.cc
+@@ -1,5 +1,5 @@
+ // { dg-require-namedlocale "de_DE" }
+-// { dg-require-namedlocale "en_HK" }
++// { dg-require-namedlocale "zh_HK" }
+ // { dg-require-namedlocale "es_ES" }
+ // { dg-require-namedlocale "fr_FR@euro" }
+ // { dg-require-namedlocale "ja_JP.eucjp" }
+--- libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/3.cc.orig
++++ libstdc++-v3/testsuite/22_locale/ctype/narrow/wchar_t/3.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "se_NO.UTF-8" }
++// { dg-require-namedlocale "no_NO.UTF-8" }
+
+ // 2003-03-12 Petur Runolfsson <peturr02@ru.is>
+
+@@ -31,7 +31,7 @@
+ using namespace std;
+ bool test __attribute__((unused)) = true;
+
+- locale loc = locale("se_NO.UTF-8");
++ locale loc = locale("no_NO.UTF-8");
+ const ctype<wchar_t>& wct = use_facet<ctype<wchar_t> >(loc);
+
+ const wchar_t* wstrlit = L"\x80";
+--- libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/3.cc.orig
++++ libstdc++-v3/testsuite/22_locale/ctype/widen/wchar_t/3.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "se_NO.UTF-8" }
++// { dg-require-namedlocale "no_NO.UTF-8" }
+
+ // 2003-03-12 Petur Runolfsson <peturr02@ru.is>
+
+@@ -31,7 +31,7 @@
+ using namespace std;
+ bool test __attribute__((unused)) = true;
+
+- locale loc = locale("se_NO.UTF-8");
++ locale loc = locale("no_NO.UTF-8");
+ const ctype<wchar_t>& wct = use_facet<ctype<wchar_t> >(loc);
+
+ const char* strlit = "\xc2\x80";
+--- libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/1.cc.orig
++++ libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/1.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "se_NO.UTF-8" }
++// { dg-require-namedlocale "no_NO.UTF-8" }
+
+ // 2003-09-08 Petur Runolfsson <peturr02@ru.is>
+
+@@ -91,7 +91,7 @@
+ const size_t wlen = sizeof(wstr) / sizeof(wstr[0]);
+
+ const int loops = 2 * BUFSIZ / wlen;
+- locale loc = locale("se_NO.UTF-8");
++ locale loc = locale("no_NO.UTF-8");
+
+ FILE* file = fopen(name, "w");
+ for (int i = 0; i < loops; ++i)
+--- libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/2.cc.orig
++++ libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/2.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "se_NO.UTF-8" }
++// { dg-require-namedlocale "no_NO.UTF-8" }
+
+ // 2003-09-08 Petur Runolfsson <peturr02@ru.is>
+
+@@ -35,7 +35,7 @@
+ bool test __attribute__((unused)) = true;
+ const char name[] = "tmp_seekoff-2.tst";
+
+- locale loc = locale("se_NO.UTF-8");
++ locale loc = locale("no_NO.UTF-8");
+
+ const size_t size = 10;
+ wchar_t buf[size];
+--- libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/wchar_t/9874.cc.orig
++++ libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/wchar_t/9874.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "se_NO.UTF-8" }
++// { dg-require-namedlocale "no_NO.UTF-8" }
+
+ // 2003-10-07 Petur Runolfsson <peturr02@ru.is>
+ //
+@@ -93,7 +93,7 @@
+ const size_t wlen = sizeof(wstr) / sizeof(wstr[0]);
+
+ const int loops = 2 * BUFSIZ / wlen;
+- locale loc = locale("se_NO.UTF-8");
++ locale loc = locale("no_NO.UTF-8");
+
+ FILE* file = fopen(name, "w");
+ for (int i = 0; i < loops; ++i)
+--- libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/1.cc.orig
++++ libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/1.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "se_NO.UTF-8" }
++// { dg-require-namedlocale "no_NO.UTF-8" }
+
+ // 2003-09-04 Petur Runolfsson <peturr02@ru.is>
+
+@@ -86,7 +86,7 @@
+ const size_t clen = sizeof(cstr) / sizeof(cstr[0]);
+ const size_t wlen = sizeof(wstr) / sizeof(wstr[0]);
+
+- locale loc = locale("se_NO.UTF-8");
++ locale loc = locale("no_NO.UTF-8");
+
+ FILE* file = fopen(name, "w");
+ fwrite(cstr, 1, clen, file);
+--- libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/2.cc.orig
++++ libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/2.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "se_NO.UTF-8" }
++// { dg-require-namedlocale "no_NO.UTF-8" }
+
+ // 2003-09-04 Petur Runolfsson <peturr02@ru.is>
+
+@@ -86,7 +86,7 @@
+ const size_t clen = sizeof(cstr) / sizeof(cstr[0]);
+ const size_t wlen = sizeof(wstr) / sizeof(wstr[0]);
+
+- locale loc = locale("se_NO.UTF-8");
++ locale loc = locale("no_NO.UTF-8");
+
+ FILE* file = fopen(name, "w");
+ fwrite(cstr, 1, clen, file);
+--- libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/3.cc.orig
++++ libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/3.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "se_NO.UTF-8" }
++// { dg-require-namedlocale "no_NO.UTF-8" }
+
+ // 2003-09-04 Petur Runolfsson <peturr02@ru.is>
+
+@@ -87,7 +87,7 @@
+ const size_t wlen = sizeof(wstr) / sizeof(wstr[0]);
+
+ const int loops = 2 * BUFSIZ / wlen;
+- locale loc = locale("se_NO.UTF-8");
++ locale loc = locale("no_NO.UTF-8");
+
+ FILE* file = fopen(name, "w");
+ for (int i = 0; i < loops; ++i)
+--- libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/4.cc.orig
++++ libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/4.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "se_NO.UTF-8" }
++// { dg-require-namedlocale "no_NO.UTF-8" }
+
+ // 2003-09-04 Petur Runolfsson <peturr02@ru.is>
+ // Adapted from 27_io/basic_filebuf/underflow/char/2.cc
+@@ -31,7 +31,7 @@
+ bool test __attribute__((unused)) = true;
+ using namespace std;
+
+- locale loc (locale("se_NO.UTF-8"));
++ locale loc (locale("no_NO.UTF-8"));
+ wfilebuf fb_out, fb_in_out;
+ fb_out.pubimbue(loc);
+ fb_in_out.pubimbue(loc);
+--- libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/5.cc.orig
++++ libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/5.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "se_NO.UTF-8" }
++// { dg-require-namedlocale "no_NO.UTF-8" }
+
+ // 2003-09-04 Petur Runolfsson <peturr02@ru.is>
+
+@@ -35,7 +35,7 @@
+
+ wfilebuf fb;
+ fb.pubsetbuf(0, 0);
+- fb.pubimbue(locale("se_NO.UTF-8"));
++ fb.pubimbue(locale("no_NO.UTF-8"));
+
+ FILE* file = fopen(name, "w");
+ setvbuf(file, 0, _IONBF, 0);
+--- libstdc++-v3/testsuite/27_io/objects/wchar_t/10.cc.orig
++++ libstdc++-v3/testsuite/27_io/objects/wchar_t/10.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "se_NO.UTF-8" }
++// { dg-require-namedlocale "no_NO.UTF-8" }
+
+ // 2003-05-01 Petur Runolfsson <peturr02@ru.is>
+
+@@ -33,7 +33,7 @@
+ bool test __attribute__((unused)) = true;
+ const char* name = "tmp_10";
+
+- locale loc(locale("se_NO.UTF-8"));
++ locale loc(locale("no_NO.UTF-8"));
+ locale::global(loc);
+ wcin.imbue(loc);
+ wcout.imbue(loc);
+--- libstdc++-v3/testsuite/27_io/objects/wchar_t/11.cc.orig
++++ libstdc++-v3/testsuite/27_io/objects/wchar_t/11.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "se_NO.UTF-8" }
++// { dg-require-namedlocale "no_NO.UTF-8" }
+
+ // 2003-05-01 Petur Runolfsson <peturr02@ru.is>
+
+@@ -33,7 +33,7 @@
+ bool test __attribute__((unused)) = true;
+ const char* name = "tmp_11";
+
+- locale loc(locale("se_NO.UTF-8"));
++ locale loc(locale("no_NO.UTF-8"));
+ locale::global(loc);
+ wcin.imbue(loc);
+ wcout.imbue(loc);
+--- libstdc++-v3/testsuite/27_io/objects/wchar_t/12.cc.orig
++++ libstdc++-v3/testsuite/27_io/objects/wchar_t/12.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "se_NO.UTF-8" }
++// { dg-require-namedlocale "no_NO.UTF-8" }
+
+ // 2003-09-04 Petur Runolfsson <peturr02@ru.is>
+
+@@ -38,7 +38,7 @@
+ bool test __attribute__((unused)) = true;
+ const char* name = "tmp_12";
+
+- locale loc(locale("se_NO.UTF-8"));
++ locale loc(locale("no_NO.UTF-8"));
+ locale::global(loc);
+ std::ios_base::sync_with_stdio(false);
+ wcout.imbue(loc);
+--- libstdc++-v3/testsuite/27_io/objects/wchar_t/13.cc.orig
++++ libstdc++-v3/testsuite/27_io/objects/wchar_t/13.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "se_NO.UTF-8" }
++// { dg-require-namedlocale "no_NO.UTF-8" }
+
+ // 2003-09-04 Petur Runolfsson <peturr02@ru.is>
+
+@@ -36,7 +36,7 @@
+ bool test __attribute__((unused)) = true;
+ const char* name = "tmp_13";
+
+- locale loc(locale("se_NO.UTF-8"));
++ locale loc(locale("no_NO.UTF-8"));
+ locale::global(loc);
+ std::ios_base::sync_with_stdio(false);
+ wcin.imbue(loc);
+--- libstdc++-v3/testsuite/22_locale/facet/2.cc.orig
++++ libstdc++-v3/testsuite/22_locale/facet/2.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "es_MX" }
++// { dg-require-namedlocale "es_ES" }
+
+ // 2000-08-31 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -84,7 +84,7 @@
+ // 4: Named locale should destroy facets when it goes out of scope.
+ // Not quite sure how to test for this w/o valgrind at the moment.
+ {
+- locale loc03 = locale("es_MX");
++ locale loc03 = locale("es_ES");
+ }
+ }
+
+--- libstdc++-v3/testsuite/22_locale/locale/cons/5.cc.orig
++++ libstdc++-v3/testsuite/22_locale/locale/cons/5.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "en_PH" }
++// { dg-require-namedlocale "en_NZ" }
+ // { dg-require-namedlocale "de_DE" }
+ // { dg-require-namedlocale "it_IT" }
+
+@@ -76,21 +76,21 @@
+ }
+ setenv("LC_ALL", "", 1);
+
+- // Check that a "en_PH" LC_ALL is equivalent to "en_PH".
+- if (!setenv("LC_ALL", "en_PH", 1))
++ // Check that a "en_NZ" LC_ALL is equivalent to "en_PH".
++ if (!setenv("LC_ALL", "en_NZ", 1))
+ {
+ locale loc = locale("");
+- VERIFY( loc.name() == "en_PH" );
++ VERIFY( loc.name() == "en_NZ" );
+ }
+ setenv("LC_ALL", "", 1);
+
+ // Explicit check that LC_ALL sets regardless of LC_* and LANG.
+- if (!setenv("LANG", "es_MX", 1) && !setenv("LC_COLLATE", "de_DE", 1))
++ if (!setenv("LANG", "es_ES", 1) && !setenv("LC_COLLATE", "de_DE", 1))
+ {
+- if (!setenv("LC_ALL", "en_PH", 1))
++ if (!setenv("LC_ALL", "en_NZ", 1))
+ {
+ locale loc = locale("");
+- VERIFY( loc.name() == "en_PH" );
++ VERIFY( loc.name() == "en_NZ" );
+ }
+ setenv("LC_ALL", "", 1);
+ setenv("LANG", LANG_orig ? LANG_orig : "", 1);
+--- libstdc++-v3/testsuite/22_locale/locale/global_locale_objects/2.cc.orig
++++ libstdc++-v3/testsuite/22_locale/locale/global_locale_objects/2.cc
+@@ -1,5 +1,5 @@
+-// { dg-require-namedlocale "en_PH" }
+-// { dg-require-namedlocale "es_MX" }
++// { dg-require-namedlocale "en_NZ" }
++// { dg-require-namedlocale "es_ES" }
+
+ // 2000-09-13 Benjamin Kosnik <bkoz@redhat.com>
+
+@@ -32,8 +32,8 @@
+ using namespace std;
+ bool test __attribute__((unused)) = true;
+
+- const string ph("en_PH");
+- const string mx("es_MX");
++ const string ph("en_NZ");
++ const string mx("es_ES");
+ const char* orig = setlocale(LC_ALL, 0);
+ const char* testph = setlocale(LC_ALL, ph.c_str());
+ const char* testmx = setlocale(LC_ALL, mx.c_str());
+--- libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/38081-1.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/38081-1.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ru_RU.ISO-8859-5" }
++// { dg-require-namedlocale "ru_RU.ISO8859-5" }
+
+ // Copyright (C) 2010, 2011 Free Software Foundation
+ //
+@@ -33,7 +33,7 @@
+ typedef istreambuf_iterator<char> iterator_type;
+
+ // basic construction
+- locale loc("ru_RU.ISO-8859-5");
++ locale loc("ru_RU.ISO8859-5");
+
+ // create an ostream-derived object, cache the time_get facet
+ iterator_type end;
+--- libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/38081-2.cc.orig
++++ libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/38081-2.cc
+@@ -1,4 +1,4 @@
+-// { dg-require-namedlocale "ru_RU.UTF8" }
++// { dg-require-namedlocale "ru_RU.UTF-8" }
+
+ // 2010-01-05 Paolo Carlini <paolo.carlini@oracle.com>
+
+@@ -34,7 +34,7 @@
+ typedef istreambuf_iterator<char> iterator_type;
+
+ // basic construction
+- locale loc("ru_RU.UTF8");
++ locale loc("ru_RU.UTF-8");
+
+ // create an ostream-derived object, cache the time_get facet
+ iterator_type end;
diff --git a/lang/gnat-aux/files/diff-fortran b/lang/gnat-aux/files/diff-fortran
new file mode 100644
index 00000000000..edc5c06da5d
--- /dev/null
+++ b/lang/gnat-aux/files/diff-fortran
@@ -0,0 +1,54 @@
+--- gcc/fortran/f95-lang.c.orig
++++ gcc/fortran/f95-lang.c
+@@ -823,10 +823,17 @@
+
+ gfc_define_builtin ("__builtin_cabsl", func_clongdouble_longdouble,
+ BUILT_IN_CABSL, "cabsl", ATTR_CONST_NOTHROW_LEAF_LIST);
++#if defined(__NetBSD__) && (__NetBSD__ > 4)
++ gfc_define_builtin ("__builtin_cabs", func_cdouble_double,
++ BUILT_IN_CABS, "__c99_cabs", ATTR_CONST_NOTHROW_LEAF_LIST);
++ gfc_define_builtin ("__builtin_cabsf", func_cfloat_float,
++ BUILT_IN_CABSF, "__c99_cabsf", ATTR_CONST_NOTHROW_LEAF_LIST);
++#else
+ gfc_define_builtin ("__builtin_cabs", func_cdouble_double,
+ BUILT_IN_CABS, "cabs", ATTR_CONST_NOTHROW_LEAF_LIST);
+ gfc_define_builtin ("__builtin_cabsf", func_cfloat_float,
+ BUILT_IN_CABSF, "cabsf", ATTR_CONST_NOTHROW_LEAF_LIST);
++#endif
+
+ gfc_define_builtin ("__builtin_copysignl", mfunc_longdouble[1],
+ BUILT_IN_COPYSIGNL, "copysignl",
+--- libgfortran/configure.orig
++++ libgfortran/configure
+@@ -25699,7 +25699,7 @@
+
+ fi
+ case "$host" in
+- *-*-darwin* | *-*-hpux* | *-*-cygwin* | *-*-mingw* | alpha*-dec-osf* )
++ *-*-darwin* | *-*-hpux* | *-*-cygwin* | *-*-mingw* | alpha*-dec-osf* | *-*-netbsd* )
+
+ $as_echo "#define GTHREAD_USE_WEAK 0" >>confdefs.h
+
+--- libquadmath/Makefile.in.orig
++++ libquadmath/Makefile.in
+@@ -393,10 +393,9 @@
+
+ # AM_CONDITIONAL on configure option --generated-files-in-srcdir
+ @BUILD_LIBQUADMATH_TRUE@@GENINSRC_TRUE@STAMP_GENINSRC = stamp-geninsrc
+-@BUILD_INFO_FALSE@@BUILD_LIBQUADMATH_TRUE@STAMP_BUILD_INFO =
++@BUILD_LIBQUADMATH_TRUE@STAMP_BUILD_INFO =
+
+ # AM_CONDITIONAL on configure check ACX_CHECK_PROG_VER([MAKEINFO])
+-@BUILD_INFO_TRUE@@BUILD_LIBQUADMATH_TRUE@STAMP_BUILD_INFO = stamp-build-info
+ @BUILD_LIBQUADMATH_TRUE@CLEANFILES = $(STAMP_GENINSRC) $(STAMP_BUILD_INFO) libquadmath.info
+ @BUILD_LIBQUADMATH_TRUE@MAINTAINERCLEANFILES = $(srcdir)/libquadmath.info
+
+@@ -1247,7 +1246,7 @@
+
+ info-am: $(INFO_DEPS)
+
+-install-data-am: install-info-am install-nodist_libsubincludeHEADERS
++install-data-am: install-nodist_libsubincludeHEADERS
+
+ install-dvi: install-dvi-am
+
diff --git a/lang/gnat-aux/files/diff-fortran-testsuite b/lang/gnat-aux/files/diff-fortran-testsuite
new file mode 100644
index 00000000000..af58f3abe20
--- /dev/null
+++ b/lang/gnat-aux/files/diff-fortran-testsuite
@@ -0,0 +1,31 @@
+--- gcc/testsuite/gfortran.dg/large_real_kind_2.F90.orig
++++ gcc/testsuite/gfortran.dg/large_real_kind_2.F90
+@@ -1,6 +1,6 @@
+ ! { dg-do run }
+ ! { dg-require-effective-target fortran_large_real }
+-! { dg-xfail-if "" { "*-*-freebsd*" } { "*" } { "" } }
++! { dg-xfail-if "" { "*-*-freebsd*" *-*-dragonfly* *-*-netbsd* } { "*" } { "" } }
+
+ ! Testing library calls on large real kinds (larger than kind=8)
+ implicit none
+--- gcc/testsuite/gfortran.dg/large_real_kind_3.F90.orig
++++ gcc/testsuite/gfortran.dg/large_real_kind_3.F90
+@@ -1,6 +1,6 @@
+ ! { dg-do run }
+ ! { dg-require-effective-target fortran_large_real }
+-! { dg-xfail-if "" { "*-*-freebsd*" } { "*" } { "" } }
++! { dg-xfail-if "" { "*-*-freebsd*" *-*-dragonfly* *-*-netbsd* } { "*" } { "" } }
+
+ ! Testing erf and erfc library calls on large real kinds (larger than kind=8)
+ implicit none
+--- gcc/testsuite/gfortran.dg/open_errors.f90.orig
++++ gcc/testsuite/gfortran.dg/open_errors.f90
+@@ -22,7 +22,7 @@
+ if (msg /= "File 'temptestfile' does not exist") call abort()
+
+ open(77,file="./", iomsg=msg, iostat=i)
+-if (msg /= "'./' is a directory" .and. msg /= "Invalid argument") call abort()
++if (msg /= "'./' is a directory" .and. msg /= "Invalid argument" .and. msg /= "File './' already exists") call abort()
+
+ open(77,file=n,status="new")
+ i = chmod(n, "-w")
diff --git a/lang/gnat-aux/files/diff-gcc-testsuite b/lang/gnat-aux/files/diff-gcc-testsuite
new file mode 100644
index 00000000000..f371a02cd1c
--- /dev/null
+++ b/lang/gnat-aux/files/diff-gcc-testsuite
@@ -0,0 +1,10 @@
+--- gcc/testsuite/gcc.dg/pch/pch.exp.orig
++++ gcc/testsuite/gcc.dg/pch/pch.exp
+@@ -44,6 +44,7 @@
+ set test "largefile.c"
+ set testh "largefile.hs"
+ set f [open $test w]
++puts $f "/* { dg-do run { target *-*-solaris* } } */"
+ puts $f "/* { dg-timeout-factor 4.0 } */"
+ set v 0
+ for { set v 0 } { $v < 10000 } { incr v } {
diff --git a/lang/gnat-aux/options.mk b/lang/gnat-aux/options.mk
index 21ba704286b..f83c41d78db 100644
--- a/lang/gnat-aux/options.mk
+++ b/lang/gnat-aux/options.mk
@@ -1,8 +1,9 @@
-# $NetBSD: options.mk,v 1.1 2011/05/10 13:46:22 drochner Exp $
+# $NetBSD: options.mk,v 1.2 2012/01/08 11:17:07 marino Exp $
PKG_OPTIONS_VAR= PKG_OPTIONS.gnat-aux
-PKG_SUPPORTED_OPTIONS= ada cxx testada testcxx testgcc
-PKG_SUGGESTED_OPTIONS= ada #cxx
+PKG_SUPPORTED_OPTIONS= ada cxx fortran objc
+PKG_SUPPORTED_OPTIONS+= testada testcxx testfortran testobjc testgcc
+PKG_SUGGESTED_OPTIONS= ada cxx fortran objc
.include "../../mk/bsd.options.mk"
@@ -13,6 +14,8 @@ PKG_SUGGESTED_OPTIONS= ada #cxx
.if !empty(PKG_OPTIONS:Mada)
LANGS+= ada
+DISTFILES+= gcc-ada-${GCC_VERSION}.tar.bz2
+APPLY_DIFFS+= ada
.endif
@@ -22,6 +25,36 @@ LANGS+= ada
.if !empty(PKG_OPTIONS:Mcxx)
LANGS+= c++
+DISTFILES+= gcc-g++-${GCC_VERSION}.tar.bz2
+APPLY_DIFFS+= cxx
+.endif
+
+
+#############################
+## ADD LANGUAGE: Fortran ##
+#############################
+
+.if empty(PKG_OPTIONS:Mfortran)
+QUADOPT= --disable-libquadmath
+.else
+LANGS+= fortran
+DISTFILES+= gcc-fortran-${GCC_VERSION}.tar.bz2
+APPLY_DIFFS+= fortran
+.if ${OPSYS} == "NetBSD"
+QUADOPT= --disable-libquadmath
+.else
+QUADOPT= --enable-libquadmath
+.endif
+.endif
+
+
+#################################
+## ADD LANGUAGE: Objective-C ##
+#################################
+
+.if !empty(PKG_OPTIONS:Mobjc)
+LANGS+= objc
+DISTFILES+= gcc-objc-${GCC_VERSION}.tar.bz2
.endif
@@ -31,6 +64,21 @@ LANGS+= c++
.if !empty(PKG_OPTIONS:Mtestada) \
|| !empty(PKG_OPTIONS:Mtestcxx) \
+ || !empty(PKG_OPTIONS:Mtestfortran) \
+ || !empty(PKG_OPTIONS:Mtestobjc) \
|| !empty(PKG_OPTIONS:Mtestgcc)
BUILD_DEPENDS+= dejagnu>=1.4:../../devel/dejagnu
+DISTFILES+= gcc-testsuite-${GCC_VERSION}.tar.bz2
+.if !empty(PKG_OPTIONS:Mtestada)
+APPLY_DIFFS+= ada-testsuite
+.endif
+.if !empty(PKG_OPTIONS:Mtestcxx)
+APPLY_DIFFS+= cxx-testsuite
+.endif
+.if !empty(PKG_OPTIONS:Mtestgcc)
+APPLY_DIFFS+= gcc-testsuite
+.endif
+.if !empty(PKG_OPTIONS:Mtestfortran)
+APPLY_DIFFS+= fortran-testsuite
+.endif
.endif
diff --git a/lang/gnat-aux/patches/patch-aa b/lang/gnat-aux/patches/patch-aa
deleted file mode 100644
index 611e582a9e0..00000000000
--- a/lang/gnat-aux/patches/patch-aa
+++ /dev/null
@@ -1,287 +0,0 @@
-$NetBSD: patch-aa,v 1.1 2011/10/05 18:11:55 marino Exp $
-
---- gcc/ada/adaint.c.orig 2011-07-15 08:08:10.000000000 +0200
-+++ gcc/ada/adaint.c 2011-10-03 00:43:37.392616438 +0200
-@@ -1201,6 +1201,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)
-+ strcpy (tmp_filename, "/data/local/tmp/gnat-XXXXXX");
-+ else
-+ sprintf (tmp_filename, "%s/local/tmp/gnat-XXXXXX", datadir);
-+
-+ testfd = mkstemp (tmp_filename);
-+ if (testfd != -1)
-+ {
-+ close (testfd);
-+ return;
-+ }
-+
-+ char *sdcard = getenv ("EXTERNAL_STORAGE");
-+
-+ if (sdcard == NULL)
-+ strcpy (tmp_filename, "/sdcard/gnat-XXXXXX");
-+ else
-+ sprintf (tmp_filename, "%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 (__DragonFly__) \
- || defined (__OpenBSD__) || defined(__GLIBC__)
-@@ -3433,26 +3474,214 @@
- }
- #endif
-
--#if defined (IS_CROSS) \
-- || (! ((defined (sparc) || defined (i386)) && defined (sun) \
-- && defined (__SVR4)) \
-- && ! (defined (linux) && (defined (i386) || defined (__x86_64__))) \
-- && ! (defined (linux) && defined (__ia64__)) \
-- && ! (defined (linux) && defined (powerpc)) \
-- && ! defined (__FreeBSD__) \
-- && ! defined (__DragonFly__) \
-- && ! defined (__Lynx__) \
-- && ! defined (__hpux__) \
-- && ! defined (__APPLE__) \
-- && ! defined (_AIX) \
-- && ! (defined (__alpha__) && defined (__osf__)) \
-- && ! defined (VMS) \
-- && ! defined (__MINGW32__) \
-- && ! (defined (__mips) && defined (__sgi)))
--
--/* Dummy function to satisfy g-trasym.o. See the preprocessor conditional
-- just above for a list of native platforms that provide a non-dummy
-- version of this procedure in libaddr2line.a. */
-+/* run-time symbolic traceback support */
-+#if defined (__DragonFly__) \
-+ || defined (__FreeBSD__) \
-+ || defined (__OpenBSD__) \
-+ || defined (__NetBSD__) \
-+ || (defined (__sun__) && defined (__i386__) && defined (__SVR4))
-+
-+/* The above platforms use the external program /usr/bin/addr2line */
-+#define EXTERNAL_SYMTRACE
-+
-+#elif defined (VMS) \
-+ || defined (_AIX) \
-+ || defined (__Lynx__) \
-+ || defined (__hpux__) \
-+ || defined (__APPLE__) \
-+ || defined (__MINGW32__) \
-+ || (defined (__mips) && defined (__sgi)) \
-+ || (defined (__alpha__) && defined (__osf__)) \
-+ || (defined (linux) && defined (i386)) \
-+ || (defined (linux) && defined (powerpc)) \
-+ || (defined (linux) && defined (__ia64__)) \
-+ || (defined (linux) && defined (__x86_64__)) \
-+ || (defined (__SVR4) && defined (__sun__) && defined (sparc))
-+
-+/* The above platforms use the system library libaddr2line.a */
-+#define NATIVE_SYMTRACE
-+#endif
-+
-+#if defined (EXTERNAL_SYMTRACE) && !defined (IS_CROSS)
-+
-+/*
-+ 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.
-+*/
-+
-+#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;
-+}
-+
-+#elif defined (IS_CROSS) || !defined (NATIVE_SYMTRACE)
-+
-+/* run-time symbolic traceback support
-+ Dummy function to satisfy g-trasym.o. */
-
- void
- convert_addresses (const char *file_name ATTRIBUTE_UNUSED,
diff --git a/lang/gnat-aux/patches/patch-ab b/lang/gnat-aux/patches/patch-ab
deleted file mode 100644
index 4bf98ca12db..00000000000
--- a/lang/gnat-aux/patches/patch-ab
+++ /dev/null
@@ -1,155 +0,0 @@
-$NetBSD: patch-ab,v 1.1 2011/10/05 18:11:55 marino Exp $
-
---- /dev/null 2011-09-08 20:00:00.000000000 -0500
-+++ gcc/ada/g-trasym-bsd.adb 2011-09-08 18:27:45.000000000 -0500
-@@ -0,0 +1,150 @@
-+------------------------------------------------------------------------------
-+-- --
-+-- GNAT RUN-TIME COMPONENTS --
-+-- --
-+-- G N A T . 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 GNAT.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 : Exception_Occurrence) return String is
-+ begin
-+ return Symbolic_Traceback (Tracebacks (E));
-+ end Symbolic_Traceback;
-+
-+end GNAT.Traceback.Symbolic;
diff --git a/lang/gnat-aux/patches/patch-ac b/lang/gnat-aux/patches/patch-ac
deleted file mode 100644
index 42937c8ecfe..00000000000
--- a/lang/gnat-aux/patches/patch-ac
+++ /dev/null
@@ -1,111 +0,0 @@
-$NetBSD: patch-ac,v 1.2 2011/12/05 07:52:25 marino Exp $
-
---- gcc/ada/gcc-interface/Makefile.in.orig 2011-07-15 08:07:01.000000000 +0200
-+++ gcc/ada/gcc-interface/Makefile.in 2011-10-03 07:29:02.918353281 +0200
-@@ -1011,6 +1011,7 @@
- a-numaux.adb<a-numaux-x86.adb \
- a-numaux.ads<a-numaux-x86.ads \
- a-intnam.ads<a-intnam-solaris.ads \
-+ g-trasym.adb<g-trasym-bsd.adb \
- s-inmaop.adb<s-inmaop-posix.adb \
- s-intman.adb<s-intman-solaris.adb \
- s-osinte.adb<s-osinte-solaris.adb \
-@@ -1184,6 +1185,7 @@
- a-numaux.ads<a-numaux-x86.ads \
- g-bytswa.adb<g-bytswa-x86.adb \
- g-socthi.adb<g-socthi-bsd.adb \
-+ g-trasym.adb<g-trasym-bsd.adb \
- s-inmaop.adb<s-inmaop-posix.adb \
- s-intman.adb<s-intman-posix.adb \
- s-osinte.adb<s-osinte-freebsd.adb \
-@@ -1219,6 +1221,7 @@
- a-numaux.ads<a-numaux-x86.ads \
- g-bytswa.adb<g-bytswa-x86.adb \
- g-socthi.adb<g-socthi-bsd.adb \
-+ g-trasym.adb<g-trasym-bsd.adb \
- s-inmaop.adb<s-inmaop-posix.adb \
- s-intman.adb<s-intman-posix.adb \
- s-osinte.adb<s-osinte-freebsd.adb \
-@@ -1253,6 +1256,7 @@
- a-numaux.ads<a-numaux-x86.ads \
- g-bytswa.adb<g-bytswa-x86.adb \
- g-socthi.adb<g-socthi-bsd.adb \
-+ g-trasym.adb<g-trasym-bsd.adb \
- s-inmaop.adb<s-inmaop-posix.adb \
- s-intman.adb<s-intman-posix.adb \
- s-osinte.adb<s-osinte-dragonfly.adb \
-@@ -1288,6 +1292,7 @@
- a-numaux.ads<a-numaux-x86.ads \
- g-bytswa.adb<g-bytswa-x86.adb \
- g-socthi.adb<g-socthi-bsd.adb \
-+ g-trasym.adb<g-trasym-bsd.adb \
- s-inmaop.adb<s-inmaop-posix.adb \
- s-intman.adb<s-intman-posix.adb \
- s-osinte.adb<s-osinte-dragonfly.adb \
-@@ -1322,6 +1327,7 @@
- a-numaux.ads<a-numaux-x86.ads \
- g-bytswa.adb<g-bytswa-x86.adb \
- g-socthi.adb<g-socthi-bsd.adb \
-+ g-trasym.adb<g-trasym-bsd.adb \
- s-inmaop.adb<s-inmaop-posix.adb \
- s-intman.adb<s-intman-posix.adb \
- s-osinte.adb<s-osinte-openbsd.adb \
-@@ -1357,6 +1363,7 @@
- a-numaux.ads<a-numaux-x86.ads \
- g-bytswa.adb<g-bytswa-x86.adb \
- g-socthi.adb<g-socthi-bsd.adb \
-+ g-trasym.adb<g-trasym-bsd.adb \
- s-inmaop.adb<s-inmaop-posix.adb \
- s-intman.adb<s-intman-posix.adb \
- s-osinte.adb<s-osinte-openbsd.adb \
-@@ -1391,6 +1398,7 @@
- a-numaux.ads<a-numaux-x86.ads \
- g-bytswa.adb<g-bytswa-x86.adb \
- g-socthi.adb<g-socthi-netbsd.adb \
-+ g-trasym.adb<g-trasym-bsd.adb \
- s-inmaop.adb<s-inmaop-posix.adb \
- s-intman.adb<s-intman-posix.adb \
- s-osinte.adb<s-osinte-netbsd.adb \
-@@ -1435,6 +1443,7 @@
- a-numaux.ads<a-numaux-x86.ads \
- g-bytswa.adb<g-bytswa-x86.adb \
- g-socthi.adb<g-socthi-netbsd.adb \
-+ g-trasym.adb<g-trasym-bsd.adb \
- s-inmaop.adb<s-inmaop-posix.adb \
- s-intman.adb<s-intman-posix.adb \
- s-osinte.adb<s-osinte-netbsd.adb \
-@@ -1472,11 +1481,13 @@
- ifeq ($(strip $(filter-out arm% android eabi,$(targ))),)
- LIBGNAT_TARGET_PAIRS = \
- a-intnam.ads<a-intnam-linux.ads \
-+ g-trasym.ads<g-trasym-unimplemented.ads \
-+ g-trasym.adb<g-trasym-unimplemented.adb \
- s-inmaop.adb<s-inmaop-posix.adb \
- s-intman.adb<s-intman-posix.adb \
- s-linux.ads<s-linux.ads \
- s-osinte.adb<s-osinte-posix.adb \
-- s-osinte.ads<s-osinte-linux.ads \
-+ s-osinte.ads<s-osinte-android.ads \
- s-osprim.adb<s-osprim-posix.adb \
- s-taprop.adb<s-taprop-linux.adb \
- s-tasinf.ads<s-tasinf-linux.ads \
-@@ -1496,12 +1507,14 @@
- mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
- indepsw.adb<indepsw-gnu.adb
-
-- EXTRA_GNATRTL_TASKING_OBJS=s-linux.o
-+ EXTRA_LIBGNAT_SRCS+= signal_android.c
-+ EXTRA_LIBGNAT_OBJS+= signal_android.o
-+ EXTRA_GNATRTL_TASKING_OBJS= s-linux.o
- EH_MECHANISM=
-- THREADSLIB = -lpthread
-- GNATLIB_SHARED = gnatlib-shared-dual
-- GMEM_LIB = gmemlib
-- LIBRARY_VERSION := $(LIB_VERSION)
-+ THREADSLIB=
-+ GNATLIB_SHARED= gnatlib-shared-dual
-+ GMEM_LIB= gmemlib
-+ LIBRARY_VERSION:= $(LIB_VERSION)
- endif
-
-
diff --git a/lang/gnat-aux/patches/patch-ad b/lang/gnat-aux/patches/patch-ad
deleted file mode 100644
index 0a959515329..00000000000
--- a/lang/gnat-aux/patches/patch-ad
+++ /dev/null
@@ -1,35 +0,0 @@
-$NetBSD: patch-ad,v 1.2 2011/12/05 07:52:25 marino Exp $
-
---- gcc/ada/mlib-prj.adb
-+++ gcc/ada/mlib-prj.adb
-@@ -341,6 +341,11 @@ package body MLib.Prj is
-
- 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
-
-@@ -790,7 +795,7 @@ package body MLib.Prj is
- 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;
-
-@@ -1285,6 +1290,9 @@ package body MLib.Prj is
- Opts.Increment_Last;
- Opts.Table (Opts.Last) :=
- new String'(Name_Buffer (1 .. Name_Len));
-+ if Name_Len = 2 and then Name_Buffer (1 .. 2) = "-R" then
-+ Rpath_Disabled := True;
-+ end if;
- end if;
-
- Current := Element.Next;