Index: head/lang/Makefile =================================================================== --- head/lang/Makefile (revision 402634) +++ head/lang/Makefile (revision 402635) @@ -1,353 +1,356 @@ # $FreeBSD$ # COMMENT = Programming languages SUBDIR += Gofer SUBDIR += abcl SUBDIR += adacontrol SUBDIR += afnix SUBDIR += alchemist.el SUBDIR += algol68g SUBDIR += alisp SUBDIR += angelscript SUBDIR += arena SUBDIR += asis SUBDIR += asn1c SUBDIR += atlast SUBDIR += ats SUBDIR += awka SUBDIR += bas2tap SUBDIR += basic256 SUBDIR += beignet SUBDIR += bf2c SUBDIR += bigloo SUBDIR += bsh SUBDIR += bwbasic SUBDIR += c SUBDIR += ccl SUBDIR += cdent SUBDIR += cduce SUBDIR += ceylon SUBDIR += cfortran SUBDIR += chibi-scheme SUBDIR += chicken SUBDIR += cint SUBDIR += cjs SUBDIR += clang-devel SUBDIR += clang33 SUBDIR += clang34 SUBDIR += clang35 SUBDIR += clang36 SUBDIR += clang37 SUBDIR += clojure SUBDIR += clojure-mode.el SUBDIR += cloudabi-clang SUBDIR += clover SUBDIR += cmucl SUBDIR += cmucl-extra SUBDIR += cocor SUBDIR += cparser SUBDIR += csharp-mode.el SUBDIR += cython SUBDIR += diveintopython SUBDIR += dlv SUBDIR += dmd1 SUBDIR += dmd2 SUBDIR += duktape SUBDIR += ecl SUBDIR += elan SUBDIR += elixir SUBDIR += elixir-mode.el SUBDIR += elk SUBDIR += emacs-lisp-intro SUBDIR += erlang SUBDIR += erlang-java SUBDIR += erlang-riak SUBDIR += erlang-runtime15 SUBDIR += erlang-runtime16 SUBDIR += erlang-runtime17 SUBDIR += erlang-runtime18 SUBDIR += erlang-wx SUBDIR += execline SUBDIR += expect SUBDIR += f2c SUBDIR += fasm SUBDIR += ferite SUBDIR += ficl SUBDIR += fpc SUBDIR += fpc-base SUBDIR += fpc-docs SUBDIR += fpc-lua SUBDIR += fpc-rexx SUBDIR += fpc-tcl SUBDIR += fpc-units SUBDIR += fpc-utils SUBDIR += fsharp SUBDIR += gambit-c SUBDIR += gauche SUBDIR += gawk SUBDIR += gcc SUBDIR += gcc-aux SUBDIR += gcc-ecj45 SUBDIR += gcc46 SUBDIR += gcc47 SUBDIR += gcc48 SUBDIR += gcc49 SUBDIR += gcc5 SUBDIR += gcc5-aux SUBDIR += gcc5-devel SUBDIR += gcc6-devel SUBDIR += gcl SUBDIR += gforth SUBDIR += ghc SUBDIR += gjs SUBDIR += gnat_util SUBDIR += gnatdroid-armv7 SUBDIR += gnatdroid-binutils + SUBDIR += gnatdroid-binutils-x86 SUBDIR += gnatdroid-sysroot + SUBDIR += gnatdroid-sysroot-x86 + SUBDIR += gnatdroid-x86 SUBDIR += gnu-cobol SUBDIR += gnustep-base SUBDIR += go SUBDIR += go14 SUBDIR += gprolog SUBDIR += groovy SUBDIR += gscheme SUBDIR += guile SUBDIR += guile2 SUBDIR += harbour SUBDIR += hla SUBDIR += hope SUBDIR += hs-brainfuck SUBDIR += hs-unlambda SUBDIR += huc SUBDIR += hugs SUBDIR += icc SUBDIR += ici SUBDIR += icon SUBDIR += intel2gas SUBDIR += intercal SUBDIR += io SUBDIR += itcl SUBDIR += itcl4 SUBDIR += jakarta-commons-jelly SUBDIR += jimtcl SUBDIR += jruby SUBDIR += js_of_ocaml SUBDIR += jython SUBDIR += kawa SUBDIR += kturtle SUBDIR += lafontaine SUBDIR += lci SUBDIR += lfe SUBDIR += libhx SUBDIR += libjit SUBDIR += libobjc2 SUBDIR += librep SUBDIR += libstdc++_stldoc_4.2.2 SUBDIR += linux-c6-tcl85 SUBDIR += linux-f10-libg2c SUBDIR += linux-f10-tcl85 SUBDIR += linux-j SUBDIR += lua-ada SUBDIR += lua-mode.el SUBDIR += lua51 SUBDIR += lua52 SUBDIR += lua53 SUBDIR += luajit SUBDIR += malbolge SUBDIR += maude SUBDIR += mawk SUBDIR += mdk SUBDIR += micropython SUBDIR += mit-scheme SUBDIR += mixal SUBDIR += mlton SUBDIR += mmix SUBDIR += modula3 SUBDIR += mono SUBDIR += mono-basic SUBDIR += moscow_ml SUBDIR += mosh SUBDIR += mtasc SUBDIR += munger SUBDIR += nawk SUBDIR += nbc SUBDIR += nbfc SUBDIR += nesasm SUBDIR += newlisp SUBDIR += newlisp-devel SUBDIR += nhc98 SUBDIR += nickle SUBDIR += nim SUBDIR += nml SUBDIR += nqc SUBDIR += nwcc SUBDIR += nx SUBDIR += ocaml SUBDIR += ocaml-autoconf SUBDIR += ocaml-nox11 SUBDIR += ofc SUBDIR += ohugs SUBDIR += onyx SUBDIR += oo2c SUBDIR += opendylan SUBDIR += p2c SUBDIR += p5-Data-JavaScript SUBDIR += p5-Error SUBDIR += p5-Expect SUBDIR += p5-ExtUtils-F77 SUBDIR += p5-Interpolation SUBDIR += p5-JSAN SUBDIR += p5-JavaScript-SpiderMonkey SUBDIR += p5-JavaScript-Squish SUBDIR += p5-JavaScript-Value-Escape SUBDIR += p5-List-MoreUtils SUBDIR += p5-Marpa SUBDIR += p5-Marpa-PP SUBDIR += p5-Marpa-XS SUBDIR += p5-Modern-Perl SUBDIR += p5-Parse-Perl SUBDIR += p5-Perl6-Subs SUBDIR += p5-Promises SUBDIR += p5-Pugs-Compiler-Rule SUBDIR += p5-Quantum-Superpositions SUBDIR += p5-Scalar-List-Utils SUBDIR += p5-Switch SUBDIR += p5-Tcl SUBDIR += p5-Test-XPath SUBDIR += p5-Try-Catch SUBDIR += p5-Try-Tiny SUBDIR += p5-Try-Tiny-Retry SUBDIR += p5-TryCatch SUBDIR += p5-ePerl SUBDIR += p5-signatures SUBDIR += p5-v6 SUBDIR += parrot SUBDIR += pbasic SUBDIR += pcc SUBDIR += pecl-perl SUBDIR += perl5-devel SUBDIR += perl5.16 SUBDIR += perl5.18 SUBDIR += perl5.20 SUBDIR += perl5.22 SUBDIR += petite-chez SUBDIR += pfe SUBDIR += phantomjs SUBDIR += pharo SUBDIR += phc SUBDIR += php-mode.el SUBDIR += php5 SUBDIR += php5-extensions SUBDIR += php55 SUBDIR += php55-extensions SUBDIR += php56 SUBDIR += php56-extensions SUBDIR += php_doc SUBDIR += picoc SUBDIR += pike78 SUBDIR += polyml SUBDIR += ptoc SUBDIR += pure SUBDIR += py-clojure SUBDIR += py-mx-base SUBDIR += py-prolog SUBDIR += pypy SUBDIR += pypy3-devel SUBDIR += python SUBDIR += python-doc-html SUBDIR += python-doc-pdf-a4 SUBDIR += python-doc-pdf-letter SUBDIR += python-doc-text SUBDIR += python-mode.el SUBDIR += python-tools SUBDIR += python2 SUBDIR += python27 SUBDIR += python3 SUBDIR += python32 SUBDIR += python33 SUBDIR += python34 SUBDIR += python35 SUBDIR += qore SUBDIR += qscheme SUBDIR += qt5-qml SUBDIR += quack SUBDIR += racket SUBDIR += racket-minimal SUBDIR += ratfor SUBDIR += rexx-imc SUBDIR += rexx-regina SUBDIR += rexx-regutil SUBDIR += rexx-wrapper SUBDIR += rhino SUBDIR += rubinius SUBDIR += ruby20 SUBDIR += ruby21 SUBDIR += ruby22 SUBDIR += runawk SUBDIR += rust SUBDIR += rust-nightly SUBDIR += s9fes SUBDIR += sagittarius-scheme SUBDIR += sather-specification SUBDIR += sather-tutorial SUBDIR += sbcl SUBDIR += scala SUBDIR += scala-docs SUBDIR += scheme48 SUBDIR += scm SUBDIR += sdcc SUBDIR += sdcc-devel SUBDIR += see SUBDIR += seed7 SUBDIR += siod SUBDIR += sisc SUBDIR += sketchy SUBDIR += slib SUBDIR += slib-guile SUBDIR += slib-guile2 SUBDIR += slisp SUBDIR += smalltalk SUBDIR += smlnj SUBDIR += snobol4 SUBDIR += spark SUBDIR += spidermonkey17 SUBDIR += spidermonkey170 SUBDIR += spidermonkey185 SUBDIR += spidermonkey24 SUBDIR += spl SUBDIR += squeak SUBDIR += squirrel SUBDIR += stalin SUBDIR += starlogo SUBDIR += stldoc SUBDIR += swi-pl SUBDIR += tcbasic SUBDIR += tcc SUBDIR += tcl-manual SUBDIR += tcl-wrapper SUBDIR += tcl84 SUBDIR += tcl85 SUBDIR += tcl86 SUBDIR += tclX SUBDIR += tinypy SUBDIR += tolua SUBDIR += tolua++ SUBDIR += tuareg-mode.el SUBDIR += twelf SUBDIR += ucc SUBDIR += urweb SUBDIR += v8 SUBDIR += v8-devel SUBDIR += vala SUBDIR += visualworks SUBDIR += whitespace SUBDIR += x10 SUBDIR += yabasic SUBDIR += yap SUBDIR += yap-devel SUBDIR += yorick SUBDIR += ypsilon .include Index: head/lang/gcc-aux/Makefile.version =================================================================== --- head/lang/gcc-aux/Makefile.version (revision 402634) +++ head/lang/gcc-aux/Makefile.version (revision 402635) @@ -1,17 +1,18 @@ # $FreeBSD$ GCC_BRANCH= 4.9 GCC_POINT= 3 GCC_VERSION= ${GCC_BRANCH}.${GCC_POINT} SNAPSHOT= 20150626 MAIN_PR= 0 UTIL_PR= 0 ARMV7_PR= 1 +X86_PR= 0 # Snapshot naming pattern #IDENTIFICATION= gcc-${GCC_BRANCH}-${SNAPSHOT} #MS_SUBDIR= snapshots/${GCC_BRANCH}-${SNAPSHOT} # Release naming pattern IDENTIFICATION= gcc-${GCC_VERSION} MS_SUBDIR= releases/gcc-${GCC_VERSION} Index: head/lang/gcc-aux/files/patch-libstdc++-v3_config_os_bionic_ctype__base.h =================================================================== --- head/lang/gcc-aux/files/patch-libstdc++-v3_config_os_bionic_ctype__base.h (revision 402634) +++ head/lang/gcc-aux/files/patch-libstdc++-v3_config_os_bionic_ctype__base.h (nonexistent) @@ -1,21 +0,0 @@ ---- libstdc++-v3/config/os/bionic/ctype_base.h.orig 2014-01-02 22:30:10 UTC -+++ libstdc++-v3/config/os/bionic/ctype_base.h -@@ -40,6 +40,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION - // Non-standard typedefs. - typedef const int* __to_type; - -+#ifdef _CTYPE_U -+#define _U _CTYPE_U -+#define _L _CTYPE_L -+#define _D _CTYPE_D -+#define _S _CTYPE_S -+#define _P _CTYPE_P -+#define _C _CTYPE_C -+#define _X _CTYPE_X -+#define _B _CTYPE_B -+#define _N _CTYPE_D -+#endif -+ - // NB: Offsets into ctype::_M_table force a particular size - // on the mask type. Because of this, we don't use an enum. - typedef char mask; Property changes on: head/lang/gcc-aux/files/patch-libstdc++-v3_config_os_bionic_ctype__base.h ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/lang/gcc-aux/files/diff-ada =================================================================== --- head/lang/gcc-aux/files/diff-ada (revision 402634) +++ head/lang/gcc-aux/files/diff-ada (revision 402635) @@ -1,2687 +1,2727 @@ --- /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 -- +-- . -- +-- -- +-- GNARL was developed by the GNARL team at Florida State University. -- +-- Extensive contributions were provided by Ada Core Technologies, Inc. -- +-- -- +------------------------------------------------------------------------------ + +-- This is the DragonFly BSD THREADS version of this package + +with System.OS_Interface; + +package Ada.Interrupts.Names is + + -- All identifiers in this unit are implementation defined + + pragma Implementation_Defined; + + -- Beware that the mapping of names to signals may be many-to-one. There + -- may be aliases. Also, for all signal names that are not supported on + -- the current system the value of the corresponding constant will be zero. + + SIGHUP : constant Interrupt_ID := + System.OS_Interface.SIGHUP; -- hangup + + SIGINT : constant Interrupt_ID := + System.OS_Interface.SIGINT; -- interrupt (rubout) + + SIGQUIT : constant Interrupt_ID := + System.OS_Interface.SIGQUIT; -- quit (ASCD FS) + + SIGILL : constant Interrupt_ID := + System.OS_Interface.SIGILL; -- illegal instruction (not reset) + + SIGTRAP : constant Interrupt_ID := + System.OS_Interface.SIGTRAP; -- trace trap (not reset) + + SIGIOT : constant Interrupt_ID := + System.OS_Interface.SIGIOT; -- IOT instruction + + SIGABRT : constant Interrupt_ID := -- used by abort, + System.OS_Interface.SIGABRT; -- replace SIGIOT in the future + + SIGFPE : constant Interrupt_ID := + System.OS_Interface.SIGFPE; -- floating point exception + + SIGKILL : constant Interrupt_ID := + System.OS_Interface.SIGKILL; -- kill (cannot be caught or ignored) + + SIGBUS : constant Interrupt_ID := + System.OS_Interface.SIGBUS; -- bus error + + SIGSEGV : constant Interrupt_ID := + System.OS_Interface.SIGSEGV; -- segmentation violation + + SIGPIPE : constant Interrupt_ID := -- write on a pipe with + System.OS_Interface.SIGPIPE; -- no one to read it + + SIGALRM : constant Interrupt_ID := + System.OS_Interface.SIGALRM; -- alarm clock + + SIGTERM : constant Interrupt_ID := + System.OS_Interface.SIGTERM; -- software termination signal from kill + + SIGURG : constant Interrupt_ID := + System.OS_Interface.SIGURG; -- urgent condition on IO channel + + SIGSTOP : constant Interrupt_ID := + System.OS_Interface.SIGSTOP; -- stop (cannot be caught or ignored) + + SIGTSTP : constant Interrupt_ID := + System.OS_Interface.SIGTSTP; -- user stop requested from tty + + SIGCONT : constant Interrupt_ID := + System.OS_Interface.SIGCONT; -- stopped process has been continued + + SIGCHLD : constant Interrupt_ID := + System.OS_Interface.SIGCHLD; -- 4.3BSD's/POSIX name for SIGCLD + + SIGCLD : constant Interrupt_ID := + System.OS_Interface.SIGCLD; -- child status change + + SIGTTIN : constant Interrupt_ID := + System.OS_Interface.SIGTTIN; -- background tty read attempted + + SIGTTOU : constant Interrupt_ID := + System.OS_Interface.SIGTTOU; -- background tty write attempted + + SIGIO : constant Interrupt_ID := -- input/output possible, + System.OS_Interface.SIGIO; -- SIGPOLL alias (Solaris) + + SIGXCPU : constant Interrupt_ID := + System.OS_Interface.SIGXCPU; -- CPU time limit exceeded + + SIGXFSZ : constant Interrupt_ID := + System.OS_Interface.SIGXFSZ; -- filesize limit exceeded + + SIGVTALRM : constant Interrupt_ID := + System.OS_Interface.SIGVTALRM; -- virtual timer expired + + SIGPROF : constant Interrupt_ID := + System.OS_Interface.SIGPROF; -- profiling timer expired + + SIGWINCH : constant Interrupt_ID := + System.OS_Interface.SIGWINCH; -- window size change + + SIGUSR1 : constant Interrupt_ID := + System.OS_Interface.SIGUSR1; -- user defined signal 1 + + SIGUSR2 : constant Interrupt_ID := + System.OS_Interface.SIGUSR2; -- user defined signal 2 + +end Ada.Interrupts.Names; --- gcc/ada/adaint.c.orig +++ gcc/ada/adaint.c @@ -577,8 +577,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. */ @@ -745,7 +745,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 @@ -1141,9 +1142,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__) @@ -1310,7 +1312,49 @@ free (pname); } +#elif defined (__ANDROID__) + + /* + * ext2 /ext3/ext4/fat16/fat32 have no path limits + * /data/local/tmp normally requires rooted devices, if it even exists + * /sdcard is the standard location for external storage. Nativeactivity + * manifest needs to authorize its use, otherwise it might not have the + * proper permissions. + */ + + int testfd; + char *datadir = getenv ("ANDROID_DATA"); + + if (datadir == NULL) + 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 (__DragonFly__) \ || defined (__OpenBSD__) || defined(__GLIBC__) #define MAX_SAFE_PATH 1000 char *tmpdir = getenv ("TMPDIR"); @@ -1318,9 +1362,9 @@ /* 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) - strcpy (tmp_filename, "/tmp/gnat-XXXXXX"); + 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)) @@ -2562,7 +2606,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__) @@ -3608,35 +3654,6 @@ } #endif -#if defined (IS_CROSS) \ - || (! ((defined (sparc) || defined (i386)) && defined (sun) \ - && defined (__SVR4)) \ - && ! (defined (linux) && (defined (i386) || defined (__x86_64__))) \ - && ! (defined (linux) && defined (__ia64__)) \ - && ! (defined (linux) && defined (powerpc)) \ - && ! defined (__FreeBSD__) \ - && ! defined (__Lynx__) \ - && ! defined (__hpux__) \ - && ! defined (__APPLE__) \ - && ! defined (_AIX) \ - && ! defined (VMS) \ - && ! defined (__MINGW32__)) - -/* Dummy function to satisfy g-trasym.o. See the preprocessor conditional - just above for a list of native platforms that provide a non-dummy - version of this procedure in libaddr2line.a. */ - -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; -} -#endif - #if defined (_WIN32) int __gnat_argument_needs_quote = 1; #else --- 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 @@ -54,9 +54,10 @@ #include #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 @@ -187,7 +188,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 @@ -180,7 +180,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 @@ -301,6 +303,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 @@ -525,6 +525,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 @@ -1335,15 +1335,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 -- +-- . -- +-- -- +-- 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; --- /dev/null +++ gcc/ada/g-trasym-bsd.adb @@ -0,0 +1,150 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT RUN-TIME COMPONENTS -- +-- -- +-- G N A T . T R A C E B A C K . S Y M B O L I C -- +-- -- +-- B o d y -- +-- -- +-- Copyright (C) 1999-2009, AdaCore -- +-- -- +-- GNAT is free software; you can redistribute it and/or modify it under -- +-- terms of the GNU General Public License as published by the Free Soft- -- +-- ware Foundation; either version 2, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- +-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -- +-- for more details. You should have received a copy of the GNU General -- +-- Public License distributed with GNAT; see file COPYING. If not, write -- +-- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, -- +-- Boston, MA 02110-1301, USA. -- +-- -- +-- As a special exception, if other files instantiate generics from this -- +-- unit, or you link this unit with other files to produce an executable, -- +-- this unit does not by itself cause the resulting executable to be -- +-- covered by the GNU General Public License. This exception does not -- +-- however invalidate any other reasons why the executable file might be -- +-- covered by the GNU Public License. -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +-- Run-time symbolic traceback support +-- This file is based on the work by Juergen Pfiefer which is still used +-- today to provide symbolic traceback support for gnu/kFreeBSD. +-- Incorporated in GNAT-AUX by John Marino + +with System.Soft_Links; +with Ada.Exceptions.Traceback; use Ada.Exceptions.Traceback; + +package body GNAT.Traceback.Symbolic is + + package TSL renames System.Soft_Links; + + -- To perform the raw addresses to symbolic form translation we rely on a + -- libaddr2line symbolizer which examines debug info from a provided + -- executable file name, and an absolute path is needed to ensure the file + -- is always found. This is "__gnat_locate_exec_on_path (gnat_argv [0])" + -- for our executable file, a fairly heavy operation so we cache the + -- result. + + Exename : System.Address; + -- Pointer to the name of the executable file to be used on all + -- invocations of the libaddr2line symbolization service. + + Exename_Resolved : Boolean := False; + -- Flag to indicate whether we have performed the executable file name + -- resolution already. Relying on a not null Exename for this purpose + -- would be potentially inefficient as this is what we will get if the + -- resolution attempt fails. + + ------------------------ + -- Symbolic_Traceback -- + ------------------------ + + function Symbolic_Traceback (Traceback : Tracebacks_Array) return String is + + procedure convert_addresses + (filename : System.Address; + addrs : System.Address; + n_addrs : Integer; + buf : System.Address; + len : System.Address); + pragma Import (C, convert_addresses, "convert_addresses"); + -- This is the procedure version of the Ada-aware addr2line. It places + -- in BUF a string representing the symbolic translation of the N_ADDRS + -- raw addresses provided in ADDRS, looked up in debug information from + -- FILENAME. LEN points to an integer which contains the size of the + -- BUF buffer at input and the result length at output. + -- + -- Note that this procedure is *not* thread-safe. + + type Argv_Array is array (0 .. 0) of System.Address; + gnat_argv : access Argv_Array; + pragma Import (C, gnat_argv, "gnat_argv"); + + function locate_exec_on_path + (c_exename : System.Address) return System.Address; + pragma Import (C, locate_exec_on_path, "__gnat_locate_exec_on_path"); + + B_Size : constant Integer := 256 * Traceback'Length; + Len : Integer := B_Size; + Res : String (1 .. B_Size); + + use type System.Address; + + begin + -- The symbolic translation of an empty set of addresses is an empty + -- string. + + if Traceback'Length = 0 then + return ""; + end if; + + -- If our input set of raw addresses is not empty, resort to the + -- libaddr2line service to symbolize it all. + + -- Compute, cache and provide the absolute path to our executable file + -- name as the binary file where the relevant debug information is to be + -- found. If the executable file name resolution fails, we have no + -- sensible basis to invoke the symbolizer at all. + + -- Protect all this against concurrent accesses explicitly, as the + -- underlying services are potentially thread unsafe. + + TSL.Lock_Task.all; + + if not Exename_Resolved then + Exename := locate_exec_on_path (gnat_argv (0)); + Exename_Resolved := True; + end if; + + if Exename /= System.Null_Address then + Len := Res'Length; + convert_addresses + (Exename, Traceback'Address, Traceback'Length, + Res (1)'Address, Len'Address); + end if; + + TSL.Unlock_Task.all; + + -- Return what the addr2line symbolizer has produced if we have called + -- it (the executable name resolution succeeded), or an empty string + -- otherwise. + + if Exename /= System.Null_Address then + return Res (1 .. Len); + else + return ""; + end if; + + end Symbolic_Traceback; + + function Symbolic_Traceback (E : Exception_Occurrence) return String is + begin + return Symbolic_Traceback (Tracebacks (E)); + end Symbolic_Traceback; + +end GNAT.Traceback.Symbolic; --- gcc/ada/gnatchop.adb.orig +++ gcc/ada/gnatchop.adb @@ -45,7 +45,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 @@ -137,7 +137,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 @@ -29,7 +29,7 @@ * * ****************************************************************************/ -#if defined(__nucleus__) || defined(VTHREADS) || defined(__ANDROID__) +#if defined(__nucleus__) || defined(VTHREADS) #warning Sockets not supported on these platforms #undef HAVE_SOCKETS @@ -203,8 +203,19 @@ #include #endif -#if defined (_AIX) || defined (__FreeBSD__) || defined (__hpux__) || \ - defined (_WIN32) || defined (__APPLE__) +#if defined(__ANDROID__) +#include +#endif + +#if defined (_AIX) \ + || defined (__FreeBSD__) \ + || defined (__DragonFly__) \ + || defined (__NetBSD__) \ + || defined (__OpenBSD__) \ + || defined (__ANDROID__) \ + || defined (__hpux__) \ + || defined (_WIN32) \ + || defined (__APPLE__) # define HAVE_THREAD_SAFE_GETxxxBYyyy 1 #elif defined (linux) || defined (__GLIBC__) || \ @@ -236,7 +247,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 #include @@ -1673,7 +1673,7 @@ } void -__gnat_install_handler () +__gnat_install_handler (void) { struct sigaction act; @@ -2466,9 +2466,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 @@ -258,8 +258,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__) extern void __gnat_init_float (void); --- 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 @@ -670,7 +670,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 @@ -339,6 +339,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 @@ -782,7 +787,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; @@ -1323,9 +1328,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 @@ -282,10 +282,6 @@ if not Opt.Quiet_Output then Write_Str (Ranlib_Name.all); Write_Char (' '); - for J in Ranlib_Options'Range loop - Write_Str (Ranlib_Options (J).all); - Write_Char (' '); - end loop; Write_Line (Arguments (Ar_Options'Length + 1).all); end if; @@ -444,7 +440,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 @@ -116,7 +116,7 @@ procedure Dup2 (Old_Fd, New_Fd : File_Descriptor); - Gcc : constant String := "gcc"; + Gcc : constant String := "ada"; Gcc_Path : String_Access := null; Non_Empty_Node : constant Project_Node_Id := 1; --- /dev/null +++ gcc/ada/s-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 -- +-- . -- +-- -- +-- 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,648 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS -- +-- -- +-- S Y S T E M . O S _ I N T E R F A C E -- +-- -- +-- S p e c -- +-- -- +-- Copyright (C) 1991-1994, Florida State University -- +-- Copyright (C) 1995-2011, 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 -- +-- . -- +-- -- +-- 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_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; ------------------ --- gcc/ada/socket.c.orig +++ gcc/ada/socket.c @@ -65,7 +65,10 @@ int s_port; __netdb_char_ptr s_proto; }; -#elif defined(__FreeBSD__) +#elif 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 @@ -263,6 +263,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__ @@ -320,6 +321,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; @@ -340,6 +342,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]; @@ -853,8 +856,12 @@ /* Darwin, Free BSD, Linux, where component tm_gmtoff is present in struct tm */ -#elif defined (__APPLE__) || defined (__FreeBSD__) || defined (linux) ||\ - defined (__GLIBC__) +#elif defined (__APPLE__) \ + || defined (__DragonFly__) \ + || defined (__FreeBSD__) \ + || defined (__OpenBSD__) \ + || defined (linux) \ + || defined (__GLIBC__) { localtime_r (timer, &tp); *off = tp.tm_gmtoff; --- /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 -- +-- . -- +-- -- +-- 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 @@ -31,8 +31,7 @@ /* First all usupported platforms. Add stubs for exported routines. */ -#if defined (VMS) || defined (__vxworks) || defined (__Lynx__) || \ - defined (__ANDROID__) +#if defined (VMS) || defined (__vxworks) || defined (__Lynx__) void * __gnat_new_tty (void) { return (void*)0; } char * __gnat_tty_name (void* t) { return (char*)0; } @@ -1010,7 +1009,11 @@ # include #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 + Ada for Linux Team (ALT) + Heavily modified by John Marino + + 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 +#include +#include +#include +#include + +#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 @@ -288,6 +288,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 -@@ -584,7 +584,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 @@ -1044,6 +1044,7 @@ ifeq ($(strip $(filter-out arm% linux-androideabi,$(target_cpu) $(target_os))),) LIBGNAT_TARGET_PAIRS = \ a-intnam.ads> $dir/acats.log } +inform () { + printf "%04d %7s" $1 $2 +} + +disinform () { + printf "\r" +} + dir=`${PWDCMD-pwd}` if [ "$testdir" = "" ]; then @@ -197,6 +205,18 @@ glob_countn=0 glob_countok=0 glob_countu=0 +countdown=0 + +for chapter in $chapters; do + if [ -d $dir/tests/$chapter ]; then + cd $dir/tests/$chapter + ls *.a *.ada *.adt *.am *.dep 2> /dev/null | sed -e 's/\(.*\)\..*/\1/g' | \ + cut -c1-7 | sort | uniq | comm -23 - $dir/support/norun.lst \ + > $dir/tests/$chapter/${chapter}.lst + countn=`wc -l < $dir/tests/$chapter/${chapter}.lst` + countdown=`expr $countdown + $countn` + fi +done for chapter in $chapters; do display Running chapter $chapter ... @@ -207,10 +227,6 @@ continue fi - cd $dir/tests/$chapter - ls *.a *.ada *.adt *.am *.dep 2> /dev/null | sed -e 's/\(.*\)\..*/\1/g' | \ - cut -c1-7 | sort | uniq | comm -23 - $dir/support/norun.lst \ - > $dir/tests/$chapter/${chapter}.lst countn=`wc -l < $dir/tests/$chapter/${chapter}.lst` glob_countn=`expr $glob_countn + $countn` counti=0 @@ -233,10 +249,13 @@ if [ $? -eq 0 ]; then extraflags="$extraflags -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 @@ -257,8 +276,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 @@ -267,6 +288,7 @@ target_gnatmake $extraflags -I$dir/support $main >> $dir/acats.log 2>&1 if [ $? -ne 0 ]; then + disinform display "FAIL: $i" failed="${failed}${i} " clean_dir @@ -281,6 +303,7 @@ target_run $dir/tests/$chapter/$i/$binmain > $dir/tests/$chapter/$i/${i}.log 2>&1 cd $dir/tests/$chapter/$i cat ${i}.log >> $dir/acats.log + disinform egrep -e '(==== |\+\+\+\+ |\!\!\!\! )' ${i}.log > /dev/null 2>&1 if [ $? -ne 0 ]; then grep 'tasking not implemented' ${i}.log > /dev/null 2>&1 --- /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" ++STRIP="@REMOTE_TARGET@-strip" + +target_run () { + # Run on rooted tablet (port 22 vs port 2222) + BN=`basename $*` + $STRIP_FOR_TARGET $* + /usr/bin/scp -qp $* root@tablet:$tabtarget/ + /usr/bin/ssh -q tablet $tabtarget/$BN +} + +target_cmd () { + /usr/bin/ssh -q tablet "$1" +} + +# End of customization section. + +display_noeol () { + printf "$@" + printf "$@" >> $dir/acats.sum + printf "$@" >> $dir/acats.log +} + +display () { + echo "$@" + echo "$@" >> $dir/acats.sum + echo "$@" >> $dir/acats.log +} + +log () { + echo "$@" >> $dir/acats.sum + echo "$@" >> $dir/acats.log +} + +inform () { + printf "%04d %7s" $1 $2 +} + +disinform () { + printf "\r" +} + +dir=`${PWDCMD-pwd}` + +if [ "$testdir" = "" ]; then + echo You must use make check or make check-ada + exit 1 +fi + +if [ "$dir" = "$testdir" ]; then + echo "error: srcdir must be different than objdir, exiting." + exit 1 +fi + +target_gnatmake () { -+ echo gnatmake-cross --GCC=\"$GCC\" $gnatflags $gccflags $* -largs $EXTERNAL_OBJECTS --GCC=\"$GCC\" -+ gnatmake-cross --GCC="$GCC" $gnatflags $gccflags $* -largs $EXTERNAL_OBJECTS --GCC="$GCC" ++ echo gnatmake-cross --GCC=\"$GCC\" $gnatflags $gccflags $* -largs $EXTERNAL_OBJECTS --GCC=\"$GCC\" -fPIE -pie ++ gnatmake-cross --GCC="$GCC" $gnatflags $gccflags $* -largs $EXTERNAL_OBJECTS --GCC="$GCC" -fPIE -pie +} + +target_gcc () { + $GCC $gccflags $* +} + +clean_dir () { + rm -f "$binmain" *.o *.ali > /dev/null 2>&1 +} + +find_main () { + ls ${i}?.adb > ${i}.lst 2> /dev/null + ls ${i}*m.adb >> ${i}.lst 2> /dev/null + ls ${i}.adb >> ${i}.lst 2> /dev/null + main=`tail -1 ${i}.lst` +} + +split_testid () { + local mysplit=`echo $1 | awk -F/ '{print "section=" $1 "; TN=" $2 "; prog=" $3 ";"}'` + eval ${mysplit} +} + +EXTERNAL_OBJECTS="" +# Global variable to communicate external objects to link with. + +rm -f $dir/acats.sum $dir/acats.log $dir/transfer.lst + +display "Test Run By $USER on `date`" + +display " === acats configuration ===" + +target=`$GCC -dumpmachine` + +display target gcc is $GCC +display `$GCC -v 2>&1` +display host=`gcc -dumpmachine` +display target=$target +display `type gnatmake-cross` +gnatls-cross -v >> $dir/acats.log +display "" + +# Let's be tidy and clear off the remote device first +target_cmd "cd ${tabtarget}; rm logs/*; rmdir logs; rm *" + +display " === acats support ===" +display_noeol "Generating support files..." + +rm -rf $dir/support +mkdir -p $dir/support +cd $dir/support + +cp $testdir/support/*.ada $testdir/support/*.a $testdir/support/*.tst $dir/support + +# Find out the size in bit of an address on the target +target_gnatmake $testdir/support/impbit.adb >> $dir/acats.log 2>&1 +target_run $dir/support/impbit > $dir/support/impbit.out 2>&1 +target_bit=`cat $dir/support/impbit.out` +echo target_bit="$target_bit" >> $dir/acats.log + +# Find out a suitable asm statement +# Adapted from configure.ac gcc_cv_as_dwarf2_debug_line +case "$target" in + ia64*-*-* | s390*-*-*) + target_insn="nop 0" + ;; + mmix-*-*) + target_insn="swym 0" + ;; + *) + target_insn="nop" + ;; +esac +echo target_insn="$target_insn" >> $dir/acats.log + +sed -e "s,ACATS4GNATDIR,$dir,g" \ + < $testdir/support/impdef.a > $dir/support/impdef.a +sed -e "s,ACATS4GNATDIR,$dir,g" \ + -e "s,ACATS4GNATBIT,$target_bit,g" \ + -e "s,ACATS4GNATINSN,$target_insn,g" \ + < $testdir/support/macro.dfs > $dir/support/MACRO.DFS +sed -e "s,ACATS4GNATDIR,$dir,g" \ + < $testdir/support/tsttests.dat > $dir/support/TSTTESTS.DAT + +cp $testdir/tests/cd/*.c $dir/support +cp $testdir/tests/cxb/*.c $dir/support +grep -v '^#' $testdir/norun.lst | sort > $dir/support/norun.lst + +rm -rf $dir/run +mv $dir/tests $dir/tests.$$ 2> /dev/null +rm -rf $dir/tests.$$ & +mkdir -p $dir/run + +cp -pr $testdir/tests $dir/ + +for i in $dir/support/*.ada $dir/support/*.a; do + host_gnatchop $i >> $dir/acats.log 2>&1 +done + +# These tools are used to preprocess some ACATS sources +# they need to be compiled native on the host. + +host_gnatmake -q -gnatws macrosub.adb +if [ $? -ne 0 ]; then + display "**** Failed to compile macrosub" + exit 1 +fi +./macrosub > macrosub.out 2>&1 + +gcc -c cd300051.c +host_gnatmake -q -gnatws widechr.adb +if [ $? -ne 0 ]; then + display "**** Failed to compile widechr" + exit 1 +fi +./widechr > widechr.out 2>&1 + +rm -f $dir/support/macrosub +rm -f $dir/support/widechr +rm -f $dir/support/*.ali +rm -f $dir/support/*.o + +display " done." + +# From here, all compilations will be made by the target compiler + +display_noeol "Compiling support files..." + +target_gcc -c *.c +if [ $? -ne 0 ]; then + display "**** Failed to compile C code" + exit 1 +fi + +host_gnatchop *.adt >> $dir/acats.log 2>&1 + +target_gnatmake -c -gnato -gnatE *.ads >> $dir/acats.log 2>&1 +target_gnatmake -c -gnato -gnatE *.adb >> $dir/acats.log 2>&1 + +display " done." +display "" +display " === acats tests ===" + +if [ $# -eq 0 ]; then + chapters=`cd $dir/tests; echo [a-z]*` +else + chapters=$* +fi + +glob_countn=0 +glob_countok=0 +glob_countu=0 +countdown=0 + +for chapter in $chapters; do + if [ -d $dir/tests/$chapter ]; then + cd $dir/tests/$chapter + ls *.a *.ada *.adt *.am *.dep 2> /dev/null | sed -e 's/\(.*\)\..*/\1/g' | \ + cut -c1-7 | sort | uniq | comm -23 - $dir/support/norun.lst \ + > $dir/tests/$chapter/${chapter}.lst + countn=`wc -l < $dir/tests/$chapter/${chapter}.lst` + countdown=`expr $countdown + $countn` + fi +done + +cat > $dir/execute.sh << EOF +inform () { + printf "left: %04d" \$1 +} +disinform () { + printf "\r" +} +cycle () { + local countx=0 + local total=\$(echo \$testlist | awk '{print NF}') + mkdir -p logs + echo "Executing \$total tests on remote device" + inform \$total + for x in \$testlist; do + timeout -t 30 ./\${x} > logs/\${x}.log 2>&1 + countx=\$(expr \$countx + 1) + if [ \$countx -eq 25 ]; then + total=\$(expr \$total - 25) + countx=0 + disinform + inform \$total + fi + done + disinform + tar -czf remote.logs.tar.gz logs +} +testlist=" \\ +EOF + +display "All tests are being cross-compiled without execution first." + +for chapter in $chapters; do + if [ ! -d $dir/tests/$chapter ]; then + continue + fi + + countn=`wc -l < $dir/tests/$chapter/${chapter}.lst` + glob_countn=`expr $glob_countn + $countn` + counti=0 + for i in `cat $dir/tests/$chapter/${chapter}.lst`; do + counti=`expr $counti + 1` + extraflags="-gnat95" + grep $i $testdir/overflow.lst > /dev/null 2>&1 + if [ $? -eq 0 ]; then + extraflags="$extraflags -gnato" + fi + grep $i $testdir/elabd.lst > /dev/null 2>&1 + if [ $? -eq 0 ]; then + extraflags="$extraflags -gnatE" + fi + grep $i $testdir/floatstore.lst > /dev/null 2>&1 + if [ $? -eq 0 ]; then + extraflags="$extraflags -ffloat-store" + fi + grep $i $testdir/stackcheck.lst > /dev/null 2>&1 + if [ $? -eq 0 ]; then + extraflags="$extraflags -fstack-check" + fi + inform $countdown $i + countdown=`expr $countdown - 1` + test=$dir/tests/$chapter/$i + mkdir $test && cd $test >> $dir/acats.log 2>&1 + + if [ $? -ne 0 ]; then + disinform + display "FAIL: $i" + failed="${failed}${i} " + clean_dir + continue + fi + + host_gnatchop -c -w `ls ${test}*.a ${test}*.ada ${test}*.adt ${test}*.am ${test}*.dep 2> /dev/null` >> $dir/acats.log 2>&1 + find_main + if [ -z "$main" ]; then + sync + find_main + fi + binmain=`echo $main | sed -e 's/\(.*\)\..*/\1/g'` + echo "BUILD $main" >> $dir/acats.log + EXTERNAL_OBJECTS="" + case $i in + cxb30*) EXTERNAL_OBJECTS="$dir/support/cxb30040.o $dir/support/cxb30060.o $dir/support/cxb30130.o $dir/support/cxb30131.o";; + ca1020e) rm -f ca1020e_func1.adb ca1020e_func2.adb ca1020e_proc1.adb ca1020e_proc2.adb > /dev/null 2>&1;; + ca14028) rm -f ca14028_func2.ads ca14028_func3.ads ca14028_proc1.ads ca14028_proc3.ads > /dev/null 2>&1;; + cxh1001) extraflags="-a -f"; echo "pragma Normalize_Scalars;" > gnat.adc + esac + if [ "$main" = "" ]; then + disinform + display "FAIL: $i" + failed="${failed}${i} " + clean_dir + continue + fi + + target_gnatmake $extraflags -I$dir/support $main >> $dir/acats.log 2>&1 + if [ $? -ne 0 ]; then + disinform + display "FAIL: $i" + failed="${failed}${i} " + clean_dir + continue + fi + echo $chapter/$i/$binmain >> $dir/transfer.lst + echo "$binmain \\" >> $dir/execute.sh + $STRIP $binmain + disinform + done +done +echo '"' >> $dir/execute.sh +echo "cycle" >> $dir/execute.sh + +sync +display "Transfer files to remote device: root@tablet:$tabtarget/" +cd $dir/tests +cat $dir/transfer.lst | xargs tar --strip-components=2 -czf - | \ + target_cmd "tar -C $tabtarget -xzf -" +cd $dir +tar -czf - execute.sh | target_cmd "tar -C $tabtarget -xzf -" +target_cmd "cd $tabtarget; sh execute.sh" +rm -rf $dir/logs $dir/remote.logs.tar.gz +/usr/bin/scp -q root@tablet:$tabtarget/remote.logs.tar.gz $dir/ +tar -xzf $dir/remote.logs.tar.gz + +countdown=`wc -l < $dir/transfer.lst` +glob_countn=${countdown} +for i in `cat $dir/transfer.lst`; do + split_testid $i + if [ "$section" != "$savedsect" ]; then + display Running chapter $section ... + fi + savedsect=$section + + #inform $countdown $TN + countdown=`expr $countdown - 1` + proglog="$dir/logs/${prog}.log" + echo "RUN $prog" >> $dir/acats.log + if [ ! -f $proglog ]; then + echo "LOG NOT FOUND!" >> $proglog + fi + + cat $proglog >> $dir/acats.log + + egrep -e '(==== |\+\+\+\+ |\!\!\!\! )' $proglog > /dev/null 2>&1 + if [ $? -ne 0 ]; then + grep 'tasking not implemented' $proglog > /dev/null 2>&1 + + if [ $? -ne 0 ]; then + display "FAIL: ${TN}" + failed="${failed}${TN} " + else + log "UNSUPPORTED: ${TN}" + glob_countn=`expr $glob_countn - 1` + glob_countu=`expr $glob_countu + 1` + fi + else + log "PASS: ${TN}" + glob_countok=`expr $glob_countok + 1` + fi + cd $dir/tests/$section/$TN + clean_dir + #disinform +done + +display " === acats Summary ===" +display "# of expected passes $glob_countok" +display "# of unexpected failures `expr $glob_countn - $glob_countok`" + +if [ $glob_countu -ne 0 ]; then + display "# of unsupported tests $glob_countu" +fi + +if [ $glob_countok -ne $glob_countn ]; then + display "*** FAILURES: $failed" +fi + +display "$0 completed at `date`" + +exit 0 --- gcc/testsuite/gnat.dg/test_raise_from_pure.adb.orig +++ gcc/testsuite/gnat.dg/test_raise_from_pure.adb @@ -1,4 +1,4 @@ --- { dg-do run } +-- { dg-do run { xfail *-*-openbsd* } } -- { dg-options "-O2" } -- This is an optimization test and its failure is only a missed optimization. --- gcc/testsuite/gnat.dg/unchecked_convert5.adb.orig +++ gcc/testsuite/gnat.dg/unchecked_convert5.adb @@ -1,22 +0,0 @@ --- { dg-do run { target hppa*-*-* sparc*-*-* powerpc*-*-* } } - -with Unchecked_Conversion; - -procedure Unchecked_Convert5 is - - subtype c_1 is string(1..1); - - function int2c1 is -- { dg-warning "different sizes" } - new unchecked_conversion (source => integer, target => c_1); - - c1 : c_1; - -begin - - c1 := int2c1(16#12#); - - if c1 (1) /= ASCII.Nul then - raise Program_Error; - end if; - -end; --- gcc/testsuite/gnat.dg/unchecked_convert6.adb.orig +++ gcc/testsuite/gnat.dg/unchecked_convert6.adb @@ -1,22 +0,0 @@ --- { dg-do run { target hppa*-*-* sparc*-*-* powerpc*-*-* } } - -with Unchecked_Conversion; - -procedure Unchecked_Convert6 is - - subtype c_5 is string(1..5); - - function int2c5 is -- { dg-warning "different sizes" } - new unchecked_conversion (source => integer, target => c_5); - - c5 : c_5; - -begin - - c5 := int2c5(16#12#); - - if c5 (4) /= ASCII.DC2 then - raise Program_Error; - end if; - -end; Index: head/lang/gcc-aux/files/diff-cxx =================================================================== --- head/lang/gcc-aux/files/diff-cxx (revision 402634) +++ head/lang/gcc-aux/files/diff-cxx (revision 402635) @@ -1,978 +1,999 @@ --- /dev/null +++ libstdc++-v3/config/locale/dragonfly/c_locale.cc @@ -0,0 +1,300 @@ +// Wrapper for underlying C-language localization -*- C++ -*- + +// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 +// Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +// +// ISO C++ 14882: 22.8 Standard locale categories. +// + +// Written by Benjamin Kosnik + +#include // For errno +#include // For isinf, finite, finitef, fabs +#include // For strof, strtold +#include +#include +#include +#include + +#ifdef _GLIBCXX_HAVE_IEEEFP_H +#include +#endif + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + template<> + void + __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err, + const __c_locale&) throw() + { + // Assumes __s formatted for "C" locale. + char* __old = setlocale(LC_ALL, 0); + const size_t __len = strlen(__old) + 1; + char* __sav = new char[__len]; + memcpy(__sav, __old, __len); + setlocale(LC_ALL, "C"); + char* __sanity; + bool __overflow = false; + +#if !__FLT_HAS_INFINITY__ + errno = 0; +#endif + +#ifdef _GLIBCXX_HAVE_STRTOF + __v = strtof(__s, &__sanity); +#else + double __d = strtod(__s, &__sanity); + __v = static_cast(__d); +#ifdef _GLIBCXX_HAVE_FINITEF + if (!finitef (__v)) + __overflow = true; +#elif defined (_GLIBCXX_HAVE_FINITE) + if (!finite (static_cast (__v))) + __overflow = true; +#elif defined (_GLIBCXX_HAVE_ISINF) + if (isinf (static_cast (__v))) + __overflow = true; +#else + if (fabs(__d) > numeric_limits::max()) + __overflow = true; +#endif +#endif // _GLIBCXX_HAVE_STRTOF + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 23. Num_get overflow result. + if (__sanity == __s || *__sanity != '\0') + { + __v = 0.0f; + __err = ios_base::failbit; + } + else if (__overflow +#if __FLT_HAS_INFINITY__ + || __v == numeric_limits::infinity() + || __v == -numeric_limits::infinity() +#else + || ((__v > 1.0f || __v < -1.0f) && errno == ERANGE) +#endif + ) + { + if (__v > 0.0f) + __v = numeric_limits::max(); + else + __v = -numeric_limits::max(); + __err = ios_base::failbit; + } + + setlocale(LC_ALL, __sav); + delete [] __sav; + } + + template<> + void + __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err, + const __c_locale&) throw() + { + // Assumes __s formatted for "C" locale. + char* __old = setlocale(LC_ALL, 0); + const size_t __len = strlen(__old) + 1; + char* __sav = new char[__len]; + memcpy(__sav, __old, __len); + setlocale(LC_ALL, "C"); + char* __sanity; + +#if !__DBL_HAS_INFINITY__ + errno = 0; +#endif + + __v = strtod(__s, &__sanity); + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 23. Num_get overflow result. + if (__sanity == __s || *__sanity != '\0') + { + __v = 0.0; + __err = ios_base::failbit; + } + else if ( +#if __DBL_HAS_INFINITY__ + __v == numeric_limits::infinity() + || __v == -numeric_limits::infinity()) +#else + (__v > 1.0 || __v < -1.0) && errno == ERANGE) +#endif + { + if (__v > 0.0) + __v = numeric_limits::max(); + else + __v = -numeric_limits::max(); + __err = ios_base::failbit; + } + + setlocale(LC_ALL, __sav); + delete [] __sav; + } + + template<> + void + __convert_to_v(const char* __s, long double& __v, + ios_base::iostate& __err, const __c_locale&) throw() + { + // Assumes __s formatted for "C" locale. + char* __old = setlocale(LC_ALL, 0); + const size_t __len = strlen(__old) + 1; + char* __sav = new char[__len]; + memcpy(__sav, __old, __len); + setlocale(LC_ALL, "C"); + +#if !__LDBL_HAS_INFINITY__ + errno = 0; +#endif + +#if defined(_GLIBCXX_HAVE_STRTOLD) && !defined(_GLIBCXX_HAVE_BROKEN_STRTOLD) + char* __sanity; + __v = strtold(__s, &__sanity); + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 23. Num_get overflow result. + if (__sanity == __s || *__sanity != '\0') +#else + typedef char_traits::int_type int_type; + int __p = sscanf(__s, "%Lf", &__v); + + if (!__p || static_cast(__p) == char_traits::eof()) +#endif + { + __v = 0.0l; + __err = ios_base::failbit; + } + else if ( +#if __LDBL_HAS_INFINITY__ + __v == numeric_limits::infinity() + || __v == -numeric_limits::infinity()) +#else + (__v > 1.0l || __v < -1.0l) && errno == ERANGE) +#endif + { + if (__v > 0.0l) + __v = numeric_limits::max(); + else + __v = -numeric_limits::max(); + __err = ios_base::failbit; + } + + setlocale(LC_ALL, __sav); + delete [] __sav; + } + + + /* DragonFly's implementation of setlocale won't accept something like + "de_DE". According to nls manpage, the expected format is: + language[_territory][.codeset][@modifier], but it seems that both + the _territory and .codeset components are required. + + As an attempt to correct for this, we'll tack on ".UTF-8" if + a period is not detected in the locale string. + + There are no locales with modifiers on DragonFly so if found, they + will just be stripped off silently. e.g "de_DE@euro" will be reduced + to "de_DE". The UTF-8 default would be added after that. + */ + + void + locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s, + __c_locale) + { + const size_t size__s = (__s == NULL) ? 1 : strlen (__s); + const char UTF8[] = ".UTF-8"; + char localspec[size__s + 6 + 1]; + + if (__s == NULL) { + localspec[0] = NULL; + } else { + strcpy (localspec, __s); + char * pch = strchr (localspec, '@'); + if (pch != NULL) + *pch = 0; + + if ( (strchr (__s, '.') == NULL) + && (strcmp (__s, "C") != 0) + && (strcmp (__s, "POSIX") != 0)) + strncat (localspec, UTF8, 6); + } + + const char * result = std::setlocale(LC_ALL, localspec); + + if ((strcmp(result, "C") != 0) && (strcmp (result, localspec) != 0)) + __throw_runtime_error(__N("locale::facet::_S_create_c_locale " + "name not valid")); + __cloc = 0; + } + + void + locale::facet::_S_destroy_c_locale(__c_locale& __cloc) + { __cloc = 0; } + + __c_locale + locale::facet::_S_clone_c_locale(__c_locale&) throw() + { return __c_locale(); } + + __c_locale + locale::facet::_S_lc_ctype_c_locale(__c_locale, const char*) + { return __c_locale(); } + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + const char* const category_names[6 + _GLIBCXX_NUM_CATEGORIES] = + { + "LC_CTYPE", + "LC_NUMERIC", + "LC_TIME", + "LC_COLLATE", + "LC_MONETARY", + "LC_MESSAGES" + }; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + const char* const* const locale::_S_categories = __gnu_cxx::category_names; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +// XXX GLIBCXX_ABI Deprecated +#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT +#define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \ + extern "C" void ldbl (void) __attribute__ ((alias (#dbl))) +_GLIBCXX_LDBL_COMPAT(_ZSt14__convert_to_vIdEvPKcRT_RSt12_Ios_IostateRKPi, _ZSt14__convert_to_vIeEvPKcRT_RSt12_Ios_IostateRKPi); +#endif // _GLIBCXX_LONG_DOUBLE_COMPAT --- /dev/null +++ libstdc++-v3/config/locale/dragonfly/ctype_members.cc @@ -0,0 +1,174 @@ +// std::ctype implementation details, GNU version -*- C++ -*- + +// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 +// Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +// +// ISO C++ 14882: 22.2.1.1.2 ctype virtual functions. +// + +// Written by Benjamin Kosnik + +#include +#include +#include +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ + // NB: The other ctype specializations are in src/locale.cc and + // various /config/os/* files. + + ctype_byname::ctype_byname(const char* __s, size_t __refs) + : ctype(0, false, __refs) + { + if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0) + { + this->_S_destroy_c_locale(this->_M_c_locale_ctype); + this->_S_create_c_locale(this->_M_c_locale_ctype, __s); + } + } + + ctype_byname::~ctype_byname() + { } + +#ifdef _GLIBCXX_USE_WCHAR_T + ctype::__wmask_type + ctype::_M_convert_to_wmask( + const mask __attribute__((__unused__)) __m) const throw() + { + // DragonFly uses the same codes for 'char' as 'wchar_t', so this routine + // never gets called. + return __wmask_type(); + }; + + wchar_t + ctype::do_toupper(wchar_t __c) const + { return towupper(__c); } + + const wchar_t* + ctype::do_toupper(wchar_t* __lo, const wchar_t* __hi) const + { + while (__lo < __hi) + { + *__lo = towupper(*__lo); + ++__lo; + } + return __hi; + } + + wchar_t + ctype::do_tolower(wchar_t __c) const + { return towlower(__c); } + + const wchar_t* + ctype::do_tolower(wchar_t* __lo, const wchar_t* __hi) const + { + while (__lo < __hi) + { + *__lo = towlower(*__lo); + ++__lo; + } + return __hi; + } + + wchar_t + ctype:: + do_widen(char __c) const + { return _M_widen[static_cast(__c)]; } + + const char* + ctype:: + do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const + { + while (__lo < __hi) + { + *__dest = _M_widen[static_cast(*__lo)]; + ++__lo; + ++__dest; + } + return __hi; + } + + char + ctype:: + do_narrow(wchar_t __wc, char __dfault) const + { + if (__wc >= 0 && __wc < 128 && _M_narrow_ok) + return _M_narrow[__wc]; + const int __c = wctob(__wc); + return (__c == EOF ? __dfault : static_cast(__c)); + } + + const wchar_t* + ctype:: + do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault, + char* __dest) const + { + if (_M_narrow_ok) + while (__lo < __hi) + { + if (*__lo >= 0 && *__lo < 128) + *__dest = _M_narrow[*__lo]; + else + { + const int __c = wctob(*__lo); + *__dest = (__c == EOF ? __dfault : static_cast(__c)); + } + ++__lo; + ++__dest; + } + else + while (__lo < __hi) + { + const int __c = wctob(*__lo); + *__dest = (__c == EOF ? __dfault : static_cast(__c)); + ++__lo; + ++__dest; + } + return __hi; + } + + void + ctype::_M_initialize_ctype() throw() + { + wint_t __i; + for (__i = 0; __i < 128; ++__i) + { + const int __c = wctob(__i); + if (__c == EOF) + break; + else + _M_narrow[__i] = static_cast(__c); + } + if (__i == 128) + _M_narrow_ok = true; + else + _M_narrow_ok = false; + for (size_t __i = 0; + __i < sizeof(_M_widen) / sizeof(wint_t); ++__i) + _M_widen[__i] = btowc(__i); + } +#endif // _GLIBCXX_USE_WCHAR_T +} --- /dev/null +++ libstdc++-v3/config/os/bsd/dragonfly/ctype_base.h @@ -0,0 +1,75 @@ +// Locale support -*- C++ -*- + +// Copyright (C) 2000, 2003, 2009, 2010 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +// +// ISO C++ 14882: 22.1 Locales +// + +// Information as gleaned from /usr/include/ctype.h on DragonFly. + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /// @brief Base class for ctype. + struct ctype_base + { + // Non-standard typedefs. + typedef const int* __to_type; + + // NB: Offsets into ctype::_M_table force a particular size + // on the mask type. Because of this, we don't use an enum. +#ifdef _CTYPE_S + // DragonFly 3.6 and later + typedef unsigned long 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_A | _CTYPE_D | _CTYPE_P; + static const mask cntrl = _CTYPE_C; + static const mask punct = _CTYPE_P; + static const mask alnum = _CTYPE_A | _CTYPE_D; +#else + // DragonFly 3.4 and older + typedef unsigned short mask; + static const mask upper = _CTYPEMASK_U; + static const mask lower = _CTYPEMASK_L; + static const mask alpha = _CTYPEMASK_A; + static const mask digit = _CTYPEMASK_D; + static const mask xdigit = _CTYPEMASK_X; + static const mask space = _CTYPEMASK_S; + static const mask print = _CTYPEMASK_R; + static const mask graph = _CTYPEMASK_G; + static const mask cntrl = _CTYPEMASK_C; + static const mask punct = _CTYPEMASK_P; + static const mask alnum = _CTYPEMASK_A | _CTYPEMASK_D; +#endif + }; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace --- /dev/null +++ libstdc++-v3/config/os/bsd/dragonfly/ctype_configure_char.cc @@ -0,0 +1,99 @@ +// Locale support -*- C++ -*- + +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file ctype_configure_char.cc */ + +// +// ISO C++ 14882: 22.1 Locales +// + +#include +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +// Information as gleaned from /usr/include/ctype.h + + const ctype_base::mask* + ctype::classic_table() throw() + { return 0; } + + ctype::ctype(__c_locale, const mask* __table, bool __del, + size_t __refs) + : facet(__refs), _M_del(__table != 0 && __del), + _M_toupper(NULL), _M_tolower(NULL), + _M_table(__table ? __table : classic_table()) + { + memset(_M_widen, 0, sizeof(_M_widen)); + _M_widen_ok = 0; + memset(_M_narrow, 0, sizeof(_M_narrow)); + _M_narrow_ok = 0; + } + + ctype::ctype(const mask* __table, bool __del, size_t __refs) + : facet(__refs), _M_del(__table != 0 && __del), + _M_toupper(NULL), _M_tolower(NULL), + _M_table(__table ? __table : classic_table()) + { + memset(_M_widen, 0, sizeof(_M_widen)); + _M_widen_ok = 0; + memset(_M_narrow, 0, sizeof(_M_narrow)); + _M_narrow_ok = 0; + } + + char + ctype::do_toupper(char __c) const + { return ::toupper((int) __c); } + + const char* + ctype::do_toupper(char* __low, const char* __high) const + { + while (__low < __high) + { + *__low = ::toupper((int) *__low); + ++__low; + } + return __high; + } + + char + ctype::do_tolower(char __c) const + { return ::tolower((int) __c); } + + const char* + ctype::do_tolower(char* __low, const char* __high) const + { + while (__low < __high) + { + *__low = ::tolower((int) *__low); + ++__low; + } + return __high; + } + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace --- /dev/null +++ libstdc++-v3/config/os/bsd/dragonfly/ctype_inline.h @@ -0,0 +1,187 @@ +// Locale support -*- C++ -*- + +// Copyright (C) 2000, 2003, 2004, 2005, 2009, 2010 +// Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/ctype_inline.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{locale} + */ + +// +// ISO C++ 14882: 22.1 Locales +// + +// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*) +// functions go in ctype.cc + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + bool + ctype:: + is(mask __m, char __c) const + { + if (_M_table) + return _M_table[static_cast(__c)] & __m; + else +#ifdef _CTYPE_S + return __istype(__c, __m); +#else + return __libc_ctype_ [__c + 1] & __m; +#endif + } + + const char* + ctype:: + is(const char* __low, const char* __high, mask* __vec) const + { + if (_M_table) + while (__low < __high) + *__vec++ = _M_table[static_cast(*__low++)]; + else + for (;__low < __high; ++__vec, ++__low) + { +#ifdef _CTYPE_S + *__vec = __maskrune (*__low, upper | lower | alpha | digit | xdigit + | space | print | graph | cntrl | punct | alnum); +#else + mask __m = 0; + if (this->is(upper, *__low)) __m |= upper; + if (this->is(lower, *__low)) __m |= lower; + if (this->is(alpha, *__low)) __m |= alpha; + if (this->is(digit, *__low)) __m |= digit; + if (this->is(xdigit, *__low)) __m |= xdigit; + if (this->is(space, *__low)) __m |= space; + if (this->is(print, *__low)) __m |= print; + if (this->is(graph, *__low)) __m |= graph; + if (this->is(cntrl, *__low)) __m |= cntrl; + if (this->is(punct, *__low)) __m |= punct; + // Do not include explicit line for alnum mask since it is a + // pure composite of masks on DragonFly. + *__vec = __m; +#endif + } + return __high; + } + + const char* + ctype:: + scan_is(mask __m, const char* __low, const char* __high) const + { + if (_M_table) + while (__low < __high + && !(_M_table[static_cast(*__low)] & __m)) + ++__low; + else + while (__low < __high && !this->is(__m, *__low)) + ++__low; + return __low; + } + + const char* + ctype:: + scan_not(mask __m, const char* __low, const char* __high) const + { + if (_M_table) + while (__low < __high + && (_M_table[static_cast(*__low)] & __m) != 0) + ++__low; + else + while (__low < __high && this->is(__m, *__low) != 0) + ++__low; + return __low; + } + +#ifdef _GLIBCXX_USE_WCHAR_T + inline bool + ctype:: + do_is(mask __m, wchar_t __c) const + { +#ifdef _CTYPE_S + return __istype (__c, __m); +#else + return __libc_ctype_ [__c + 1] & __m; +#endif + } + + inline const wchar_t* + ctype:: + do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const + { + for (; __lo < __hi; ++__vec, ++__lo) +#ifdef _CTYPE_S + *__vec = __maskrune (*__lo, upper | lower | alpha | digit | xdigit + | space | print | graph | cntrl | punct | alnum); +#else + { + mask __m = 0; + if (isupper (*__lo)) __m |= _CTYPEMASK_U; + if (islower (*__lo)) __m |= _CTYPEMASK_L; + if (isdigit (*__lo)) __m |= _CTYPEMASK_D; + if (isspace (*__lo)) __m |= _CTYPEMASK_S; + if (ispunct (*__lo)) __m |= _CTYPEMASK_P; + if (isblank (*__lo)) __m |= _CTYPEMASK_B; + if (iscntrl (*__lo)) __m |= _CTYPEMASK_C; + if (isalpha (*__lo)) __m |= _CTYPEMASK_A; + if (isgraph (*__lo)) __m |= _CTYPEMASK_G; + if (isprint (*__lo)) __m |= _CTYPEMASK_R; + if (isxdigit(*__lo)) __m |= _CTYPEMASK_X; + /* alnum already covered = alpha | digit */ + + *__vec = __m; + } +#endif + return __hi; + } + + inline const wchar_t* + ctype:: + do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const + { +#ifdef _CTYPE_S + while (__lo < __hi && ! __istype (*__lo, __m)) +#else + while (__lo < __hi && !(__libc_ctype_ [*__lo + 1] & __m)) +#endif + ++__lo; + return __lo; + } + + inline const wchar_t* + ctype:: + do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const + { +#ifdef _CTYPE_S + while (__lo < __hi && __istype (*__lo, __m)) +#else + while (__lo < __hi && (__libc_ctype_ [*__lo + 1] & __m)) +#endif + ++__lo; + return __lo; + } +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace --- /dev/null +++ libstdc++-v3/config/os/bsd/dragonfly/os_defines.h @@ -0,0 +1,37 @@ +// Specific definitions for BSD -*- C++ -*- + +// Copyright (C) 2014-2015 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + + +#ifndef _GLIBCXX_OS_DEFINES +#define _GLIBCXX_OS_DEFINES 1 + +// System-specific #define, typedefs, corrections, etc, go here. This +// file will come before all others. + +#define _GLIBCXX_USE_C99_CHECK 1 +#define _GLIBCXX_USE_C99_DYNAMIC (!(__ISO_C_VISIBLE >= 1999)) +#define _GLIBCXX_USE_C99_LONG_LONG_CHECK 1 +#define _GLIBCXX_USE_C99_LONG_LONG_DYNAMIC (_GLIBCXX_USE_C99_DYNAMIC || !defined __LONG_LONG_SUPPORTED) + +#endif --- libstdc++-v3/acinclude.m4.orig +++ libstdc++-v3/acinclude.m4 @@ -1989,6 +1989,9 @@ darwin* | freebsd*) enable_clocale_flag=darwin ;; + dragonfly*) + enable_clocale_flag=dragonfly + ;; openbsd*) enable_clocale_flag=newlib ;; @@ -2075,6 +2078,23 @@ CMESSAGES_H=config/locale/generic/messages_members.h CMESSAGES_CC=config/locale/generic/messages_members.cc CMONEY_CC=config/locale/generic/monetary_members.cc + CNUMERIC_CC=config/locale/generic/numeric_members.cc + CTIME_H=config/locale/generic/time_members.h + CTIME_CC=config/locale/generic/time_members.cc + CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h + ;; + + dragonfly) + AC_MSG_RESULT(dragonfly) + + CLOCALE_H=config/locale/generic/c_locale.h + CLOCALE_CC=config/locale/dragonfly/c_locale.cc + CCODECVT_CC=config/locale/generic/codecvt_members.cc + CCOLLATE_CC=config/locale/generic/collate_members.cc + CCTYPE_CC=config/locale/dragonfly/ctype_members.cc + CMESSAGES_H=config/locale/generic/messages_members.h + CMESSAGES_CC=config/locale/generic/messages_members.cc + CMONEY_CC=config/locale/generic/monetary_members.cc CNUMERIC_CC=config/locale/generic/numeric_members.cc CTIME_H=config/locale/generic/time_members.h CTIME_CC=config/locale/generic/time_members.cc --- libstdc++-v3/configure.orig +++ libstdc++-v3/configure @@ -15849,6 +15849,9 @@ darwin* | freebsd*) enable_clocale_flag=darwin ;; + dragonfly*) + enable_clocale_flag=dragonfly + ;; openbsd*) enable_clocale_flag=newlib ;; @@ -15988,6 +15991,24 @@ CMESSAGES_H=config/locale/generic/messages_members.h CMESSAGES_CC=config/locale/generic/messages_members.cc CMONEY_CC=config/locale/generic/monetary_members.cc + CNUMERIC_CC=config/locale/generic/numeric_members.cc + CTIME_H=config/locale/generic/time_members.h + CTIME_CC=config/locale/generic/time_members.cc + CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h + ;; + + dragonfly) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: dragonfly" >&5 +$as_echo "dragonfly" >&6; } + + CLOCALE_H=config/locale/generic/c_locale.h + CLOCALE_CC=config/locale/dragonfly/c_locale.cc + CCODECVT_CC=config/locale/generic/codecvt_members.cc + CCOLLATE_CC=config/locale/generic/collate_members.cc + CCTYPE_CC=config/locale/dragonfly/ctype_members.cc + CMESSAGES_H=config/locale/generic/messages_members.h + CMESSAGES_CC=config/locale/generic/messages_members.cc + CMONEY_CC=config/locale/generic/monetary_members.cc CNUMERIC_CC=config/locale/generic/numeric_members.cc CTIME_H=config/locale/generic/time_members.h CTIME_CC=config/locale/generic/time_members.cc --- libstdc++-v3/configure.host.orig +++ libstdc++-v3/configure.host @@ -232,6 +232,12 @@ os_include_dir="os/generic" atomicity_dir="cpu/generic" ;; + dragonfly*) + os_include_dir="os/bsd/dragonfly" + ;; -+ linux-androideabi) ++ linux-android*) + os_include_dir="os/bionic" + ;; bsd*) # Plain BSD attempts to share FreeBSD files. os_include_dir="os/bsd/freebsd" +--- libstdc++-v3/config/os/bionic/ctype_base.h.orig ++++ libstdc++-v3/config/os/bionic/ctype_base.h +@@ -40,6 +40,18 @@ + // Non-standard typedefs. + typedef const int* __to_type; + ++#ifdef _CTYPE_U ++#define _U _CTYPE_U ++#define _L _CTYPE_L ++#define _D _CTYPE_D ++#define _S _CTYPE_S ++#define _P _CTYPE_P ++#define _C _CTYPE_C ++#define _X _CTYPE_X ++#define _B _CTYPE_B ++#define _N _CTYPE_D ++#endif ++ + // NB: Offsets into ctype::_M_table force a particular size + // on the mask type. Because of this, we don't use an enum. + typedef char mask; Index: head/lang/gnatdroid-armv7/Makefile =================================================================== --- head/lang/gnatdroid-armv7/Makefile (revision 402634) +++ head/lang/gnatdroid-armv7/Makefile (revision 402635) @@ -1,158 +1,159 @@ # Created by: John Marino # $FreeBSD$ -PORTNAME= armv7 +PORTNAME?= armv7 PORTVERSION= ${SNAPSHOT} -PORTREVISION= ${ARMV7_PR} +PORTREVISION?= ${ARMV7_PR} CATEGORIES= lang MASTER_SITES= GCC/releases/gcc-${GCC_VERSION} PKGNAMEPREFIX= gnatdroid- DISTFILES= ${IDENTIFICATION}.tar.bz2 -MAINTAINER= marino@FreeBSD.org -COMMENT= C/Ada cross-compiler, target: Android ARMv7 +MAINTAINER?= marino@FreeBSD.org +COMMENT?= C/Ada cross-compiler, target: Android ARMv7 LICENSE= GPLv3 GPLv3RLE LICENSE_COMB= multi -BUILD_DEPENDS= gnatdroid-sysroot>=19:${PORTSDIR}/lang/gnatdroid-sysroot \ - gnatdroid-binutils>=2.21:${PORTSDIR}/lang/gnatdroid-binutils +BUILD_DEPENDS= ${SYSROOT}>=19:${PORTSDIR}/lang/${SYSROOT} \ + ${GDBINUTILS}>=2.21:${PORTSDIR}/lang/${GDBINUTILS} RUN_DEPENDS:= ${BUILD_DEPENDS} NO_LICENSES_INSTALL= yes .include "${.CURDIR}/../gcc-aux/Makefile.common" USES+= ada:49 gmake LANGS= c c++ ada APPLY_DIFFS= core ada cxx ada-testsuite NO_MTREE= YES DISTINFO_FILE= ${.CURDIR}/../gcc-aux/distinfo OPTIONS_DEFINE= FORT OBJC OPTIONS_SUB= yes FORT_DESC= Also build Fortran language OBJC_DESC= Also build Objective-C language -DROID_TARGET= arm-aux-linux-androideabi -DROID_ARCH= armv7-a -ARMVERSION= ARMv7 -FPU= neon +DROID_TARGET?= arm-aux-linux-androideabi +CPUVERSION?= ARMv7 +ARG_ARCH?= --with-arch=armv7-a +ARG_FPU?= --with-fpu=neon +ARG_FLOATSOFT?= --with-float=soft ALL_TARGET= all GARCH= ${ARCH:S/amd64/x86_64/} BITS= ${GARCH:S/x86_64/64/:S/i386/32/} -OS_LABEL4VERS= [${OPSYS}${BITS} x Android ${ARMVERSION}] +OS_LABEL4VERS= [${OPSYS}${BITS} x Android ${CPUVERSION}] WRKSRC= ${WRKDIR}/${IDENTIFICATION} BUILD_WRKSRC= ${WRKDIR}/build PATCHDIR= ${.CURDIR}/../gcc-aux/files CFG_SCRIPT= ${WRKSRC}/configure REVFILE= ${WRKSRC}/gcc/REVISION -SRPREFIX= ${LOCALBASE}/android -PREFIX= ${SRPREFIX}/${ARMVERSION} +SRPREFIX?= ${LOCALBASE}/android +PREFIX= ${SRPREFIX}/${CPUVERSION} +SYSROOT?= gnatdroid-sysroot +GDBINUTILS?= gnatdroid-binutils PLIST_SUB+= TARGET="${DROID_TARGET}" PLIST_SUB+= GCCVERS="${GCC_VERSION}" SUB_FILES= pkg-message SUB_LIST= TARGET="${DROID_TARGET}" EXTRA_PATCHES= ${FILESDIR}/acats.diff CROSS= gnat gnatbind gnatchop gnatclean gnatfind gnatkr \ gnatlink gnatls gnatmake gnatprep gnatxref .include -.if ${OPSYS} == FreeBSD && ${OSREL:R:M8} -BROKEN= multiple definition of __x86.get_pc_thunk.cx on FreeBSD 8 -.endif - .if ${PORT_OPTIONS:MFORT} LANGS+= fortran APPLY_DIFFS+= fortran .endif .if ${PORT_OPTIONS:MOBJC} LANGS+= objc .endif -INSTALL_ENV= ${MAKE_ENV:C/^PATH=/&${SRPREFIX}\/${ARMVERSION}\/bin:/} +INSTALL_ENV= ${MAKE_ENV:C/^PATH=/&${SRPREFIX}\/${CPUVERSION}\/bin:/} ADA_CONFIG_ARGS= --enable-languages=${LANGS:Q} ADA_CONFIG_ARGS+= --target=${DROID_TARGET} ADA_CONFIG_ARGS+= --program-prefix=${DROID_TARGET}- ADA_CONFIG_ARGS+= --prefix=${PREFIX} -ADA_CONFIG_ARGS+= --with-arch=${DROID_ARCH} +ADA_CONFIG_ARGS+= ${ARG_ARCH} ADA_CONFIG_ARGS+= --with-system-zlib ADA_CONFIG_ARGS+= --with-gmp=${LOCALBASE} ADA_CONFIG_ARGS+= --with-mpfr=${LOCALBASE} ADA_CONFIG_ARGS+= --with-mpc=${LOCALBASE} ADA_CONFIG_ARGS+= ${ICONV_CONFIGURE_ARG} ADA_CONFIG_ARGS+= --with-sysroot=${SRPREFIX} -ADA_CONFIG_ARGS+= --with-float=soft -ADA_CONFIG_ARGS+= --with-fpu=${FPU} +ADA_CONFIG_ARGS+= ${ARG_FLOATSOFT} +ADA_CONFIG_ARGS+= ${ARG_FPU} ADA_CONFIG_ARGS+= --enable-target-optspace ADA_CONFIG_ARGS+= --enable-threads=posix ADA_CONFIG_ARGS+= --enable-cxx-flags=-frtti ADA_CONFIG_ARGS+= --disable-bootstrap ADA_CONFIG_ARGS+= --disable-shared ADA_CONFIG_ARGS+= --disable-libssp ADA_CONFIG_ARGS+= --disable-libgomp ADA_CONFIG_ARGS+= --disable-libmudflap ADA_CONFIG_ARGS+= --disable-libquadmath ADA_CONFIG_ARGS+= --disable-libsanitizer ADA_CONFIG_ARGS+= --disable-libitm ADA_CONFIG_ARGS+= --disable-sjlj-exceptions ADA_CONFIG_ARGS+= --disable-tls ADA_CONFIG_ARGS+= --disable-nls post-extract: # Personalize GNAT for each different machine @${ECHO} "-=> GNAT AUX ${OS_LABEL4VERS}" > ${REVFILE} ${MKDIR} ${WRKSRC}/libstdc++-v3/config/locale/dragonfly ${MKDIR} ${WRKSRC}/libstdc++-v3/config/os/bsd/dragonfly # Apply required composite diff files .for suffix in ${APPLY_DIFFS} @${ECHO} "Applying composite patch diff-${suffix}" @${PATCH} -d ${WRKSRC} -s -E < ${PATCHDIR}/diff-${suffix} .endfor @(cd ${WRKSRC}/gcc/testsuite/ada/acats && \ ${CP} run_remote.sh run_all.sh) + ${REINPLACE_CMD} -e 's|@REMOTE_TARGET@|${DROID_TARGET}|' \ + ${WRKSRC}/gcc/testsuite/ada/acats/run_all.sh ${REINPLACE_CMD} -e 's|||' \ ${WRKSRC}/libstdc++-v3/libsupc++/guard.cc do-configure: ${MKDIR} ${BUILD_WRKSRC} (cd ${BUILD_WRKSRC} && ${SETENV} ${CONFIGURE_ENV} \ ${CFG_SCRIPT} ${ADA_CONFIG_ARGS}) do-install: # Buggy makefile; seems to have forgotten this is a cross compiler # Manually rename products so it doesn't rebuild them with new name .for X in ${CROSS} . if !exists(${BUILD_WRKSRC}/gcc/${X}) ${CP} -a ${BUILD_WRKSRC}/gcc/${X}-cross ${BUILD_WRKSRC}/gcc/${X} . endif .endfor (cd ${BUILD_WRKSRC} && ${SETENV} ${INSTALL_ENV} \ ${MAKE_CMD} install-strip DESTDIR=${STAGEDIR}) ${MV} ${STAGEDIR}${PREFIX}/bin/ada \ ${STAGEDIR}${PREFIX}/bin/${DROID_TARGET}-ada post-stage: .for loop in A B (cd ${STAGEDIR}${PREFIX}; ${FIND} * -type d -empty | \ ${SORT} -dr | ${XARGS} ${RMDIR}) .endfor (cd ${STAGEDIR}${PREFIX}; \ ${FIND} * \( -type f -or -type l \) | ${SORT} | \ ${SED} -e '/^bin\//d' -e '/^${DROID_TARGET}\/bin\//d' \ >> ${TMPPLIST}) acats: build (cd ${BUILD_WRKSRC}/gcc && ${SETENV} \ PATH=${LOCALBASE}/gcc-aux/bin:${PATH}:${PREFIX}/bin \ ${GMAKE} -sk check-acats) gnatdg: build (cd ${BUILD_WRKSRC}/gcc && ${SETENV} \ PATH=${LOCALBASE}/gcc-aux/bin:${PATH}:${PREFIX}/bin \ ${GMAKE} -sk check-gnat RUNTESTFLAGS=--target_board=gnatdroid) .include Index: head/lang/gnatdroid-armv7/pkg-descr =================================================================== --- head/lang/gnatdroid-armv7/pkg-descr (revision 402634) +++ head/lang/gnatdroid-armv7/pkg-descr (revision 402635) @@ -1,6 +1,6 @@ -The gnatdroid-armv7 port builds a C/Ada cross-compiler based on GCC 4.7 that -targets the Android operating system (version 4.4, API level 19) running on -ARM architecture (version 7). This produces binaries that run natively on -Android devices built with Cortex-A series chips. +The gnatdroid-armv7 port builds a C/Ada cross-compiler based on GCC 4.9 +that targets the Android operating system (up to version 5.0, API level +21) running on ARM architecture (version 7). This produces binaries that +run natively on Android devices built with Cortex-A series chips. WWW: http://www.dragonlace.net Index: head/lang/gnatdroid-binutils/Makefile =================================================================== --- head/lang/gnatdroid-binutils/Makefile (revision 402634) +++ head/lang/gnatdroid-binutils/Makefile (revision 402635) @@ -1,48 +1,49 @@ # Created by: John Marino # $FreeBSD$ PORTNAME= binutils PORTVERSION= 2.25.1 -PORTREVISION= 1 +PORTREVISION?= 1 CATEGORIES= lang MASTER_SITES= SOURCEWARE/binutils/releases PKGNAMEPREFIX= gnatdroid- -MAINTAINER= marino@FreeBSD.org -COMMENT= Infrastructure for C/Ada Android cross-compiler +MAINTAINER?= marino@FreeBSD.org +COMMENT?= Infrastructure for C/Ada Android cross-compiler (ARMv7) LICENSE= GPLv3 LGPL3 LICENSE_COMB= multi -BUILD_DEPENDS= gnatdroid-sysroot>=19:${PORTSDIR}/lang/gnatdroid-sysroot \ +BUILD_DEPENDS= ${SYSROOT}>=19:${PORTSDIR}/lang/${SYSROOT} \ ${LOCALBASE}/lib/libgmp.so:${PORTSDIR}/math/gmp \ ${LOCALBASE}/lib/libmpfr.so:${PORTSDIR}/math/mpfr RUN_DEPENDS:= ${BUILD_DEPENDS} USES= gmake tar:bzip2 HAS_CONFIGURE= yes NO_MTREE= yes NO_LICENSES_INSTALL= yes WRKSRC= ${WRKDIR}/binutils-${PORTVERSION} -PREFIX= ${LOCALBASE}/android -BRANCH2= ARMv7 +PREFIX?= ${LOCALBASE}/android +BRANCH2?= ARMv7 BR2_PREFIX= ${PREFIX}/${BRANCH2} -ARMTARGET= arm-aux-linux-androideabi -PLIST_SUB+= TARGET="${ARMTARGET}" +XCCTARGET?= arm-aux-linux-androideabi +SYSROOT?= gnatdroid-sysroot +PLIST_SUB+= TARGET="${XCCTARGET}" PLIST_SUB+= BRANCH2="${BRANCH2}" -CONFIGURE_ARGS+= --target=${ARMTARGET} +CONFIGURE_ARGS+= --target=${XCCTARGET} CONFIGURE_ARGS+= --prefix=${BR2_PREFIX} CONFIGURE_ARGS+= --with-sysroot=${PREFIX} CONFIGURE_ARGS+= --with-gmp=${LOCALBASE} CONFIGURE_ARGS+= --with-mpfr=${LOCALBASE} CONFIGURE_ARGS+= --disable-werror CONFIGURE_ARGS+= --disable-nls post-install: # Move the unwanted documentation out of the stage directory ${MV} ${STAGEDIR}${BR2_PREFIX}/share ${WRKDIR} .include Index: head/lang/gnatdroid-binutils-x86/Makefile =================================================================== --- head/lang/gnatdroid-binutils-x86/Makefile (nonexistent) +++ head/lang/gnatdroid-binutils-x86/Makefile (revision 402635) @@ -0,0 +1,18 @@ +# Created by: John Marino +# $FreeBSD$ + +PORTREVISION= 0 +PKGNAMESUFFIX= -x86 + +MAINTAINER= marino@FreeBSD.org +COMMENT= Infrastructure for C/Ada Android cross-compiler (x86) + +BRANCH2= x86_32 +XCCTARGET= i686-aux-linux-android +PREFIX= ${LOCALBASE}/android-x86 +SYSROOT= gnatdroid-sysroot-x86 +MASTERDIR= ${.CURDIR}/../../lang/gnatdroid-binutils +PLIST= ${.CURDIR}/pkg-plist +DESCR= ${.CURDIR}/pkg-descr + +.include "${MASTERDIR}/Makefile" Property changes on: head/lang/gnatdroid-binutils-x86/Makefile ___________________________________________________________________ Added: svn:keywords ## -0,0 +1 ## +FreeBSD=%H \ No newline at end of property Index: head/lang/gnatdroid-binutils-x86/pkg-descr =================================================================== --- head/lang/gnatdroid-binutils-x86/pkg-descr (nonexistent) +++ head/lang/gnatdroid-binutils-x86/pkg-descr (revision 402635) @@ -0,0 +1,5 @@ +This package is a dependency of lang/gnatdroid-x86. It provides the +cross-tools required to build the GNAT FreeBSD->x86 cross-compiler that +is gnatdroid, as well as any binaries that it produces. + +WWW: http://www.dragonlace.net Property changes on: head/lang/gnatdroid-binutils-x86/pkg-descr ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Index: head/lang/gnatdroid-binutils-x86/pkg-plist =================================================================== --- head/lang/gnatdroid-binutils-x86/pkg-plist (nonexistent) +++ head/lang/gnatdroid-binutils-x86/pkg-plist (revision 402635) @@ -0,0 +1,95 @@ +%%BRANCH2%%/bin/%%TARGET%%-addr2line +%%BRANCH2%%/bin/%%TARGET%%-ar +%%BRANCH2%%/bin/%%TARGET%%-as +%%BRANCH2%%/bin/%%TARGET%%-c++filt +%%BRANCH2%%/bin/%%TARGET%%-elfedit +%%BRANCH2%%/bin/%%TARGET%%-gprof +%%BRANCH2%%/bin/%%TARGET%%-ld +%%BRANCH2%%/bin/%%TARGET%%-ld.bfd +%%BRANCH2%%/bin/%%TARGET%%-nm +%%BRANCH2%%/bin/%%TARGET%%-objcopy +%%BRANCH2%%/bin/%%TARGET%%-objdump +%%BRANCH2%%/bin/%%TARGET%%-ranlib +%%BRANCH2%%/bin/%%TARGET%%-readelf +%%BRANCH2%%/bin/%%TARGET%%-size +%%BRANCH2%%/bin/%%TARGET%%-strings +%%BRANCH2%%/bin/%%TARGET%%-strip +%%BRANCH2%%/%%TARGET%%/bin/ar +%%BRANCH2%%/%%TARGET%%/bin/as +%%BRANCH2%%/%%TARGET%%/bin/ld +%%BRANCH2%%/%%TARGET%%/bin/ld.bfd +%%BRANCH2%%/%%TARGET%%/bin/nm +%%BRANCH2%%/%%TARGET%%/bin/objcopy +%%BRANCH2%%/%%TARGET%%/bin/objdump +%%BRANCH2%%/%%TARGET%%/bin/ranlib +%%BRANCH2%%/%%TARGET%%/bin/strip +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf32_x86_64.x +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf32_x86_64.xbn +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf32_x86_64.xc +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf32_x86_64.xd +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf32_x86_64.xdc +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf32_x86_64.xdw +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf32_x86_64.xn +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf32_x86_64.xr +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf32_x86_64.xs +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf32_x86_64.xsc +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf32_x86_64.xsw +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf32_x86_64.xu +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf32_x86_64.xw +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_i386.x +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_i386.xbn +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_i386.xc +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_i386.xd +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_i386.xdc +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_i386.xdw +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_i386.xn +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_i386.xr +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_i386.xs +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_i386.xsc +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_i386.xsw +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_i386.xu +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_i386.xw +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_k1om.x +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_k1om.xbn +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_k1om.xc +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_k1om.xd +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_k1om.xdc +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_k1om.xdw +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_k1om.xn +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_k1om.xr +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_k1om.xs +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_k1om.xsc +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_k1om.xsw +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_k1om.xu +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_k1om.xw +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_l1om.x +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_l1om.xbn +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_l1om.xc +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_l1om.xd +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_l1om.xdc +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_l1om.xdw +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_l1om.xn +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_l1om.xr +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_l1om.xs +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_l1om.xsc +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_l1om.xsw +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_l1om.xu +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_l1om.xw +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_x86_64.x +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_x86_64.xbn +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_x86_64.xc +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_x86_64.xd +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_x86_64.xdc +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_x86_64.xdw +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_x86_64.xn +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_x86_64.xr +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_x86_64.xs +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_x86_64.xsc +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_x86_64.xsw +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_x86_64.xu +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/elf_x86_64.xw +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/i386linux.x +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/i386linux.xbn +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/i386linux.xn +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/i386linux.xr +%%BRANCH2%%/%%TARGET%%/lib/ldscripts/i386linux.xu Property changes on: head/lang/gnatdroid-binutils-x86/pkg-plist ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Index: head/lang/gnatdroid-sysroot-x86/Makefile =================================================================== --- head/lang/gnatdroid-sysroot-x86/Makefile (nonexistent) +++ head/lang/gnatdroid-sysroot-x86/Makefile (revision 402635) @@ -0,0 +1,49 @@ +# Created by: John Marino +# $FreeBSD$ + +PORTNAME= sysroot +PORTVERSION= 21 +CATEGORIES= lang +MASTER_SITES= http://downloads.dragonlace.net/src/ +PKGNAMEPREFIX= gnatdroid- +PKGNAMESUFFIX= -x86 +DISTNAME= android-${API}-x86 + +MAINTAINER= marino@FreeBSD.org +COMMENT= Android sysroots for C/Ada Android cross-compiler (x86) + +USES= tar:bzip2 +NO_BUILD= yes +NO_MTREE= yes + +PREFIX= ${LOCALBASE}/android-x86 +STAT_PATCH= ${FILESDIR}/extra-stat.h +EXTRA_PATCHES= ${STAT_PATCH} + +OPTIONS_SINGLE= SG1 +OPTIONS_SINGLE_SG1= KITKAT LOLLIPOP +OPTIONS_DEFAULT= KITKAT + +KITKAT_DESC= Android 4.4 - API level 19 - Kitkat +LOLLIPOP_DESC= Android 5.0 - API level 21 - Lollipop + +.include + +.if ${PORT_OPTIONS:MKITKAT} +API= 19 +.elif ${PORT_OPTIONS:MLOLLIPOP} +API= 21 +STAT_PATCH= ${FILESDIR}/extra-21-stat.h +.else +IGNORE= the API option is improperly selected +.endif + +do-install: + @${MKDIR} ${STAGEDIR}${PREFIX} + (cd ${WRKSRC} && ${COPYTREE_SHARE} usr ${STAGEDIR}${PREFIX}) + +post-install: + @(cd ${STAGEDIR}${PREFIX}; ${FIND} usr \( -type f -or -type l \) | \ + ${SORT} >> ${TMPPLIST}) + +.include Property changes on: head/lang/gnatdroid-sysroot-x86/Makefile ___________________________________________________________________ Added: svn:keywords ## -0,0 +1 ## +FreeBSD=%H \ No newline at end of property Index: head/lang/gnatdroid-sysroot-x86/distinfo =================================================================== --- head/lang/gnatdroid-sysroot-x86/distinfo (nonexistent) +++ head/lang/gnatdroid-sysroot-x86/distinfo (revision 402635) @@ -0,0 +1,4 @@ +SHA256 (android-19-x86.tar.bz2) = 35c5e6fdebe54373d2103e500034d620fbda8a7b79148fc6a5e507a25ff17f24 +SIZE (android-19-x86.tar.bz2) = 5554684 +SHA256 (android-21-x86.tar.bz2) = 48c306569d4d27ba595c930bfe3ac69208868b2a1d2598b57e8f8ded293a7478 +SIZE (android-21-x86.tar.bz2) = 7261178 Property changes on: head/lang/gnatdroid-sysroot-x86/distinfo ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Index: head/lang/gnatdroid-sysroot-x86/files/extra-21-stat.h =================================================================== --- head/lang/gnatdroid-sysroot-x86/files/extra-21-stat.h (nonexistent) +++ head/lang/gnatdroid-sysroot-x86/files/extra-21-stat.h (revision 402635) @@ -0,0 +1,10 @@ +--- usr/include/linux/stat.h.orig 2014-10-15 02:53:49 UTC ++++ usr/include/linux/stat.h +@@ -57,5 +57,7 @@ + #define S_IWOTH 00002 + /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ + #define S_IXOTH 00001 ++#define S_IREAD S_IRUSR ++#define S_IWRITE S_IWUSR + #endif + #endif Property changes on: head/lang/gnatdroid-sysroot-x86/files/extra-21-stat.h ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Index: head/lang/gnatdroid-sysroot-x86/files/extra-stat.h =================================================================== --- head/lang/gnatdroid-sysroot-x86/files/extra-stat.h (nonexistent) +++ head/lang/gnatdroid-sysroot-x86/files/extra-stat.h (revision 402635) @@ -0,0 +1,12 @@ +--- usr/include/linux/stat.h.orig 2011-07-17 20:54:19.000000000 +0200 ++++ usr/include/linux/stat.h 2011-07-17 20:55:15.000000000 +0200 +@@ -39,6 +39,9 @@ + #define S_IWUSR 00200 + #define S_IXUSR 00100 + ++#define S_IREAD S_IRUSR ++#define S_IWRITE S_IWUSR ++ + #define S_IRWXG 00070 + #define S_IRGRP 00040 + #define S_IWGRP 00020 Property changes on: head/lang/gnatdroid-sysroot-x86/files/extra-stat.h ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Index: head/lang/gnatdroid-sysroot-x86/pkg-descr =================================================================== --- head/lang/gnatdroid-sysroot-x86/pkg-descr (nonexistent) +++ head/lang/gnatdroid-sysroot-x86/pkg-descr (revision 402635) @@ -0,0 +1,6 @@ +This package is used by lang/gnatdroid to install the system root of +Android 2.2 to 5.0 (API Level 8 to API Level 21) of the x86 architecture. +The x86 cross-tools are built using these files, which in turn is required +for the GNAT FreeBSD->Android(x86) cross-compiler that is gnatdroid. + +WWW: http://www.dragonlace.net Property changes on: head/lang/gnatdroid-sysroot-x86/pkg-descr ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Index: head/lang/gnatdroid-x86/Makefile =================================================================== --- head/lang/gnatdroid-x86/Makefile (nonexistent) +++ head/lang/gnatdroid-x86/Makefile (revision 402635) @@ -0,0 +1,21 @@ +# Created by: John Marino +# $FreeBSD$ + +PORTNAME= x86 +PORTREVISION= ${X86_PR} + +MAINTAINER= marino@FreeBSD.org +COMMENT= C/Ada cross-compiler, target: Android x86 + +DROID_TARGET= i686-aux-linux-android +CPUVERSION= x86_32 +ARG_ARCH= # don't specify +ARG_FPU= # don't specify +ARG_FLOATSOFT= # don't specify +SRPREFIX= ${LOCALBASE}/android-x86 +SYSROOT= gnatdroid-sysroot-x86 +GDBINUTILS= gnatdroid-binutils-x86 +MASTERDIR= ${.CURDIR}/../../lang/gnatdroid-armv7 +DESCR= ${.CURDIR}/pkg-descr + +.include "${MASTERDIR}/Makefile" Property changes on: head/lang/gnatdroid-x86/Makefile ___________________________________________________________________ Added: svn:keywords ## -0,0 +1 ## +FreeBSD=%H \ No newline at end of property Index: head/lang/gnatdroid-x86/pkg-descr =================================================================== --- head/lang/gnatdroid-x86/pkg-descr (nonexistent) +++ head/lang/gnatdroid-x86/pkg-descr (revision 402635) @@ -0,0 +1,6 @@ +The gnatdroid-x86 port builds a C/Ada cross-compiler based on GCC 4.9 +that targets the Android operating system (up to version 5.0, API level +21) running on x86 or x86_64 architecture (version 7). This produces +binaries that run natively on x86-based Android devices. + +WWW: http://www.dragonlace.net Property changes on: head/lang/gnatdroid-x86/pkg-descr ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property