diff options
author | marino <marino@pkgsrc.org> | 2015-06-15 09:46:27 +0000 |
---|---|---|
committer | marino <marino@pkgsrc.org> | 2015-06-15 09:46:27 +0000 |
commit | c294e958ded2e2fb74f874b363b3bdaee4576761 (patch) | |
tree | 068e1abe4c84b74e5be1683f45e1b68d20d12fdf | |
parent | e8f50f38cea9b2571787551c7e28289796248c1a (diff) | |
download | pkgsrc-c294e958ded2e2fb74f874b363b3bdaee4576761.tar.gz |
Import lang/gcc5-aux based on gcc-5.1
This compiler package is not like the lang/gcc4* packages, but rather
the lang/gcc-aux package which exists to bring GNAT, the Ada language
compiler. The lang/gcc-aux package is based on gcc-4.9, and this
package is based on gcc-5. This is the first gcc5 package in pkgsrc,
and it does support C, C++, ObjC, and Fortran in addition to Ada thus
it is very useful, but it does have a different purpose than other
gcc ports.
This port has had minimal testing. I verified GNAT passes 100% of the
testsuite on NetBSD 6.1/amd64, but it has not been tested on any
NetBSD 5, 7.0 or 7.99 platform yet. I don't have any hardware, so it
will require using a VM or having others report failure/success. Due
to similarity with lang/gcc-aux, chances are good that it will build
and function properly on other platforms.
See http://gcc.gnu.org/gcc-5/changes.html for more information about
improvements over the gcc-4.9 series.
-rw-r--r-- | lang/gcc5-aux/DESCR | 14 | ||||
-rw-r--r-- | lang/gcc5-aux/Makefile | 341 | ||||
-rw-r--r-- | lang/gcc5-aux/Makefile.testsuite | 130 | ||||
-rw-r--r-- | lang/gcc5-aux/Makefile.version | 20 | ||||
-rw-r--r-- | lang/gcc5-aux/buildlink3.mk | 24 | ||||
-rw-r--r-- | lang/gcc5-aux/distinfo | 32 | ||||
-rw-r--r-- | lang/gcc5-aux/files/diff-ada | 3826 | ||||
-rw-r--r-- | lang/gcc5-aux/files/diff-ada-testsuite | 584 | ||||
-rw-r--r-- | lang/gcc5-aux/files/diff-core | 622 | ||||
-rw-r--r-- | lang/gcc5-aux/files/diff-cxx | 112 | ||||
-rw-r--r-- | lang/gcc5-aux/files/diff-cxx-testsuite | 24 | ||||
-rw-r--r-- | lang/gcc5-aux/files/diff-fortran | 42 | ||||
-rw-r--r-- | lang/gcc5-aux/files/diff-gcc-testsuite | 46 | ||||
-rw-r--r-- | lang/gcc5-aux/options.mk | 125 |
14 files changed, 5942 insertions, 0 deletions
diff --git a/lang/gcc5-aux/DESCR b/lang/gcc5-aux/DESCR new file mode 100644 index 00000000000..0af924c68d1 --- /dev/null +++ b/lang/gcc5-aux/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 carries with it the GMGPL license, +the modified version of the GPL that exempts generic instantiation from +resulting in a GPL-licensed executable. It also carries 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. diff --git a/lang/gcc5-aux/Makefile b/lang/gcc5-aux/Makefile new file mode 100644 index 00000000000..2a92c3e6bbf --- /dev/null +++ b/lang/gcc5-aux/Makefile @@ -0,0 +1,341 @@ +# $NetBSD: Makefile,v 1.1 2015/06/15 09:46:27 marino Exp $ +# + +PKGNAME= gcc5-aux-${SNAPSHOT} +DISTNAME= ${IDENTIFICATION} +CATEGORIES= lang +MASTER_SITES= ${MASTER_SITE_GNU:=gcc/${IDENTIFICATION}/} +DISTFILES= ${DISTNAME}.tar.bz2 + +MAINTAINER= draco@marino.st +HOMEPAGE= http://www.dragonlace.net/ +COMMENT= GNAT Ada compiler based on GCC ${GCC_BRANCH} +LICENSE= gnu-gpl-v3 AND gnu-lgpl-v3 + +LANGS= c ada c++ +USE_TOOLS+= gmake sed:run perl makeinfo bzip2 patch pod2man tar +APPLY_DIFFS= core ada cxx + +.include "Makefile.version" +.include "Makefile.testsuite" +.include "../../mk/bsd.prefs.mk" +.include "options.mk" + +# Requires bootstrap compiler, which is only available for on selected systems +# Disable SunOS for now until multilib version can be built and tested. + +ONLY_FOR_PLATFORM= DragonFly-*-x86_64 \ + FreeBSD-*-i386 \ + FreeBSD-*-x86_64 \ + NetBSD-[5-9]*-i386 \ + NetBSD-[5-9]*-x86_64 \ + SunOS-5.1[1-9]*-i386 \ + SunOS-5.1[1-9]*-x86_64 + +GARCH= ${MACHINE_ARCH:S/amd64/x86_64/} +BLD_TARGET= ${GARCH}-aux-${LOWER_OPSYS}${OS_VERSION} +OS_LABEL4VERS= [${OPSYS}${GARCH:M*64:S/amd_//:S/x86_//}] +FULL_GNATGCC= NOT SET +FULL_PATH= /sbin:/bin:/usr/sbin:/usr/bin:${PREFIX}/gcc-aux/bin:${PREFIX}/sbin:${PREFIX}/bin + +.if ${OPSYS} == DragonFly +BOOTSTRAP_COMPILER= ada-bootstrap.${GARCH}.dragonfly.36A.tar.bz2 +.endif + +.if ${OPSYS} == FreeBSD +MODERN_BINUTILS= yes +. if !empty(OS_VERSION:M[678].*) +BOOTSTRAP_COMPILER= ada-bootstrap.${GARCH}.freebsd.84.tar.bz2 +. else +BOOTSTRAP_COMPILER= ada-bootstrap.${GARCH}.freebsd.100B.tar.bz2 +. endif +.endif + +.if ${OPSYS} == NetBSD +. if !empty(OS_VERSION:M6.99.*) +NSUFF= 7.0_DEV +. elif !empty(OS_VERSION:M7.99.*) +NSUFF= 8.0_DEV +. else +NSUFF= ${OS_VERSION} +. endif +. if ${GARCH} == i386 +NELF= elf +. endif +XLDF= -lm +. if empty(OS_VERSION:M7.99.*) +MODERN_BINUTILS= yes +. endif +BOOTSTRAP_COMPILER= ada-bootstrap.${GARCH}.netbsd.614.tar.bz2 +BLD_TARGET= ${MACHINE_ARCH}-aux-netbsd${NELF}${NSUFF} +. if ${OS_VERSION:R} == 5 +CORRECTIONS= g-socthi-bsd.adb +CRXN= C5 +. else +CORRECTIONS= g-socthi-bsd.adb g-socthi.ads \ + s-osinte-netbsd.ads s-osprim-posix.adb +CRXN= C6 +. endif +C5_g-socthi-bsd.adb= Syscall_Socket/__socket30 +C6_g-socthi-bsd.adb= Syscall_Socket/__socket30 +C6_g-socthi.ads= C_Select/__select50 +C6_s-osinte-netbsd.ads= nanosleep/__nanosleep50 \ + clock_getres/__clock_getres50 \ + clock_gettime/__clock_gettime50 +C6_s-osprim-posix.adb= nanosleep/__nanosleep50 \ + gettimeofday/__gettimeofday50 +.endif + +.if ${OPSYS} == SunOS +SOL_OSV!= expr substr ${OS_VERSION} 3 2 +BLD_TARGET= ${MACHINE_ARCH}-aux-${LOWER_OPSYS}2.${SOL_OSV} +BOOTSTRAP_COMPILER= ada-bootstrap.x86_64.solaris.511.tar.bz2 +. if ${ABI} == 64 +EXTRA_CONFARGS+= --enable-multilib +. else +COMPILER_ABI_SWITCH= -m32 +. endif +MY_CONFIGURE_ENV+= OBJDUMP=${PREFIX}/bin/gobjdump +MODERN_BINUTILS= yes +NATIVE_LINKER!= which ld +.endif + +.if defined(MODERN_BINUTILS) +BUILDLINK_DEPMETHOD.binutils= full +.include "../../devel/binutils/buildlink3.mk" +EXTRA_CONFARGS+= --with-gnu-as --with-as=${PREFIX}/bin/gas +MY_CONFIGURE_ENV+= AR=${PREFIX}/bin/gar +MY_CONFIGURE_ENV+= AS=${PREFIX}/bin/gas +MY_CONFIGURE_ENV+= NM=${PREFIX}/bin/gnm +MY_CONFIGURE_ENV+= RANLIB=${PREFIX}/bin/granlib +. if defined(NATIVE_LINKER) +EXTRA_CONFARGS+= --without-gnu-ld --with-ld=${NATIVE_LINKER} +. else +EXTRA_CONFARGS+= --with-gnu-ld --with-ld=${PREFIX}/bin/gld.gold +MY_CONFIGURE_ENV+= LD=${PREFIX}/bin/gld.gold +. endif +.else +EXTRA_CONFARGS+= --with-gnu-ld --with-ld=/usr/bin/ld +EXTRA_CONFARGS+= --with-gnu-as --with-as=/usr/bin/as +.endif + + +# define some important directories and files +WRKSRC= ${WRKDIR}/gcc-${GCC_VERSION} +BUILDDIR= ${WRKDIR}/build +NEWBSDIR= ${WRKDIR}/newbs/bootstrap +SYSLIBDIR= ${WRKDIR}/lib +CFG_SCRIPT= ${WRKSRC}/configure +REVFILE= ${WRKSRC}/gcc/REVISION +PHASEFILE= ${WRKSRC}/gcc/DEV-PHASE +BOOTSTRAP_PREFIX= ${WRKDIR}/bootstrap +PKG_PREFIX= ${PREFIX}/gcc5-aux +BSFILENAME= ada-bootstrap.${GARCH}.${LOWER_OPSYS}.${OS_VERSION:C/[A-Z_.-]//g}.tar + + +# testing if gcc-aux is already installed - if so, use this compiler along with +# its gnatlink, gnatbind, and gnatmake rather than the older bootstrap versions +.if exists(${LOCALBASE}/gcc-aux/bin/ada) +FULL_GNATGCC=${LOCALBASE}/gcc-aux/bin/ada +FULL_GNATGXX=${LOCALBASE}/gcc-aux/bin/g++ +.endif + + +.if ${FULL_GNATGCC} == "NOT SET" +# here we know we need to install the bootstrap compiler +. if defined(BOOTSTRAP_TRIPLET) +FULL_GNATGCC=${BOOTSTRAP_PREFIX}/bin/gnatgcc +. else +FULL_GNATGCC=${BOOTSTRAP_PREFIX}/bin/gcc ${COMPILER_ABI_SWITCH} +FULL_GNATGXX=${BOOTSTRAP_PREFIX}/bin/g++ ${COMPILER_ABI_SWITCH} +. endif +DISTFILES+= ${BOOTSTRAP_COMPILER} +SITES.${BOOTSTRAP_COMPILER}= http://downloads.dragonlace.net/src/ +FULL_PATH=${BOOTSTRAP_PREFIX}/bin:/sbin:/bin:/usr/sbin:/usr/bin:${PREFIX}/sbin:${PREFIX}/bin +.endif + + +# for port maintenance, invoke "make mdi PLUS_BOOTSTRAPS=1" +.if defined(PLUS_BOOTSTRAPS) +MASTER_SITES= http://downloads.dragonlace.net/src/ \ + ${MASTER_SITE_GNU:=gcc/${IDENTIFICATION}/} +DISTFILES= \ + ${DISTNAME}.tar.bz2 \ + ada-bootstrap.i386.dragonfly.36A.tar.bz2 \ + ada-bootstrap.i386.freebsd.84.tar.bz2 \ + ada-bootstrap.i386.freebsd.100B.tar.bz2 \ + ada-bootstrap.i386.netbsd.614.tar.bz2 \ + ada-bootstrap.x86_64.dragonfly.36A.tar.bz2 \ + ada-bootstrap.x86_64.freebsd.84.tar.bz2 \ + ada-bootstrap.x86_64.freebsd.100B.tar.bz2 \ + ada-bootstrap.x86_64.netbsd.614.tar.bz2 \ + ada-bootstrap.x86_64.solaris.511.tar.bz2 +.endif + +# establish ada-aware compiler for use +MY_CONFIGURE_ENV+= CC=${FULL_GNATGCC:Q} +MY_CONFIGURE_ENV+= CXX=${FULL_GNATGXX:Q} +MY_CONFIGURE_ENV+= PATH=${FULL_PATH} +MY_CONFIGURE_ENV+= LDFLAGS="${XLDF} ${COMPILER_RPATH_FLAG}${PREFIX}/lib" +MY_MAKE_ENV+= PATH=${FULL_PATH} +MY_MAKE_ENV+= LD_LIBRARY_PATH=${BUILDDIR}/gcc${EXTRA_LLP} +# ${WRKSRC}/fixincludes/ looks for sed and compiles the path to sed into +# a binary so we need to make sure we give it the installed sed and not +# the tool wrapped one. +MY_MAKE_ENV+= ac_cv_path_SED=${TOOLS_SED} +MY_MAKE_ENV+= lt_cv_path_SED=${TOOLS_SED} + + +# The standard configuration options +CONFIGURE_ARGS= --enable-languages=${LANGS:Q} +CONFIGURE_ARGS+= --build=${BLD_TARGET} +CONFIGURE_ARGS+= --prefix=${PKG_PREFIX:Q} +CONFIGURE_ARGS+= --enable-threads=posix +CONFIGURE_ARGS+= --enable-checking=release +CONFIGURE_ARGS+= --disable-libmudflap +CONFIGURE_ARGS+= --disable-libgomp +CONFIGURE_ARGS+= --disable-libssp +CONFIGURE_ARGS+= --disable-libcilkrts +CONFIGURE_ARGS+= --disable-libitm +CONFIGURE_ARGS+= ${EXTRA_CONFARGS} + +# Automatic package list generation +GENERATE_PLIST= cd ${DESTDIR}${PREFIX}; +GENERATE_PLIST+= ${FIND} * \( -type f -or -type l \) | ${SORT} -dr; + + +post-extract: + # Personalize GNAT for each different machine + @${ECHO} "-=> GCC AUX ${OS_LABEL4VERS}" > ${REVFILE} + @${ECHO} ${PHASE} > ${PHASEFILE} + # Apply required composite diff files +.for suffix in ${APPLY_DIFFS} + @${ECHO} "Applying composite patch diff-${suffix}" + ${PATCH} -d ${WRKSRC} -s -E < ${FILESDIR}/diff-${suffix} +.endfor + (cd ${WRKSRC}/libstdc++-v3/testsuite/22_locale && ${PERL5} -i \ + -pe 's|ISO-8859|ISO8859|g;' \ + -pe 's|ja_JP.eucjp|ja_JP.eucJP|g;' \ + -pe 's|en_HK|zh_HK|g;' \ + -pe 's|en_PH|en_NZ|g;' \ + -pe 's|se_NO|no_NO|g;' \ + -pe 's|es_MX|es_ES|g;' \ + -pe 's|ru_RU.UTF8|ru_RU.UTF-8|g' ${LOCALE22FIX}) +.if ${OPSYS} == NetBSD +. for sysfile in ${CORRECTIONS} +. for pair in ${${CRXN}_${sysfile}} + ${PERL5} -pi -e 's|C, ${pair:H}, ".*"|C, ${pair:H}, "${pair:T}"|' \ + ${WRKSRC}/gcc/ada/${sysfile} +. endfor +. endfor +. if ${CRXN} == C5 + ${PERL5} -pi -e 's|new int64_t|new int|' \ + ${WRKSRC}/gcc/ada/s-osinte-netbsd.ads + ${PERL5} -pi -e 's|new Long_Integer|new Integer|' \ + ${WRKSRC}/gcc/ada/s-osprim-posix.adb +. endif +.endif +.if defined(STATIC_BUILD) || !empty(PKG_OPTIONS:Mbootstrap) +. if ${OPSYS} != SunOS + # Ensure GNAT tools are built statically + ${PERL5} -pi -e 's/^GCC_LINK_FLAGS=.*/GCC_LINK_FLAGS=-static/' \ + ${WRKSRC}/gcc/ada/gcc-interface/Makefile.in +. endif +.endif +.if !exists(${LOCALBASE}/gcc-aux/bin/ada) && ${OPSYS} == SunOS + # In case /usr/pkg/bin/gas doesn't exist, establish fallback + ${LN} -s ${PREFIX}/bin/gas ${BOOTSTRAP_PREFIX}/bin/as +.endif + # Illumos /usr/ccs binaries are symlinked to /usr/bin + # elfdump was present on OmniOS but not in Joyent dev area + ${PERL5} -i -pe 's|/usr/ccs/bin|/usr/bin|g;' \ + -pe 's|readelf -s|greadelf -s|' ${WRKSRC}/contrib/make_sunver.pl + # Update LINK_SPEC to add gcc-aux lib runpath in every binary + @${ECHO} "Configuring LINK_SPEC runpath" + ${PERL5} -pi -e 's;\@PREFIX\@;${PREFIX};' \ + ${WRKSRC}/gcc/config/dragonfly.h \ + ${WRKSRC}/gcc/config/i386/freebsd.h \ + ${WRKSRC}/gcc/config/i386/netbsd-elf.h + +.if defined(BOOTSTRAP_TRIPLET) + # Bootstrap compiler has statically linked z, gmp, mpc, mpfr and iconv + # The only shared lib is libc.so.7, so it should work for a long time. + # No longer used, only here to support future SunOS bootstrap generation + + ${MKDIR} ${BOOTSTRAP_PREFIX} + ${MV} ${BOOTSTRAP_PREFIX}/../bin ${BOOTSTRAP_PREFIX} + ${MV} ${BOOTSTRAP_PREFIX}/../lib ${BOOTSTRAP_PREFIX} + ${MV} ${BOOTSTRAP_PREFIX}/../libexec ${BOOTSTRAP_PREFIX} + ${RM} -rf ${BOOTSTRAP_PREFIX}/lib/gcc/${BOOTSTRAP_TRIPLET}/include-fixed +.endif + + +do-configure: + ${MKDIR} ${BUILDDIR} + cd ${BUILDDIR} && ${SETENV} ${MY_CONFIGURE_ENV} \ + ${CFG_SCRIPT} ${CONFIGURE_ARGS} + + +do-build: + # The unlimited stacksize is for NetBSD64 + cd ${BUILDDIR} && \ + ${ULIMIT_CMD_stacksize} && \ + ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -j${MAKE_JOBS:U1:Q} all + + +.if !empty(PKG_OPTIONS:Mtestsuite) && empty(PKG_OPTIONS:Mbootstrap) +do-test: build test-ada test-fortran test-objc test-cxx test-c + +test-ada: +.if (${OPSYS} == NetBSD) && (${MACHINE_ARCH} == x86_64) + # NetBSD has an extremely small default stacksize of 2MB, which is + # insufficient for the gnat.dg testsuite. + # specifically: entry_queues test on AMD64 + # Unlimiting stack resources on i386-netbsdelf* will result in + # failure of gnat.dg/task_stack_align.adb execution test. + cd ${BUILDDIR} && \ + ${ULIMIT_CMD_stacksize} && \ + ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -sk check-ada +.else + cd ${BUILDDIR} && ${SETENV} ${MY_MAKE_ENV} DEJAGNU_TIMEOUT=30 \ + ${GMAKE} -sk check-ada +.endif + +test-fortran: +.if !empty(PKG_OPTIONS:Mfortran) + cd ${BUILDDIR} && ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -sk check-fortran +.endif + +test-objc: +.if !empty(PKG_OPTIONS:Mobjc) + cd ${BUILDDIR} && ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -sk check-objc +.endif + +test-cxx: + # libstdc++ always ends with error status, so ignore it + cd ${BUILDDIR} && ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -sk \ + check-c++ || ${TRUE} + +test-c: + cd ${BUILDDIR} && ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -sk check-c +.endif + +do-install: + cd ${BUILDDIR} && ${SETENV} ${MY_MAKE_ENV} ${GMAKE} install-strip \ + DESTDIR=${DESTDIR} + ${MV} ${DESTDIR}${PKG_PREFIX}/share ${WRKDIR}/moved_share + +.if !empty(PKG_OPTIONS:Mbootstrap) +create-bootstrap: stage-install + ${MKDIR} ${NEWBSDIR} + ${CP} -RpP ${DESTDIR}${PKG_PREFIX}/bin ${NEWBSDIR}/ + ${CP} -RpP ${DESTDIR}${PKG_PREFIX}/lib ${NEWBSDIR}/ + ${CP} -RpP ${DESTDIR}${PKG_PREFIX}/include ${NEWBSDIR}/ + ${CP} -RpP ${DESTDIR}${PKG_PREFIX}/libexec ${NEWBSDIR}/ + ${RM} ${NEWBSDIR}/bin/${GARCH}* + ${RM} -rf ${NEWBSDIR}/lib/gcc/${BLD_TARGET}/${GCC_VERSION}/include-fixed + (cd ${NEWBSDIR}/.. ; \ + ${TAR} -cf ${BSFILENAME} bootstrap; ${BZIP2} ${BSFILENAME}) +.endif + +.include "../../mk/bsd.pkg.mk" diff --git a/lang/gcc5-aux/Makefile.testsuite b/lang/gcc5-aux/Makefile.testsuite new file mode 100644 index 00000000000..e37a9a9cfbe --- /dev/null +++ b/lang/gcc5-aux/Makefile.testsuite @@ -0,0 +1,130 @@ +# $NetBSD: Makefile.testsuite,v 1.1 2015/06/15 09:46:27 marino Exp $ + +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 00000000000..e8b77ececcf --- /dev/null +++ b/lang/gcc5-aux/Makefile.version @@ -0,0 +1,20 @@ +# $NetBSD: Makefile.version,v 1.1 2015/06/15 09:46:27 marino Exp $ +# + +SNAPSHOT= 20150422 +GCC_BRANCH= 5 +GCC_POINT= 1.0 +GCC_VERSION= ${GCC_BRANCH}.${GCC_POINT} +BUILD_RELEASE= yes + +.if ${BUILD_RELEASE:Mno} +# Snapshot naming pattern +IDENTIFICATION= gcc-${GCC_BRANCH}-${SNAPSHOT} +MS_SUBDIR= snapshots/${GCC_BRANCH}-${SNAPSHOT} +PHASE= snapshot +.else +# Release naming pattern +IDENTIFICATION= gcc-${GCC_VERSION} +MS_SUBDIR= releases/gcc-${GCC_VERSION} +PHASE= release +.endif diff --git a/lang/gcc5-aux/buildlink3.mk b/lang/gcc5-aux/buildlink3.mk new file mode 100644 index 00000000000..06f5b6adbbc --- /dev/null +++ b/lang/gcc5-aux/buildlink3.mk @@ -0,0 +1,24 @@ +# $NetBSD: buildlink3.mk,v 1.1 2015/06/15 09:46:27 marino Exp $ + +BUILDLINK_TREE+= gcc5-aux + +.if !defined(GCC5_AUX_BUILDLINK3_MK) +GCC5_AUX_BUILDLINK3_MK:= + +BUILDLINK_API_DEPENDS.gcc5-aux+= gcc5-aux>=20150422 +BUILDLINK_PKGSRCDIR.gcc5-aux?= ../../lang/gcc5-aux + +.include "../../converters/libiconv/buildlink3.mk" +.include "../../devel/gmp/buildlink3.mk" +.include "../../math/mpfr/buildlink3.mk" +.include "../../math/mpcomplex/buildlink3.mk" + +pkgbase := gcc5-aux +.include "../../mk/pkg-build-options.mk" + +.if !empty(PKG_BUILD_OPTIONS.gcc5-aux:Mnls) +.include "../../devel/gettext-lib/buildlink3.mk" +.endif +.endif + +BUILDLINK_TREE+= -gcc5-aux diff --git a/lang/gcc5-aux/distinfo b/lang/gcc5-aux/distinfo new file mode 100644 index 00000000000..e9fe3277430 --- /dev/null +++ b/lang/gcc5-aux/distinfo @@ -0,0 +1,32 @@ +$NetBSD: distinfo,v 1.1 2015/06/15 09:46:27 marino Exp $ + +SHA1 (ada-bootstrap.i386.dragonfly.36A.tar.bz2) = 7e0725889ae752e6a9fdbac5b1d2ef0e3f62822e +RMD160 (ada-bootstrap.i386.dragonfly.36A.tar.bz2) = f62c00515588804ce69368507822f30380d7e48d +Size (ada-bootstrap.i386.dragonfly.36A.tar.bz2) = 39357314 bytes +SHA1 (ada-bootstrap.i386.freebsd.100B.tar.bz2) = b7ff322bbcfa403d37d917d6e88e306de0857251 +RMD160 (ada-bootstrap.i386.freebsd.100B.tar.bz2) = 7a85e0f073dafe9b0d37b493dbb4268bd2f39601 +Size (ada-bootstrap.i386.freebsd.100B.tar.bz2) = 41229192 bytes +SHA1 (ada-bootstrap.i386.freebsd.84.tar.bz2) = 54c3d59fd2ca75bb91255296bc0f9d6028ac2cd2 +RMD160 (ada-bootstrap.i386.freebsd.84.tar.bz2) = 8ceb3957708eb9ccc8ce2ff1ea26949683ee2fa7 +Size (ada-bootstrap.i386.freebsd.84.tar.bz2) = 39727003 bytes +SHA1 (ada-bootstrap.i386.netbsd.614.tar.bz2) = 2c29209b086dcf3076428f232fadf306b9a227c6 +RMD160 (ada-bootstrap.i386.netbsd.614.tar.bz2) = f0ecb9b0d69c2d097c6405e0db581f606b372017 +Size (ada-bootstrap.i386.netbsd.614.tar.bz2) = 37900035 bytes +SHA1 (ada-bootstrap.x86_64.dragonfly.36A.tar.bz2) = 85ceea8d0bd0d1b8c1f91ea6d7ffb2ffe4a4c7da +RMD160 (ada-bootstrap.x86_64.dragonfly.36A.tar.bz2) = 7ca8ccff5a4400a7e4fc9ad1d11c64f3c92d54f4 +Size (ada-bootstrap.x86_64.dragonfly.36A.tar.bz2) = 40747242 bytes +SHA1 (ada-bootstrap.x86_64.freebsd.100B.tar.bz2) = edfe60c5f42bbeb145d7070ed868135ebc60c2de +RMD160 (ada-bootstrap.x86_64.freebsd.100B.tar.bz2) = 0d50885402208caafbc133ffc3b8684e89a50cae +Size (ada-bootstrap.x86_64.freebsd.100B.tar.bz2) = 42163803 bytes +SHA1 (ada-bootstrap.x86_64.freebsd.84.tar.bz2) = b5c76ce07df6e944742eda5f860352c8e179b988 +RMD160 (ada-bootstrap.x86_64.freebsd.84.tar.bz2) = 334c2375ee35bdf931a3a476e794e494ff252515 +Size (ada-bootstrap.x86_64.freebsd.84.tar.bz2) = 40227668 bytes +SHA1 (ada-bootstrap.x86_64.netbsd.614.tar.bz2) = 683f58e6e394a508a52ec1dc5f3d9ca2869d5252 +RMD160 (ada-bootstrap.x86_64.netbsd.614.tar.bz2) = 4574857089e82fb80725161cc8b625ce75f6810e +Size (ada-bootstrap.x86_64.netbsd.614.tar.bz2) = 39348972 bytes +SHA1 (ada-bootstrap.x86_64.solaris.511.tar.bz2) = abb16c1582e2a6ffe37df4afd96d04c44f2eea7b +RMD160 (ada-bootstrap.x86_64.solaris.511.tar.bz2) = 41677e2fd0cb02c89f200fb97b112ad3be7f19cd +Size (ada-bootstrap.x86_64.solaris.511.tar.bz2) = 60110383 bytes +SHA1 (gcc-5.1.0.tar.bz2) = b6c947b09adf780fe02065d0c48bfd7b4bdddfa3 +RMD160 (gcc-5.1.0.tar.bz2) = 17a9623f384ce10415a603042e0592c9b4956078 +Size (gcc-5.1.0.tar.bz2) = 94954411 bytes diff --git a/lang/gcc5-aux/files/diff-ada b/lang/gcc5-aux/files/diff-ada new file mode 100644 index 00000000000..8039c96be20 --- /dev/null +++ b/lang/gcc5-aux/files/diff-ada @@ -0,0 +1,3826 @@ +--- /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; +--- /dev/null ++++ gcc/ada/a-intnam-netbsd.ads +@@ -0,0 +1,139 @@ ++------------------------------------------------------------------------------ ++-- -- ++-- 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 NetBSD 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 ++ ++ SIGPWR : constant Interrupt_ID := ++ System.OS_Interface.SIGPWR; -- power fail/restart ++ ++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 +@@ -597,11 +597,11 @@ + + type pid_t is new int; + +- type time_t is new long; ++ type time_t is new Long_Long_Integer; + + 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-osinte-netbsd.adb +@@ -0,0 +1,140 @@ ++------------------------------------------------------------------------------ ++-- -- ++-- 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 NetBSD THREADS version of this package ++ ++with Interfaces.C; use Interfaces.C; ++ ++package body System.OS_Interface is ++ ++ ----------- ++ -- Errno -- ++ ----------- ++ ++ function Errno return int is ++ type int_ptr is access all int; ++ ++ function internal_errno return int_ptr; ++ pragma Import (C, internal_errno, "__errno"); ++ ++ begin ++ return (internal_errno.all); ++ end Errno; ++ ++ -------------------- ++ -- Get_Stack_Base -- ++ -------------------- ++ ++ function Get_Stack_Base (thread : pthread_t) return Address is ++ pragma Unreferenced (thread); ++ begin ++ return Null_Address; ++ end Get_Stack_Base; ++ ++ ------------------ ++ -- pthread_init -- ++ ------------------ ++ ++ procedure pthread_init is ++ begin ++ null; ++ end pthread_init; ++ ++ ----------------------------------- ++ -- pthread_mutexattr_setprotocol -- ++ ----------------------------------- ++ ++ function pthread_mutexattr_setprotocol ++ (attr : access pthread_mutexattr_t; ++ protocol : int) return int is ++ pragma Unreferenced (attr, protocol); ++ begin ++ return 0; ++ end pthread_mutexattr_setprotocol; ++ ++ -------------------------------------- ++ -- pthread_mutexattr_setprioceiling -- ++ -------------------------------------- ++ ++ function pthread_mutexattr_setprioceiling ++ (attr : access pthread_mutexattr_t; ++ prioceiling : int) return int is ++ pragma Unreferenced (attr, prioceiling); ++ begin ++ return 0; ++ end pthread_mutexattr_setprioceiling; ++ ++ ----------------- ++ -- To_Duration -- ++ ----------------- ++ ++ function To_Duration (TS : timespec) return Duration is ++ begin ++ return Duration (TS.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-netbsd.ads +@@ -0,0 +1,682 @@ ++------------------------------------------------------------------------------ ++-- -- ++-- 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 NetBSD PTHREADS version of this package. ++ ++-- This package encapsulates all direct interfaces to OS services ++-- that are needed by the tasking run-time (libgnarl). ++ ++-- PLEASE DO NOT add any with-clauses to this package or remove the pragma ++-- Preelaborate. This package is designed to be a bottom-level (leaf) package. ++ ++with Ada.Unchecked_Conversion; ++ ++with Interfaces.C; ++ ++package System.OS_Interface is ++ pragma Preelaborate; ++ ++ pragma Linker_Options ("-pthread"); ++ ++ subtype int is Interfaces.C.int; ++ subtype short is Interfaces.C.short; ++ subtype long is Interfaces.C.long; ++ subtype unsigned is Interfaces.C.unsigned; ++ subtype unsigned_short is Interfaces.C.unsigned_short; ++ subtype unsigned_long is Interfaces.C.unsigned_long; ++ subtype unsigned_char is Interfaces.C.unsigned_char; ++ subtype plain_char is Interfaces.C.plain_char; ++ subtype size_t is Interfaces.C.size_t; ++ subtype int64_t is Interfaces.Integer_64; ++ ++ ----------- ++ -- Errno -- ++ ----------- ++ ++ function Errno return int; ++ pragma Inline (Errno); ++ ++ EAGAIN : constant := 35; ++ EINTR : constant := 4; ++ EINVAL : constant := 22; ++ ENOMEM : constant := 12; ++ ETIMEDOUT : constant := 60; ++ ++ ------------- ++ -- Signals -- ++ ------------- ++ ++ Max_Interrupt : constant := 63; ++ type Signal is new int range 0 .. Max_Interrupt; ++ for Signal'Size use int'Size; ++ ++ SIGHUP : constant := 1; -- hangup ++ SIGINT : constant := 2; -- interrupt (rubout) ++ SIGQUIT : constant := 3; -- quit (ASCD FS) ++ SIGILL : constant := 4; -- illegal instruction (not reset) ++ SIGTRAP : constant := 5; -- trace trap (not reset) ++ SIGIOT : constant := 6; -- IOT instruction ++ SIGABRT : constant := 6; -- used by abort, replace SIGIOT in the future ++ SIGEMT : constant := 7; -- EMT instruction ++ SIGFPE : constant := 8; -- floating point exception ++ SIGKILL : constant := 9; -- kill (cannot be caught or ignored) ++ SIGBUS : constant := 10; -- bus error ++ SIGSEGV : constant := 11; -- segmentation violation ++ SIGSYS : constant := 12; -- bad argument to system call ++ SIGPIPE : constant := 13; -- write on a pipe with no one to read it ++ SIGALRM : constant := 14; -- alarm clock ++ SIGTERM : constant := 15; -- software termination signal from kill ++ SIGURG : constant := 16; -- urgent condition on IO channel ++ SIGSTOP : constant := 17; -- stop (cannot be caught or ignored) ++ SIGTSTP : constant := 18; -- user stop requested from tty ++ SIGCONT : constant := 19; -- stopped process has been continued ++ SIGCLD : constant := 20; -- alias for SIGCHLD ++ SIGCHLD : constant := 20; -- child status change ++ SIGTTIN : constant := 21; -- background tty read attempted ++ SIGTTOU : constant := 22; -- background tty write attempted ++ SIGIO : constant := 23; -- I/O possible (Solaris SIGPOLL alias) ++ SIGXCPU : constant := 24; -- CPU time limit exceeded ++ SIGXFSZ : constant := 25; -- filesize limit exceeded ++ SIGVTALRM : constant := 26; -- virtual timer expired ++ SIGPROF : constant := 27; -- profiling timer expired ++ SIGWINCH : constant := 28; -- window size change ++ SIGINFO : constant := 29; -- information request (BSD) ++ SIGUSR1 : constant := 30; -- user defined signal 1 ++ SIGUSR2 : constant := 31; -- user defined signal 2 ++ SIGPWR : constant := 32; -- power fail/restart (not reset when caught) ++ ++ SIGADAABORT : constant := SIGABRT; ++ -- Change this if you want to use another signal for task abort. ++ -- SIGTERM might be a good one. ++ ++ type Signal_Set is array (Natural range <>) of Signal; ++ ++ -- Interrupts that must be unmasked at all times. NetBSD ++ -- pthreads will not allow an application to mask out any ++ -- interrupt needed by the threads library. ++ Unmasked : constant Signal_Set := ++ (SIGTRAP, SIGBUS, SIGTTIN, SIGTTOU, SIGTSTP); ++ ++ -- NetBSD will uses SIGPROF for timing. Do not allow a ++ -- handler to attach to this signal. ++ Reserved : constant Signal_Set := (0 .. 0 => SIGPROF); ++ ++ type sigset_t is private; ++ ++ function sigaddset ++ (set : access sigset_t; ++ sig : Signal) return int; ++ pragma Import (C, sigaddset, "__sigaddset14"); ++ ++ function sigdelset ++ (set : access sigset_t; ++ sig : Signal) return int; ++ pragma Import (C, sigdelset, "__sigdelset14"); ++ ++ function sigfillset (set : access sigset_t) return int; ++ pragma Import (C, sigfillset, "__sigfillset14"); ++ ++ function sigismember ++ (set : access sigset_t; ++ sig : Signal) return int; ++ pragma Import (C, sigismember, "__sigismember14"); ++ ++ function sigemptyset (set : access sigset_t) return int; ++ pragma Import (C, sigemptyset, "__sigemptyset14"); ++ ++ -- sigcontext is architecture dependent, so define it private ++ type struct_sigcontext is private; ++ ++ type old_struct_sigaction is record ++ sa_handler : System.Address; ++ sa_mask : sigset_t; ++ sa_flags : int; ++ end record; ++ pragma Convention (C, old_struct_sigaction); ++ ++ type new_struct_sigaction is record ++ sa_handler : System.Address; ++ sa_flags : int; ++ sa_mask : sigset_t; ++ end record; ++ pragma Convention (C, new_struct_sigaction); ++ ++ subtype struct_sigaction is new_struct_sigaction; ++ type struct_sigaction_ptr is access all struct_sigaction; ++ ++ SIG_BLOCK : constant := 1; ++ SIG_UNBLOCK : constant := 2; ++ SIG_SETMASK : constant := 3; ++ ++ SIG_DFL : constant := 0; ++ SIG_IGN : constant := 1; ++ SIG_ERR : constant := -1; ++ SIG_HOLD : constant := 3; ++ ++ SA_SIGINFO : constant := 16#0040#; ++ SA_ONSTACK : constant := 16#0001#; ++ ++ function sigaction ++ (sig : Signal; ++ act : struct_sigaction_ptr; ++ oact : struct_sigaction_ptr) return int; ++ pragma Import (C, sigaction, "__sigaction14"); ++ ++ ---------- ++ -- Time -- ++ ---------- ++ ++ Time_Slice_Supported : constant Boolean := True; ++ -- Indicates whether time slicing is supported (i.e SCHED_RR is supported) ++ ++ type timespec is private; ++ ++ function nanosleep (rqtp, rmtp : access timespec) return int; ++ pragma Import (C, nanosleep, "nanosleep"); ++ ++ type clockid_t is new int; ++ ++ 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 freebsd. 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, "__sigaltstack14"); ++ ++ Alternate_Stack : aliased System.Address; ++ -- This is a dummy definition, never used (Alternate_Stack_Size is null) ++ ++ Alternate_Stack_Size : constant := 0; ++ -- No alternate signal stack is used on this platform ++ ++ Stack_Base_Available : constant Boolean := False; ++ -- Indicates whether the stack base is available on this target. This ++ -- allows us to share s-osinte.adb between all the FSU run time. Note that ++ -- this value can only be true if pthread_t has a complete definition that ++ -- corresponds exactly to the C header files. ++ ++ function Get_Stack_Base (thread : pthread_t) return Address; ++ pragma Inline (Get_Stack_Base); ++ -- returns the stack base of the specified thread. Only call this function ++ -- when Stack_Base_Available is True. ++ ++ function Get_Page_Size return size_t; ++ function Get_Page_Size return Address; ++ pragma Import (C, Get_Page_Size, "getpagesize"); ++ -- Returns the size of a page ++ ++ PROT_NONE : constant := 0; ++ PROT_READ : constant := 1; ++ PROT_WRITE : constant := 2; ++ PROT_EXEC : constant := 4; ++ PROT_ALL : constant := PROT_READ + PROT_WRITE + PROT_EXEC; ++ PROT_ON : constant := PROT_NONE; ++ PROT_OFF : constant := PROT_ALL; ++ ++ function mprotect (addr : Address; len : size_t; prot : int) return int; ++ pragma Import (C, mprotect); ++ ++ --------------------------------------- ++ -- Nonstandard Thread Initialization -- ++ --------------------------------------- ++ ++ -- FSU_THREADS requires pthread_init, which is nonstandard and this should ++ -- be invoked during the elaboration of s-taprop.adb. ++ ++ -- NetBSD does not require this so we provide an empty Ada body ++ ++ procedure pthread_init; ++ ++ ------------------------- ++ -- POSIX.1c Section 3 -- ++ ------------------------- ++ ++ function sigwait ++ (set : access sigset_t; ++ sig : access Signal) return int; ++ pragma Import (C, sigwait, "sigwait"); ++ ++ function pthread_kill ++ (thread : pthread_t; ++ sig : Signal) return int; ++ pragma Import (C, pthread_kill, "pthread_kill"); ++ ++ function pthread_sigmask ++ (how : int; ++ set : access sigset_t; ++ oset : access sigset_t) return int; ++ pragma Import (C, pthread_sigmask, "pthread_sigmask"); ++ ++ -------------------------- ++ -- POSIX.1c Section 11 -- ++ -------------------------- ++ ++ function pthread_mutexattr_init ++ (attr : access pthread_mutexattr_t) return int; ++ pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init"); ++ ++ function pthread_mutexattr_destroy ++ (attr : access pthread_mutexattr_t) return int; ++ pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy"); ++ ++ function pthread_mutex_init ++ (mutex : access pthread_mutex_t; ++ attr : access pthread_mutexattr_t) return int; ++ pragma Import (C, pthread_mutex_init, "pthread_mutex_init"); ++ ++ function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int; ++ pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy"); ++ ++ function pthread_mutex_lock (mutex : access pthread_mutex_t) return int; ++ pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock"); ++ ++ function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int; ++ pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock"); ++ ++ function pthread_condattr_init ++ (attr : access pthread_condattr_t) return int; ++ pragma Import (C, pthread_condattr_init, "pthread_condattr_init"); ++ ++ function pthread_condattr_destroy ++ (attr : access pthread_condattr_t) return int; ++ pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy"); ++ ++ function pthread_cond_init ++ (cond : access pthread_cond_t; ++ attr : access pthread_condattr_t) return int; ++ pragma Import (C, pthread_cond_init, "pthread_cond_init"); ++ ++ function pthread_cond_destroy (cond : access pthread_cond_t) return int; ++ pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy"); ++ ++ function pthread_cond_signal (cond : access pthread_cond_t) return int; ++ pragma Import (C, pthread_cond_signal, "pthread_cond_signal"); ++ ++ function pthread_cond_wait ++ (cond : access pthread_cond_t; ++ mutex : access pthread_mutex_t) return int; ++ pragma Import (C, pthread_cond_wait, "pthread_cond_wait"); ++ ++ function pthread_cond_timedwait ++ (cond : access pthread_cond_t; ++ mutex : access pthread_mutex_t; ++ abstime : access timespec) return int; ++ pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait"); ++ ++ Relative_Timed_Wait : constant Boolean := False; ++ -- pthread_cond_timedwait requires an absolute delay time ++ ++ -------------------------- ++ -- POSIX.1c Section 13 -- ++ -------------------------- ++ ++ PTHREAD_PRIO_NONE : constant := 0; ++ PTHREAD_PRIO_PROTECT : constant := 2; ++ PTHREAD_PRIO_INHERIT : constant := 1; ++ ++ function pthread_mutexattr_setprotocol ++ (attr : access pthread_mutexattr_t; ++ protocol : int) return int; ++ ++ function pthread_mutexattr_setprioceiling ++ (attr : access pthread_mutexattr_t; ++ prioceiling : int) return int; ++ ++ type struct_sched_param is record ++ sched_priority : int; ++ end record; ++ pragma Convention (C, struct_sched_param); ++ ++ function pthread_getschedparam ++ (thread : pthread_t; ++ policy : access int; ++ param : access struct_sched_param) return int; ++ pragma Import (C, pthread_getschedparam, "pthread_getschedparam"); ++ ++ function pthread_setschedparam ++ (thread : pthread_t; ++ policy : int; ++ param : access struct_sched_param) return int; ++ pragma Import (C, pthread_setschedparam, "pthread_setschedparam"); ++ ++ function pthread_attr_setscope ++ (attr : access pthread_attr_t; ++ contentionscope : int) return int; ++ pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope"); ++ ++ function pthread_attr_getscope ++ (attr : access pthread_attr_t; ++ contentionscope : access int) return int; ++ pragma Import (C, pthread_attr_getscope, "pthread_attr_getscope"); ++ ++ function pthread_attr_setinheritsched ++ (attr : access pthread_attr_t; ++ inheritsched : int) return int; ++ pragma Import ++ (C, pthread_attr_setinheritsched, "pthread_attr_setinheritsched"); ++ ++ function pthread_attr_getinheritsched ++ (attr : access pthread_attr_t; ++ inheritsched : access int) return int; ++ pragma Import ++ (C, pthread_attr_getinheritsched, "pthread_attr_getinheritsched"); ++ ++ function pthread_attr_setschedpolicy ++ (attr : access pthread_attr_t; ++ policy : int) return int; ++ pragma Import (C, pthread_attr_setschedpolicy, ++ "pthread_attr_setschedpolicy"); ++ ++ function pthread_attr_getschedpolicy ++ (attr : access pthread_attr_t; ++ policy : access int) return int; ++ pragma Import (C, pthread_attr_getschedpolicy, ++ "pthread_attr_getschedpolicy"); ++ ++ function pthread_attr_setschedparam ++ (attr : access pthread_attr_t; ++ sched_param : int) return int; ++ pragma Import (C, pthread_attr_setschedparam, "pthread_attr_setschedparam"); ++ ++ function pthread_attr_getschedparam ++ (attr : access pthread_attr_t; ++ sched_param : access int) return int; ++ pragma Import (C, pthread_attr_getschedparam, "pthread_attr_getschedparam"); ++ ++ function sched_yield return int; ++ pragma Import (C, sched_yield, "sched_yield"); ++ ++ -------------------------- ++ -- P1003.1c Section 16 -- ++ -------------------------- ++ ++ function pthread_attr_init (attributes : access pthread_attr_t) return int; ++ pragma Import (C, pthread_attr_init, "pthread_attr_init"); ++ ++ function pthread_attr_destroy ++ (attributes : access pthread_attr_t) return int; ++ pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy"); ++ ++ function pthread_attr_setdetachstate ++ (attr : access pthread_attr_t; ++ detachstate : int) return int; ++ pragma Import ++ (C, pthread_attr_setdetachstate, "pthread_attr_setdetachstate"); ++ ++ function pthread_attr_getdetachstate ++ (attr : access pthread_attr_t; ++ detachstate : access int) return int; ++ pragma Import ++ (C, pthread_attr_getdetachstate, "pthread_attr_getdetachstate"); ++ ++ function pthread_attr_getstacksize ++ (attr : access pthread_attr_t; ++ stacksize : access size_t) return int; ++ pragma Import ++ (C, pthread_attr_getstacksize, "pthread_attr_getstacksize"); ++ ++ function pthread_attr_setstacksize ++ (attr : access pthread_attr_t; ++ stacksize : size_t) return int; ++ pragma Import ++ (C, pthread_attr_setstacksize, "pthread_attr_setstacksize"); ++ ++ function pthread_create ++ (thread : access pthread_t; ++ attributes : access pthread_attr_t; ++ start_routine : Thread_Body; ++ arg : System.Address) return int; ++ pragma Import (C, pthread_create, "pthread_create"); ++ ++ function pthread_detach (thread : pthread_t) return int; ++ pragma Import (C, pthread_detach, "pthread_detach"); ++ ++ procedure pthread_exit (status : System.Address); ++ pragma Import (C, pthread_exit, "pthread_exit"); ++ ++ function pthread_self return pthread_t; ++ pragma Import (C, pthread_self, "pthread_self"); ++ ++ -------------------------- ++ -- POSIX.1c Section 17 -- ++ -------------------------- ++ ++ function pthread_setspecific ++ (key : pthread_key_t; ++ value : System.Address) return int; ++ pragma Import (C, pthread_setspecific, "pthread_setspecific"); ++ ++ function pthread_getspecific (key : pthread_key_t) return System.Address; ++ pragma Import (C, pthread_getspecific, "pthread_getspecific"); ++ ++ type destructor_pointer is access procedure (arg : System.Address); ++ pragma Convention (C, destructor_pointer); ++ ++ function pthread_key_create ++ (key : access pthread_key_t; ++ destructor : destructor_pointer) return int; ++ pragma Import (C, pthread_key_create, "pthread_key_create"); ++ ++ ------------------------------------ ++ -- Non-portable Pthread Functions -- ++ ------------------------------------ ++ ++ function pthread_set_name_np ++ (thread : pthread_t; ++ name : System.Address) return int; ++ pragma Import (C, pthread_set_name_np, "pthread_set_name_np"); ++ ++private ++ ++ type sigset_t is array (1 .. 4) of unsigned; ++ ++ -- In NetBSD the component sa_handler turns out to ++ -- be one a union type, and the selector is a macro: ++ -- #define sa_handler __sigaction_u._handler ++ -- #define sa_sigaction __sigaction_u._sigaction ++ ++ -- Should we add a signal_context type here ??? ++ -- How could it be done independent of the CPU architecture ??? ++ -- sigcontext type is opaque, so it is architecturally neutral. ++ -- It is always passed as an access type, so define it as an empty record ++ -- since the contents are not used anywhere. ++ ++ type struct_sigcontext is null record; ++ pragma Convention (C, struct_sigcontext); ++ ++ type pid_t is new int; ++ ++ type time_t is new int64_t; ++ ++ type timespec is record ++ 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 record ++ Pta_Magic : unsigned; ++ Pta_Flags : int; ++ Pta_Private : System.Address; ++ end record; ++ pragma Convention (C, pthread_attr_t); ++ ++ -- PORT NOTE: The size of pthread_spin_t is defined in ++ -- /src/sys/arch/*/include/types.h ++ type pthread_spin_t is new unsigned_char; ++ ++ type pthread_queue_t is record ++ Pthqh_First : pthread_t; ++ Pthqh_Last : System.Address; ++ end record; ++ pragma Convention (C, pthread_queue_t); ++ ++ type pthread_mutex_t is record ++ Ptm_Majic : unsigned; ++ Ptm_Lock : pthread_spin_t; ++ Ptm_Interlock : pthread_spin_t; ++ Ptm_Owner : pthread_t; ++ Ptm_Block : pthread_queue_t; ++ Ptm_Private : System.Address; ++ end record; ++ pragma Convention (C, pthread_mutex_t); ++ ++ type pthread_mutexattr_t is record ++ Ptma_Majic : unsigned; ++ Ptma_Private : System.Address; ++ end record; ++ pragma Convention (C, pthread_mutexattr_t); ++ ++ type pthread_cond_t is record ++ Ptc_Magic : unsigned; ++ Ptc_Lock : pthread_spin_t; ++ Ptc_Waiters : pthread_queue_t; ++ Ptc_Mutex : pthread_mutex_t; ++ Ptc_Private : System.Address; ++ end record; ++ pragma Convention (C, pthread_cond_t); ++ ++ type pthread_condattr_t is record ++ Ptca_Magic : unsigned; ++ Ptca_Private : System.Address; ++ end record; ++ pragma Convention (C, pthread_condattr_t); ++ ++ type pthread_key_t is new int; ++ ++end System.OS_Interface; +--- /dev/null ++++ gcc/ada/s-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_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; +--- /dev/null ++++ gcc/ada/system-netbsd-x86.ads +@@ -0,0 +1,144 @@ ++------------------------------------------------------------------------------ ++-- -- ++-- GNAT RUN-TIME COMPONENTS -- ++-- -- ++-- S Y S T E M -- ++-- -- ++-- S p e c -- ++-- (NetBSD/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-netbsd-x86_64.ads +@@ -0,0 +1,144 @@ ++------------------------------------------------------------------------------ ++-- -- ++-- GNAT RUN-TIME COMPONENTS -- ++-- -- ++-- S Y S T E M -- ++-- -- ++-- S p e c -- ++-- (NetBSD/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 \ +@@ -1166,6 +1167,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 +1210,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, +@@ -1420,8 +1424,11 @@ + ifeq ($(strip $(filter-out %86 freebsd%,$(target_cpu) $(target_os))),) + LIBGNAT_TARGET_PAIRS = \ + a-intnam.ads<a-intnam-freebsd.ads \ ++ g-socthi.adb<g-socthi-bsd.adb \ ++ s-trasym.adb<s-trasym-bsd.adb \ + s-inmaop.adb<s-inmaop-posix.adb \ + s-intman.adb<s-intman-posix.adb \ ++ s-mudido.adb<s-mudido-affinity.adb \ + s-osinte.adb<s-osinte-freebsd.adb \ + s-osinte.ads<s-osinte-freebsd.ads \ + s-osprim.adb<s-osprim-posix.adb \ +@@ -1436,6 +1443,8 @@ + mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb + GNATLIB_SHARED = gnatlib-shared-dual + ++ EXTRA_LIBGNAT_SRCS+= traceback_symbolic.c ++ EXTRA_LIBGNAT_OBJS+= traceback_symbolic.o + EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o + + EH_MECHANISM=-gcc +@@ -1449,8 +1458,11 @@ + ifeq ($(strip $(filter-out %86_64 freebsd%,$(target_cpu) $(target_os))),) + LIBGNAT_TARGET_PAIRS = \ + a-intnam.ads<a-intnam-freebsd.ads \ ++ g-socthi.adb<g-socthi-bsd.adb \ ++ s-trasym.adb<s-trasym-bsd.adb \ + s-inmaop.adb<s-inmaop-posix.adb \ + s-intman.adb<s-intman-posix.adb \ ++ s-mudido.adb<s-mudido-affinity.adb \ + s-osinte.adb<s-osinte-freebsd.adb \ + s-osinte.ads<s-osinte-freebsd.ads \ + s-osprim.adb<s-osprim-posix.adb \ +@@ -1465,6 +1477,110 @@ + mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb + GNATLIB_SHARED = gnatlib-shared-dual + ++ EXTRA_LIBGNAT_SRCS+= traceback_symbolic.c ++ EXTRA_LIBGNAT_OBJS+= traceback_symbolic.o ++ EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o ++ ++ EH_MECHANISM=-gcc ++ 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-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 ++ ++ 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 ++ ++ EH_MECHANISM=-gcc ++ THREADSLIB= -lpthread ++ GMEM_LIB = gmemlib ++ LIBRARY_VERSION := $(LIB_VERSION) ++ MISCLIB = -lutil ++endif ++ ++# x86 NetBSD ++ifeq ($(strip $(filter-out %86 netbsd%,$(target_cpu) $(target_os))),) ++ LIBGNAT_TARGET_PAIRS = \ ++ a-intnam.ads<a-intnam-netbsd.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-netbsd.adb \ ++ s-osinte.ads<s-osinte-netbsd.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-netbsd-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 ++ ++ EH_MECHANISM=-gcc ++ THREADSLIB= -lpthread ++ GMEM_LIB = gmemlib ++ LIBRARY_VERSION := $(LIB_VERSION) ++ MISCLIB = -lutil ++endif ++ ++# x86_64 NetBSD ++ifeq ($(strip $(filter-out x86_64 netbsd%,$(target_cpu) $(target_os))),) ++ LIBGNAT_TARGET_PAIRS = \ ++ a-intnam.ads<a-intnam-netbsd.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-netbsd.adb \ ++ s-osinte.ads<s-osinte-netbsd.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-netbsd-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 + + EH_MECHANISM=-gcc +--- 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 00000000000..725726e66c8 --- /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 00000000000..c192081f502 --- /dev/null +++ b/lang/gcc5-aux/files/diff-core @@ -0,0 +1,622 @@ +--- 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,173 @@ ++/* DWARF2 EH unwinding support for FreeBSD: AMD x86-64 and x86. ++ Copyright (C) 2015 Free Software Foundation, Inc. ++ Contributed by John Marino <gnugcc@marino.st> ++ ++This file is part of GCC. ++ ++GCC is free software; you can redistribute it and/or modify ++it under the terms of the GNU General Public License as published by ++the Free Software Foundation; either version 3, or (at your option) ++any later version. ++ ++GCC is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++GNU General Public License for more details. ++ ++Under Section 7 of GPL version 3, you are granted additional ++permissions described in the GCC Runtime Library Exception, version ++3.1, as published by the Free Software Foundation. ++ ++You should have received a copy of the GNU General Public License and ++a copy of the GCC Runtime Library Exception along with this program; ++see the files COPYING3 and COPYING.RUNTIME respectively. If not, see ++<http://www.gnu.org/licenses/>. */ ++ ++/* 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 ++ ++static _Unwind_Reason_Code ++x86_64_freebsd_fallback_frame_state ++(struct _Unwind_Context *context, _Unwind_FrameState *fs) ++{ ++ struct sigframe *sf; ++ long new_cfa; ++ ++ /* 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. Unfortunately ++ this means looking frame patterns again (sys/amd64/amd64/sigtramp.S) ++ rather than using the robust and convenient KERN_PS_STRINGS trick. ++ ++ <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; ++ ++ 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. ++ */ ++ ++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__ */ +--- /dev/null ++++ libgcc/config/i386/netbsd-unwind.h +@@ -0,0 +1,178 @@ ++/* DWARF2 EH unwinding support for NetBSD: AMD x86-64 and x86. ++ Copyright (C) 2015 Free Software Foundation, Inc. ++ Contributed by John Marino <gnugcc@marino.st> ++ ++This file is part of GCC. ++ ++GCC is free software; you can redistribute it and/or modify ++it under the terms of the GNU General Public License as published by ++the Free Software Foundation; either version 3, or (at your option) ++any later version. ++ ++GCC is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++GNU General Public License for more details. ++ ++Under Section 7 of GPL version 3, you are granted additional ++permissions described in the GCC Runtime Library Exception, version ++3.1, as published by the Free Software Foundation. ++ ++You should have received a copy of the GNU General Public License and ++a copy of the GCC Runtime Library Exception along with this program; ++see the files COPYING3 and COPYING.RUNTIME respectively. If not, see ++<http://www.gnu.org/licenses/>. */ ++ ++/* Do code reading to identify a signal frame, and set the frame ++ state data appropriately. See unwind-dw2.c for the structs. */ ++ ++#include <sys/ucontext.h> ++#include <machine/frame.h> ++ ++#define REG_NAME(reg) sf_uc.uc_mcontext.__gregs[_REG_## reg] ++ ++#ifdef __x86_64__ ++ ++#define MD_FALLBACK_FRAME_STATE_FOR x86_64_netbsd_fallback_frame_state ++ ++static _Unwind_Reason_Code ++x86_64_netbsd_fallback_frame_state ++(struct _Unwind_Context *context, _Unwind_FrameState *fs) ++{ ++ /* signal_frame is sigframe_siginfo minus sf_ra handler return address */ ++ struct signal_frame { ++ siginfo_t sf_si; /* actual saved siginfo */ ++ ucontext_t sf_uc; /* actual saved ucontext */ ++ }; ++ struct signal_frame *sf; ++ long new_cfa; ++ ++ /* We are looking for the following signal trampoline pattern. If we don't ++ find it, we are at the end of the stack and can't unwind. ++ ++ <__sigtramp_siginfo_2+12>: mov $0xffffffffffffffff,%rdi ++ <__sigtramp_siginfo_2+19>: mov $0x1,%rax ++ <__sigtramp_siginfo_2+26>: syscall ++ */ ++ ++ if ( *(unsigned int *) (context->ra + 12) == 0xffc7c748 ++ && *(unsigned int *) (context->ra + 16) == 0x48ffffff ++ && *(unsigned int *) (context->ra + 20) == 0x0001c0c7 ++ && *(unsigned int *) (context->ra + 24) == 0x050f0000 ) ++ { ++ sf = (struct signal_frame *) context->cfa; ++ new_cfa = sf->REG_NAME(RSP); ++ fs->regs.cfa_how = CFA_REG_OFFSET; ++ fs->regs.cfa_reg = 7; ++ fs->regs.cfa_offset = new_cfa - (long) context->cfa; ++ } ++ else ++ { ++ return _URC_END_OF_STACK; ++ } ++ ++ /* The SVR4 register numbering macros aren't usable in libgcc. */ ++ fs->regs.reg[ 0].how = REG_SAVED_OFFSET; ++ fs->regs.reg[ 0].loc.offset = (long)&sf->REG_NAME(RAX) - new_cfa; ++ fs->regs.reg[ 1].how = REG_SAVED_OFFSET; ++ fs->regs.reg[ 1].loc.offset = (long)&sf->REG_NAME(RDX) - new_cfa; ++ fs->regs.reg[ 2].how = REG_SAVED_OFFSET; ++ fs->regs.reg[ 2].loc.offset = (long)&sf->REG_NAME(RCX) - new_cfa; ++ fs->regs.reg[ 3].how = REG_SAVED_OFFSET; ++ fs->regs.reg[ 3].loc.offset = (long)&sf->REG_NAME(RBX) - new_cfa; ++ fs->regs.reg[ 4].how = REG_SAVED_OFFSET; ++ fs->regs.reg[ 4].loc.offset = (long)&sf->REG_NAME(RSI) - new_cfa; ++ fs->regs.reg[ 5].how = REG_SAVED_OFFSET; ++ fs->regs.reg[ 5].loc.offset = (long)&sf->REG_NAME(RDI) - new_cfa; ++ fs->regs.reg[ 6].how = REG_SAVED_OFFSET; ++ fs->regs.reg[ 6].loc.offset = (long)&sf->REG_NAME(RBP) - new_cfa; ++ fs->regs.reg[ 8].how = REG_SAVED_OFFSET; ++ fs->regs.reg[ 8].loc.offset = (long)&sf->REG_NAME(R8) - new_cfa; ++ fs->regs.reg[ 9].how = REG_SAVED_OFFSET; ++ fs->regs.reg[ 9].loc.offset = (long)&sf->REG_NAME(R9) - new_cfa; ++ fs->regs.reg[10].how = REG_SAVED_OFFSET; ++ fs->regs.reg[10].loc.offset = (long)&sf->REG_NAME(R10) - new_cfa; ++ fs->regs.reg[11].how = REG_SAVED_OFFSET; ++ fs->regs.reg[11].loc.offset = (long)&sf->REG_NAME(R11) - new_cfa; ++ fs->regs.reg[12].how = REG_SAVED_OFFSET; ++ fs->regs.reg[12].loc.offset = (long)&sf->REG_NAME(R12) - new_cfa; ++ fs->regs.reg[13].how = REG_SAVED_OFFSET; ++ fs->regs.reg[13].loc.offset = (long)&sf->REG_NAME(R13) - new_cfa; ++ fs->regs.reg[14].how = REG_SAVED_OFFSET; ++ fs->regs.reg[14].loc.offset = (long)&sf->REG_NAME(R14) - new_cfa; ++ fs->regs.reg[15].how = REG_SAVED_OFFSET; ++ fs->regs.reg[15].loc.offset = (long)&sf->REG_NAME(R15) - new_cfa; ++ fs->regs.reg[16].how = REG_SAVED_OFFSET; ++ fs->regs.reg[16].loc.offset = (long)&sf->REG_NAME(RIP) - new_cfa; ++ fs->retaddr_column = 16; ++ fs->signal_frame = 1; ++ return _URC_NO_REASON; ++} ++ ++#else /* Next section is for i386 */ ++ ++#define MD_FALLBACK_FRAME_STATE_FOR x86_netbsd_fallback_frame_state ++ ++static _Unwind_Reason_Code ++x86_netbsd_fallback_frame_state ++(struct _Unwind_Context *context, _Unwind_FrameState *fs) ++{ ++ /* signal_frame is sigframe_siginfo minus sf_ra handler return address */ ++ struct signal_frame { ++ int sf_signum; /* "signum" argument for handler" */ ++ siginfo_t *sf_sip; /* "sip" argument for handler" */ ++ ucontext_t *sf_ucp; /* "ucp" argument for handler" */ ++ siginfo_t sf_si; /* actual saved siginfo */ ++ ucontext_t sf_uc; /* actual saved ucontext */ ++ }; ++ struct signal_frame *sf; ++ long new_cfa; ++ ++ /* We are looking for the following signal trampoline pattern. If we don't ++ find it, we are at the end of the stack and can't unwind. ++ ++ <__sigtramp_siginfo_2+18>: movl $0xffffffff,0x4(%esp) ++ <__sigtramp_siginfo_2+26>: mov $0x1,%eax ++ <__sigtramp_siginfo_2+31>: int $0x80 ++ */ ++ ++ if ( *(unsigned int *) (context->ra + 18) == 0x042444c7 ++ && *(unsigned int *) (context->ra + 22) == 0xffffffff ++ && *(unsigned char *) (context->ra + 26) == 0xb8 ++ && *(unsigned int *) (context->ra + 27) == 0x00000001 ++ && *(unsigned short *) (context->ra + 31) == 0x80cd ) ++ { ++ sf = (struct signal_frame *) context->cfa; ++ new_cfa = sf->REG_NAME(ESP); ++ fs->regs.cfa_how = CFA_REG_OFFSET; ++ fs->regs.cfa_reg = 4; ++ fs->regs.cfa_offset = new_cfa - (long) context->cfa; ++ } ++ else ++ { ++ return _URC_END_OF_STACK; ++ } ++ ++ /* The SVR4 register numbering macros aren't usable in libgcc. */ ++ fs->regs.reg[0].how = REG_SAVED_OFFSET; ++ fs->regs.reg[0].loc.offset = (long)&sf->REG_NAME(EAX) - new_cfa; ++ fs->regs.reg[3].how = REG_SAVED_OFFSET; ++ fs->regs.reg[3].loc.offset = (long)&sf->REG_NAME(EBX) - new_cfa; ++ fs->regs.reg[1].how = REG_SAVED_OFFSET; ++ fs->regs.reg[1].loc.offset = (long)&sf->REG_NAME(ECX) - new_cfa; ++ fs->regs.reg[2].how = REG_SAVED_OFFSET; ++ fs->regs.reg[2].loc.offset = (long)&sf->REG_NAME(EDX) - new_cfa; ++ fs->regs.reg[6].how = REG_SAVED_OFFSET; ++ fs->regs.reg[6].loc.offset = (long)&sf->REG_NAME(ESI) - new_cfa; ++ fs->regs.reg[7].how = REG_SAVED_OFFSET; ++ fs->regs.reg[7].loc.offset = (long)&sf->REG_NAME(EDI) - new_cfa; ++ fs->regs.reg[5].how = REG_SAVED_OFFSET; ++ fs->regs.reg[5].loc.offset = (long)&sf->REG_NAME(EBP) - new_cfa; ++ fs->regs.reg[8].how = REG_SAVED_OFFSET; ++ fs->regs.reg[8].loc.offset = (long)&sf->REG_NAME(EIP) - new_cfa; ++ fs->retaddr_column = 8; ++ fs->signal_frame = 1; ++ return _URC_NO_REASON; ++} ++ ++#endif /* ifdef __x86_64__ */ +--- 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/config.gcc.orig ++++ gcc/config.gcc +@@ -1393,12 +1393,16 @@ + tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h ${fbsd_tm_file} i386/x86-64.h i386/freebsd.h i386/freebsd64.h" + ;; + i[34567]86-*-netbsdelf*) +- tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h netbsd.h netbsd-elf.h i386/netbsd-elf.h" ++ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h netbsd.h netbsd-elf.h i386/netbsd-elf.h freebsd-stdint.h" + extra_options="${extra_options} netbsd.opt netbsd-elf.opt" ++ tmake_file="${tmake_file} i386/t-crtstuff" ++ use_gcc_stdint=wrap + ;; + x86_64-*-netbsd*) +- tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h netbsd.h netbsd-elf.h i386/x86-64.h i386/netbsd64.h" ++ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h netbsd.h netbsd-elf.h i386/x86-64.h i386/netbsd64.h freebsd-stdint.h" + extra_options="${extra_options} netbsd.opt netbsd-elf.opt" ++ tmake_file="${tmake_file} i386/t-crtstuff" ++ use_gcc_stdint=wrap + ;; + i[34567]86-*-openbsd2.*|i[34567]86-*openbsd3.[0123]) + tm_file="i386/i386.h i386/unix.h i386/bsd.h i386/gas.h i386/gstabs.h openbsd-oldgas.h openbsd.h i386/openbsd.h" +--- gcc/configure.orig ++++ gcc/configure +@@ -27806,6 +27806,13 @@ + gcc_cv_target_dl_iterate_phdr=no + fi + ;; ++ *-*-netbsd*) ++ if grep dl_iterate_phdr $target_header_dir/link_elf.h > /dev/null 2>&1; then ++ gcc_cv_target_dl_iterate_phdr=yes ++ else ++ gcc_cv_target_dl_iterate_phdr=no ++ fi ++ ;; + esac + + if test x$gcc_cv_target_dl_iterate_phdr = xyes; then +--- gcc/config/i386/netbsd-elf.h.orig ++++ gcc/config/i386/netbsd-elf.h +@@ -38,7 +38,8 @@ + /* Provide a LINK_SPEC appropriate for a NetBSD/i386 ELF target. */ + + #undef LINK_SPEC +-#define LINK_SPEC NETBSD_LINK_SPEC_ELF ++#define LINK_SPEC NETBSD_LINK_SPEC_ELF \ ++"%{!static:-rpath @PREFIX@/gcc-aux/lib}" + + #define NETBSD_ENTRY_POINT "__start" + +@@ -121,3 +122,10 @@ + #define HAVE_ENABLE_EXECUTE_STACK + + #define IX86_MAYBE_NO_LIBGCC_TFMODE ++ ++/* Define this to be nonzero if static stack checking is supported. */ ++#define STACK_CHECK_STATIC_BUILTIN 1 ++ ++#if defined(HAVE_LD_EH_FRAME_HDR) ++#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " ++#endif +--- gcc/config/i386/netbsd64.h.orig ++++ gcc/config/i386/netbsd64.h +@@ -69,3 +69,10 @@ + #define HAVE_ENABLE_EXECUTE_STACK + + #define IX86_MAYBE_NO_LIBGCC_TFMODE ++ ++/* Define this to be nonzero if static stack checking is supported. */ ++#define STACK_CHECK_STATIC_BUILTIN 1 ++ ++#if defined(HAVE_LD_EH_FRAME_HDR) ++#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " ++#endif +--- libgcc/crtstuff.c.orig ++++ libgcc/crtstuff.c +@@ -81,7 +81,7 @@ + #endif + + #if defined(TARGET_DL_ITERATE_PHDR) && \ +- (defined(__DragonFly__) || defined(__FreeBSD__)) ++ (defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__)) + #define BSD_DL_ITERATE_PHDR_AVAILABLE + #endif + +--- libgcc/unwind-dw2-fde-dip.c.orig ++++ libgcc/unwind-dw2-fde-dip.c +@@ -65,6 +65,12 @@ + #endif + + #if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \ ++ && defined(TARGET_DL_ITERATE_PHDR) && defined(__NetBSD__) ++# define ElfW(type) Elf_##type ++# define USE_PT_GNU_EH_FRAME ++#endif ++ ++#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \ + && defined(__OpenBSD__) + # define ElfW(type) Elf_##type + # define USE_PT_GNU_EH_FRAME +--- 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 \ +@@ -1511,6 +1510,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 +@@ -1518,6 +1518,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 +@@ -2164,6 +2169,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) +@@ -2181,6 +2187,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 +@@ -240,7 +240,8 @@ + extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" + ;; + *-*-netbsd*) +- tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver" ++ tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-eh-dw2-dip" ++ tmake_file="$tmake_file t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver" + # NetBSD 1.7 and later are set up to use GCC's crtstuff for + # ELF configurations. We will clear extra_parts in the + # a.out configurations. +@@ -567,14 +568,19 @@ + ;; + 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*) ++ tmake_file="${tmake_file} i386/t-crtstuff" ++ md_unwind_header=i386/netbsd-unwind.h + ;; + x86_64-*-netbsd*) + tmake_file="${tmake_file} i386/t-crtstuff" ++ md_unwind_header=i386/netbsd-unwind.h + ;; + i[34567]86-*-openbsd2.*|i[34567]86-*openbsd3.[0123]) + ;; diff --git a/lang/gcc5-aux/files/diff-cxx b/lang/gcc5-aux/files/diff-cxx new file mode 100644 index 00000000000..182ef7e811b --- /dev/null +++ b/lang/gcc5-aux/files/diff-cxx @@ -0,0 +1,112 @@ +--- libstdc++-v3/config/os/bsd/netbsd/ctype_base.h.orig ++++ libstdc++-v3/config/os/bsd/netbsd/ctype_base.h +@@ -43,9 +43,22 @@ + + // NB: Offsets into ctype<char>::_M_table force a particular size + // on the mask type. Because of this, we don't use an enum. +- typedef unsigned char mask; + +-#ifndef _CTYPE_U ++#if defined(_CTYPE_BL) ++ typedef unsigned short mask; ++ static const mask upper = _CTYPE_U; ++ static const mask lower = _CTYPE_L; ++ static const mask alpha = _CTYPE_A; ++ static const mask digit = _CTYPE_D; ++ static const mask xdigit = _CTYPE_X; ++ static const mask space = _CTYPE_S; ++ static const mask print = _CTYPE_R; ++ static const mask graph = _CTYPE_G; ++ static const mask cntrl = _CTYPE_C; ++ static const mask punct = _CTYPE_P; ++ static const mask alnum = _CTYPE_A | _CTYPE_D; ++#elif !defined(_CTYPE_U) ++ typedef unsigned char mask; + static const mask upper = _U; + static const mask lower = _L; + static const mask alpha = _U | _L; +@@ -58,6 +71,7 @@ + static const mask punct = _P; + static const mask alnum = _U | _L | _N; + #else ++ typedef unsigned char mask; + static const mask upper = _CTYPE_U; + static const mask lower = _CTYPE_L; + static const mask alpha = _CTYPE_U | _CTYPE_L; +--- libstdc++-v3/config/os/bsd/netbsd/ctype_configure_char.cc.orig ++++ libstdc++-v3/config/os/bsd/netbsd/ctype_configure_char.cc +@@ -38,11 +38,17 @@ + + // Information as gleaned from /usr/include/ctype.h + ++#ifndef _CTYPE_BL + extern "C" const u_int8_t _C_ctype_[]; ++#endif + + const ctype_base::mask* + ctype<char>::classic_table() throw() ++#ifdef _CTYPE_BL ++ { return _C_ctype_tab_ + 1; } ++#else + { return _C_ctype_ + 1; } ++#endif + + ctype<char>::ctype(__c_locale, const mask* __table, bool __del, + size_t __refs) +@@ -69,14 +75,14 @@ + + char + ctype<char>::do_toupper(char __c) const +- { return ::toupper((int) __c); } ++ { return ::toupper((int)(unsigned char) __c); } + + const char* + ctype<char>::do_toupper(char* __low, const char* __high) const + { + while (__low < __high) + { +- *__low = ::toupper((int) *__low); ++ *__low = ::toupper((int)(unsigned char) *__low); + ++__low; + } + return __high; +@@ -84,14 +90,14 @@ + + char + ctype<char>::do_tolower(char __c) const +- { return ::tolower((int) __c); } ++ { return ::tolower((int)(unsigned char) __c); } + + const char* + ctype<char>::do_tolower(char* __low, const char* __high) const + { + while (__low < __high) + { +- *__low = ::tolower((int) *__low); ++ *__low = ::tolower((int)(unsigned char) *__low); + ++__low; + } + return __high; +--- libstdc++-v3/config/os/bsd/netbsd/ctype_inline.h.orig ++++ libstdc++-v3/config/os/bsd/netbsd/ctype_inline.h +@@ -48,7 +48,7 @@ + is(const char* __low, const char* __high, mask* __vec) const + { + while (__low < __high) +- *__vec++ = _M_table[*__low++]; ++ *__vec++ = _M_table[(unsigned char)*__low++]; + return __high; + } + +--- 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 00000000000..4f7388a9a66 --- /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-fortran b/lang/gcc5-aux/files/diff-fortran new file mode 100644 index 00000000000..269950890e9 --- /dev/null +++ b/lang/gcc5-aux/files/diff-fortran @@ -0,0 +1,42 @@ +--- libgfortran/acinclude.m4.orig ++++ libgfortran/acinclude.m4 +@@ -100,7 +100,7 @@ + [Define to 1 if the target supports #pragma weak]) + fi + case "$host" in +- *-*-darwin* | *-*-hpux* | *-*-cygwin* | *-*-mingw* ) ++ *-*-darwin* | *-*-hpux* | *-*-cygwin* | *-*-mingw* | *-*-netbsd* ) + AC_DEFINE(GTHREAD_USE_WEAK, 0, + [Define to 0 if the target shouldn't use #pragma weak]) + ;; +--- libgfortran/configure.orig ++++ libgfortran/configure +@@ -26447,7 +26447,7 @@ + + fi + case "$host" in +- *-*-darwin* | *-*-hpux* | *-*-cygwin* | *-*-mingw* ) ++ *-*-darwin* | *-*-hpux* | *-*-cygwin* | *-*-mingw* | *-*-netbsd* ) + + $as_echo "#define GTHREAD_USE_WEAK 0" >>confdefs.h + +--- gcc/fortran/f95-lang.c.orig ++++ gcc/fortran/f95-lang.c +@@ -776,10 +776,17 @@ + + gfc_define_builtin ("__builtin_cabsl", func_clongdouble_longdouble, + BUILT_IN_CABSL, "cabsl", ATTR_CONST_NOTHROW_LEAF_LIST); ++#if defined(__NetBSD__) ++ gfc_define_builtin ("__builtin_cabs", func_cdouble_double, ++ BUILT_IN_CABS, "__c99_cabs", ATTR_CONST_NOTHROW_LEAF_LIST); ++ gfc_define_builtin ("__builtin_cabsf", func_cfloat_float, ++ BUILT_IN_CABSF, "__c99_cabsf", ATTR_CONST_NOTHROW_LEAF_LIST); ++#else + gfc_define_builtin ("__builtin_cabs", func_cdouble_double, + BUILT_IN_CABS, "cabs", ATTR_CONST_NOTHROW_LEAF_LIST); + gfc_define_builtin ("__builtin_cabsf", func_cfloat_float, + BUILT_IN_CABSF, "cabsf", ATTR_CONST_NOTHROW_LEAF_LIST); ++#endif + + gfc_define_builtin ("__builtin_copysignl", mfunc_longdouble[1], + BUILT_IN_COPYSIGNL, "copysignl", diff --git a/lang/gcc5-aux/files/diff-gcc-testsuite b/lang/gcc5-aux/files/diff-gcc-testsuite new file mode 100644 index 00000000000..a9a330ecf55 --- /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/options.mk b/lang/gcc5-aux/options.mk new file mode 100644 index 00000000000..837f43a1fed --- /dev/null +++ b/lang/gcc5-aux/options.mk @@ -0,0 +1,125 @@ +# $NetBSD: options.mk,v 1.1 2015/06/15 09:46:27 marino Exp $ + +PKG_OPTIONS_VAR= PKG_OPTIONS.gcc5-aux +PKG_SUPPORTED_OPTIONS= fortran objc testsuite static bootstrap +PKG_SUGGESTED_OPTIONS= fortran objc + +# disable nls for now (build error involving iconv) + +.include "../../mk/bsd.options.mk" + + +# Bootstrap is essentially a maintainer option and it will ignore +# all other options because it is intent on building a bootstrap compiler. + + +############################# +## ADD LANGUAGE: Fortran ## +############################# + +.if empty(PKG_OPTIONS:Mfortran) || !empty(PKG_OPTIONS:Mbootstrap) +EXTRA_CONFARGS+= --disable-libquadmath +.else +LANGS+= fortran +APPLY_DIFFS+= fortran +.if ${OPSYS} == NetBSD +EXTRA_CONFARGS+= --disable-libquadmath +.else +EXTRA_CONFARGS+= --enable-libquadmath +.endif +.endif + + +################################# +## ADD LANGUAGE: Objective-C ## +################################# + +.if !empty(PKG_OPTIONS:Mobjc) && empty(PKG_OPTIONS:Mbootstrap) +LANGS+= objc +.endif + + +######################### +## TESTSUITE SUPPORT ## +######################### + +.if !empty(PKG_OPTIONS:Mtestsuite) && empty(PKG_OPTIONS:Mbootstrap) +BUILD_DEPENDS+= dejagnu>=1.4:../../devel/dejagnu +APPLY_DIFFS+= ada-testsuite +APPLY_DIFFS+= cxx-testsuite +APPLY_DIFFS+= gcc-testsuite +.endif + + +################################# +## NATIONAL LANGUAGE SUPPORT ## +################################# + +.if !empty(PKG_OPTIONS:Mnls) && empty(PKG_OPTIONS:Mbootstrap) +USE_BUILTIN.iconv= no +USE_TOOLS+= msgfmt +EXTRA_CONFARGS+= --enable-nls +EXTRA_CONFARGS+= --with-libiconv-prefix=${BUILDLINK_PREFIX.iconv} +MY_MAKE_ENV+= ICONVPREFIX=${BUILDLINK_PREFIX.iconv} +.include "../../converters/libiconv/buildlink3.mk" +.include "../../devel/gettext-lib/buildlink3.mk" +.else +EXTRA_CONFARGS+= --disable-nls +.endif + + +############################### +## STATICALLY BUILT OPTION ## +############################### + +.if !empty(PKG_OPTIONS:Mstatic) +STATIC_BUILD = yes +.endif + +.if defined(STATIC_BUILD) && empty(PKG_OPTIONS:Mbootstrap) +. if ${OPSYS} == SunOS +PKG_FAIL_REASON+= SunOS does not support static builds +. else +EXTRA_CONFARGS+= --with-stage1-ldflags=-static +. endif +.endif + + +################################# +## BOOTSTRAP COMPILER OPTION ## +################################# + +# Solaris does not support static linking system libraries, so bootstraps +# on SunOS require gmp&co to be built with gcc. Also, OpenBSD x86-64 +# fails configuration during the linking of -lmpc -lmpfr -lgmp in a contest; +# it complains of missing references in libm. These libraries are built by +# a different compiler (the base) so perhaps that's the problem. Building +# gmp&co in the tree allows the configure step to succeed on OpenBSD. + +.if ${OPSYS} == OpenBSD || ${OPSYS} == MirBSD || \ + (${OPSYS} == SunOS && !empty(PKG_OPTIONS:Mbootstrap)) +.include "../../devel/gmp/inplace.mk" +.include "../../math/mpcomplex/inplace.mk" +.include "../../math/mpfr/inplace.mk" +.else +EXTRA_CONFARGS+= --with-gmp=${BUILDLINK_PREFIX.gmp} +EXTRA_CONFARGS+= --with-mpfr=${BUILDLINK_PREFIX.mpfr} +EXTRA_CONFARGS+= --with-mpc=${BUILDLINK_PREFIX.mpcomplex} +.include "../../devel/gmp/buildlink3.mk" +.include "../../math/mpfr/buildlink3.mk" +.include "../../math/mpcomplex/buildlink3.mk" +.endif + +.if !empty(PKG_OPTIONS:Mbootstrap) +EXTRA_CONFARGS+= --disable-shared --disable-lto +EXTRA_CONFARGS+= --disable-libstdcxx-pch +. if ${OPSYS} != SunOS +EXTRA_CONFARGS+= --with-stage1-ldflags=-static +EXTRA_CONFARGS+= --with-boot-ldflags=-static +EXTRA_CONFARGS+= --with-system-zlib +. endif +.else +EXTRA_CONFARGS+= --enable-shared +EXTRA_CONFARGS+= --disable-bootstrap + +.endif |