diff options
author | John Marino <marino@FreeBSD.org> | 2015-03-14 21:32:03 +0000 |
---|---|---|
committer | John Marino <marino@FreeBSD.org> | 2015-03-14 21:32:03 +0000 |
commit | 05a3c66723459912bdaba4edf00aa21113c7e728 (patch) | |
tree | c20f773a504f65ec04c1837e138fcd537b4bd9a3 | |
parent | 09c2ae3d378c06d810169f3859c83490fbc4edc4 (diff) | |
download | ports-05a3c66723459912bdaba4edf00aa21113c7e728.tar.gz ports-05a3c66723459912bdaba4edf00aa21113c7e728.zip |
Notes
-rw-r--r-- | lang/Makefile | 1 | ||||
-rw-r--r-- | lang/gcc5-aux/Makefile | 291 | ||||
-rw-r--r-- | lang/gcc5-aux/Makefile.common | 143 | ||||
-rw-r--r-- | lang/gcc5-aux/Makefile.version | 20 | ||||
-rw-r--r-- | lang/gcc5-aux/distinfo | 14 | ||||
-rw-r--r-- | lang/gcc5-aux/files/android.exp | 106 | ||||
-rw-r--r-- | lang/gcc5-aux/files/diff-ada | 3277 | ||||
-rw-r--r-- | lang/gcc5-aux/files/diff-ada-testsuite | 584 | ||||
-rw-r--r-- | lang/gcc5-aux/files/diff-core | 349 | ||||
-rw-r--r-- | lang/gcc5-aux/files/diff-cxx | 12 | ||||
-rw-r--r-- | lang/gcc5-aux/files/diff-cxx-testsuite | 24 | ||||
-rw-r--r-- | lang/gcc5-aux/files/diff-gcc-testsuite | 46 | ||||
-rw-r--r-- | lang/gcc5-aux/files/gnatdroid.exp | 14 | ||||
-rw-r--r-- | lang/gcc5-aux/pkg-descr | 14 |
14 files changed, 4895 insertions, 0 deletions
diff --git a/lang/Makefile b/lang/Makefile index cc9854c5ca03..dc24c56bc9f7 100644 --- a/lang/Makefile +++ b/lang/Makefile @@ -87,6 +87,7 @@ SUBDIR += gcc48 SUBDIR += gcc49 SUBDIR += gcc5 + SUBDIR += gcc5-aux SUBDIR += gcl SUBDIR += gforth SUBDIR += ghc diff --git a/lang/gcc5-aux/Makefile b/lang/gcc5-aux/Makefile new file mode 100644 index 000000000000..dac1cc028063 --- /dev/null +++ b/lang/gcc5-aux/Makefile @@ -0,0 +1,291 @@ +# Created by: John Marino <marino@FreeBSD.org> +# $FreeBSD$ + +PORTNAME= gcc5-aux +PORTVERSION= ${SNAPSHOT} +PORTREVISION= ${MAIN_PR} +CATEGORIES= lang +MASTER_SITES= http://downloads.dragonlace.net/src/:boot \ + LOCAL/marino:boot ${MASTER_SITE_GCC} +MASTER_SITE_SUBDIR= ${MS_SUBDIR} +DISTFILES= ${IDENTIFICATION}.tar.bz2 + +MAINTAINER= marino@FreeBSD.org +COMMENT= Version of GCC ${GCC_BRANCH} with full Ada support + +LICENSE= GPLv3 GPLv3RLE +LICENSE_COMB= multi + +.include "${.CURDIR}/Makefile.common" + +LANGS= c c++ ada +APPLY_DIFFS= core cxx ada +INTENDED_COMPILER= NATIVE +GARCH= ${ARCH:S/amd64/x86_64/} +BOOTSTRAP_COMPILER= gnat-bootstrap.${GARCH}.${OPSYS:tl}.tar.bz2 +BLD_TARGET= ${GARCH}-aux-${OPSYS:tl}${OSREL} +FULL_GNATGCC= NOT_SET +OS_LABEL4VERS= [${OPSYS}${GARCH:M*64:S/amd_//:S/x86_//}] +NO_MTREE= yes + +OPTIONS_GROUP= Standard Bootstrap +OPTIONS_GROUP_Standard= FORT OBJC NLS TESTSUITE STATIC +OPTIONS_GROUP_Bootstrap=BOOTSTRAP +OPTIONS_DEFAULT= FORT OBJC +NO_OPTIONS_SORT= yes + +FORT_DESC= Fortran language support +OBJC_DESC= Objective-C language support +TESTSUITE_DESC= Activate test support +STATIC_DESC= Link compilers and drivers statically +BOOTSTRAP_DESC= Create bootstrap compiler (overrides other options) + +# The BOOTSTRAP option overrides all the others. "make stage" will build a +# static compiler that supports C, C++, and Ada languages and then create +# a new distfile in $WRKDIR/newbsd with the name following the pattern: +# ada-bootstrap.$ARCH.$OPSYS.XY.tar.bz2. There is no need to "make install" + +.include <bsd.port.options.mk> + +.if ${OPSYS} == FreeBSD +MODERN_BINUTILS= yes +. if ${OSVERSION} < 900000 +BOOTSTRAP_COMPILER= ada-bootstrap.${GARCH}.freebsd.84.tar.bz2 +. else +BOOTSTRAP_COMPILER= ada-bootstrap.${GARCH}.freebsd.100B.tar.bz2 +. endif +.endif +.if ${OPSYS} == DragonFly +BOOTSTRAP_COMPILER= ada-bootstrap.${GARCH}.dragonfly.36A.tar.bz2 +.endif + +.if defined(MODERN_BINUTILS) +# Apparently gcc 4.9 needs binutils 2.23 or greater to link Ada correctly +USE_BINUTILS= yes +RUN_DEPENDS+= ${LOCALBASE}/bin/as:${PORTSDIR}/devel/binutils +EXTRA_CONFIG+= --with-ld=${LOCALBASE}/bin/ld +EXTRA_CONFIG+= --with-as=${LOCALBASE}/bin/as +.else +EXTRA_CONFIG+= --with-ld=/usr/bin/ld +EXTRA_CONFIG+= --with-as=/usr/bin/as +.endif + +WRKSRC= ${WRKDIR}/${IDENTIFICATION} +BUILDDIR= ${WRKDIR}/build +NEWBSDIR= ${WRKDIR}/newbs/bootstrap +CFG_SCRIPT= ${WRKSRC}/configure +REVFILE= ${WRKSRC}/gcc/REVISION +BOOTSTRAP_PREFIX= ${WRKDIR}/bootstrap +PKG_PREFIX= ${PREFIX}/${PORTNAME} +MANPREFIX= ${PREFIX}/${PORTNAME}/share +BSFILENAME= ada-bootstrap.${GARCH}.${OPSYS:tl}.${OSREL:S/.//}.tar.bz2 + +# If we find gnatmake and friends in a standard location, then we'll use this +# compiler instead of downloading the bootstrap. +.if exists (${LOCALBASE}/${PORTNAME}/bin/ada) +.if exists (${LOCALBASE}/${PORTNAME}/bin/gnatbind) +.if exists (${LOCALBASE}/${PORTNAME}/bin/gnatlink) +.if exists (${LOCALBASE}/${PORTNAME}/bin/gnatmake) +FULL_GNATGCC=${LOCALBASE}/${PORTNAME}/bin/ada +FULL_GNATGXX=${LOCALBASE}/${PORTNAME}/bin/g++ +FULL_PATH=/sbin:/bin:/usr/sbin:/usr/bin:${PREFIX}/${PORTNAME}/bin:${PREFIX}/bin +.endif +.endif +.endif +.endif + +# If FULL_GNATGCC is not set, we'll request the bootstrap compiler +.if ${FULL_GNATGCC} == NOT_SET +INTENDED_COMPILER=BOOTSTRAP +FULL_GNATGCC=${BOOTSTRAP_PREFIX}/bin/gcc +FULL_GNATGXX=${BOOTSTRAP_PREFIX}/bin/g++ +FULL_PATH=${BOOTSTRAP_PREFIX}/bin:/sbin:/bin:/usr/sbin:/usr/bin:${PREFIX}/bin +DISTFILES+= ${BOOTSTRAP_COMPILER}:boot +.endif + +# for port maintenance, invoke "make makesum PLUS_BOOTSTRAPS=1" +.if defined(PLUS_BOOTSTRAPS) +DISTFILES= \ + ${IDENTIFICATION}.tar.bz2 \ + ada-bootstrap.i386.dragonfly.36A.tar.bz2:boot \ + ada-bootstrap.i386.freebsd.84.tar.bz2:boot \ + ada-bootstrap.i386.freebsd.100B.tar.bz2:boot \ + ada-bootstrap.x86_64.dragonfly.36A.tar.bz2:boot \ + ada-bootstrap.x86_64.freebsd.84.tar.bz2:boot \ + ada-bootstrap.x86_64.freebsd.100B.tar.bz2:boot +.endif + +.if ${PORT_OPTIONS:MFORT} && !${PORT_OPTIONS:MBOOTSTRAP} +LANGS+= fortran +#APPLY_DIFFS+= fortran +EXTRA_CONFIG+= --enable-libquadmath +.else +EXTRA_CONFIG+= --disable-libquadmath +.endif + +.if ${PORT_OPTIONS:MOBJC} && !${PORT_OPTIONS:MBOOTSTRAP} +LANGS+= objc +.endif + +.if ${PORT_OPTIONS:MTESTSUITE} && !${PORT_OPTIONS:MBOOTSTRAP} +BUILD_DEPENDS+= dejagnu>=1.4:${PORTSDIR}/misc/dejagnu +APPLY_DIFFS+= ada-testsuite +APPLY_DIFFS+= cxx-testsuite +APPLY_DIFFS+= gcc-testsuite +.endif + +.if ${PORT_OPTIONS:MNLS} && !${PORT_OPTIONS:MBOOTSTRAP} +USES+= gettext-tools +EXTRA_CONFIG+= --enable-nls +.else +EXTRA_CONFIG+= --disable-nls +.endif + +.if ${PORT_OPTIONS:MSTATIC} && !${PORT_OPTIONS:MBOOTSTRAP} +EXTRA_CONFIG+= --with-stage1-ldflags=-static +.endif + +.if ${PORT_OPTIONS:MBOOTSTRAP} +EXTRA_CONFIG+= --disable-shared --disable-lto +EXTRA_CONFIG+= --with-boot-ldflags=-static +.else +. if ${OPSYS} == DragonFly +EXTRA_CONFIG+= --disable-bootstrap +. endif +.endif + +# Establish Ada-aware compiler for use +ADA_CONFIGURE_ENV+= CC=${FULL_GNATGCC} +ADA_CONFIGURE_ENV+= CXX=${FULL_GNATGXX} +ADA_CONFIGURE_ENV+= PATH=${FULL_PATH} +ADA_MAKE_ENV+= PATH=${FULL_PATH} +ADA_MAKE_ENV+= LD_LIBRARY_PATH=${BUILDDIR}/gcc + +# The standard configuration options +ADA_CONFIG_ARGS= --enable-languages=${LANGS:Q} +ADA_CONFIG_ARGS+= --build=${BLD_TARGET} +ADA_CONFIG_ARGS+= --prefix=${PKG_PREFIX:Q} +ADA_CONFIG_ARGS+= --with-system-zlib +ADA_CONFIG_ARGS+= --with-gmp=${PREFIX} +ADA_CONFIG_ARGS+= --with-mpfr=${PREFIX} +ADA_CONFIG_ARGS+= --with-mpc=${PREFIX} +ADA_CONFIG_ARGS+= ${ICONV_CONFIGURE_ARG} +ADA_CONFIG_ARGS+= --enable-shared +ADA_CONFIG_ARGS+= --enable-threads=posix +ADA_CONFIG_ARGS+= --disable-libmudflap +ADA_CONFIG_ARGS+= --disable-libgomp +ADA_CONFIG_ARGS+= --disable-libssp +ADA_CONFIG_ARGS+= ${EXTRA_CONFIG} + +post-extract: + # Personalize GNAT for each different machine + @${ECHO} "-=> GNAT AUX ${OS_LABEL4VERS}" > ${REVFILE} + + # 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 + # Try to test more locale stuff than stock GCC + @(cd ${WRKSRC}/libstdc++-v3/testsuite/22_locale && ${REINPLACE_CMD} \ + -e 's|ISO-8859|ISO8859|g' \ + -e 's|ja_JP.eucjp|ja_JP.eucJP|g' \ + -e 's|en_HK|zh_HK|g' \ + -e 's|en_PH|en_NZ|g' \ + -e 's|se_NO|no_NO|g' \ + -e 's|es_MX|es_ES|g' \ + -e 's|ru_RU.UTF8|ru_RU.UTF-8|g' ${LOCALE22FIX}) +.if ${PORT_OPTIONS:MSTATIC} || ${PORT_OPTIONS:MBOOTSTRAP} + # Ensure GNAT tools are built statically + ${REINPLACE_CMD} -e 's/^GCC_LINK_FLAGS=.*/GCC_LINK_FLAGS=-static/' \ + ${WRKSRC}/gcc/ada/gcc-interface/Makefile.in +.endif +.if ${PORT_OPTIONS:MBOOTSTRAP} && ${OPSYS} == FreeBSD + # FreeBSD 8 linker doesn't understand --hash-style, so do not + # allow the bootstrap to use it. + ${REINPLACE_CMD} -e 's|" ELF_HASH_STYLE "||' \ + ${WRKSRC}/gcc/config/i386/freebsd64.h \ + ${WRKSRC}/gcc/config/i386/freebsd.h +.endif + # Update LINK_SPEC to add gcc-aux lib runpath in every binary + @${ECHO} "Configuring LINK_SPEC runpath" + @${REINPLACE_CMD} -e 's;\@PREFIX\@;${PREFIX};' \ + -e 's;\@GCCAUX\@;${PORTNAME};' \ + ${WRKSRC}/gcc/config/dragonfly.h \ + ${WRKSRC}/gcc/config/i386/freebsd64.h \ + ${WRKSRC}/gcc/config/i386/freebsd.h +.if defined(MODERN_BINUTILS) + # Use dwarf4-compatible addr2line (affects FreeBSD only) + ${REINPLACE_CMD} -e 's|/usr/bin/addr2line|${PREFIX}/bin/addr2line|g' \ + ${WRKSRC}/gcc/ada/traceback_symbolic.c +.endif + +do-configure: + ${MKDIR} ${BUILDDIR} + cd ${BUILDDIR} && ${SETENV} ${ADA_CONFIGURE_ENV} \ + ${CFG_SCRIPT} ${ADA_CONFIG_ARGS} + +do-build: + cd ${BUILDDIR} && ${SETENV} ${ADA_MAKE_ENV} \ + ${MAKE_CMD} -j${MAKE_JOBS_NUMBER} ${MAKE_ARGS} all + +.if ${PORT_OPTIONS:MTESTSUITE} && !${PORT_OPTIONS:MBOOTSTRAP} +test: build test-ada test-fortran test-objc test-cxx test-c + +test-ada: + cd ${BUILDDIR} && ${SETENV} ${ADA_MAKE_ENV} \ + ${MAKE_CMD} -sk check-ada + +test-cxx: + # libstdc++ testsuite will break every time, for TRUE to continue + cd ${BUILDDIR} && ${SETENV} ${ADA_MAKE_ENV} \ + ${MAKE_CMD} -sk check-c++ || true + +test-c: + cd ${BUILDDIR} && ${SETENV} ${ADA_MAKE_ENV} \ + ${MAKE_CMD} -sk check-c + +test-fortran: +. if ${PORT_OPTIONS:MFORT} + cd ${BUILDDIR} && ${SETENV} ${ADA_MAKE_ENV} \ + ${MAKE_CMD} -sk check-fortran +. endif + +test-objc: +. if ${PORT_OPTIONS:MOBJC} + cd ${BUILDDIR} && ${SETENV} ${ADA_MAKE_ENV} \ + ${MAKE_CMD} -sk check-objc +. endif +.endif + +do-install: + cd ${BUILDDIR} && ${SETENV} ${ADA_MAKE_ENV} \ + ${MAKE_CMD} install-strip ${MAKE_ARGS} + ${MV} ${STAGEDIR}${PKG_PREFIX}/share ${WRKDIR}/moved_share +# Don't activate until this port builds gnatdroid +# Otherwise it will conflict with lang/gcc-aux +# ${MKDIR} ${STAGEDIR}${PREFIX}/share/dejagnu/baseboards \ +# ${STAGEDIR}${PREFIX}/share/dejagnu/config +# ${INSTALL_DATA} ${FILESDIR}/android.exp \ +# ${STAGEDIR}${PREFIX}/share/dejagnu/config +# ${INSTALL_DATA} ${FILESDIR}/gnatdroid.exp \ +# ${STAGEDIR}${PREFIX}/share/dejagnu/baseboards + +post-stage: + (cd ${STAGEDIR}${PKG_PREFIX}; ${FIND} * -type d -empty | \ + ${SORT} -dr | ${XARGS} ${RMDIR}) + (cd ${STAGEDIR}${PREFIX}; ${FIND} ${PORTNAME} share \ + \( -type f -or -type l \) | ${SORT} | ${SED} \ + -e 's/\/man\/man[1578]\/.*[1578]$$/&.gz/' >> ${TMPPLIST}) +.if ${PORT_OPTIONS:MBOOTSTRAP} + ${MKDIR} ${NEWBSDIR} + ${CP} -a ${STAGEDIR}${PKG_PREFIX}/bin ${NEWBSDIR}/ + ${CP} -a ${STAGEDIR}${PKG_PREFIX}/lib ${NEWBSDIR}/ + ${CP} -a ${STAGEDIR}${PKG_PREFIX}/include ${NEWBSDIR}/ + ${CP} -a ${STAGEDIR}${PKG_PREFIX}/libexec ${NEWBSDIR}/ + ${RM} ${NEWBSDIR}/bin/${GARCH}* + ${RM} -rf ${NEWBSDIR}/lib/gcc/${BLD_TARGET}/${GCC_VERSION}/include-fixed + (cd ${NEWBSDIR}/.. ; ${TAR} -cyf ${BSFILENAME} bootstrap) +.endif + +.include <bsd.port.mk> diff --git a/lang/gcc5-aux/Makefile.common b/lang/gcc5-aux/Makefile.common new file mode 100644 index 000000000000..6f76983ffa22 --- /dev/null +++ b/lang/gcc5-aux/Makefile.common @@ -0,0 +1,143 @@ +# $FreeBSD$ + +.include "Makefile.version" + +LIB_DEPENDS= libgmp.so:${PORTSDIR}/math/gmp +LIB_DEPENDS+= libmpfr.so:${PORTSDIR}/math/mpfr +LIB_DEPENDS+= libmpc.so:${PORTSDIR}/math/mpc + +ONLY_FOR_ARCHS= i386 amd64 + +GNU_CONFIGURE= yes +USES= gmake iconv libtool perl5 tar:bzip2 +USE_PERL5= build +ALL_TARGET= default + +LOCALE22FIX= \ + codecvt/always_noconv/char/wrapped_locale.cc \ + codecvt/always_noconv/wchar_t/2.cc \ + codecvt/always_noconv/wchar_t/3.cc \ + codecvt/always_noconv/wchar_t/wrapped_locale.cc \ + codecvt/encoding/char/wrapped_locale.cc \ + codecvt/encoding/wchar_t/2.cc \ + codecvt/encoding/wchar_t/3.cc \ + codecvt/encoding/wchar_t/wrapped_locale.cc \ + codecvt/in/char/wrapped_locale.cc \ + codecvt/in/wchar_t/2.cc \ + codecvt/in/wchar_t/3.cc \ + codecvt/in/wchar_t/wrapped_locale.cc \ + codecvt/length/char/wrapped_locale.cc \ + codecvt/length/wchar_t/2.cc \ + codecvt/length/wchar_t/3.cc \ + codecvt/length/wchar_t/wrapped_locale.cc \ + codecvt/max_length/char/wrapped_locale.cc \ + codecvt/max_length/wchar_t/2.cc \ + codecvt/max_length/wchar_t/3.cc \ + codecvt/max_length/wchar_t/wrapped_locale.cc \ + codecvt/out/char/wrapped_locale.cc \ + codecvt/out/wchar_t/2.cc \ + codecvt/out/wchar_t/3.cc \ + codecvt/out/wchar_t/7.cc \ + codecvt/out/wchar_t/wrapped_locale.cc \ + codecvt/unshift/char/wrapped_locale.cc \ + codecvt/unshift/wchar_t/2.cc \ + codecvt/unshift/wchar_t/3.cc \ + codecvt/unshift/wchar_t/wrapped_locale.cc \ + collate/compare/char/wrapped_locale.cc \ + collate/compare/wchar_t/wrapped_locale.cc \ + collate/hash/char/wrapped_locale.cc \ + collate/hash/wchar_t/wrapped_locale.cc \ + collate/transform/char/wrapped_locale.cc \ + collate/transform/wchar_t/wrapped_locale.cc \ + ctype/cons/char/wrapped_locale.cc \ + ctype/is/char/wrapped_locale.cc \ + ctype/is/wchar_t/wrapped_locale.cc \ + ctype/narrow/char/wrapped_locale.cc \ + ctype/narrow/wchar_t/3.cc \ + ctype/narrow/wchar_t/wrapped_locale.cc \ + ctype/scan/char/wrapped_locale.cc \ + ctype/scan/wchar_t/wrapped_locale.cc \ + ctype/to/char/wrapped_locale.cc \ + ctype/to/wchar_t/wrapped_locale.cc \ + ctype/widen/char/wrapped_locale.cc \ + ctype/widen/wchar_t/2.cc \ + ctype/widen/wchar_t/3.cc \ + ctype/widen/wchar_t/wrapped_locale.cc \ + facet/2.cc \ + locale/cons/40184.cc \ + locale/cons/5.cc \ + locale/cons/unicode.cc \ + locale/global_locale_objects/2.cc \ + messages/members/char/wrapped_locale.cc \ + money_get/get/char/16.cc \ + money_get/get/char/18.cc \ + money_get/get/char/2.cc \ + money_get/get/char/4.cc \ + money_get/get/char/wrapped_env.cc \ + money_get/get/char/wrapped_locale.cc \ + money_get/get/wchar_t/16.cc \ + money_get/get/wchar_t/18.cc \ + money_get/get/wchar_t/2.cc \ + money_get/get/wchar_t/4.cc \ + money_get/get/wchar_t/wrapped_env.cc \ + money_get/get/wchar_t/wrapped_locale.cc \ + money_put/put/char/2.cc \ + money_put/put/char/wrapped_env.cc \ + money_put/put/char/wrapped_locale.cc \ + money_put/put/wchar_t/2.cc \ + money_put/put/wchar_t/wrapped_env.cc \ + money_put/put/wchar_t/wrapped_locale.cc \ + moneypunct/members/char/wrapped_locale.cc \ + moneypunct/members/wchar_t/wrapped_locale.cc \ + num_get/get/char/3.cc \ + num_get/get/char/wrapped_env.cc \ + num_get/get/char/wrapped_locale.cc \ + num_get/get/wchar_t/3.cc \ + num_get/get/wchar_t/wrapped_env.cc \ + num_get/get/wchar_t/wrapped_locale.cc \ + num_put/put/char/3.cc \ + num_put/put/char/wrapped_env.cc \ + num_put/put/char/wrapped_locale.cc \ + num_put/put/wchar_t/3.cc \ + num_put/put/wchar_t/wrapped_env.cc \ + num_put/put/wchar_t/wrapped_locale.cc \ + numpunct/members/char/wrapped_locale.cc \ + numpunct/members/wchar_t/wrapped_locale.cc \ + time_get/date_order/char/wrapped_locale.cc \ + time_get/date_order/wchar_t/wrapped_locale.cc \ + time_get/get_date/char/2.cc \ + time_get/get_date/char/wrapped_env.cc \ + time_get/get_date/char/wrapped_locale.cc \ + time_get/get_date/wchar_t/2.cc \ + time_get/get_date/wchar_t/wrapped_env.cc \ + time_get/get_date/wchar_t/wrapped_locale.cc \ + time_get/get_monthname/char/2.cc \ + time_get/get_monthname/char/wrapped_env.cc \ + time_get/get_monthname/char/wrapped_locale.cc \ + time_get/get_monthname/wchar_t/2.cc \ + time_get/get_monthname/wchar_t/wrapped_env.cc \ + time_get/get_monthname/wchar_t/wrapped_locale.cc \ + time_get/get_time/char/2.cc \ + time_get/get_time/char/wrapped_env.cc \ + time_get/get_time/char/wrapped_locale.cc \ + time_get/get_time/wchar_t/2.cc \ + time_get/get_time/wchar_t/wrapped_env.cc \ + time_get/get_time/wchar_t/wrapped_locale.cc \ + time_get/get_weekday/char/2.cc \ + time_get/get_weekday/char/38081-1.cc \ + time_get/get_weekday/char/38081-2.cc \ + time_get/get_weekday/char/wrapped_env.cc \ + time_get/get_weekday/char/wrapped_locale.cc \ + time_get/get_weekday/wchar_t/2.cc \ + time_get/get_weekday/wchar_t/wrapped_env.cc \ + time_get/get_weekday/wchar_t/wrapped_locale.cc \ + time_get/get_year/char/wrapped_locale.cc \ + time_get/get_year/wchar_t/wrapped_locale.cc \ + time_put/put/char/3.cc \ + time_put/put/char/7.cc \ + time_put/put/char/wrapped_env.cc \ + time_put/put/char/wrapped_locale.cc \ + time_put/put/wchar_t/3.cc \ + time_put/put/wchar_t/7.cc \ + time_put/put/wchar_t/wrapped_env.cc \ + time_put/put/wchar_t/wrapped_locale.cc diff --git a/lang/gcc5-aux/Makefile.version b/lang/gcc5-aux/Makefile.version new file mode 100644 index 000000000000..a2f7b3c88abf --- /dev/null +++ b/lang/gcc5-aux/Makefile.version @@ -0,0 +1,20 @@ +# $FreeBSD$ + +GCC_BRANCH= 5 +GCC_POINT= 0.0 +GCC_VERSION= ${GCC_BRANCH}.${GCC_POINT} +SNAPSHOT= 20150308 +BUILD_RELEASE= no +MAIN_PR= 0 +UTIL_PR= 0 +ARMV7_PR= 0 + +.if ${BUILD_RELEASE:Mno} +# Snapshot naming pattern +IDENTIFICATION= gcc-${GCC_BRANCH}-${SNAPSHOT} +MS_SUBDIR= snapshots/${GCC_BRANCH}-${SNAPSHOT} +.else +# Release naming pattern +IDENTIFICATION= gcc-${GCC_VERSION} +MS_SUBDIR= releases/gcc-${GCC_VERSION} +.endif diff --git a/lang/gcc5-aux/distinfo b/lang/gcc5-aux/distinfo new file mode 100644 index 000000000000..a5b2363fe550 --- /dev/null +++ b/lang/gcc5-aux/distinfo @@ -0,0 +1,14 @@ +SHA256 (gcc-5-20150308.tar.bz2) = c0137e2768971bf03c08fa47161e5b295f61d94fd7c40e4798c80633b678191f +SIZE (gcc-5-20150308.tar.bz2) = 90652639 +SHA256 (ada-bootstrap.i386.dragonfly.36A.tar.bz2) = 6b1a6ff0fe0e3bf13c667db2fef177b811329cd998400a1303969a86911cb1c8 +SIZE (ada-bootstrap.i386.dragonfly.36A.tar.bz2) = 39357314 +SHA256 (ada-bootstrap.i386.freebsd.84.tar.bz2) = b410336cb0e71c8a29dd5f831a17b4b7282e7d590f452475a94c6a625cfc8846 +SIZE (ada-bootstrap.i386.freebsd.84.tar.bz2) = 39727003 +SHA256 (ada-bootstrap.i386.freebsd.100B.tar.bz2) = 7231209f2600275f554f788ad1d036cf633c4339ebd25bd479a5bb1ddcddedf3 +SIZE (ada-bootstrap.i386.freebsd.100B.tar.bz2) = 41229192 +SHA256 (ada-bootstrap.x86_64.dragonfly.36A.tar.bz2) = ba9b193f1f5c780c0e94086a9af6f1c8e843b6782c133b9948789b95b2e605c4 +SIZE (ada-bootstrap.x86_64.dragonfly.36A.tar.bz2) = 40747242 +SHA256 (ada-bootstrap.x86_64.freebsd.84.tar.bz2) = ba1a407d936e7b3f2bfe825d1fb5a1f0e85e8edbdd9e8440bb49ef643fec05fc +SIZE (ada-bootstrap.x86_64.freebsd.84.tar.bz2) = 40227668 +SHA256 (ada-bootstrap.x86_64.freebsd.100B.tar.bz2) = 1066d7c5e71d78b4416de3b73348227678ca07db52488409e270db7b00467f55 +SIZE (ada-bootstrap.x86_64.freebsd.100B.tar.bz2) = 42163803 diff --git a/lang/gcc5-aux/files/android.exp b/lang/gcc5-aux/files/android.exp new file mode 100644 index 000000000000..b3eb17563371 --- /dev/null +++ b/lang/gcc5-aux/files/android.exp @@ -0,0 +1,106 @@ +# This file is part of DejaGnu. + +if {![info exists board]} { + error "must set $board before loading android.exp" +} + +# For rcp_download, rsh_exec. +load_lib remote.exp + +# +# unix_load -- load the program and execute it +# +# See default.exp for explanation of arguments and results. +# + + +proc unix_load { dest prog args } { + global ld_library_path + set output "" + set orig_ld_library_path "" + + if { [llength $args] > 0 } { + set parg [lindex $args 0] + } else { + set parg "" + } + + if { [llength $args] > 1 } { + set inp [lindex $args 1] + } else { + set inp "" + } + + if {![file exists $prog]} then { + # We call both here because this should never happen. + perror "$prog does not exist in unix_load." + verbose -log "$prog does not exist." 3 + return "untested" + } + verbose "loading to $dest" 2 + if {![is_remote $dest]} { + if { "$inp" != "" } { + set command "$prog $parg < $inp" + } else { + set command "$prog $parg" + } + + if {![info exists ld_library_path]} { + set ld_library_path "" + } + + set orig_ld_library_path "[getenv LD_LIBRARY_PATH]" + setenv LD_LIBRARY_PATH "$ld_library_path:$orig_ld_library_path" + setenv SHLIB_PATH "$ld_library_path:$orig_ld_library_path" + verbose -log "Setting LD_LIBRARY_PATH to $ld_library_path:$orig_ld_library_path" 2 + + set id [remote_spawn $dest "$command" "readonly"] + if { $id < 0 } { + set output "remote_spawn failed" + set status -1 + } else { + set status [remote_wait $dest 300] + set output [lindex $status 1] + set status [lindex $status 0] + } + # Unset them so we don't potentially get hosed when we try to run a + # non-testcase executable. (Setting LD_LIBRARY_PATH is the wrong + # fix in the first place; this just tries to minimize the resulting + # crap.) + if {[info exists ld_library_path]} { + setenv LD_LIBRARY_PATH $orig_ld_library_path + setenv SHLIB_PATH $orig_ld_library_path + } + } else { + set remotefile "/data/local/testsuite/[file tail $prog].[pid]" + set remotefile [remote_download $dest $prog $remotefile] + if { $remotefile == "" } { + verbose -log "Download of $prog to [board_info $dest name] failed." 3 + return [list "unresolved" ""] + } + set status [remote_exec $dest "$remotefile" $parg $inp] + remote_file $dest delete $remotefile.o $remotefile + if { [lindex $status 0] < 0 } { + verbose -log "Couldn't execute $prog, [lindex $status 1]" 3 + return [list "unresolved" ""] + } + set output [lindex $status 1] + set status [lindex $status 0] + } + + setenv LD_LIBRARY_PATH $orig_ld_library_path + setenv SHLIB_PATH $orig_ld_library_path + + verbose "Executed $prog, status $status" 2 + if {![string match "" $output]} { + verbose -- "$output" 2 + } + if { $status == 0 } { + set result "pass" + } else { + set result "fail" + } + return [list $result $output] +} + +set_board_info protocol "unix" diff --git a/lang/gcc5-aux/files/diff-ada b/lang/gcc5-aux/files/diff-ada new file mode 100644 index 000000000000..c7335901041c --- /dev/null +++ b/lang/gcc5-aux/files/diff-ada @@ -0,0 +1,3277 @@ +--- gcc/ada/a-exetim-posix.adb.orig ++++ gcc/ada/a-exetim-posix.adb +@@ -105,11 +105,11 @@ + -- Time is equal to Duration (although it is a private type) and + -- CPU_Time is equal to Time. + +- function clock_gettime ++ function clock_gettime_int + (clock_id : Interfaces.C.int; + tp : access timespec) + return int; +- pragma Import (C, clock_gettime, "clock_gettime"); ++ pragma Import (C, clock_gettime_int, "clock_gettime"); + -- Function from the POSIX.1b Realtime Extensions library + + begin +@@ -117,7 +117,7 @@ + raise Program_Error; + end if; + +- Result := clock_gettime ++ Result := clock_gettime_int + (clock_id => CLOCK_THREAD_CPUTIME_ID, tp => TS'Unchecked_Access); + pragma Assert (Result = 0); + +--- /dev/null ++++ gcc/ada/a-intnam-dragonfly.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-2011, 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. -- ++-- -- ++------------------------------------------------------------------------------ ++ ++-- This is the DragonFly BSD THREADS version of this package ++ ++with System.OS_Interface; ++ ++package Ada.Interrupts.Names is ++ ++ -- All identifiers in this unit are implementation defined ++ ++ pragma Implementation_Defined; ++ ++ -- 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 +@@ -497,8 +497,8 @@ + GNAT_STRUCT_STAT stat_result; + int fd; + +- sprintf (full_path, "%s%c%s", dir, DIR_SEPARATOR, file); +- sprintf (temp_file, "%s%cTMP-%ld-%ld", ++ snprintf (full_path, 256, "%s%c%s", dir, DIR_SEPARATOR, file); ++ snprintf (temp_file, 256, "%s%cTMP-%ld-%ld", + dir, DIR_SEPARATOR, (long)getpid(), (long)getppid ()); + + /* Create the temporary file and write the process number. */ +@@ -659,7 +659,8 @@ + strcpy (encoding, "encoding=utf8"); + *e_length = strlen (encoding); + #else +- strcpy (os_name, filename); ++ /* o_length is initialized with max os_name size (2x filename size) */ ++ strncpy (os_name, filename, *o_length); + *o_length = strlen (filename); + *e_length = 0; + #endif +@@ -738,7 +739,7 @@ + } + + #if defined (_WIN32) || defined (linux) || defined (sun) \ +- || defined (__FreeBSD__) ++ || defined (__FreeBSD__) || defined(__DragonFly__) + #define HAS_TARGET_WCHAR_T + #endif + +@@ -973,9 +974,10 @@ + int fd; + int o_fmode = O_BINARY; + +- strcpy (path, "GNAT-XXXXXX"); ++ strncpy (path, "GNAT-XXXXXX", 12); + + #if (defined (__FreeBSD__) || defined (__NetBSD__) || defined (__OpenBSD__) \ ++ || defined (__DragonFly__) \ + || defined (linux) || defined(__GLIBC__)) && !defined (__vxworks) + return mkstemp (path); + #elif defined (__Lynx__) +@@ -1147,21 +1149,58 @@ + free (pname); + } + ++#elif defined (__ANDROID__) ++ ++ /* ++ * ext2 /ext3/ext4/fat16/fat32 have no path limits ++ * /data/local/tmp normally requires rooted devices, if it even exists ++ * /sdcard is the standard location for external storage. Nativeactivity ++ * manifest needs to authorize its use, otherwise it might not have the ++ * proper permissions. ++ */ ++ ++ int testfd; ++ char *datadir = getenv ("ANDROID_DATA"); ++ ++ if (datadir == NULL) ++ strncpy (tmp_filename, "/data/local/tmp/gnat-XXXXXX", L_tmpnam); ++ else ++ snprintf (tmp_filename, L_tmpnam, "%s/local/tmp/gnat-XXXXXX", datadir); ++ ++ testfd = mkstemp (tmp_filename); ++ if (testfd != -1) ++ { ++ close (testfd); ++ return; ++ } ++ ++ char *sdcard = getenv ("EXTERNAL_STORAGE"); ++ ++ if (sdcard == NULL) ++ strncpy (tmp_filename, "/sdcard/gnat-XXXXXX", L_tmpnam); ++ else ++ snprintf (tmp_filename, L_tmpnam, "%s/gnat-XXXXXX", sdcard); ++ ++ testfd = mkstemp (tmp_filename); ++ if (testfd != -1) ++ { ++ close (testfd); ++ return; ++ } ++ ++ tmpnam (tmp_filename); ++ + #elif defined (linux) || defined (__FreeBSD__) || defined (__NetBSD__) \ +- || defined (__OpenBSD__) || defined(__GLIBC__) || defined (__ANDROID__) ++ || defined (__OpenBSD__) || defined(__GLIBC__) || defined (__DragonFly__) + #define MAX_SAFE_PATH 1000 + char *tmpdir = getenv ("TMPDIR"); + + /* If tmpdir is longer than MAX_SAFE_PATH, revert to default value to avoid + a buffer overflow. */ + if (tmpdir == NULL || strlen (tmpdir) > MAX_SAFE_PATH) +-#ifdef __ANDROID__ +- strcpy (tmp_filename, "/cache/gnat-XXXXXX"); +-#else +- strcpy (tmp_filename, "/tmp/gnat-XXXXXX"); +-#endif ++ strncpy (tmp_filename, "/tmp/gnat-XXXXXX", L_tmpnam); + else +- sprintf (tmp_filename, "%s/gnat-XXXXXX", tmpdir); ++ snprintf (tmp_filename, L_tmpnam, "%s/gnat-XXXXXX", tmpdir); + + close (mkstemp(tmp_filename)); + #elif defined (__vxworks) && !(defined (__RTP__) || defined (VTHREADS)) +@@ -2247,7 +2286,9 @@ + { + int cores = 1; + +-#if defined (linux) || defined (sun) || defined (AIX) || defined (__APPLE__) ++#if defined (linux) || defined (sun) || defined (AIX) \ ++ || defined (__APPLE__) || defined (__FreeBSD__) || defined (__OpenBSD__) \ ++ || defined (__DragonFly__) || defined (__NetBSD__) + cores = (int) sysconf (_SC_NPROCESSORS_ONLN); + + #elif defined (__hpux__) +--- gcc/ada/cio.c.orig ++++ gcc/ada/cio.c +@@ -49,7 +49,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 +@@ -69,9 +69,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 +@@ -192,7 +193,9 @@ + *p = '\\'; + } + +-#elif defined (__FreeBSD__) ++#elif 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 +@@ -181,7 +181,9 @@ + LIB$SIGNAL (status); + } + +-#elif (defined (__vxworks) && defined (__RTP__)) || defined (__APPLE__) ++#elif (defined (__vxworks) && defined (__RTP__)) \ ++ || defined (__APPLE__) \ ++ || defined (__OpenBSD__) + setenv (name, value, 1); + + #else +@@ -304,6 +306,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/g-comlin.adb.orig ++++ gcc/ada/g-comlin.adb +@@ -520,6 +520,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 +@@ -1350,15 +1350,20 @@ + + -- 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 + +- Dup2 (Input, GNAT.OS_Lib.Standin); +- Dup2 (Output, GNAT.OS_Lib.Standout); +- Dup2 (Error, GNAT.OS_Lib.Standerr); +- Close (Input); +- Close (Output); +- Close (Error); ++ -- 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; + end Set_Up_Child_Communications; + + --------------------------- +--- /dev/null ++++ gcc/ada/g-socthi-bsd.adb +@@ -0,0 +1,356 @@ ++------------------------------------------------------------------------------ ++-- -- ++-- GNAT COMPILER COMPONENTS -- ++-- -- ++-- G N A T . S O C K E T S . T H I N -- ++-- -- ++-- B o d y -- ++-- -- ++-- Copyright (C) 2001-2013, AdaCore -- ++-- -- ++-- GNAT is free software; you can redistribute it and/or modify it under -- ++-- terms of the GNU General Public License as published by the Free Soft- -- ++-- ware Foundation; either version 3, or (at your option) any later ver- -- ++-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- ++-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- ++-- or FITNESS FOR A PARTICULAR PURPOSE. -- ++-- -- ++-- As a special exception under Section 7 of GPL version 3, you are granted -- ++-- additional permissions described in the GCC Runtime Library Exception, -- ++-- version 3.1, as published by the Free Software Foundation. -- ++-- -- ++-- You should have received a copy of the GNU General Public License and -- ++-- a copy of the GCC Runtime Library Exception along with this program; -- ++-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- ++-- <http://www.gnu.org/licenses/>. -- ++-- -- ++-- GNAT was originally developed by the GNAT team at New York University. -- ++-- Extensive contributions were provided by Ada Core Technologies Inc. -- ++-- -- ++------------------------------------------------------------------------------ ++ ++-- This package provides a target dependent thin interface to the sockets ++-- layer for use by the GNAT.Sockets package (g-socket.ads). This package ++-- should not be directly with'ed by an applications program. ++ ++-- This is the *BSD version which uses fcntl rather than ioctl ++-- The constant SCON.Thread_Blocking_IO is always true (for all platforms, not ++-- just *BSD), so this binding is significantly simpler than the standard ++-- one it replaces. ++ ++with GNAT.OS_Lib; use GNAT.OS_Lib; ++ ++with Interfaces.C; use Interfaces.C; ++ ++package body GNAT.Sockets.Thin is ++ ++ function Syscall_Accept ++ (S : C.int; ++ Addr : System.Address; ++ Addrlen : not null access C.int) return C.int; ++ pragma Import (C, Syscall_Accept, "accept"); ++ -- The accept() function accepts a connection on a socket. An incoming ++ -- connection is acknowledged and associated with an immediately created ++ -- socket. The original socket is returned to the listening state. ++ ++ function Syscall_Connect ++ (S : C.int; ++ Name : System.Address; ++ Namelen : C.int) return C.int; ++ pragma Import (C, Syscall_Connect, "connect"); ++ -- The connect() system call initiates a connection on a socket. If the ++ -- parameter S is of type SOCK_DGRAM then connect() permanently specifies ++ -- the peer to which datagrams are to be sent. If S is type SOCK_STREAM ++ -- then connect() attempts to make a connection with another socket, which ++ -- is identified by the parameter Name. ++ ++ function Syscall_Recv ++ (S : C.int; ++ Msg : System.Address; ++ Len : C.int; ++ Flags : C.int) return C.int; ++ pragma Import (C, Syscall_Recv, "recv"); ++ -- The recv() function receives a message from a socket. The call can be ++ -- used on a connection mode socket or a bound, connectionless socket. If ++ -- no messages are available at the socket, the recv() call waits for a ++ -- message to arrive unless the socket is non-blocking. If a socket is ++ -- non-blocking, the call returns a -1 and ERRNO is set to EWOULDBLOCK. ++ ++ function Syscall_Recvfrom ++ (S : C.int; ++ Msg : System.Address; ++ Len : C.int; ++ Flags : C.int; ++ From : System.Address; ++ Fromlen : not null access C.int) return C.int; ++ pragma Import (C, Syscall_Recvfrom, "recvfrom"); ++ -- The recvfrom() system call receives a message from a socket and captures ++ -- the address from which the data was sent. It can be used to receive ++ -- data on an unconnected socket as well. If no messages are available, ++ -- the call waits for a message to arrive on blocking sockets. For ++ -- non-blocking sockets without messages, -1 is returned and ERRNO is set ++ -- to EAGAIN or EWOULDBLOCK. ++ ++ function Syscall_Recvmsg ++ (S : C.int; ++ Msg : System.Address; ++ Flags : C.int) return System.CRTL.ssize_t; ++ pragma Import (C, Syscall_Recvmsg, "recvmsg"); ++ -- The recvmsg call receives a message from a socket, and can be used to ++ -- receive data on an unconnected socket as well. If no messages are ++ -- available, the call waits for a message to arrive on blocking sockets. ++ -- For non-blocking sockets without messages, -1 is returned and ERRNO is ++ -- set to EAGAIN or EWOULDBLOCK. ++ ++ function Syscall_Sendmsg ++ (S : C.int; ++ Msg : System.Address; ++ Flags : C.int) return System.CRTL.ssize_t; ++ pragma Import (C, Syscall_Sendmsg, "sendmsg"); ++ -- The sendmsg() function sends a message to a socket, and can be used with ++ -- unconnected sockets as well (the msg is ignored in this case). The ++ -- function returns the number of bytes sent when successful, otherwise it ++ -- returns -1 and ERRNO is set (many possible values). ++ ++ function Syscall_Sendto ++ (S : C.int; ++ Msg : System.Address; ++ Len : C.int; ++ Flags : C.int; ++ To : System.Address; ++ Tolen : C.int) return C.int; ++ pragma Import (C, Syscall_Sendto, "sendto"); ++ -- The sendto() function only works for connected sockets and it initiates ++ -- the transmission of a message. A successful call returns the numbers of ++ -- bytes sent, and a failure returns a -1 and ERRNO is set. ++ ++ function Syscall_Socket ++ (Domain : C.int; ++ Typ : C.int; ++ Protocol : C.int) return C.int; ++ pragma Import (C, Syscall_Socket, "socket"); ++ -- The socket() function is used to create an unbound socket and returns a ++ -- file descriptor that can be used with other socket functions. Upon ++ -- failure, a -1 is returned and ERRNO is set. ++ ++ procedure Disable_SIGPIPE (S : C.int); ++ pragma Import (C, Disable_SIGPIPE, "__gnat_disable_sigpipe"); ++ ++ procedure Disable_All_SIGPIPEs; ++ pragma Import (C, Disable_All_SIGPIPEs, "__gnat_disable_all_sigpipes"); ++ -- Sets the process to ignore all SIGPIPE signals on platforms that ++ -- don't support Disable_SIGPIPE for particular streams. ++ ++ function C_Fcntl ++ (Fd : C.int; ++ Cmd : C.int; ++ Val : C.int) return C.int; ++ pragma Import (C, C_Fcntl, "fcntl"); ++ -- The ioctl of 64-bit DragonFlyBSD, OpenBSD, and NetBSD does not support ++ -- setting a socket in non-blocking mode. fcntl must be used instead. ++ ++ -------------- ++ -- C_Accept -- ++ -------------- ++ ++ function C_Accept ++ (S : C.int; ++ Addr : System.Address; ++ Addrlen : not null access C.int) return C.int ++ is ++ R : constant C.int := Syscall_Accept (S, Addr, Addrlen); ++ begin ++ ++ Disable_SIGPIPE (R); ++ return R; ++ end C_Accept; ++ ++ --------------- ++ -- C_Connect -- ++ --------------- ++ ++ function C_Connect ++ (S : C.int; ++ Name : System.Address; ++ Namelen : C.int) return C.int ++ is ++ begin ++ return Syscall_Connect (S, Name, Namelen); ++ end C_Connect; ++ ++ ------------------ ++ -- Socket_Ioctl -- ++ ------------------ ++ ++ function Socket_Ioctl ++ (S : C.int; ++ Req : SOSC.IOCTL_Req_T; ++ Arg : access C.int) return C.int ++ is ++ begin ++ if Req = SOSC.FIONBIO then ++ declare ++ use Interfaces; ++ flags : constant Unsigned_32 := ++ Unsigned_32 (C_Fcntl (S, SOSC.F_GETFL, 0)); ++ nonblock : constant Unsigned_32 := Unsigned_32 (SOSC.O_NDELAY); ++ enabled : constant Boolean := Arg.all = 1; ++ newval : C.int := C.int (flags); ++ begin ++ if enabled then ++ newval := C.int (flags or nonblock); ++ elsif (flags and nonblock) > 0 then ++ newval := C.int (flags - nonblock); ++ end if; ++ return C_Fcntl (Fd => S, Cmd => SOSC.F_SETFL, Val => newval); ++ end; ++ end if; ++ ++ return C_Ioctl (S, Req, Arg); ++ end Socket_Ioctl; ++ ++ ------------ ++ -- C_Recv -- ++ ------------ ++ ++ function C_Recv ++ (S : C.int; ++ Msg : System.Address; ++ Len : C.int; ++ Flags : C.int) return C.int ++ is ++ begin ++ return Syscall_Recv (S, Msg, Len, Flags); ++ end C_Recv; ++ ++ ---------------- ++ -- C_Recvfrom -- ++ ---------------- ++ ++ function C_Recvfrom ++ (S : C.int; ++ Msg : System.Address; ++ Len : C.int; ++ Flags : C.int; ++ From : System.Address; ++ Fromlen : not null access C.int) return C.int ++ is ++ begin ++ return Syscall_Recvfrom (S, Msg, Len, Flags, From, Fromlen); ++ end C_Recvfrom; ++ ++ --------------- ++ -- C_Recvmsg -- ++ --------------- ++ ++ function C_Recvmsg ++ (S : C.int; ++ Msg : System.Address; ++ Flags : C.int) return System.CRTL.ssize_t ++ is ++ begin ++ return Syscall_Recvmsg (S, Msg, Flags); ++ end C_Recvmsg; ++ ++ --------------- ++ -- C_Sendmsg -- ++ --------------- ++ ++ function C_Sendmsg ++ (S : C.int; ++ Msg : System.Address; ++ Flags : C.int) return System.CRTL.ssize_t ++ is ++ begin ++ return Syscall_Sendmsg (S, Msg, Flags); ++ end C_Sendmsg; ++ ++ -------------- ++ -- C_Sendto -- ++ -------------- ++ ++ function C_Sendto ++ (S : C.int; ++ Msg : System.Address; ++ Len : C.int; ++ Flags : C.int; ++ To : System.Address; ++ Tolen : C.int) return C.int ++ is ++ begin ++ return Syscall_Sendto (S, Msg, Len, Flags, To, Tolen); ++ end C_Sendto; ++ ++ -------------- ++ -- C_Socket -- ++ -------------- ++ ++ function C_Socket ++ (Domain : C.int; ++ Typ : C.int; ++ Protocol : C.int) return C.int ++ is ++ R : constant C.int := Syscall_Socket (Domain, Typ, Protocol); ++ begin ++ Disable_SIGPIPE (R); ++ return R; ++ end C_Socket; ++ ++ -------------- ++ -- Finalize -- ++ -------------- ++ ++ procedure Finalize is ++ begin ++ null; ++ end Finalize; ++ ++ ------------------------- ++ -- Host_Error_Messages -- ++ ------------------------- ++ ++ package body Host_Error_Messages is separate; ++ ++ ---------------- ++ -- Initialize -- ++ ---------------- ++ ++ procedure Initialize is ++ begin ++ Disable_All_SIGPIPEs; ++ end Initialize; ++ ++ -------------------- ++ -- Signalling_Fds -- ++ -------------------- ++ ++ package body Signalling_Fds is ++ ++ -- In this default implementation, we use a C version of these ++ -- subprograms provided by socket.c. ++ ++ function C_Create (Fds : not null access Fd_Pair) return C.int; ++ function C_Read (Rsig : C.int) return C.int; ++ function C_Write (Wsig : C.int) return C.int; ++ procedure C_Close (Sig : C.int); ++ ++ pragma Import (C, C_Create, "__gnat_create_signalling_fds"); ++ pragma Import (C, C_Read, "__gnat_read_signalling_fd"); ++ pragma Import (C, C_Write, "__gnat_write_signalling_fd"); ++ pragma Import (C, C_Close, "__gnat_close_signalling_fd"); ++ ++ function Create ++ (Fds : not null access Fd_Pair) return C.int renames C_Create; ++ function Read (Rsig : C.int) return C.int renames C_Read; ++ function Write (Wsig : C.int) return C.int renames C_Write; ++ procedure Close (Sig : C.int) renames C_Close; ++ ++ end Signalling_Fds; ++ ++ -------------------------- ++ -- Socket_Error_Message -- ++ -------------------------- ++ ++ function Socket_Error_Message (Errno : Integer) return String is separate; ++ ++end GNAT.Sockets.Thin; +--- gcc/ada/gnatchop.adb.orig ++++ gcc/ada/gnatchop.adb +@@ -44,7 +44,7 @@ + Config_File_Name : constant String_Access := new String'("gnat.adc"); + -- The name of the file holding the GNAT configuration pragmas + +- Gcc : String_Access := new String'("gcc"); ++ Gcc : String_Access := new String'("ada"); + -- May be modified by switch --GCC= + + Gcc_Set : Boolean := False; +--- gcc/ada/gnatlink.adb.orig ++++ gcc/ada/gnatlink.adb +@@ -136,7 +136,7 @@ + -- This table collects the arguments to be passed to compile the binder + -- generated file. + +- Gcc : String_Access := Program_Name ("gcc", "gnatlink"); ++ Gcc : String_Access := Program_Name ("ada", "gnatlink"); + + Read_Mode : constant String := "r" & ASCII.NUL; + +--- gcc/ada/gsocket.h.orig ++++ gcc/ada/gsocket.h +@@ -209,6 +209,8 @@ + #endif + + #if defined (_AIX) || defined (__FreeBSD__) || defined (__hpux__) || \ ++ defined (__DragonFly__) || \ ++ defined (__NetBSD__) || defined (__OpenBSD__) || \ + defined (_WIN32) || defined (__APPLE__) || defined (__ANDROID__) + # define HAVE_THREAD_SAFE_GETxxxBYyyy 1 + +@@ -241,7 +243,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 +@@ -1628,7 +1628,7 @@ + /* FreeBSD Section */ + /*******************/ + +-#elif defined (__FreeBSD__) ++#elif defined (__FreeBSD__) || defined (__DragonFly__) + + #include <signal.h> + #include <sys/ucontext.h> +@@ -1673,7 +1673,7 @@ + } + + void +-__gnat_install_handler () ++__gnat_install_handler (void) + { + struct sigaction act; + +@@ -2496,9 +2496,13 @@ + initialization of the FP processor. This version is used under INTERIX + and WIN32. */ + +-#if defined (_WIN32) || defined (__INTERIX) \ +- || defined (__Lynx__) || defined(__NetBSD__) || defined(__FreeBSD__) \ +- || defined (__OpenBSD__) ++#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 +@@ -85,8 +85,11 @@ + /* __gnat_initialize (init_float version) */ + /******************************************/ + +-#elif defined (__Lynx__) || defined (__FreeBSD__) || defined(__NetBSD__) \ +- || defined (__OpenBSD__) ++#elif defined (__Lynx__) \ ++ || defined (__FreeBSD__) \ ++ || defined (__DragonFly__) \ ++ || defined (__NetBSD__) \ ++ || defined (__OpenBSD__) + + void + __gnat_initialize (void *eh ATTRIBUTE_UNUSED) +--- gcc/ada/link.c.orig ++++ gcc/ada/link.c +@@ -103,7 +103,10 @@ + unsigned char __gnat_separate_run_path_options = 0; + const char *__gnat_default_libgcc_subdir = "lib"; + +-#elif defined (__FreeBSD__) ++#elif defined (__FreeBSD__) \ ++ || defined (__DragonFly__) \ ++ || defined (__OpenBSD__) \ ++ || defined (__NetBSD__) + const char *__gnat_object_file_option = "-Wl,@"; + const char *__gnat_run_path_option = "-Wl,-rpath,"; + char __gnat_shared_libgnat_default = STATIC; +--- gcc/ada/make.adb.orig ++++ gcc/ada/make.adb +@@ -671,7 +671,7 @@ + -- Compiler, Binder & Linker Data and Subprograms -- + ---------------------------------------------------- + +- Gcc : String_Access := Program_Name ("gcc", "gnatmake"); ++ Gcc : String_Access := Program_Name ("ada", "gnatmake"); + Original_Gcc : constant String_Access := Gcc; + -- Original_Gcc is used to check if Gcc has been modified by a switch + -- --GCC=, so that for VM platforms, it is not modified again, as it can +--- gcc/ada/mlib-prj.adb.orig ++++ gcc/ada/mlib-prj.adb +@@ -335,6 +335,11 @@ + + Foreign_Sources : Boolean; + ++ Rpath_Disabled : Boolean := False; ++ -- If -R is passed through the library options for the linker, it will ++ -- prevent the implemented libraries portion of the rpath switch from ++ -- being built, even if the linker is capable of supporting rpath. ++ + Rpath : String_Access := null; + -- Allocated only if Path Option is supported + +@@ -768,7 +773,7 @@ + Opts.Table (Opts.Last) := + new String'("-L" & Name_Buffer (1 .. Name_Len)); + +- if Path_Option /= null then ++ if not Rpath_Disabled and then Path_Option /= null then + Add_Rpath (Name_Buffer (1 .. Name_Len)); + end if; + +@@ -1299,9 +1304,13 @@ + Get_Name_String (Element.Value); + + if Name_Len /= 0 then +- Opts.Increment_Last; +- Opts.Table (Opts.Last) := +- new String'(Name_Buffer (1 .. Name_Len)); ++ if Name_Buffer (1 .. Name_Len) = "-R" then ++ Rpath_Disabled := True; ++ else ++ Opts.Increment_Last; ++ Opts.Table (Opts.Last) := ++ new String'(Name_Buffer (1 .. Name_Len)); ++ end if; + end if; + + Current := Element.Next; +--- gcc/ada/mlib-utl.adb.orig ++++ gcc/ada/mlib-utl.adb +@@ -446,7 +446,7 @@ + if Driver_Name = No_Name then + if Gcc_Exec = null then + if Gcc_Name = null then +- Gcc_Name := Osint.Program_Name ("gcc", "gnatmake"); ++ Gcc_Name := Osint.Program_Name ("ada", "gnatmake"); + end if; + + Gcc_Exec := Locate_Exec_On_Path (Gcc_Name.all); +--- gcc/ada/prj-makr.adb.orig ++++ gcc/ada/prj-makr.adb +@@ -115,7 +115,7 @@ + + procedure Dup2 (Old_Fd, New_Fd : File_Descriptor); + +- Gcc : constant String := "gcc"; ++ Gcc : constant String := "ada"; + Gcc_Path : String_Access := null; + + Non_Empty_Node : constant Project_Node_Id := 1; +--- gcc/ada/s-osinte-android.ads.orig ++++ gcc/ada/s-osinte-android.ads +@@ -600,8 +600,8 @@ + type time_t is new long; + + type timespec is record +- tv_sec : time_t; +- tv_nsec : long; ++ ts_sec : time_t; ++ ts_nsec : long; + end record; + pragma Convention (C, timespec); + +--- /dev/null ++++ gcc/ada/s-osinte-dragonfly.adb +@@ -0,0 +1,116 @@ ++------------------------------------------------------------------------------ ++-- -- ++-- 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). -- ++-- -- ++------------------------------------------------------------------------------ ++ ++-- 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.ts_sec) + Duration (TS.ts_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'(ts_sec => S, ++ ts_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,653 @@ ++------------------------------------------------------------------------------ ++-- -- ++-- 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-2014, Free Software Foundation, Inc. -- ++-- -- ++-- 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/>. -- ++-- -- ++-- 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). -- ++-- -- ++------------------------------------------------------------------------------ ++ ++-- 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 new unsigned_long; ++ ++ function clock_getres ++ (clock_id : clockid_t; ++ res : access timespec) return int; ++ pragma Import (C, clock_getres, "clock_getres"); ++ ++ 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; ++ ++ -- Read/Write lock not supported on DragonFly. To add support both types ++ -- pthread_rwlock_t and pthread_rwlockattr_t must properly be defined ++ -- with the associated routines pthread_rwlock_[init/destroy] and ++ -- pthread_rwlock_[rdlock/wrlock/unlock]. ++ ++ subtype pthread_rwlock_t is pthread_mutex_t; ++ subtype pthread_rwlockattr_t is pthread_mutexattr_t; ++ ++ ----------- ++ -- 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 ++ ts_sec : time_t; ++ ts_nsec : long; ++ end record; ++ pragma Convention (C, timespec); ++ ++ 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 +@@ -44,7 +44,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 +57,7 @@ + function Get_Stack_Base (thread : pthread_t) return Address is + pragma Unreferenced (thread); + begin +- return (0); ++ return Null_Address; + end Get_Stack_Base; + + ------------------ +--- /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-trasym-bsd.adb +@@ -0,0 +1,151 @@ ++------------------------------------------------------------------------------ ++-- -- ++-- GNAT RUN-TIME COMPONENTS -- ++-- -- ++-- S Y S T E M . T R A C E B A C K . S Y M B O L I C -- ++-- -- ++-- B o d y -- ++-- -- ++-- Copyright (C) 1999-2009, AdaCore -- ++-- -- ++-- GNAT is free software; you can redistribute it and/or modify it under -- ++-- terms of the GNU General Public License as published by the Free Soft- -- ++-- ware Foundation; either version 2, or (at your option) any later ver- -- ++-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- ++-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- ++-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -- ++-- for more details. You should have received a copy of the GNU General -- ++-- Public License distributed with GNAT; see file COPYING. If not, write -- ++-- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, -- ++-- Boston, MA 02110-1301, USA. -- ++-- -- ++-- As a special exception, if other files instantiate generics from this -- ++-- unit, or you link this unit with other files to produce an executable, -- ++-- this unit does not by itself cause the resulting executable to be -- ++-- covered by the GNU General Public License. This exception does not -- ++-- however invalidate any other reasons why the executable file might be -- ++-- covered by the GNU Public License. -- ++-- -- ++-- GNAT was originally developed by the GNAT team at New York University. -- ++-- Extensive contributions were provided by Ada Core Technologies Inc. -- ++-- -- ++------------------------------------------------------------------------------ ++ ++-- Run-time symbolic traceback support ++-- This file is based on the work by Juergen Pfiefer which is still used ++-- today to provide symbolic traceback support for gnu/kFreeBSD. ++-- Incorporated in GNAT-AUX by John Marino <http://www.dragonlace.net> ++ ++with System.Soft_Links; ++with Ada.Exceptions.Traceback; use Ada.Exceptions.Traceback; ++ ++package body System.Traceback.Symbolic is ++ ++ package TSL renames System.Soft_Links; ++ ++ -- To perform the raw addresses to symbolic form translation we rely on a ++ -- libaddr2line symbolizer which examines debug info from a provided ++ -- executable file name, and an absolute path is needed to ensure the file ++ -- is always found. This is "__gnat_locate_exec_on_path (gnat_argv [0])" ++ -- for our executable file, a fairly heavy operation so we cache the ++ -- result. ++ ++ Exename : System.Address; ++ -- Pointer to the name of the executable file to be used on all ++ -- invocations of the libaddr2line symbolization service. ++ ++ Exename_Resolved : Boolean := False; ++ -- Flag to indicate whether we have performed the executable file name ++ -- resolution already. Relying on a not null Exename for this purpose ++ -- would be potentially inefficient as this is what we will get if the ++ -- resolution attempt fails. ++ ++ ------------------------ ++ -- Symbolic_Traceback -- ++ ------------------------ ++ ++ function Symbolic_Traceback (Traceback : Tracebacks_Array) return String is ++ ++ procedure convert_addresses ++ (filename : System.Address; ++ addrs : System.Address; ++ n_addrs : Integer; ++ buf : System.Address; ++ len : System.Address); ++ pragma Import (C, convert_addresses, "convert_addresses"); ++ -- This is the procedure version of the Ada-aware addr2line. It places ++ -- in BUF a string representing the symbolic translation of the N_ADDRS ++ -- raw addresses provided in ADDRS, looked up in debug information from ++ -- FILENAME. LEN points to an integer which contains the size of the ++ -- BUF buffer at input and the result length at output. ++ -- ++ -- Note that this procedure is *not* thread-safe. ++ ++ type Argv_Array is array (0 .. 0) of System.Address; ++ gnat_argv : access Argv_Array; ++ pragma Import (C, gnat_argv, "gnat_argv"); ++ ++ function locate_exec_on_path ++ (c_exename : System.Address) return System.Address; ++ pragma Import (C, locate_exec_on_path, "__gnat_locate_exec_on_path"); ++ ++ B_Size : constant Integer := 256 * Traceback'Length; ++ Len : Integer := B_Size; ++ Res : String (1 .. B_Size); ++ ++ use type System.Address; ++ ++ begin ++ -- The symbolic translation of an empty set of addresses is an empty ++ -- string. ++ ++ if Traceback'Length = 0 then ++ return ""; ++ end if; ++ ++ -- If our input set of raw addresses is not empty, resort to the ++ -- libaddr2line service to symbolize it all. ++ ++ -- Compute, cache and provide the absolute path to our executable file ++ -- name as the binary file where the relevant debug information is to be ++ -- found. If the executable file name resolution fails, we have no ++ -- sensible basis to invoke the symbolizer at all. ++ ++ -- Protect all this against concurrent accesses explicitly, as the ++ -- underlying services are potentially thread unsafe. ++ ++ TSL.Lock_Task.all; ++ ++ if not Exename_Resolved then ++ Exename := locate_exec_on_path (gnat_argv (0)); ++ Exename_Resolved := True; ++ end if; ++ ++ if Exename /= System.Null_Address then ++ Len := Res'Length; ++ convert_addresses ++ (Exename, Traceback'Address, Traceback'Length, ++ Res (1)'Address, Len'Address); ++ end if; ++ ++ TSL.Unlock_Task.all; ++ ++ -- Return what the addr2line symbolizer has produced if we have called ++ -- it (the executable name resolution succeeded), or an empty string ++ -- otherwise. ++ ++ if Exename /= System.Null_Address then ++ return Res (1 .. Len); ++ else ++ return ""; ++ end if; ++ ++ end Symbolic_Traceback; ++ ++ function Symbolic_Traceback ++ (E : Ada.Exceptions.Exception_Occurrence) return String is ++ begin ++ return Symbolic_Traceback (Tracebacks (E)); ++ end Symbolic_Traceback; ++ ++end System.Traceback.Symbolic; +--- gcc/ada/socket.c.orig ++++ gcc/ada/socket.c +@@ -37,7 +37,10 @@ + + #include "gsocket.h" + +-#if defined(__FreeBSD__) ++#if defined(__FreeBSD__) \ ++ || defined(__DragonFly__) \ ++ || defined(__OpenBSD__) \ ++ || defined(__NetBSD__) + typedef unsigned int IOCTL_Req_T; + #else + typedef int IOCTL_Req_T; +--- gcc/ada/sysdep.c.orig ++++ gcc/ada/sysdep.c +@@ -287,6 +287,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__ +@@ -339,6 +340,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; +@@ -359,6 +361,7 @@ + || 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]; + +@@ -820,6 +823,8 @@ + struct tm */ + + #elif defined (__APPLE__) || defined (__FreeBSD__) || defined (linux) \ ++ || defined (__DragonFly__) \ ++ || defined (__OpenBSD__) \ + || defined (__GLIBC__) + { + localtime_r (timer, &tp); +--- /dev/null ++++ gcc/ada/system-dragonfly-x86.ads +@@ -0,0 +1,144 @@ ++------------------------------------------------------------------------------ ++-- -- ++-- GNAT RUN-TIME COMPONENTS -- ++-- -- ++-- S Y S T E M -- ++-- -- ++-- S p e c -- ++-- (DragonFly BSD/x86 Version) -- ++-- -- ++-- Copyright (C) 1992-2011, 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. -- ++-- -- ++------------------------------------------------------------------------------ ++ ++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; ++ 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_Aggregates : constant Boolean := True; ++ Support_Atomic_Primitives : 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; ++ ++end System; +--- /dev/null ++++ gcc/ada/system-dragonfly-x86_64.ads +@@ -0,0 +1,144 @@ ++------------------------------------------------------------------------------ ++-- -- ++-- GNAT RUN-TIME COMPONENTS -- ++-- -- ++-- S Y S T E M -- ++-- -- ++-- S p e c -- ++-- (DragonFly BSD/x86_64 Version) -- ++-- -- ++-- Copyright (C) 1992-2011, 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. -- ++-- -- ++------------------------------------------------------------------------------ ++ ++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; ++ 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_Aggregates : constant Boolean := True; ++ Support_Atomic_Primitives : 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; ++ ++end System; +--- gcc/ada/terminals.c.orig ++++ gcc/ada/terminals.c +@@ -32,7 +32,7 @@ + /* First all usupported platforms. Add stubs for exported routines. */ + + #if defined (VMS) || defined (__vxworks) || defined (__Lynx__) \ +- || defined (__ANDROID__) || defined (__PikeOS__) ++ || defined (__PikeOS__) + + #define ATTRIBUTE_UNUSED __attribute__((unused)) + +@@ -1094,7 +1094,11 @@ + # include <sys/stropts.h> + #endif + ++#ifdef __ANDROID__ ++#define CDISABLE _PC_VDISABLE ++#else + #define CDISABLE _POSIX_VDISABLE ++#endif + + /* On HP-UX and Sun system, there is a bzero function but with a different + signature. Use memset instead */ +--- /dev/null ++++ gcc/ada/traceback_symbolic.c +@@ -0,0 +1,201 @@ ++/* ++ Copyright (C) 1999 by Juergen Pfeifer <juergen.pfeifer@gmx.net> ++ Ada for Linux Team (ALT) ++ Heavily modified by John Marino <http://www.dragonlace.net> ++ ++ Permission is hereby granted, free of charge, to any person obtaining a ++ copy of this software and associated documentation files (the ++ "Software"), to deal in the Software without restriction, including ++ without limitation the rights to use, copy, modify, merge, publish, ++ distribute, distribute with modifications, sublicense, and/or sell ++ copies of the Software, and to permit persons to whom the Software is ++ furnished to do so, subject to the following conditions: ++ ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. ++ ++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ++ IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, ++ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR ++ OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR ++ THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ ++ Except as contained in this notice, the name(s) of the above copyright ++ holders shall not be used in advertising or otherwise to promote the ++ sale, use or other dealings in this Software without prior written ++ authorization. ++*/ ++ ++#ifdef IS_CROSS ++ ++ ++/* ++ * Running addr2line doesn't make sense for cross-compiled objects. ++ * Create a dummy function to satisfy g-trasym.o ++ */ ++ ++void ++convert_addresses (const char *file_name ATTRIBUTE_UNUSED, ++ void *addrs ATTRIBUTE_UNUSED, ++ int n_addr ATTRIBUTE_UNUSED, ++ void *buf ATTRIBUTE_UNUSED, ++ int *len ATTRIBUTE_UNUSED) ++{ ++ *len = 0; ++} ++ ++#else ++ ++ ++/* ++ * use the external program /usr/bin/addr2line to convert addresses ++ * into file names and line numbers ++ */ ++ ++#include <sys/types.h> ++#include <stdlib.h> ++#include <unistd.h> ++#include <string.h> ++#include <signal.h> ++ ++#define CLOSE_SENDPIPE close(sendpipe[0]); close(sendpipe[1]) ++#define CLOSE_READPIPE close(readpipe[0]); close(readpipe[1]) ++#define DUP2CLOSE(oldfd, newfd) dup2(oldfd, newfd); close(oldfd); ++#define RESTSIG sigaction(SIGPIPE,&oact,NULL) ++ ++#define MAX_LINE 1024 ++#define PARENT_READ readpipe[0] ++#define CHILD_WRITE readpipe[1] ++#define CHILD_READ sendpipe[0] ++#define PARENT_WRITE sendpipe[1] ++ ++#if defined (__sun__) ++#define ADDR2LINE_PROG "/usr/gnu/bin/addr2line" ++#else ++#define ADDR2LINE_PROG "/usr/bin/addr2line" ++#endif ++ ++void ++convert_addresses (const char *file_name, ++ void *addrs, ++ int n_addr, ++ void *buf, ++ int *len) ++{ ++ int max_len = *len; ++ pid_t childpid; ++ ++ struct sigaction act, oact; ++ ++ int sendpipe[2] = {-1,-1}, /* parent -> child */ ++ readpipe[2] = {-1,-1}; /* parent <- child */ ++ ++ *len = 0; ++ act.sa_handler = SIG_IGN; ++ sigemptyset(&act.sa_mask); ++ act.sa_flags = 0; ++ if (sigaction(SIGPIPE,&act,&oact) < 0) ++ return; ++ ++ if (pipe(sendpipe) < 0) { RESTSIG; return; } ++ if (pipe(readpipe) < 0) { CLOSE_SENDPIPE; RESTSIG; return; } ++ if ((childpid = fork()) < 0) { ++ CLOSE_READPIPE; ++ CLOSE_SENDPIPE; ++ RESTSIG; ++ return; ++ } ++ ++ if (childpid == 0) { /* child process */ ++ close(PARENT_WRITE); ++ close(PARENT_READ); ++ if ((CHILD_READ != STDIN_FILENO) && (CHILD_WRITE != STDOUT_FILENO)) { ++ if ((CHILD_READ == STDOUT_FILENO) && (CHILD_WRITE == STDIN_FILENO)) { ++ const int temp_fd = dup(CHILD_WRITE); ++ close (CHILD_WRITE); ++ DUP2CLOSE (CHILD_READ, STDIN_FILENO); ++ DUP2CLOSE (temp_fd, STDOUT_FILENO); ++ } ++ else if ((CHILD_READ == STDIN_FILENO) && (CHILD_WRITE > 1)) { ++ DUP2CLOSE (CHILD_WRITE, STDOUT_FILENO); ++ } ++ else if ((CHILD_READ > 1) && (CHILD_WRITE == STDOUT_FILENO)) { ++ DUP2CLOSE (CHILD_READ, STDIN_FILENO); ++ } ++ else if ((CHILD_READ > 1) && (CHILD_WRITE == STDIN_FILENO)) { ++ DUP2CLOSE (CHILD_WRITE, STDOUT_FILENO); ++ DUP2CLOSE (CHILD_READ, STDIN_FILENO); ++ } ++ else { ++ /* CHILD_READ >= 1 and CHILD_WRITE > 1 */ ++ DUP2CLOSE (CHILD_READ, STDIN_FILENO); ++ DUP2CLOSE (CHILD_WRITE, STDOUT_FILENO); ++ } ++ } ++ /* As pointed out by Florian Weimer to JP, it is a security threat to call ++ the script with a user defined environment and using the path. That ++ would be Trojans pleasure. Therefore the absolute path to addr2line ++ and an empty environment is used. That should be safe. ++ */ ++ char *const argv[] = { "addr2line", ++ "-e", file_name, ++ "--demangle=gnat", ++ "--functions", ++ "--basenames", ++ NULL }; ++ char *const envp[] = { NULL }; ++ if (execve(ADDR2LINE_PROG, argv, envp) < 0) { ++ close (CHILD_WRITE); ++ close (CHILD_READ); ++ RESTSIG; ++ exit (1); ++ } ++ } ++ ++ /* Below this line is parent process */ ++ int i, n; ++ char hex[16]; ++ char line[MAX_LINE + 1]; ++ char *p; ++ char *s = buf; ++ long *trace_address = addrs; ++ ++ close(CHILD_WRITE); ++ close(CHILD_READ); ++ ++ for(i=0; i < n_addr; i++) { ++ snprintf(hex,sizeof(hex),"%#lx\n",*trace_address); ++ write(PARENT_WRITE,hex,strlen(hex)); ++ n = read(PARENT_READ,line,MAX_LINE); ++ if (n<=0) ++ break; ++ ++ line[n]=0; ++ /* We have approx. 16 additional chars for "%#lx in " clause. ++ We use this info to prevent a buffer overrun. */ ++ if (n + 16 + (*len) > max_len) ++ break; ++ ++ p = strchr(line,'\n'); ++ if (p) { ++ if (*(p+1)) { ++ *p = 0; ++ *len += snprintf(s, (max_len - (*len)), "%#lx in %s at %s", ++ *trace_address, line, p+1); ++ } ++ else { ++ *len += snprintf(s, (max_len - (*len)), "%#lx at %s", ++ *trace_address, line); ++ } ++ s = buf + (*len); ++ } ++ trace_address += 1; ++ } ++ close (PARENT_WRITE); ++ close (PARENT_READ); ++ RESTSIG; ++} ++ ++#endif +--- gcc/ada/tracebak.c.orig ++++ gcc/ada/tracebak.c +@@ -278,6 +278,23 @@ + #error Unhandled darwin architecture. + #endif + ++/*---------------------------- 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 */ ++ + /*---------------------- PPC AIX/PPC Lynx 178/Older Darwin ------------------*/ + #elif ((defined (_POWER) && defined (_AIX)) || \ + (defined (__powerpc__) && defined (__Lynx__) && !defined(__ELF__)) || \ +--- gcc/ada/gcc-interface/Make-lang.in.orig ++++ gcc/ada/gcc-interface/Make-lang.in +@@ -588,7 +588,7 @@ + ada/widechar.o + + # Language-independent object files. +-ADA_BACKEND = $(BACKEND) attribs.o ++ADA_BACKEND = $(BACKEND2) attribs.o + + # List of target dependent sources, overridden below as necessary + TARGET_ADA_SRCS = +--- gcc/ada/gcc-interface/Makefile.in.orig ++++ gcc/ada/gcc-interface/Makefile.in +@@ -1136,6 +1136,7 @@ + ifeq ($(strip $(filter-out arm% linux-androideabi,$(target_cpu) $(target_os))),) + LIBGNAT_TARGET_PAIRS = \ + a-intnam.ads<a-intnam-linux.ads \ ++ g-socthi.adb<g-socthi-bsd.adb \ + s-inmaop.adb<s-inmaop-posix.adb \ + s-intman.adb<s-intman-android.adb \ + s-linux.ads<s-linux-android.ads \ +@@ -1149,10 +1150,6 @@ + a-exexpr.adb<a-exexpr-gcc.adb \ + s-excmac.ads<s-excmac-arm.ads + +- TOOLS_TARGET_PAIRS = \ +- mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \ +- indepsw.adb<indepsw-gnu.adb +- + EXTRA_GNATRTL_TASKING_OBJS=s-linux.o + EXTRA_LIBGNAT_OBJS+=raise-gcc.o sigtramp-armdroid.o + EXTRA_GNATRTL_NONTASKING_OBJS+=g-cppexc.o s-excmac.o +@@ -1166,6 +1163,7 @@ + ifeq ($(strip $(filter-out sparc% sun solaris%,$(target_cpu) $(target_vendor) $(target_os))),) + LIBGNAT_TARGET_PAIRS_COMMON = \ + a-intnam.ads<a-intnam-solaris.ads \ ++ s-trasym.adb<s-trasym-bsd.adb \ + s-inmaop.adb<s-inmaop-posix.adb \ + s-intman.adb<s-intman-solaris.adb \ + s-mudido.adb<s-mudido-affinity.adb \ +@@ -1208,6 +1206,8 @@ + TOOLS_TARGET_PAIRS=mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb + + EH_MECHANISM=-gcc ++ EXTRA_LIBGNAT_SRCS+= traceback_symbolic.c ++ EXTRA_LIBGNAT_OBJS+= traceback_symbolic.o + THREADSLIB = -lposix4 -lthread + MISCLIB = -lposix4 -lnsl -lsocket + SO_OPTS = -Wl,-h, +@@ -1419,12 +1419,17 @@ + # x86 FreeBSD + ifeq ($(strip $(filter-out %86 freebsd%,$(target_cpu) $(target_os))),) + LIBGNAT_TARGET_PAIRS = \ ++ a-exetim.adb<a-exetim-posix.adb \ ++ a-exetim.ads<a-exetim-default.ads \ + a-intnam.ads<a-intnam-freebsd.ads \ ++ g-socthi.adb<g-socthi-bsd.adb \ ++ s-trasym.adb<s-trasym-bsd.adb \ + s-inmaop.adb<s-inmaop-posix.adb \ + s-intman.adb<s-intman-posix.adb \ ++ s-mudido.adb<s-mudido-affinity.adb \ + s-osinte.adb<s-osinte-freebsd.adb \ + s-osinte.ads<s-osinte-freebsd.ads \ +- s-osprim.adb<s-osprim-posix.adb \ ++ 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 \ +@@ -1432,11 +1437,12 @@ + $(X86_TARGET_PAIRS) \ + system.ads<system-freebsd-x86.ads + +- TOOLS_TARGET_PAIRS = \ +- mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb + GNATLIB_SHARED = gnatlib-shared-dual + ++ EXTRA_LIBGNAT_SRCS+= traceback_symbolic.c ++ EXTRA_LIBGNAT_OBJS+= traceback_symbolic.o + EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o ++ EXTRA_GNATRTL_TASKING_OBJS=a-exetim.o + + EH_MECHANISM=-gcc + THREADSLIB= -lpthread +@@ -1448,12 +1454,17 @@ + # x86-64 FreeBSD + ifeq ($(strip $(filter-out %86_64 freebsd%,$(target_cpu) $(target_os))),) + LIBGNAT_TARGET_PAIRS = \ ++ a-exetim.adb<a-exetim-posix.adb \ ++ a-exetim.ads<a-exetim-default.ads \ + a-intnam.ads<a-intnam-freebsd.ads \ ++ g-socthi.adb<g-socthi-bsd.adb \ ++ s-trasym.adb<s-trasym-bsd.adb \ + s-inmaop.adb<s-inmaop-posix.adb \ + s-intman.adb<s-intman-posix.adb \ ++ s-mudido.adb<s-mudido-affinity.adb \ + s-osinte.adb<s-osinte-freebsd.adb \ + s-osinte.ads<s-osinte-freebsd.ads \ +- s-osprim.adb<s-osprim-posix.adb \ ++ 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 \ +@@ -1461,11 +1472,240 @@ + $(X86_64_TARGET_PAIRS) \ + 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_LIBGNAT_SRCS+= traceback_symbolic.c ++ EXTRA_LIBGNAT_OBJS+= traceback_symbolic.o ++ 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) ++ MISCLIB = -lutil ++endif ++ ++# x86 DragonFly ++ifeq ($(strip $(filter-out %86 dragonfly%,$(target_cpu) $(target_os))),) ++ LIBGNAT_TARGET_PAIRS = \ ++ a-exetim.adb<a-exetim-posix.adb \ ++ a-exetim.ads<a-exetim-default.ads \ ++ a-intnam.ads<a-intnam-dragonfly.ads \ ++ g-socthi.adb<g-socthi-bsd.adb \ ++ s-trasym.adb<s-trasym-bsd.adb \ ++ s-inmaop.adb<s-inmaop-posix.adb \ ++ s-intman.adb<s-intman-posix.adb \ ++ s-mudido.adb<s-mudido-affinity.adb \ ++ 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 \ ++ $(ATOMICS_TARGET_PAIRS) \ ++ $(X86_TARGET_PAIRS) \ ++ system.ads<system-dragonfly-x86.ads ++ ++ GNATLIB_SHARED = gnatlib-shared-dual ++ ++ EXTRA_LIBGNAT_SRCS+= traceback_symbolic.c ++ EXTRA_LIBGNAT_OBJS+= traceback_symbolic.o ++ EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o ++ EXTRA_GNATRTL_TASKING_OBJS=a-exetim.o ++ ++ EH_MECHANISM=-gcc ++ THREADSLIB= -lpthread ++ GMEM_LIB = gmemlib ++ LIBRARY_VERSION := $(LIB_VERSION) ++ MISCLIB = -lutil ++endif ++ ++# x86_64 DragonFly ++ifeq ($(strip $(filter-out x86_64 dragonfly%,$(target_cpu) $(target_os))),) ++ LIBGNAT_TARGET_PAIRS = \ ++ a-exetim.adb<a-exetim-posix.adb \ ++ a-exetim.ads<a-exetim-default.ads \ ++ a-intnam.ads<a-intnam-dragonfly.ads \ ++ g-socthi.adb<g-socthi-bsd.adb \ ++ s-trasym.adb<s-trasym-bsd.adb \ ++ s-inmaop.adb<s-inmaop-posix.adb \ ++ s-intman.adb<s-intman-posix.adb \ ++ s-mudido.adb<s-mudido-affinity.adb \ ++ 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 \ ++ $(ATOMICS_TARGET_PAIRS) \ ++ $(X86_64_TARGET_PAIRS) \ ++ system.ads<system-dragonfly-x86_64.ads ++ ++ GNATLIB_SHARED = gnatlib-shared-dual ++ ++ EXTRA_LIBGNAT_SRCS+= traceback_symbolic.c ++ EXTRA_LIBGNAT_OBJS+= traceback_symbolic.o ++ EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o ++ EXTRA_GNATRTL_TASKING_OBJS=a-exetim.o ++ ++ EH_MECHANISM=-gcc ++ THREADSLIB= -lpthread ++ GMEM_LIB = gmemlib ++ LIBRARY_VERSION := $(LIB_VERSION) ++ MISCLIB = -lutil ++endif ++ ++# x86 OpenBSD ++ifeq ($(strip $(filter-out %86 openbsd%,$(target_cpu) $(target_os))),) ++ LIBGNAT_TARGET_PAIRS = \ ++ a-exetim.adb<a-exetim-posix.adb \ ++ a-exetim.ads<a-exetim-default.ads \ ++ a-intnam.ads<a-intnam-openbsd.ads \ ++ g-socthi.adb<g-socthi-bsd.adb \ ++ s-trasym.adb<s-trasym-bsd.adb \ ++ s-inmaop.adb<s-inmaop-posix.adb \ ++ s-intman.adb<s-intman-posix.adb \ ++ s-mudido.adb<s-mudido-affinity.adb \ ++ 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 \ ++ $(ATOMICS_TARGET_PAIRS) \ ++ $(X86_TARGET_PAIRS) \ ++ system.ads<system-openbsd-x86.ads ++ ++ GNATLIB_SHARED = gnatlib-shared-dual ++ ++ EXTRA_LIBGNAT_SRCS+= traceback_symbolic.c ++ EXTRA_LIBGNAT_OBJS+= traceback_symbolic.o ++ EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o ++ EXTRA_GNATRTL_TASKING_OBJS=a-exetim.o ++ ++ EH_MECHANISM= ++ THREADSLIB= -lpthread ++ GMEM_LIB = gmemlib ++ LIBRARY_VERSION := $(LIB_VERSION) ++ MISCLIB = -lutil ++endif ++ ++# x86_64 OpenBSD ++ifeq ($(strip $(filter-out x86_64 openbsd%,$(target_cpu) $(target_os))),) ++ LIBGNAT_TARGET_PAIRS = \ ++ a-exetim.adb<a-exetim-posix.adb \ ++ a-exetim.ads<a-exetim-default.ads \ ++ a-intnam.ads<a-intnam-openbsd.ads \ ++ g-socthi.adb<g-socthi-bsd.adb \ ++ s-trasym.adb<s-trasym-bsd.adb \ ++ s-inmaop.adb<s-inmaop-posix.adb \ ++ s-intman.adb<s-intman-posix.adb \ ++ s-mudido.adb<s-mudido-affinity.adb \ ++ 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 \ ++ $(ATOMICS_TARGET_PAIRS) \ ++ $(X86_64_TARGET_PAIRS) \ ++ system.ads<system-openbsd-x86_64.ads ++ ++ GNATLIB_SHARED = gnatlib-shared-dual ++ ++ EXTRA_LIBGNAT_SRCS+= traceback_symbolic.c ++ EXTRA_LIBGNAT_OBJS+= traceback_symbolic.o ++ EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o ++ EXTRA_GNATRTL_TASKING_OBJS=a-exetim.o ++ ++ EH_MECHANISM= ++ THREADSLIB= -lpthread ++ GMEM_LIB = gmemlib ++ LIBRARY_VERSION := $(LIB_VERSION) ++ MISCLIB = -lutil ++endif ++ ++# x86 NetBSD (5+ only) ++ifeq ($(strip $(filter-out %86 netbsd%,$(target_cpu) $(target_os))),) ++ LIBGNAT_TARGET_PAIRS = \ ++ a-exetim.adb<a-exetim-posix.adb \ ++ a-exetim.ads<a-exetim-default.ads \ ++ a-intnam.ads<a-intnam-netbsd.ads \ ++ g-socthi.adb<g-socthi-netbsd.adb \ ++ s-trasym.adb<s-trasym-bsd.adb \ ++ s-inmaop.adb<s-inmaop-posix.adb \ ++ s-intman.adb<s-intman-posix.adb \ ++ s-mudido.adb<s-mudido-affinity.adb \ ++ 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 \ ++ $(ATOMICS_TARGET_PAIRS) \ ++ $(X86_TARGET_PAIRS) \ ++ system.ads<system-netbsd-x86.ads ++ ++ ifeq ($(strip $(filter-out %86 netbsdelf5%,$(target_cpu) $(target_os))),) ++ 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 ++ ++ GNATLIB_SHARED = gnatlib-shared-dual ++ ++ EXTRA_LIBGNAT_SRCS+= traceback_symbolic.c ++ EXTRA_LIBGNAT_OBJS+= traceback_symbolic.o ++ EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o ++ EXTRA_GNATRTL_TASKING_OBJS=a-exetim.o ++ ++ EH_MECHANISM=-gcc ++ THREADSLIB= -lpthread ++ GMEM_LIB = gmemlib ++ LIBRARY_VERSION := $(LIB_VERSION) ++ MISCLIB = -lutil ++endif ++ ++# x86_64 NetBSD (5+ only) ++ifeq ($(strip $(filter-out x86_64 netbsd%,$(target_cpu) $(target_os))),) ++ LIBGNAT_TARGET_PAIRS = \ ++ a-exetim.adb<a-exetim-posix.adb \ ++ a-exetim.ads<a-exetim-default.ads \ ++ a-intnam.ads<a-intnam-netbsd.ads \ ++ g-socthi.adb<g-socthi-netbsd.adb \ ++ s-trasym.adb<s-trasym-bsd.adb \ ++ s-inmaop.adb<s-inmaop-posix.adb \ ++ s-intman.adb<s-intman-posix.adb \ ++ s-mudido.adb<s-mudido-affinity.adb \ ++ 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 \ ++ $(ATOMICS_TARGET_PAIRS) \ ++ $(X86_64_TARGET_PAIRS) \ ++ system.ads<system-netbsd-x86_64.ads ++ ++ ifeq ($(strip $(filter-out x86_64 netbsd5%,$(target_cpu) $(target_os))),) ++ 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 ++ ++ GNATLIB_SHARED = gnatlib-shared-dual ++ ++ EXTRA_LIBGNAT_SRCS+= traceback_symbolic.c ++ EXTRA_LIBGNAT_OBJS+= traceback_symbolic.o + EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o ++ EXTRA_GNATRTL_TASKING_OBJS=a-exetim.o + + EH_MECHANISM=-gcc + THREADSLIB= -lpthread +--- gnattools/configure.ac.orig ++++ gnattools/configure.ac +@@ -79,11 +79,27 @@ + mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb \ + indepsw.adb<indepsw-darwin.adb" + ;; ++ *-*-dragonfly*) ++ TOOLS_TARGET_PAIRS="\ ++ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \ ++ indepsw.adb<indepsw-gnu.adb" ++ ;; + *-*-freebsd*) + TOOLS_TARGET_PAIRS="\ + mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \ + indepsw.adb<indepsw-gnu.adb" + ;; ++ *-*-netbsd*) ++ TOOLS_TARGET_PAIRS="\ ++ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \ ++ indepsw.adb<indepsw-gnu.adb" ++ ;; ++ *-*-openbsd*) ++ TOOLS_TARGET_PAIRS="\ ++ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \ ++ indepsw.adb<indepsw-gnu.adb" ++ ;; ++ # Next line covers arm*-*-linux-androideabi + *-*-linux*) + TOOLS_TARGET_PAIRS="\ + mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \ +--- gnattools/configure.orig ++++ gnattools/configure +@@ -2039,11 +2039,27 @@ + mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb \ + indepsw.adb<indepsw-darwin.adb" + ;; ++ *-*-dragonfly*) ++ TOOLS_TARGET_PAIRS="\ ++ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \ ++ indepsw.adb<indepsw-gnu.adb" ++ ;; + *-*-freebsd*) + TOOLS_TARGET_PAIRS="\ + mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \ + indepsw.adb<indepsw-gnu.adb" + ;; ++ *-*-netbsd*) ++ TOOLS_TARGET_PAIRS="\ ++ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \ ++ indepsw.adb<indepsw-gnu.adb" ++ ;; ++ *-*-openbsd*) ++ TOOLS_TARGET_PAIRS="\ ++ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \ ++ indepsw.adb<indepsw-gnu.adb" ++ ;; ++ # Next line covers arm*-*-linux-androideabi + *-*-linux*) + TOOLS_TARGET_PAIRS="\ + mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \ diff --git a/lang/gcc5-aux/files/diff-ada-testsuite b/lang/gcc5-aux/files/diff-ada-testsuite new file mode 100644 index 000000000000..725726e66c85 --- /dev/null +++ b/lang/gcc5-aux/files/diff-ada-testsuite @@ -0,0 +1,584 @@ +--- 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 +@@ -50,6 +50,14 @@ + echo "$@" >> $dir/acats.log + } + ++inform () { ++ printf "%04d %7s" $1 $2 ++} ++ ++disinform () { ++ printf "\r" ++} ++ + dir=`${PWDCMD-pwd}` + + if [ "$testdir" = "" ]; then +@@ -231,6 +239,18 @@ + par_countm=0 + par_last= + ++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 + # Used to generate support once and finish after that. + [ "$chapter" = "NONE" ] && continue +@@ -243,10 +263,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` + as_fn_arith $glob_countn + $countn + glob_countn=$as_val +@@ -299,10 +315,13 @@ + if [ $? -eq 0 ]; then + extraflags="$extraflags -fstack-check" + fi ++ inform $countdown $i ++ countdown=`expr $countdown - 1` + test=$dir/tests/$chapter/$i + mkdir $test && cd $test >> $dir/acats.log 2>&1 + + if [ $? -ne 0 ]; then ++ disinform + display "FAIL: $i" + failed="${failed}${i} " + clean_dir +@@ -323,8 +342,10 @@ + cxb30*) EXTERNAL_OBJECTS="$dir_support/cxb30040.o $dir_support/cxb30060.o $dir_support/cxb30130.o $dir_support/cxb30131.o";; + ca1020e) rm -f ca1020e_func1.adb ca1020e_func2.adb ca1020e_proc1.adb ca1020e_proc2.adb > /dev/null 2>&1;; + ca14028) rm -f ca14028_func2.ads ca14028_func3.ads ca14028_proc1.ads ca14028_proc3.ads > /dev/null 2>&1;; ++ cxh1001) extraflags="-a -f"; echo "pragma Normalize_Scalars;" > gnat.adc + esac + if [ "$main" = "" ]; then ++ disinform + display "FAIL: $i" + failed="${failed}${i} " + clean_dir +@@ -333,6 +354,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 +@@ -347,6 +369,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 +--- /dev/null ++++ gcc/testsuite/ada/acats/run_remote.sh +@@ -0,0 +1,412 @@ ++#!/bin/sh ++# Run ACATS with the GNU Ada compiler ++ ++# The following functions are to be customized if you run in cross ++# environment or want to change compilation flags. Note that for ++# tests requiring checks not turned on by default, this script ++# automatically adds the needed flags to pass (ie: -gnato or -gnatE). ++ ++# gccflags="-O3 -fomit-frame-pointer -funroll-all-loops -finline-functions" ++# gnatflags="-gnatN" ++ ++gccflags="-O2" ++gnatflags="-gnatws" ++tabtarget="/data/local/testsuite" ++STRIP="arm-aux-linux-androideabi-strip" ++ ++target_run () { ++ # Run on rooted tablet (port 22 vs port 2222) ++ BN=`basename $*` ++ $STRIP_FOR_TARGET $* ++ /usr/bin/scp -qp $* root@tablet:$tabtarget/ ++ /usr/bin/ssh -q tablet $tabtarget/$BN ++} ++ ++target_cmd () { ++ /usr/bin/ssh -q tablet "$1" ++} ++ ++# End of customization section. ++ ++display_noeol () { ++ printf "$@" ++ printf "$@" >> $dir/acats.sum ++ printf "$@" >> $dir/acats.log ++} ++ ++display () { ++ echo "$@" ++ echo "$@" >> $dir/acats.sum ++ echo "$@" >> $dir/acats.log ++} ++ ++log () { ++ echo "$@" >> $dir/acats.sum ++ echo "$@" >> $dir/acats.log ++} ++ ++inform () { ++ printf "%04d %7s" $1 $2 ++} ++ ++disinform () { ++ printf "\r" ++} ++ ++dir=`${PWDCMD-pwd}` ++ ++if [ "$testdir" = "" ]; then ++ echo You must use make check or make check-ada ++ exit 1 ++fi ++ ++if [ "$dir" = "$testdir" ]; then ++ echo "error: srcdir must be different than objdir, exiting." ++ exit 1 ++fi ++ ++target_gnatmake () { ++ echo gnatmake-cross --GCC=\"$GCC\" $gnatflags $gccflags $* -largs $EXTERNAL_OBJECTS --GCC=\"$GCC\" ++ gnatmake-cross --GCC="$GCC" $gnatflags $gccflags $* -largs $EXTERNAL_OBJECTS --GCC="$GCC" ++} ++ ++target_gcc () { ++ $GCC $gccflags $* ++} ++ ++clean_dir () { ++ rm -f "$binmain" *.o *.ali > /dev/null 2>&1 ++} ++ ++find_main () { ++ ls ${i}?.adb > ${i}.lst 2> /dev/null ++ ls ${i}*m.adb >> ${i}.lst 2> /dev/null ++ ls ${i}.adb >> ${i}.lst 2> /dev/null ++ main=`tail -1 ${i}.lst` ++} ++ ++split_testid () { ++ local mysplit=`echo $1 | awk -F/ '{print "section=" $1 "; TN=" $2 "; prog=" $3 ";"}'` ++ eval ${mysplit} ++} ++ ++EXTERNAL_OBJECTS="" ++# Global variable to communicate external objects to link with. ++ ++rm -f $dir/acats.sum $dir/acats.log $dir/transfer.lst ++ ++display "Test Run By $USER on `date`" ++ ++display " === acats configuration ===" ++ ++target=`$GCC -dumpmachine` ++ ++display target gcc is $GCC ++display `$GCC -v 2>&1` ++display host=`gcc -dumpmachine` ++display target=$target ++display `type gnatmake-cross` ++gnatls-cross -v >> $dir/acats.log ++display "" ++ ++# Let's be tidy and clear off the remote device first ++target_cmd "cd ${tabtarget}; rm logs/*; rmdir logs; rm *" ++ ++display " === acats support ===" ++display_noeol "Generating support files..." ++ ++rm -rf $dir/support ++mkdir -p $dir/support ++cd $dir/support ++ ++cp $testdir/support/*.ada $testdir/support/*.a $testdir/support/*.tst $dir/support ++ ++# Find out the size in bit of an address on the target ++target_gnatmake $testdir/support/impbit.adb >> $dir/acats.log 2>&1 ++target_run $dir/support/impbit > $dir/support/impbit.out 2>&1 ++target_bit=`cat $dir/support/impbit.out` ++echo target_bit="$target_bit" >> $dir/acats.log ++ ++# Find out a suitable asm statement ++# Adapted from configure.ac gcc_cv_as_dwarf2_debug_line ++case "$target" in ++ ia64*-*-* | s390*-*-*) ++ target_insn="nop 0" ++ ;; ++ mmix-*-*) ++ target_insn="swym 0" ++ ;; ++ *) ++ target_insn="nop" ++ ;; ++esac ++echo target_insn="$target_insn" >> $dir/acats.log ++ ++sed -e "s,ACATS4GNATDIR,$dir,g" \ ++ < $testdir/support/impdef.a > $dir/support/impdef.a ++sed -e "s,ACATS4GNATDIR,$dir,g" \ ++ -e "s,ACATS4GNATBIT,$target_bit,g" \ ++ -e "s,ACATS4GNATINSN,$target_insn,g" \ ++ < $testdir/support/macro.dfs > $dir/support/MACRO.DFS ++sed -e "s,ACATS4GNATDIR,$dir,g" \ ++ < $testdir/support/tsttests.dat > $dir/support/TSTTESTS.DAT ++ ++cp $testdir/tests/cd/*.c $dir/support ++cp $testdir/tests/cxb/*.c $dir/support ++grep -v '^#' $testdir/norun.lst | sort > $dir/support/norun.lst ++ ++rm -rf $dir/run ++mv $dir/tests $dir/tests.$$ 2> /dev/null ++rm -rf $dir/tests.$$ & ++mkdir -p $dir/run ++ ++cp -pr $testdir/tests $dir/ ++ ++for i in $dir/support/*.ada $dir/support/*.a; do ++ host_gnatchop $i >> $dir/acats.log 2>&1 ++done ++ ++# These tools are used to preprocess some ACATS sources ++# they need to be compiled native on the host. ++ ++host_gnatmake -q -gnatws macrosub.adb ++if [ $? -ne 0 ]; then ++ display "**** Failed to compile macrosub" ++ exit 1 ++fi ++./macrosub > macrosub.out 2>&1 ++ ++gcc -c cd300051.c ++host_gnatmake -q -gnatws widechr.adb ++if [ $? -ne 0 ]; then ++ display "**** Failed to compile widechr" ++ exit 1 ++fi ++./widechr > widechr.out 2>&1 ++ ++rm -f $dir/support/macrosub ++rm -f $dir/support/widechr ++rm -f $dir/support/*.ali ++rm -f $dir/support/*.o ++ ++display " done." ++ ++# From here, all compilations will be made by the target compiler ++ ++display_noeol "Compiling support files..." ++ ++target_gcc -c *.c ++if [ $? -ne 0 ]; then ++ display "**** Failed to compile C code" ++ exit 1 ++fi ++ ++host_gnatchop *.adt >> $dir/acats.log 2>&1 ++ ++target_gnatmake -c -gnato -gnatE *.ads >> $dir/acats.log 2>&1 ++target_gnatmake -c -gnato -gnatE *.adb >> $dir/acats.log 2>&1 ++ ++display " done." ++display "" ++display " === acats tests ===" ++ ++if [ $# -eq 0 ]; then ++ chapters=`cd $dir/tests; echo [a-z]*` ++else ++ chapters=$* ++fi ++ ++glob_countn=0 ++glob_countok=0 ++glob_countu=0 ++countdown=0 ++ ++for chapter in $chapters; do ++ if [ -d $dir/tests/$chapter ]; then ++ cd $dir/tests/$chapter ++ ls *.a *.ada *.adt *.am *.dep 2> /dev/null | sed -e 's/\(.*\)\..*/\1/g' | \ ++ cut -c1-7 | sort | uniq | comm -23 - $dir/support/norun.lst \ ++ > $dir/tests/$chapter/${chapter}.lst ++ countn=`wc -l < $dir/tests/$chapter/${chapter}.lst` ++ countdown=`expr $countdown + $countn` ++ fi ++done ++ ++cat > $dir/execute.sh << EOF ++inform () { ++ printf "left: %04d" \$1 ++} ++disinform () { ++ printf "\r" ++} ++cycle () { ++ local countx=0 ++ local total=\$(echo \$testlist | awk '{print NF}') ++ mkdir -p logs ++ echo "Executing \$total tests on remote device" ++ inform \$total ++ for x in \$testlist; do ++ timeout -t 30 ./\${x} > logs/\${x}.log 2>&1 ++ countx=\$(expr \$countx + 1) ++ if [ \$countx -eq 25 ]; then ++ total=\$(expr \$total - 25) ++ countx=0 ++ disinform ++ inform \$total ++ fi ++ done ++ disinform ++ tar -czf remote.logs.tar.gz logs ++} ++testlist=" \\ ++EOF ++ ++display "All tests are being cross-compiled without execution first." ++ ++for chapter in $chapters; do ++ if [ ! -d $dir/tests/$chapter ]; then ++ continue ++ fi ++ ++ countn=`wc -l < $dir/tests/$chapter/${chapter}.lst` ++ glob_countn=`expr $glob_countn + $countn` ++ counti=0 ++ for i in `cat $dir/tests/$chapter/${chapter}.lst`; do ++ counti=`expr $counti + 1` ++ extraflags="-gnat95" ++ grep $i $testdir/overflow.lst > /dev/null 2>&1 ++ if [ $? -eq 0 ]; then ++ extraflags="$extraflags -gnato" ++ fi ++ grep $i $testdir/elabd.lst > /dev/null 2>&1 ++ if [ $? -eq 0 ]; then ++ extraflags="$extraflags -gnatE" ++ fi ++ grep $i $testdir/floatstore.lst > /dev/null 2>&1 ++ if [ $? -eq 0 ]; then ++ extraflags="$extraflags -ffloat-store" ++ fi ++ grep $i $testdir/stackcheck.lst > /dev/null 2>&1 ++ if [ $? -eq 0 ]; then ++ extraflags="$extraflags -fstack-check" ++ fi ++ inform $countdown $i ++ countdown=`expr $countdown - 1` ++ test=$dir/tests/$chapter/$i ++ mkdir $test && cd $test >> $dir/acats.log 2>&1 ++ ++ if [ $? -ne 0 ]; then ++ disinform ++ display "FAIL: $i" ++ failed="${failed}${i} " ++ clean_dir ++ continue ++ fi ++ ++ host_gnatchop -c -w `ls ${test}*.a ${test}*.ada ${test}*.adt ${test}*.am ${test}*.dep 2> /dev/null` >> $dir/acats.log 2>&1 ++ find_main ++ if [ -z "$main" ]; then ++ sync ++ find_main ++ fi ++ binmain=`echo $main | sed -e 's/\(.*\)\..*/\1/g'` ++ echo "BUILD $main" >> $dir/acats.log ++ EXTERNAL_OBJECTS="" ++ case $i in ++ cxb30*) EXTERNAL_OBJECTS="$dir/support/cxb30040.o $dir/support/cxb30060.o $dir/support/cxb30130.o $dir/support/cxb30131.o";; ++ ca1020e) rm -f ca1020e_func1.adb ca1020e_func2.adb ca1020e_proc1.adb ca1020e_proc2.adb > /dev/null 2>&1;; ++ ca14028) rm -f ca14028_func2.ads ca14028_func3.ads ca14028_proc1.ads ca14028_proc3.ads > /dev/null 2>&1;; ++ cxh1001) extraflags="-a -f"; echo "pragma Normalize_Scalars;" > gnat.adc ++ esac ++ if [ "$main" = "" ]; then ++ disinform ++ display "FAIL: $i" ++ failed="${failed}${i} " ++ clean_dir ++ continue ++ fi ++ ++ target_gnatmake $extraflags -I$dir/support $main >> $dir/acats.log 2>&1 ++ if [ $? -ne 0 ]; then ++ disinform ++ display "FAIL: $i" ++ failed="${failed}${i} " ++ clean_dir ++ continue ++ fi ++ echo $chapter/$i/$binmain >> $dir/transfer.lst ++ echo "$binmain \\" >> $dir/execute.sh ++ $STRIP $binmain ++ disinform ++ done ++done ++echo '"' >> $dir/execute.sh ++echo "cycle" >> $dir/execute.sh ++ ++sync ++display "Transfer files to remote device: root@tablet:$tabtarget/" ++cd $dir/tests ++cat $dir/transfer.lst | xargs tar --strip-components=2 -czf - | \ ++ target_cmd "tar -C $tabtarget -xzf -" ++cd $dir ++tar -czf - execute.sh | target_cmd "tar -C $tabtarget -xzf -" ++target_cmd "cd $tabtarget; sh execute.sh" ++rm -rf $dir/logs $dir/remote.logs.tar.gz ++/usr/bin/scp -q root@tablet:$tabtarget/remote.logs.tar.gz $dir/ ++tar -xzf $dir/remote.logs.tar.gz ++ ++countdown=`wc -l < $dir/transfer.lst` ++glob_countn=${countdown} ++for i in `cat $dir/transfer.lst`; do ++ split_testid $i ++ if [ "$section" != "$savedsect" ]; then ++ display Running chapter $section ... ++ fi ++ savedsect=$section ++ ++ #inform $countdown $TN ++ countdown=`expr $countdown - 1` ++ proglog="$dir/logs/${prog}.log" ++ echo "RUN $prog" >> $dir/acats.log ++ if [ ! -f $proglog ]; then ++ echo "LOG NOT FOUND!" >> $proglog ++ fi ++ ++ cat $proglog >> $dir/acats.log ++ ++ egrep -e '(==== |\+\+\+\+ |\!\!\!\! )' $proglog > /dev/null 2>&1 ++ if [ $? -ne 0 ]; then ++ grep 'tasking not implemented' $proglog > /dev/null 2>&1 ++ ++ if [ $? -ne 0 ]; then ++ display "FAIL: ${TN}" ++ failed="${failed}${TN} " ++ else ++ log "UNSUPPORTED: ${TN}" ++ glob_countn=`expr $glob_countn - 1` ++ glob_countu=`expr $glob_countu + 1` ++ fi ++ else ++ log "PASS: ${TN}" ++ glob_countok=`expr $glob_countok + 1` ++ fi ++ cd $dir/tests/$section/$TN ++ clean_dir ++ #disinform ++done ++ ++display " === acats Summary ===" ++display "# of expected passes $glob_countok" ++display "# of unexpected failures `expr $glob_countn - $glob_countok`" ++ ++if [ $glob_countu -ne 0 ]; then ++ display "# of unsupported tests $glob_countu" ++fi ++ ++if [ $glob_countok -ne $glob_countn ]; then ++ display "*** FAILURES: $failed" ++fi ++ ++display "$0 completed at `date`" ++ ++exit 0 +--- gcc/testsuite/gnat.dg/test_raise_from_pure.adb.orig ++++ gcc/testsuite/gnat.dg/test_raise_from_pure.adb +@@ -1,4 +1,4 @@ +--- { dg-do run } ++-- { dg-do run { xfail *-*-openbsd* } } + -- { dg-options "-O2" } + + -- This is an optimization test and its failure is only a missed optimization. +--- gcc/testsuite/gnat.dg/unchecked_convert5.adb.orig ++++ gcc/testsuite/gnat.dg/unchecked_convert5.adb +@@ -1,22 +0,0 @@ +--- { dg-do run { target hppa*-*-* sparc*-*-* powerpc*-*-* } } +- +-with Unchecked_Conversion; +- +-procedure Unchecked_Convert5 is +- +- subtype c_1 is string(1..1); +- +- function int2c1 is -- { dg-warning "different sizes" } +- new unchecked_conversion (source => integer, target => c_1); +- +- c1 : c_1; +- +-begin +- +- c1 := int2c1(16#12#); +- +- if c1 (1) /= ASCII.Nul then +- raise Program_Error; +- end if; +- +-end; +--- gcc/testsuite/gnat.dg/unchecked_convert6.adb.orig ++++ gcc/testsuite/gnat.dg/unchecked_convert6.adb +@@ -1,22 +0,0 @@ +--- { dg-do run { target hppa*-*-* sparc*-*-* powerpc*-*-* } } +- +-with Unchecked_Conversion; +- +-procedure Unchecked_Convert6 is +- +- subtype c_5 is string(1..5); +- +- function int2c5 is -- { dg-warning "different sizes" } +- new unchecked_conversion (source => integer, target => c_5); +- +- c5 : c_5; +- +-begin +- +- c5 := int2c5(16#12#); +- +- if c5 (4) /= ASCII.DC2 then +- raise Program_Error; +- end if; +- +-end; diff --git a/lang/gcc5-aux/files/diff-core b/lang/gcc5-aux/files/diff-core new file mode 100644 index 000000000000..04cf9e732273 --- /dev/null +++ b/lang/gcc5-aux/files/diff-core @@ -0,0 +1,349 @@ +--- gcc/config/dragonfly.h.orig ++++ gcc/config/dragonfly.h +@@ -84,7 +84,7 @@ + } \ + %{static:-Bstatic} \ + } \ +- %{!static:--hash-style=gnu} \ ++ %{!static:--hash-style=gnu -rpath @PREFIX@/@GCCAUX@/lib} \ + %{symbolic:-Bsymbolic}" + + #undef LINK_SPEC +--- gcc/config/i386/freebsd.h.orig ++++ gcc/config/i386/freebsd.h +@@ -90,6 +90,14 @@ + When the -shared link option is used a final link is not being + done. */ + ++#if FBSD_MAJOR < 9 ++#define ELF_HASH_STYLE "" ++#elif FBSD_MAJOR < 10 ++#define ELF_HASH_STYLE "--hash-style=both " ++#else ++#define ELF_HASH_STYLE "--hash-style=gnu " ++#endif ++ + #undef LINK_SPEC + #define LINK_SPEC "\ + %{p:%nconsider using '-pg' instead of '-p' with gprof(1)} \ +@@ -101,6 +109,7 @@ + %{rdynamic:-export-dynamic} \ + -dynamic-linker %(fbsd_dynamic_linker) } \ + %{static:-Bstatic}} \ ++ %{!static:" ELF_HASH_STYLE "-rpath @PREFIX@/@GCCAUX@/lib} \ + %{symbolic:-Bsymbolic}" + + /* A C statement to output to the stdio stream FILE an assembler +--- gcc/config/i386/freebsd64.h.orig ++++ gcc/config/i386/freebsd64.h +@@ -41,4 +41,5 @@ + %{rdynamic:-export-dynamic} \ + -dynamic-linker %(fbsd_dynamic_linker) } \ + %{static:-Bstatic}} \ ++ %{!static:" ELF_HASH_STYLE "-rpath @PREFIX@/@GCCAUX@/lib} \ + %{symbolic:-Bsymbolic}" +--- /dev/null ++++ libgcc/config/i386/freebsd-unwind.h +@@ -0,0 +1,198 @@ ++/* DWARF2 EH unwinding support for FreeBSD: AMD x86-64 and x86. ++ * Copyright (C) 2010, 2012, 2014 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 <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 ++ ++#if (__FreeBSD__ < 9) ++#include <sys/sysctl.h> ++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; ++} ++#endif ++ ++ ++static _Unwind_Reason_Code ++x86_64_freebsd_fallback_frame_state ++(struct _Unwind_Context *context, _Unwind_FrameState *fs) ++{ ++ struct sigframe *sf; ++ long new_cfa; ++ ++#if (__FreeBSD__ < 9) ++ unsigned char *pc = context->ra; ++ unsigned char *sigtramp_start, *sigtramp_end; ++ ++ x86_64_sigtramp_range(&sigtramp_start, &sigtramp_end); ++ if (pc >= sigtramp_end || pc < sigtramp_start) ++ return _URC_END_OF_STACK; ++#else ++ /* Prior to FreeBSD 9, the signal trampoline was located immediately ++ before the ps_strings. To support non-executable stacks on AMD64, ++ the sigtramp was moved to a shared page for FreeBSD 9. We are ++ stuck looking for frame patterns again (sys/amd64/amd64/sigtramp.S): ++ ++ <pc + 00>: lea 0x10(%rsp),%rdi ++ <pc + 05>: pushq $0x0 ++ <pc + 17>: mov $0x1a1,%rax ++ <pc + 14>: syscall ++ ++ If we can't find this pattern, we're at the end of the stack. ++ */ ++ ++ if (!( *(unsigned int *)(context->ra) == 0x247c8d48 ++ && *(unsigned int *)(context->ra + 4) == 0x48006a10 ++ && *(unsigned int *)(context->ra + 8) == 0x01a1c0c7 ++ && *(unsigned int *)(context->ra + 12) == 0x050f0000 )) ++ return _URC_END_OF_STACK; ++#endif ++ ++ 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 ++ ++/* ++ * We can't use KERN_PS_STRINGS anymore if we want to support FreeBSD32 ++ * compat on AMD64. The sigtramp is in a shared page in that case so the ++ * x86_sigtramp_range only works on a true i386 system. We have to ++ * search for the sigtramp frame if we want it working everywhere. ++ ++#include <sys/sysctl.h> ++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) ++{ ++ struct sigframe *sf; ++ long new_cfa; ++ ++/* ++ * i386 sigtramp frame we are looking for follows. ++ * Apparently PSL_VM is variable, so we can't look past context->ra + 4 ++ * <sigcode>: ++ * 0: ff 54 24 10 call *0x10(%esp) *SIGF_HANDLER ++ * 4: 8d 44 24 20 lea 0x20(%esp),%eax SIGF_UC ++ * 8: 50 push %eax ++ * 9: f7 40 54 00 00 02 00 testl $0x20000,0x54(%eax) $PSL_VM ++ * 10: 75 03 jne 15 <sigcode+0x15> ++ * 12: 8e 68 14 mov 0x14(%eax),%gs UC_GS ++ * 15: b8 a1 01 00 00 mov 0x1a1,%eax $SYS_sigreturn ++ */ ++ ++ if (!( *(unsigned int *)(context->ra - 4) == 0x102454ff ++ && *(unsigned int *)(context->ra) == 0x2024448d )) ++ 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__ */ +--- libiberty/getpagesize.c.orig ++++ libiberty/getpagesize.c +@@ -20,6 +20,7 @@ + + */ + ++#ifndef __ANDROID__ + #ifndef VMS + + #include "config.h" +@@ -88,3 +89,4 @@ + } + + #endif /* VMS */ ++#endif /* __ANDROID__ */ +--- libiberty/setproctitle.c.orig ++++ libiberty/setproctitle.c +@@ -40,9 +40,11 @@ + void + setproctitle (const char *name ATTRIBUTE_UNUSED, ...) + { ++#ifndef __ANDROID__ + #ifdef PR_SET_NAME + /* On GNU/Linux this sets the top visible "comm", but not + necessarily the name visible in ps. */ + prctl (PR_SET_NAME, name); + #endif ++#endif + } +--- gcc/Makefile.in.orig ++++ gcc/Makefile.in +@@ -1156,7 +1156,6 @@ + insn-emit.o \ + insn-extract.o \ + insn-latencytab.o \ +- insn-modes.o \ + insn-opinit.o \ + insn-output.o \ + insn-peep.o \ +@@ -1510,6 +1509,7 @@ + $(OBJS-libcommon-target) @TREEBROWSER@ main.o c-family/cppspec.o \ + $(COLLECT2_OBJS) $(EXTRA_GCC_OBJS) $(GCOV_OBJS) $(GCOV_DUMP_OBJS) \ + $(GCOV_TOOL_OBJS) $(GENGTYPE_OBJS) gcc-ar.o gcc-nm.o gcc-ranlib.o \ ++ insn-modes.o insn-modes-ada.o \ + lto-wrapper.o collect-utils.o + + # This lists all host object files, whether they are included in this +@@ -1517,6 +1517,11 @@ + ALL_HOST_OBJS = $(ALL_HOST_FRONTEND_OBJS) $(ALL_HOST_BACKEND_OBJS) + + BACKEND = libbackend.a main.o @TREEBROWSER@ libcommon-target.a libcommon.a \ ++ insn-modes.o \ ++ $(CPPLIB) $(LIBDECNUMBER) ++ ++BACKEND2 = libbackend.a main.o @TREEBROWSER@ libcommon-target.a libcommon.a \ ++ insn-modes-ada.o \ + $(CPPLIB) $(LIBDECNUMBER) + + # This is defined to "yes" if Tree checking is enabled, which roughly means +@@ -2163,6 +2168,7 @@ + + insn-modes.c: s-modes; @true + insn-modes.h: s-modes-h; @true ++insn-modes-ada.c: s-modes-ada; @true + min-insn-modes.c: s-modes-m; @true + + s-modes: build/genmodes$(build_exeext) +@@ -2180,6 +2186,12 @@ + $(SHELL) $(srcdir)/../move-if-change tmp-min-modes.c min-insn-modes.c + $(STAMP) s-modes-m + ++s-modes-ada: s-modes ++ $(shell sed -e 's/: TARGET_96_ROUND_53_LONG_DOUBLE \? &ieee_extended_intel_96_round_53_format //' \ ++ < insn-modes.c > tmp-modes-ada.c) ++ $(SHELL) $(srcdir)/../move-if-change tmp-modes-ada.c insn-modes-ada.c ++ $(STAMP) s-modes-ada ++ + insn-preds.c: s-preds; @true + tm-preds.h: s-preds-h; @true + tm-constrs.h: s-constrs-h; @true +@@ -3326,6 +3338,9 @@ + ( cd $(DESTDIR)$(bindir) && \ + $(LN) $(GCC_INSTALL_NAME)$(exeext) $(FULL_DRIVER_NAME) ); \ + fi; \ ++ -if [ -f gnat1$(exeext) ] ; then \ ++ ( cd $(DESTDIR)$(bindir) && $(LN) $(GCC_INSTALL_NAME)$(exeext) ada$(exeext) ) \ ++ fi; \ + if [ ! -f gcc-cross$(exeext) ] \ + && [ "$(GCC_INSTALL_NAME)" != "$(GCC_TARGET_INSTALL_NAME)" ]; then \ + rm -f $(DESTDIR)$(bindir)/$(target_noncanonical)-gcc-tmp$(exeext); \ +--- libgcc/config.host.orig ++++ libgcc/config.host +@@ -567,9 +567,11 @@ + ;; + i[34567]86-*-freebsd*) + tmake_file="${tmake_file} i386/t-freebsd i386/t-crtstuff" ++ md_unwind_header=i386/freebsd-unwind.h + ;; + x86_64-*-freebsd*) + tmake_file="${tmake_file} i386/t-freebsd i386/t-crtstuff" ++ md_unwind_header=i386/freebsd-unwind.h + ;; + i[34567]86-*-netbsdelf*) + ;; diff --git a/lang/gcc5-aux/files/diff-cxx b/lang/gcc5-aux/files/diff-cxx new file mode 100644 index 000000000000..6646a04b444e --- /dev/null +++ b/lang/gcc5-aux/files/diff-cxx @@ -0,0 +1,12 @@ +--- libstdc++-v3/configure.host.orig ++++ libstdc++-v3/configure.host +@@ -268,6 +268,9 @@ + dragonfly*) + os_include_dir="os/bsd/dragonfly" + ;; ++ linux-androideabi) ++ os_include_dir="os/bionic" ++ ;; + freebsd*) + os_include_dir="os/bsd/freebsd" + ;; diff --git a/lang/gcc5-aux/files/diff-cxx-testsuite b/lang/gcc5-aux/files/diff-cxx-testsuite new file mode 100644 index 000000000000..4f7388a9a662 --- /dev/null +++ b/lang/gcc5-aux/files/diff-cxx-testsuite @@ -0,0 +1,24 @@ +--- libstdc++-v3/testsuite/lib/libstdc++.exp.orig ++++ libstdc++-v3/testsuite/lib/libstdc++.exp +@@ -898,17 +898,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 "}" diff --git a/lang/gcc5-aux/files/diff-gcc-testsuite b/lang/gcc5-aux/files/diff-gcc-testsuite new file mode 100644 index 000000000000..a9a330ecf553 --- /dev/null +++ b/lang/gcc5-aux/files/diff-gcc-testsuite @@ -0,0 +1,46 @@ +--- gcc/testsuite/gcc.dg/format/ext-1.c.orig ++++ gcc/testsuite/gcc.dg/format/ext-1.c +@@ -8,7 +8,7 @@ + #include "format.h" + + void +-foo (quad_t q, u_quad_t uq, quad_t *qn, size_t z, size_t *zn, long long int ll, ++foo (quad2_t q, u_quad2_t uq, quad2_t *qn, size_t z, size_t *zn, long long int ll, + unsigned long long int ull, int i, unsigned int u, double d, + char *s, void *p, wchar_t *ls, wint_t lc, int *n, long int l) + { +--- gcc/testsuite/gcc.dg/format/ext-2.c.orig ++++ gcc/testsuite/gcc.dg/format/ext-2.c +@@ -8,7 +8,7 @@ + #include "format.h" + + void +-foo (quad_t *qp, u_quad_t *uqp, quad_t *qn, long long int *llp, ++foo (quad2_t *qp, u_quad2_t *uqp, quad2_t *qn, long long int *llp, + unsigned long long int *ullp, float *fp, char *s, void **pp, wchar_t *ls, + int *ip, unsigned int *up) + { +--- gcc/testsuite/gcc.dg/format/format.h.orig ++++ gcc/testsuite/gcc.dg/format/format.h +@@ -71,8 +71,8 @@ + #endif + + /* %q formats want a "quad"; GCC considers this to be a long long. */ +-typedef llong quad_t; +-typedef ullong u_quad_t; ++typedef llong quad2_t; ++typedef ullong u_quad2_t; + + __extension__ typedef __INTMAX_TYPE__ intmax_t; + __extension__ typedef __UINTMAX_TYPE__ uintmax_t; +--- gcc/testsuite/gcc.dg/pch/pch.exp.orig ++++ gcc/testsuite/gcc.dg/pch/pch.exp +@@ -44,6 +44,8 @@ + set test "largefile.c" + set testh "largefile.hs" + set f [open $test w] ++puts $f "/* { dg-do run { target *-*-solaris* } } */" ++puts $f "/* { dg-error \"dummy\" \"fool dejagnu\" { target { ! *-*-solaris* } 20 } } */" + puts $f "/* { dg-timeout-factor 4.0 } */" + set v 0 + for { set v 0 } { $v < 10000 } { incr v } { diff --git a/lang/gcc5-aux/files/gnatdroid.exp b/lang/gcc5-aux/files/gnatdroid.exp new file mode 100644 index 000000000000..978319f8a9b1 --- /dev/null +++ b/lang/gcc5-aux/files/gnatdroid.exp @@ -0,0 +1,14 @@ +# gnatdroid testsuite running over ssh. + +load_generic_config "android" + +process_multilib_options "" + +# The default compiler for this target. +set_board_info compiler "[find_gcc]" + +set_board_info rsh_prog /usr/bin/ssh +set_board_info rcp_prog /usr/bin/scp +set_board_info protocol standard +set_board_info hostname tablet +set_board_info username root diff --git a/lang/gcc5-aux/pkg-descr b/lang/gcc5-aux/pkg-descr new file mode 100644 index 000000000000..c7eff9c4711d --- /dev/null +++ b/lang/gcc5-aux/pkg-descr @@ -0,0 +1,14 @@ +The AUX compiler supports several languages: Ada, C, C++, Fortran and +Objective-C. Since Ada support must be built by an Ada-capable compiler, +only platforms for which a bootstrap compiler is available can build it. + +The AUX compiler is based on release versions of the Free Software +Foundation's GNU Compiler Collection. It uses the GCC Runtime Library +Exception, so the resulting binaries have no licensing requirements. +Binaries produced by the AUX compiler should be legally handled the same +as binaries produced by any FSF compiler. + +This compiler implements the full Ada-83, Ada-95, Ada-2005 and Ada-2012 +standards. + +WWW: http://www.dragonlace.net/ |