summaryrefslogtreecommitdiff
path: root/lang
diff options
context:
space:
mode:
authorSatoshi Asami <asami@FreeBSD.org>1997-09-25 08:48:00 +0000
committerSatoshi Asami <asami@FreeBSD.org>1997-09-25 08:48:00 +0000
commit31f08be6a309375d03f730cefdbae2a6ad49d1d5 (patch)
treefaa7a768db1892a98dce84bf352d0c9665f6c2d1 /lang
parentMake it possible to install the standalone navigator by defining (diff)
Upgrade to 3.09. This port is no longer broken.
Note you need an existing gnat compiler to build this. (A package will do.) PR: 3687 Submitted by: Maurice Castro <maurice@planet.serc.rmit.edu.au> and Daniel M. Eischen <deischen@iworks.InterWorks.org>
Notes
Notes: svn path=/head/; revision=8025
Diffstat (limited to 'lang')
-rw-r--r--lang/gnat/Makefile122
-rw-r--r--lang/gnat/distinfo3
-rw-r--r--lang/gnat/files/4fintnam.ads154
-rw-r--r--lang/gnat/files/5fintman.adb234
-rw-r--r--lang/gnat/files/5fosinte.adb139
-rw-r--r--lang/gnat/files/5fosinte.ads742
-rw-r--r--lang/gnat/files/5ftaprop.adb779
-rw-r--r--lang/gnat/files/5ftaspri.ads138
-rw-r--r--lang/gnat/files/patch-aa141
-rw-r--r--lang/gnat/files/patch-ab36
-rw-r--r--lang/gnat/files/patch-ac20
-rw-r--r--lang/gnat/files/patch-ad46
-rw-r--r--lang/gnat/files/patch-ae36
-rw-r--r--lang/gnat/files/patch-af19
-rw-r--r--lang/gnat/pkg-descr184
-rw-r--r--lang/gnat/pkg-plist615
16 files changed, 3104 insertions, 304 deletions
diff --git a/lang/gnat/Makefile b/lang/gnat/Makefile
index 28cd3c2cb754..90807ee5948f 100644
--- a/lang/gnat/Makefile
+++ b/lang/gnat/Makefile
@@ -1,61 +1,99 @@
-# -*- Mode: Makefile -*-
-# Port of: GNU Ada gnat
-# Version required: 2.03
-# Space required: >= 23MB
+# New ports collection makefile for: GNU Ada gnat
+# Version required: 3.09
# Date created: Sat Mar 18 02:16:45 1995
-# Porter: nils@guru.ims.uni-stuttgart.de
+# Porter (original): nils@guru.ims.uni-stuttgart.de
+# Porter (version 3): maurice@serc.rmit.edu.au
#
-# $Id: Makefile,v 1.10 1996/12/07 13:28:30 asami Exp $
+# $Id: Makefile,v 1.11 1997/08/11 18:02:08 fenner Exp $
-DISTNAME= gnat-2.03-src
-PKGNAME= gnat-2.03
+# Note:
+# - FreeBSD tasking libraries created by Dan Eischen have been incorportated
+# into this edition
+# - The default names of a number of binaries have been altered to avoid
+# conflict with other gcc based products. Standard names can be provided using
+# symbolic links.
+
+DISTNAME= gnat-3.09-src
+PKGNAME= gnat-3.09
CATEGORIES= lang
-MASTER_SITES= ftp://cs.nyu.edu/pub/gnat/
+MASTER_SITES= ftp://cs.nyu.edu/pub/gnat/ \
+ ${MASTER_SITE_GNU}
+DISTFILES= gnat-3.09-src.tar.gz gcc-2.7.2.1.tar.gz
-MAINTAINER= ports@FreeBSD.ORG
+MAINTAINER= maurice@serc.rmit.edu.au
-BROKEN= "Not updated for gcc-2.7.x"
-# following three lines commented out because BROKEN is already defined
-#.if !exists(/usr/local/bin/gnatf)
-#BROKEN= "requires existing gnat compiler"
-#.endif
-# You need a compiler who calls an existing gnat compiler:
+.if !exists(/usr/local/bin/gnatf)
+BROKEN= "requires existing gnat compiler"
+.endif
+.if !exists(/usr/local/bin/adagcc)
+BROKEN= "requires patched gcc compiler"
+.endif
+# You need a compiler who calls an existing gnat compiler (3.08 or greater):
# if you have one, if you have one put it here, otherwise,
-# you will need to install from a package first, the Makefile
-# in ${SRCDIR}/ada is configured to call gcc with -B/usr/local/libexec/
-# so that the normal gcc will find gnat1 there. Alternatively
-# you can install it in /usr and avoid the hassles.
-CC = gcc
+# you will need to install from a package first
+
+# Make sure we use the patched gcc compiler
+CC = /usr/local/bin/adagcc
-# You have to tell me where your gcc 2.6.3 source is located
-COMPILERSOURCE = /usr/src/gnu/usr.bin/cc
+# Which version of gcc do we have? Must be 2.7.2.1
+CCVERSION= 2.7.2.1
-# Which version of gcc do we have? Must be either 2.6.2 or 2.6.3.
-CCVERSION= 2.6.3
+# which language set
+LANG = c ada
-USE_GMAKE= true
+pre-patch:
+ @echo "===> Applying FreeBSD patches to gcc for ${DISTNAME}"
+ -( cd ${WRKDIR}/gcc-2.7.2.1; \
+ patch -s -f < ${PATCHDIR}/patch-freebsdgcc; )
+ @echo "===> Fixing ${DISTNAME} patches to gcc"
+ -( cd ${WRKSRC}/src; \
+ patch -s -f < ${PATCHDIR}/patch-gnat; )
+ @echo "===> Patching gcc for ${DISTNAME}"
+ -( cd ${WRKDIR}/gcc-2.7.2.1; \
+ patch -s -f < ${WRKSRC}/src/gcc-272.dif; )
+ (cd ${WRKDIR}/gcc-2.7.2.1; \
+ cp -R ${WRKSRC}/src/ada ada; )
-pre-build:
- @echo "===> Building patched gcc library for ${DISTNAME}"
- cd ${WRKSRC}/gcc && \
- ${MAKE} CC="${CC} -I. -I${COMPILERSOURCE}/include" \
- COMPILERSOURCE="${COMPILERSOURCE}" PREFIX=${PREFIX}
+pre-configure:
+ (cd ${WRKDIR}/gcc-2.7.2.1/ada; \
+ touch treeprs.ads a-[es]info.h nmake.ad[bs] )
do-build:
- cd ${WRKSRC}/ada; \
- ${GMAKE} CC="${CC}" PREFIX=${PREFIX} COMPILERSOURCE="${COMPILERSOURCE}"
+ (cd ${WRKDIR}/gcc-2.7.2.1; ${GMAKE} CC="${CC}" CFLAGS="-O2" LANGUAGES="${LANG}" )
+ (cd ${WRKDIR}/gcc-2.7.2.1; ${GMAKE} CC="${CC}" CFLAGS="-O2" LANGUAGES="${LANG}" bootstrap )
+ (cd ${WRKDIR}/gcc-2.7.2.1; ${GMAKE} CC="${CC}" CFLAGS="-O2" gnatlib_and_tools )
+
+# patch the src that we are going to use and copy any additional files
+# required into the correct locations
+# use version specific patches where necessary
+do-patch:
+ (cd ${WRKDIR}; \
+ FILES="${PATCHDIR}/patch-[a-z][a-z]" ; \
+ SORTEDFILES=`echo $$FILES | tr " " "\n" | sort` ; \
+ for i in $$SORTEDFILES ; do \
+ echo Applying ---- $$i ;\
+ patch -s < $$i ;\
+ done )
+ (cd ${FILESDIR}; \
+ for i in *.adb *.ads ; do \
+ cp $$i ${WRKDIR}/gcc-2.7.2.1/ada; \
+ done )
do-configure:
- @env CURDIR=${.CURDIR} DISTDIR=${DISTDIR} WRKDIR=${WRKDIR} \
- WRKSRC=${WRKSRC} PATCHDIR=${PATCHDIR} SCRIPTDIR=${SCRIPTDIR} \
- FILESDIR=${FILESDIR} PORTSDIR=${PORTSDIR} PREFIX=${PREFIX} \
- DEPENDS="${DEPENDS}" \
- COMPILERSOURCE="${COMPILERSOURCE}" CCVERSION="${CCVERSION}" \
- ${SHELL} ${SCRIPTDIR}/configure;
+ (cd ${WRKDIR}/gcc-2.7.2.1; \
+ ./configure --prefix=${PREFIX} --program-prefix=ada )
do-install:
- (cd ${WRKSRC}/ada; \
- ${MAKE} PREFIX=${PREFIX} ${MAKE_FLAGS} ${MAKEFILE} \
- ${INSTALL_TARGET})
+ (cd ${WRKDIR}/gcc-2.7.2.1; \
+ ${GMAKE} CC="${CC}" LANGUAGES="${LANG}" install )
+
+post-install:
+ @(echo "-----------------------------------------------------------" )
+ @(echo "" )
+ @(echo "For information about using the tasking library please read" )
+ @(echo "the README.Tasking file" )
+ @(echo "" )
+ @(echo "-----------------------------------------------------------" )
+ @(echo "" )
.include <bsd.port.mk>
diff --git a/lang/gnat/distinfo b/lang/gnat/distinfo
index 2c8d6986deed..e75ebe9161a3 100644
--- a/lang/gnat/distinfo
+++ b/lang/gnat/distinfo
@@ -1 +1,2 @@
-MD5 (gnat-2.03-src.tar.gz) = 65c2f6458b3fb9de2cda0c4ab8bcf4fc
+MD5 (gnat-3.09-src.tar.gz) = bd8a3526ee8b55dd10db11d4485e1e21
+MD5 (gcc-2.7.2.1.tar.gz) = 655b43dbb48f611fc667ec21584a4460
diff --git a/lang/gnat/files/4fintnam.ads b/lang/gnat/files/4fintnam.ads
new file mode 100644
index 000000000000..29f53e62ae96
--- /dev/null
+++ b/lang/gnat/files/4fintnam.ads
@@ -0,0 +1,154 @@
+------------------------------------------------------------------------------
+-- --
+-- GNU ADA RUNTIME 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 --
+-- (Version for new GNARL) --
+-- --
+-- $Revision: 1.1 $ --
+-- --
+-- Copyright (C) 1991,92,93,94,95,1996 Free Software Foundation, Inc. --
+-- --
+-- GNARL is free software; you can redistribute it and/or modify it under --
+-- terms of the GNU General Public License as published by the Free Soft- --
+-- ware Foundation; either version 2, or (at your option) any later ver- --
+-- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
+-- for more details. You should have received a copy of the GNU General --
+-- Public License distributed with GNARL; see file COPYING. If not, write --
+-- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
+-- MA 02111-1307, USA. --
+-- --
+-- As a special exception, if other files instantiate generics from this --
+-- unit, or you link this unit with other files to produce an executable, --
+-- this unit does not by itself cause the resulting executable to be --
+-- covered by the GNU General Public License. This exception does not --
+-- however invalidate any other reasons why the executable file might be --
+-- covered by the GNU Public License. --
+-- --
+-- GNARL was developed by the GNARL team at Florida State University. It is --
+-- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
+-- State University (http://www.gnat.com). --
+-- --
+------------------------------------------------------------------------------
+
+-- This is the FreeBSD THREADS version of this package
+
+-- This is only a first approximation.
+-- It should be autogenerated by the m4 macro processor.
+-- Contributed by Daniel Eischen (deischen@iworks.InterWorks.org)
+
+with System.OS_Interface;
+-- used for names of interrupts
+
+package Ada.Interrupts.Names is
+
+
+ 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
+
+ SIGEMT : constant Interrupt_ID :=
+ System.OS_Interface.SIGEMT; -- EMT instruction
+
+ 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
+
+ SIGSYS : constant Interrupt_ID :=
+ System.OS_Interface.SIGSYS; -- bad argument to system call
+
+ 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
+
+ SIGINFO : constant Interrupt_ID := -- information request
+ System.OS_Interface.SIGINFO; -- (NetBSD/FreeBSD)
+
+ SIGUSR1 : constant Interrupt_ID :=
+ System.OS_Interface.SIGUSR1; -- user defined signal 1
+
+ SIGUSR2 : constant Interrupt_ID :=
+ System.OS_Interface.SIGUSR2; -- user defined signal 2
+
+ -- 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.
+
+end Ada.Interrupts.Names;
diff --git a/lang/gnat/files/5fintman.adb b/lang/gnat/files/5fintman.adb
new file mode 100644
index 000000000000..10e3db9af325
--- /dev/null
+++ b/lang/gnat/files/5fintman.adb
@@ -0,0 +1,234 @@
+------------------------------------------------------------------------------
+-- --
+-- GNU ADA RUNTIME LIBRARY (GNARL) COMPONENTS --
+-- --
+-- S Y S T E M . I N T E R R U P T _ M A N A G E M E N T --
+-- --
+-- B o d y --
+-- (Version for new GNARL) --
+-- --
+-- $Revision: 1.3 $ --
+-- --
+-- Copyright (C) 1991,1992,1993,1994,1995,1996 Florida State University --
+-- --
+-- GNARL is free software; you can redistribute it and/or modify it under --
+-- terms of the GNU General Public License as published by the Free Soft- --
+-- ware Foundation; either version 2, or (at your option) any later ver- --
+-- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
+-- for more details. You should have received a copy of the GNU General --
+-- Public License distributed with GNARL; see file COPYING. If not, write --
+-- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
+-- MA 02111-1307, USA. --
+-- --
+-- As a special exception, if other files instantiate generics from this --
+-- unit, or you link this unit with other files to produce an executable, --
+-- this unit does not by itself cause the resulting executable to be --
+-- covered by the GNU General Public License. This exception does not --
+-- however invalidate any other reasons why the executable file might be --
+-- covered by the GNU Public License. --
+-- --
+-- GNARL was developed by the GNARL team at Florida State University. It is --
+-- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
+-- State University (http://www.gnat.com). --
+-- --
+------------------------------------------------------------------------------
+
+-- This is the FreeBSD PTHREADS version of this package
+
+-- This is only a first approximation.
+-- It should be autogenerated by the m4 macro processor.
+-- Contributed by Peter Burwood (gnat@arcangel.dircon.co.uk).
+
+-- This file performs the system-dependent translation between machine
+-- exceptions and the Ada exceptions, if any, that should be raised when
+-- they occur. This version works for FreeBSD. Contributed by
+-- Daniel M. Eischen (deischen@iworks.InterWorks.org).
+
+-- PLEASE DO NOT add any dependences on other packages.
+-- This package is designed to work with or without tasking support.
+
+-- See the other warnings in the package specification before making
+-- any modifications to this file.
+
+-- Make a careful study of all signals available under the OS,
+-- to see which need to be reserved, kept always unmasked,
+-- or kept always unmasked.
+-- Be on the lookout for special signals that
+-- may be used by the thread library.
+
+with Interfaces.C;
+-- used for int and other types
+
+with System.Error_Reporting;
+-- used for Shutdown
+
+with System.OS_Interface;
+-- used for various Constants, Signal and types
+
+package body System.Interrupt_Management is
+
+ use Interfaces.C;
+ use System.Error_Reporting;
+ use System.OS_Interface;
+
+ type Interrupt_List is array (Interrupt_ID range <>) of Interrupt_ID;
+ Exception_Interrupts : constant Interrupt_List :=
+ (SIGFPE, SIGILL, SIGSEGV, SIGBUS);
+
+
+ ----------------------
+ -- Notify_Exception --
+ ----------------------
+
+ -- This function identifies the Ada exception to be raised using
+ -- the information when the system received a synchronous signal.
+ -- Since this function is machine and OS dependent, different code
+ -- has to be provided for different target.
+
+ -- Language specs say signal handlers take exactly one arg, even
+ -- though FreeBSD actually supplies three. Ugh!
+
+ procedure Notify_Exception
+ (signo : Signal;
+ code : Interfaces.C.int;
+ context : access struct_sigcontext);
+
+ procedure Notify_Exception
+ (signo : Signal;
+ code : Interfaces.C.int;
+ context : access struct_sigcontext) is
+ begin
+
+ -- As long as we are using a longjmp to return control to the
+ -- exception handler on the runtime stack, we are safe. The original
+ -- signal mask (the one we had before coming into this signal catching
+ -- function) will be restored by the longjmp. Therefore, raising
+ -- an exception in this handler should be a safe operation.
+
+ -- Check that treatment of exception propagation here
+ -- is consistent with treatment of the abort signal in
+ -- System.Task_Primitives.Operations.
+
+ -- ?????
+ -- The code below is first approximation.
+ -- It would be nice to figure out more
+ -- precisely what exception has occurred.
+ -- One also should arrange to use an alternate stack for
+ -- recovery from stack overflow.
+ -- I don't understand the Linux kernel code well
+ -- enough to figure out how to do this yet.
+ -- I hope someone will look at this. --Ted Baker
+
+ -- How can SIGSEGV be split into constraint and storage errors ?
+ -- What should SIGILL really raise ? Some implemenations have
+ -- codes for different types of SIGILL and some raise Storage_Error.
+ -- What causes SIGBUS and should it be caught ?
+ -- Peter Burwood
+
+ case signo is
+ when SIGFPE =>
+ raise Constraint_Error;
+ when SIGILL =>
+ raise Constraint_Error;
+ when SIGSEGV =>
+ raise Storage_Error;
+ when SIGBUS =>
+ raise Storage_Error;
+ when others =>
+ pragma Assert (Shutdown ("Unexpected signal"));
+ null;
+ end case;
+ end Notify_Exception;
+
+ ----------------
+ -- Initialize --
+ ----------------
+
+ procedure Initialize is
+ act : aliased struct_sigaction;
+ old_act : aliased struct_sigaction;
+ mask : aliased sigset_t;
+ Result : Interfaces.C.int;
+
+ begin
+
+ Abort_Task_Interrupt := SIGABRT;
+ -- Change this if you want to use another signal for task abort.
+ -- SIGTERM might be a good one.
+
+ act.sa_handler := Notify_Exception'Address;
+
+ act.sa_flags := 16#010#;
+ -- Set sa_flags to SA_NODEFER so that during the handler execution
+ -- we do not change the Signal_Mask to be masked for the Signal.
+ -- This is a temporary fix to the problem that the Signal_Mask is
+ -- not restored after the exception (longjmp) from the handler.
+ -- The right fix should be made in sigsetjmp so that we save
+ -- the Signal_Set and restore it after a longjmp.
+ -- In that case, this field should be changed back to 0. ??? (Dong-Ik)
+
+ Result := sigemptyset (mask'Access);
+ pragma Assert (Result = 0
+ or else Shutdown ("GNULLI failure---sigemptyset"));
+
+ for I in Exception_Interrupts'Range loop
+ Result := sigaddset (mask'Access, Signal (Exception_Interrupts (I)));
+ pragma Assert (Result = 0
+ or else Shutdown ("GNULLI failure---sigaddset"));
+ end loop;
+
+ act.sa_mask := mask;
+
+ for I in Exception_Interrupts'Range loop
+ Keep_Unmasked (Exception_Interrupts (I)) := True;
+ Result :=
+ sigaction
+ (Signal (Exception_Interrupts (I)), act'Access, old_act'Access);
+ pragma Assert (Result = 0
+ or else Shutdown ("GNULLI failure---sigaction"));
+ end loop;
+
+ Keep_Unmasked (Abort_Task_Interrupt) := true;
+-- Keep_Unmasked (SIGBUS) := true;
+
+ Keep_Unmasked (SIGSTOP) := true;
+ Keep_Unmasked (SIGKILL) := true;
+ Keep_Unmasked (SIGINT) := true;
+
+ -- Keep_Unmasked (SIGEMT) := true;
+ -- Keep_Unmasked (SIGCHLD) := true;
+ -- Keep_Unmasked (SIGALRM) := true;
+ -- ???? The above signals have been found to need to be
+ -- kept unmasked on some systems, per Dong-Ik Oh.
+ -- I don't know whether the MIT/Provenzano threads
+ -- need these or any other signals unmasked at the thread level.
+ -- I hope somebody will take
+ -- the time to look it up. -- Ted Baker
+
+ -- FreeBSD uses SIGINFO to dump thread status to stdout. If
+ -- the user really wants to attach his own handler, let him.
+
+ -- FreeBSD pthreads uses setitimer/getitimer for thread scheduling.
+ -- It's not clear, but it looks as if it only needs SIGVTALRM
+ -- in order to handle the setitimer/getitimer operations. We
+ -- could probably allow SIGALARM, but we'll leave it as unmasked
+ -- for now. FreeBSD pthreads also needs SIGCHLD.
+ Keep_Unmasked (SIGCHLD) := true;
+ Keep_Unmasked (SIGALRM) := true;
+ Keep_Unmasked (SIGVTALRM) := true;
+
+ Reserve := Reserve or Keep_Unmasked or Keep_Masked;
+
+ Reserve (0) := true;
+ -- We do not have Signal 0 in reality. We just use this value
+ -- to identify non-existent signals (see s-intnam.ads). Therefore,
+ -- Signal 0 should not be used in all signal related operations hence
+ -- mark it as reserved.
+
+ end Initialize;
+
+begin
+ Initialize;
+end System.Interrupt_Management;
diff --git a/lang/gnat/files/5fosinte.adb b/lang/gnat/files/5fosinte.adb
new file mode 100644
index 000000000000..33d4bcfd2b89
--- /dev/null
+++ b/lang/gnat/files/5fosinte.adb
@@ -0,0 +1,139 @@
+------------------------------------------------------------------------------
+-- --
+-- GNU ADA RUNTIME LIBRARY (GNARL) COMPONENTS --
+-- --
+-- S Y S T E M . O S _ I N T E R F A C E --
+-- --
+-- B o d y --
+-- (Version for new GNARL) --
+-- --
+-- $Revision: 1.2 $ --
+-- --
+-- Copyright (C) 1991,1992,1993,1994,1995,1996 Florida State University --
+-- --
+-- GNARL is free software; you can redistribute it and/or modify it under --
+-- terms of the GNU General Public License as published by the Free Soft- --
+-- ware Foundation; either version 2, or (at your option) any later ver- --
+-- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
+-- for more details. You should have received a copy of the GNU General --
+-- Public License distributed with GNARL; see file COPYING. If not, write --
+-- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
+-- MA 02111-1307, USA. --
+-- --
+-- As a special exception, if other files instantiate generics from this --
+-- unit, or you link this unit with other files to produce an executable, --
+-- this unit does not by itself cause the resulting executable to be --
+-- covered by the GNU General Public License. This exception does not --
+-- however invalidate any other reasons why the executable file might be --
+-- covered by the GNU Public License. --
+-- --
+-- GNARL was developed by the GNARL team at Florida State University. It is --
+-- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
+-- State University (http://www.gnat.com). --
+-- --
+------------------------------------------------------------------------------
+
+-- This is the FreeBSD THREADS version of this package
+
+-- This is only a first approximation.
+-- It should be autogenerated by the m4 macro processor.
+-- Contributed by Daniel M. Eischen (deischen@iworks.InterWorks.org)
+
+-- DO NOT EDIT this file.
+-- It was automatically generated from another file by the m4 macro processor.
+-- The name of the file you should edit is the same as this one, but with
+-- ".ads" replaced by ".sm4", or
+-- ".adb" replaced by ".bm4", or
+-- ".c" replaced by ".cm4", or
+-- ".dat" replaced by ".tm4"
+
+-- Local options selected:
+-- __TARGET = i386-unknown-freebsd
+-- __ARCH = I386
+-- __OS = FREEBSD
+-- __HAS_SIGCONTEXT = 1
+-- __HAS_UCONTEXT = 0
+-- __THREADS = POSIX_THREADS
+-- __THREAD_VARIANT = ??
+-- __HAS_TIMESPEC = 1
+-- __HAS_NANOSLEEP = 1
+-- __HAS_CLOCK_GETTIME = 0
+-- __HAS_GETTIMEOFDAY = 1
+-- __POSIX_THREAD_PRIO_PROTECT = 0
+-- __POSIX_THREAD_PRIO_INHERIT = 0
+-- __POSIX_THREAD_ATTR_STACKADDR = 1
+-- __POSIX_THREAD_ATTR_STACKSIZE = 1
+-- __POSIX_THREAD_PRIORITY_SCHEDULING = 0
+
+-- This package encapsulates all direct interfaces to OS services
+-- that are needed by children of System.
+
+-- This version is for POSIX-like operating systems
+-- The original file "s-osinte.ads_m4" contains conditional
+-- macro calls that allow selection of various options.
+
+with Interfaces.C; use Interfaces.C;
+package body System.OS_Interface is
+
+ -----------------
+ -- 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_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;
+
+
+ function To_Duration (TV : struct_timeval) return Duration is
+ begin
+ return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
+ end To_Duration;
+
+ function To_Timeval (D : Duration) return struct_timeval is
+ S : long;
+ F : Duration;
+ begin
+ S := long (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 struct_timeval' (tv_sec => S,
+ tv_usec => long (Long_Long_Integer (F * 10#1#E6)));
+ end To_Timeval;
+
+ -- FreeBSD Pthreads has pthread_yield and it is imported as
+ -- sched_yield in 5fosinte.ads. The FreeBSD pthread_yield does
+ -- not have any parameters, so the import may be used directly
+ -- without the need for a wrapper as shown below.
+-- function sched_yield return int is
+-- procedure sched_yield_base (arg : System.Address);
+-- pragma Import (C, sched_yield_base, "pthread_yield");
+-- begin
+-- sched_yield_base (System.Null_Address);
+-- return 0;
+-- end sched_yield;
+
+end System.OS_Interface;
diff --git a/lang/gnat/files/5fosinte.ads b/lang/gnat/files/5fosinte.ads
new file mode 100644
index 000000000000..14450cce307a
--- /dev/null
+++ b/lang/gnat/files/5fosinte.ads
@@ -0,0 +1,742 @@
+------------------------------------------------------------------------------
+-- --
+-- GNU ADA RUNTIME LIBRARY (GNARL) COMPONENTS --
+-- --
+-- S Y S T E M . O S _ I N T E R F A C E --
+-- --
+-- S p e c --
+-- (Version for new GNARL) --
+-- --
+-- $Revision: 1.5 $ --
+-- --
+-- Copyright (C) 1991,92,93,94,95,1996 Free Software Foundation, Inc. --
+-- --
+-- GNARL is free software; you can redistribute it and/or modify it under --
+-- terms of the GNU General Public License as published by the Free Soft- --
+-- ware Foundation; either version 2, or (at your option) any later ver- --
+-- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
+-- for more details. You should have received a copy of the GNU General --
+-- Public License distributed with GNARL; see file COPYING. If not, write --
+-- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
+-- MA 02111-1307, USA. --
+-- --
+-- As a special exception, if other files instantiate generics from this --
+-- unit, or you link this unit with other files to produce an executable, --
+-- this unit does not by itself cause the resulting executable to be --
+-- covered by the GNU General Public License. This exception does not --
+-- however invalidate any other reasons why the executable file might be --
+-- covered by the GNU Public License. --
+-- --
+-- GNARL was developed by the GNARL team at Florida State University. It is --
+-- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
+-- State University (http://www.gnat.com). --
+-- --
+------------------------------------------------------------------------------
+
+-- This is the FreeBSD PTHREADS version of this package
+
+-- This is only a first approximation.
+-- It should be autogenerated by the m4 macro processor.
+-- Contributed by Daniel Eischen (deischen@iworks.InterWorks.org)
+
+-- DO NOT EDIT this file.
+-- It was automatically generated from another file by the m4 macro processor.
+-- The name of the file you should edit is the same as this one, but with
+-- ".ads" replaced by ".sm4", or
+-- ".adb" replaced by ".bm4", or
+-- ".c" replaced by ".cm4", or
+-- ".dat" replaced by ".tm4"
+
+-- Local options selected:
+-- __TARGET = i386-unknown-freebsd
+-- __ARCH = I386
+-- __OS = FREEBSD
+-- __HAS_SIGCONTEXT = 1
+-- __HAS_UCONTEXT = 0
+-- __THREADS = POSIX_THREADS
+-- __THREAD_VARIANT = ??
+-- __HAS_TIMESPEC = 1
+-- __HAS_NANOSLEEP = 1
+-- __HAS_CLOCK_GETTIME = 0
+-- __HAS_GETTIMEOFDAY = 1
+-- __POSIX_THREAD_PRIO_PROTECT = 0
+-- __POSIX_THREAD_PRIO_INHERIT = 0
+-- __POSIX_THREAD_ATTR_STACKADDR = 1
+-- __POSIX_THREAD_ATTR_STACKSIZE = 1
+-- __POSIX_THREAD_PRIORITY_SCHEDULING = 0
+
+-- This package encapsulates all direct interfaces to OS services
+-- that are needed by children of System.
+
+-- PLEASE DO NOT add any with-clauses to this package
+-- or remove the pragma Elaborate_Body.
+-- It is designed to be a bottom-level (leaf) package.
+
+-- This version is for POSIX-like operating systems
+-- The original file "s-osinte.sm4" contains conditional
+-- macro calls that allow selection of various options.
+-- The options selected for this expansion were:
+
+-- When adding new signals to s-osinte.sm4, don't forget to update
+-- cconst.dat (m4 macro definition data-file) and the files
+-- s-intnam.ads (package Ada.Interrupt_Names) for the various ports.
+
+with Interfaces.C;
+package System.OS_Interface is
+ pragma Preelaborate;
+
+ pragma Linker_Options ("-lc_r");
+
+ 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 Import (C, errno, "__get_errno");
+
+ -- NAMEs not used are commented-out
+ -- NAMEs not supported on this system have __NAME for value
+
+ -- E2BIG : constant := 7;
+ -- EACCES : constant := 13;
+ EAGAIN : constant := 35;
+ -- EBADF : constant := 9;
+ -- EBUSY : constant := 16;
+ -- ECHILD : constant := 10;
+ -- EDEADLK : constant := 11;
+ -- EDOM : constant := 33;
+ -- EEXIST : constant := 17;
+ -- EFAULT : constant := 14;
+ -- EFBIG : constant := 27;
+ EINTR : constant := 4;
+ EINVAL : constant := 22;
+ -- EIO : constant := 5;
+ -- EISDIR : constant := 21;
+ -- EMFILE : constant := 24;
+ -- EMLINK : constant := 31;
+ -- ENAMETOOLONG : constant := 63;
+ -- ENFILE : constant := 23;
+ -- ENODEV : constant := 19;
+ -- ENOENT : constant := 2;
+ -- ENOEXEC : constant := 8;
+ -- ENOLCK : constant := 37;
+ ENOMEM : constant := 12;
+ -- ENOSPC : constant := 28;
+ -- ENOSYS : constant := 78;
+ -- ENOTDIR : constant := 20;
+ -- ENOTEMPTY : constant := 66;
+ -- ENOTTY : constant := 25;
+ -- ENXIO : constant := 6;
+ -- EPERM : constant := 1;
+ -- EPIPE : constant := 32;
+ -- ERANGE : constant := 34;
+ -- EROFS : constant := 30;
+ -- ESPIPE : constant := 29;
+ -- ESRCH : constant := 3;
+ ETIMEDOUT : constant := 60;
+ -- EXDEV : constant := 18;
+
+ -------------
+ -- Signals --
+ -------------
+
+ NSIG : constant := 32;
+ type Signal is new int range 0 .. Interfaces.C."-" (NSIG, 1);
+
+ -- NAMEs not used are commented-out
+ -- NAMEs not supported on this system have __NAME for value
+
+ 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 (NetBSD/FreeBSD)
+ SIGUSR1 : constant := 30; -- user defined signal 1
+ SIGUSR2 : constant := 31; -- user defined signal 2
+
+ 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 struct_sigaction is record
+ sa_handler : System.Address;
+ sa_mask : sigset_t;
+ sa_flags : int;
+ end record;
+ pragma Convention (C, struct_sigaction);
+
+
+ SIG_BLOCK : constant := 1;
+ SIG_UNBLOCK : constant := 2;
+ SIG_SETMASK : constant := 3;
+
+ -- SA_NOCLDSTOP : constant := 8;
+ -- not used
+ -- SA_SIGINFO : constant := __SA_SIGINFO;
+ -- not used
+
+ SIG_DFL : constant := 0;
+ SIG_IGN : constant := 1;
+ -- SIG_ERR : constatn := -1;
+ -- not used
+
+ function sigaction
+ (sig : Signal;
+ act : access struct_sigaction;
+ oact : access struct_sigaction)
+ return int;
+ pragma Import (C, sigaction, "sigaction");
+
+ ----------
+ -- Time --
+ ----------
+
+ type timespec is private;
+
+ function nanosleep (rqtp, rmtp : access timespec) return int;
+ pragma Import (C, nanosleep, "nanosleep");
+
+ 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);
+ type struct_timeval is private;
+ -- This is needed on systems that do not have clock_gettime()
+ -- but do have gettimeofday().
+
+ function To_Duration (TV : struct_timeval) return Duration;
+ pragma Inline (To_Duration);
+
+ function To_Timeval (D : Duration) return struct_timeval;
+ pragma Inline (To_Timeval);
+
+ function gettimeofday
+ (tv : access struct_timeval;
+ tz : access struct_timezone) return int;
+ pragma Import (C, gettimeofday, "gettimeofday");
+
+ procedure usleep (useconds : unsigned_long);
+ pragma Import (C, usleep, "usleep");
+
+ -- add a hook to locate the Epoch, for use with Calendar????
+
+ -------------------------
+ -- Priority Scheduling --
+ -------------------------
+
+ MIN_PRIO : constant := 0;
+ MAX_PRIO : constant := 126;
+
+ SCHED_RR : constant := 0;
+ SCHED_IO : constant := 1;
+ SCHED_FIFO : constant := 2;
+ SCHED_OTHER : constant := 3;
+
+ -------------
+ -- Process --
+ -------------
+
+ type pid_t is private;
+
+ function kill
+ (pid : pid_t;
+ sig : Signal)
+ return int;
+ pragma Import (C, kill, "kill");
+
+ function getpid return pid_t;
+ pragma Import (C, getpid, "getpid");
+
+ -------------
+ -- Threads --
+ -------------
+
+ type Thread_Body is access
+ function (arg : System.Address) return System.Address;
+
+
+ type pthread_t is private;
+ 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;
+
+ ---------------------------
+ -- POSIX.1c Section 3 --
+ ---------------------------
+
+ function sigwait
+ (set : access sigset_t;
+ sig : access Signal)
+ return int;
+ pragma Import (C, sigwait, "sigwait");
+
+ function pthread_kill
+ (thread : pthread_t;
+ sig : Signal)
+ return int;
+ pragma Import (C, pthread_kill, "pthread_kill");
+
+ function pthread_sigmask
+ (how : int;
+ set : access sigset_t;
+ oset : access sigset_t)
+ return int;
+ pragma Import (C, pthread_sigmask, "pthread_sigmask");
+
+ ----------------------------
+ -- POSIX.1c Section 11 --
+ ----------------------------
+
+ function pthread_mutexattr_init
+ (attr : access pthread_mutexattr_t)
+ return int;
+ pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
+
+ function pthread_mutexattr_destroy
+ (attr : access pthread_mutexattr_t)
+ return int;
+ pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
+
+ function pthread_mutex_init
+ (mutex : access pthread_mutex_t;
+ attr : access pthread_mutexattr_t)
+ return int;
+ pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
+
+ function pthread_mutex_destroy
+ (mutex : access pthread_mutex_t)
+ return int;
+ pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
+
+ function pthread_mutex_lock
+ (mutex : access pthread_mutex_t)
+ return int;
+ pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
+
+ function pthread_mutex_unlock
+ (mutex : access pthread_mutex_t)
+ return int;
+ pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
+
+ function pthread_condattr_init
+ (attr : access pthread_condattr_t)
+ return int;
+ pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
+
+ function pthread_condattr_destroy
+ (attr : access pthread_condattr_t)
+ return int;
+ pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
+
+ function pthread_cond_init
+ (cond : access pthread_cond_t;
+ attr : access pthread_condattr_t)
+ return int;
+ pragma Import (C, pthread_cond_init, "pthread_cond_init");
+
+ function pthread_cond_destroy
+ (cond : access pthread_cond_t)
+ return int;
+ pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
+
+ function pthread_cond_signal
+ (cond : access pthread_cond_t)
+ return int;
+ pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
+
+ function pthread_cond_wait
+ (cond : access pthread_cond_t;
+ mutex : access pthread_mutex_t)
+ return int;
+ pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
+
+ function pthread_cond_timedwait
+ (cond : access pthread_cond_t;
+ mutex : access pthread_mutex_t;
+ abstime : access timespec)
+ return int;
+ pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
+
+ ----------------------------
+ -- POSIX.1c Section 13 --
+ ----------------------------
+
+ -- FreeBSD pthreads does not support these yet.
+-- PTHREAD_PRIO_NONE : constant := 0;
+-- PTHREAD_PRIO_PROTECT : constant := 2;
+-- PTHREAD_PRIO_INHERIT : constant := 1;
+
+ -- FreeBSD doesn't have pthread_getschedparam or pthread_setschedparam
+ -- yet. It has pthread_getprio and pthread_setprio, so we use these
+ -- instead.
+
+-- type struct_sched_param is record
+-- prio : int;
+-- no_data : System.Address;
+-- 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_getschedparam
+ (thread : pthread_t)
+ return int;
+ pragma Import (C, pthread_getschedparam, "pthread_getprio");
+
+ function pthread_setschedparam
+ (thread : pthread_t;
+ priority : int)
+ return int;
+ pragma Import (C, pthread_setschedparam, "pthread_setprio");
+
+ 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");
+
+ -- FreeBSD doesn't have pthread_attr_setschedparm and
+ -- pthread_attr_getschedparm yet. It has pthread_attr_setprio and
+ -- pthread_attr_getprio instead. It seems we don't need either one
+ -- of these, though.
+
+-- function pthread_attr_setschedparam
+-- (attr : access pthread_attr_t;
+-- sched_param : access struct_sched_param)
+-- return int;
+-- pragma Import (C, pthread_attr_setschedparam,
+-- "pthread_attr_setschedparam");
+--
+-- function pthread_attr_getschedparam
+-- (attr : access pthread_attr_t;
+-- sched_param : access struct_sched_param)
+-- return int;
+-- pragma Import (C, pthread_attr_getschedparam,
+-- "pthread_attr_getschedparam");
+ function pthread_attr_setschedparam
+ (attr : access pthread_attr_t;
+ priority : int)
+ return int;
+ pragma Import (C, pthread_attr_setschedparam, "pthread_attr_setprio");
+
+ function pthread_attr_getschedparam
+ (attr : access pthread_attr_t)
+ return int;
+ pragma Import (C, pthread_attr_getschedparam, "pthread_attr_getprio");
+
+ 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");
+
+ function pthread_equal (t1 : pthread_t; t2 : pthread_t)
+ return int;
+ -- be careful not to use "=" on thread_t!
+ pragma Import (C, pthread_equal, "pthread_equal");
+
+ ----------------------------
+ -- 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);
+
+ function pthread_key_create
+ (key : access pthread_key_t;
+ destructor : destructor_pointer)
+ return int;
+ pragma Import (C, pthread_key_create, "pthread_key_create");
+
+
+private
+
+ type sigset_t is new unsigned_long;
+
+ -- 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);
+
+ -- In Solaris 2.4 the component sa_handler turns out to
+ -- be one a union type, and the selector is a macro:
+ -- #define sa_handler __funcptr._handler
+ -- #define sa_sigaction __funcptr._sigaction
+
+ 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 struct_timeval is record
+ tv_sec : long;
+ tv_usec : long;
+ end record;
+ pragma Convention (C, struct_timeval);
+
+
+ type enumeral_type_3 is new int;
+ type pthread_attr_t is record
+ schedparam_policy : enumeral_type_3;
+ prio : int;
+ suspend : int;
+ flags : int;
+ arg_attr : System.Address;
+ cleanup_attr : System.Address;
+ stackaddr_attr : System.Address;
+ stacksize_attr : size_t;
+ end record;
+ pragma Convention (C, pthread_attr_t);
+
+ type enumeral_type_2 is new int;
+ type pthread_condattr_t is record
+ c_type : enumeral_type_2;
+ c_flags : long;
+ end record;
+ pragma Convention (C, pthread_condattr_t);
+
+ type enumeral_type_1 is new int;
+ type pthread_mutexattr_t is record
+ m_type : enumeral_type_1;
+ m_flags : long;
+ end record;
+ pragma Convention (C, pthread_mutexattr_t);
+
+ type record_type_3 is null record;
+ pragma Convention (C, record_type_3);
+ type pthread_t is access record_type_3;
+
+ type enumeral_type_4 is new int;
+ type pthread_queue_t is record
+ q_next : System.Address;
+ q_last : System.Address;
+ q_data : System.Address;
+ end record;
+ pragma Convention (C, pthread_queue_t);
+ type union_type_1 is new int;
+ type pthread_mutex_t is record
+ m_type : enumeral_type_4;
+ m_queue : pthread_queue_t;
+ m_owner : System.Address;
+-- m_lock : long;
+ m_data : union_type_1;
+ m_flags : long;
+ end record;
+ pragma Convention (C, pthread_mutex_t);
+
+ type enumeral_type_5 is new int;
+ type pthread_cond_t is record
+ c_type : enumeral_type_5;
+ c_queue : pthread_queue_t;
+-- c_lock : long;
+ c_data : System.Address;
+ c_flags : long;
+ end record;
+ pragma Convention (C, pthread_cond_t);
+
+ type pthread_key_t is new int;
+
+end System.OS_Interface;
diff --git a/lang/gnat/files/5ftaprop.adb b/lang/gnat/files/5ftaprop.adb
new file mode 100644
index 000000000000..33d96dd5d81d
--- /dev/null
+++ b/lang/gnat/files/5ftaprop.adb
@@ -0,0 +1,779 @@
+------------------------------------------------------------------------------
+-- --
+-- GNU ADA RUNTIME LIBRARY (GNARL) COMPONENTS --
+-- --
+-- S Y S T E M . T A S K _ P R I M I T I V E S . O P E R A T I O N S --
+-- --
+-- B o d y --
+-- (Version for new GNARL) --
+-- --
+-- $Revision: 1.4 $ --
+-- --
+-- Copyright (C) 1991,1992,1993,1994,1995,1996 Florida State University --
+-- --
+-- GNARL is free software; you can redistribute it and/or modify it under --
+-- terms of the GNU General Public License as published by the Free Soft- --
+-- ware Foundation; either version 2, or (at your option) any later ver- --
+-- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
+-- for more details. You should have received a copy of the GNU General --
+-- Public License distributed with GNARL; see file COPYING. If not, write --
+-- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
+-- MA 02111-1307, USA. --
+-- --
+-- As a special exception, if other files instantiate generics from this --
+-- unit, or you link this unit with other files to produce an executable, --
+-- this unit does not by itself cause the resulting executable to be --
+-- covered by the GNU General Public License. This exception does not --
+-- however invalidate any other reasons why the executable file might be --
+-- covered by the GNU Public License. --
+-- --
+-- GNARL was developed by the GNARL team at Florida State University. It is --
+-- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
+-- State University (http://www.gnat.com). --
+-- --
+------------------------------------------------------------------------------
+
+-- This is the FreeBSD PTHREADS version of this package. Contributed
+-- by Daniel M. Eischen (deischen@iworks.InterWorks.org).
+
+with Interfaces.C;
+-- used for int
+-- size_t
+
+with System.Error_Reporting;
+-- used for Shutdown
+
+with System.Interrupt_Management;
+-- used for Keep_Unmasked
+-- Abort_Task_Interrupt
+-- Interrupt_ID
+
+with System.OS_Interface;
+-- used for various type, constant, and operations
+
+with System.Parameters;
+-- used for Size_Type
+
+with System.Storage_Elements;
+-- used for To_Address
+-- Integer_Address
+
+with System.Tasking;
+-- used for Ada_Task_Control_Block
+-- Task_ID
+
+with System.Time_Operations;
+-- used for Clock
+-- Clock_Delay_Correction
+
+with Unchecked_Conversion;
+with Unchecked_Deallocation;
+
+package body System.Task_Primitives.Operations is
+
+ use System.Tasking;
+ use Interfaces.C;
+ use System.Error_Reporting;
+ use System.OS_Interface;
+ use System.Parameters;
+ use System.Time_Operations;
+
+ pragma Linker_Options ("-lc_r");
+
+ ------------------
+ -- Local Data --
+ ------------------
+
+ -- The followings are logically constants, but need to be initialized
+ -- at run time.
+
+ ATCB_Key : aliased pthread_key_t;
+ -- Key used to find the Ada Task_ID associated with a thread
+
+ All_Signal_Mask,
+ -- The set of all signals
+
+ Unblocked_Signal_Mask : aliased sigset_t;
+ -- The set of signals that should unblocked in all tasks
+
+ -----------------------
+ -- Local Subprograms --
+ -----------------------
+
+ procedure Abort_Handler
+ (signo : Signal;
+ code : Interfaces.C.int;
+ context : access struct_sigcontext);
+
+ function To_Task_ID is new Unchecked_Conversion (System.Address, Task_ID);
+
+ function To_Address is new Unchecked_Conversion (Task_ID, System.Address);
+
+ -------------------
+ -- Abort_Handler --
+ -------------------
+
+ -- Target-dependent binding of inter-thread Abort signal to
+ -- the raising of the Abort_Signal exception.
+
+ -- The technical issues and alternatives here are essentially
+ -- the same as for raising exceptions in response to other
+ -- signals (e.g. Storage_Error). See code and comments in
+ -- the package body System.Interrupt_Management.
+
+ -- Some implementations may not allow an exception to be propagated
+ -- out of a handler, and others might leave the signal or
+ -- interrupt that invoked this handler masked after the exceptional
+ -- return to the application code.
+
+ -- GNAT exceptions are originally implemented using setjmp()/longjmp().
+ -- On most UNIX systems, this will allow transfer out of a signal handler,
+ -- which is usually the only mechanism available for implementing
+ -- asynchronous handlers of this kind. However, some
+ -- systems do not restore the signal mask on longjmp(), leaving the
+ -- abort signal masked.
+
+ -- Alternative solutions include:
+
+ -- 1. Change the PC saved in the system-dependent Context
+ -- parameter to point to code that raises the exception.
+ -- Normal return from this handler will then raise
+ -- the exception after the mask and other system state has
+ -- been restored (see example below).
+ -- 2. Use siglongjmp()/sigsetjmp() to implement exceptions.
+ -- 3. Unmask the signal in the Abortion_Signal exception handler
+ -- (in the RTS).
+
+ -- The following procedure would be needed if we can't lonjmp out of
+ -- a signal handler. (See below.)
+ -- procedure Raise_Abort_Signal is
+ -- begin
+ -- raise Standard'Abort_Signal;
+ -- end if;
+
+ procedure Abort_Handler
+ (signo : Signal;
+ code : Interfaces.C.int;
+ context : access struct_sigcontext) is
+
+ T : Task_ID := Self;
+
+ begin
+ -- Assuming it is safe to longjmp out of a signal handler, the
+ -- following code can be used:
+
+ if T.Deferral_Level = 0
+ and then T.Pending_ATC_Level < T.ATC_Nesting_Level then
+ raise Standard'Abort_Signal;
+ end if;
+
+ -- Otherwise, something like this is required:
+ -- if not Abort_Is_Deferred.all then
+ -- -- Overwrite the return PC address with the address of the
+ -- -- special raise routine, and "return" to that routine's
+ -- -- starting address.
+ -- Context.PC := Raise_Abort_Signal'Address;
+ -- return;
+ -- end if;
+
+ end Abort_Handler;
+
+ ----------
+ -- Self --
+ ----------
+
+ function Self return Task_ID is
+ Result : System.Address;
+
+ begin
+ Result := pthread_getspecific (ATCB_Key);
+ pragma Assert (Result /= System.Null_Address
+ or else Shutdown ("GNULLI failure---pthread_getspecific"));
+ return To_Task_ID (Result);
+ end Self;
+
+ ---------------------
+ -- Initialize_Lock --
+ ---------------------
+
+ -- Note: mutexes and cond_variables needed per-task basis are
+ -- initialized in Intialize_TCB and the Storage_Error is
+ -- handled. Other mutexes (such as All_Tasks_Lock, Memory_Lock...)
+ -- used in RTS is initialized before any status change of RTS.
+ -- Therefore rasing Storage_Error in the following routines
+ -- should be able to be handled safely.
+
+ procedure Initialize_Lock
+ (Prio : System.Any_Priority;
+ L : access Lock)
+ is
+ Attributes : aliased pthread_mutexattr_t;
+ Result : Interfaces.C.int;
+ begin
+ Result := pthread_mutexattr_init (Attributes'Access);
+ pragma Assert (Result = 0 or else Result = ENOMEM
+ or else Shutdown ("GNULLI failure---pthread_mutexattr_init"));
+
+ if Result = ENOMEM then
+ raise STORAGE_ERROR;
+ end if;
+
+ Result := pthread_mutex_init (L, Attributes'Access);
+
+ pragma Assert (Result = 0 or else Result = ENOMEM
+ or else Shutdown ("GNULLI failure---pthread_mutex_init"));
+
+ if Result = ENOMEM then
+ raise STORAGE_ERROR;
+ end if;
+
+ end Initialize_Lock;
+
+ procedure Initialize_Lock (L : access RTS_Lock) is
+ Attributes : aliased pthread_mutexattr_t;
+ Result : Interfaces.C.int;
+
+ begin
+ Result := pthread_mutexattr_init (Attributes'Access);
+ pragma Assert (Result = 0 or else Result = ENOMEM
+ or else Shutdown ("GNULLI failure---pthread_mutexattr_init"));
+
+ if Result = ENOMEM then
+ raise STORAGE_ERROR;
+ end if;
+
+ Result := pthread_mutex_init (L, Attributes'Access);
+
+ pragma Assert (Result = 0 or else Result = ENOMEM
+ or else Shutdown ("GNULLI failure---pthread_mutex_init"));
+
+ if Result = ENOMEM then
+ raise STORAGE_ERROR;
+ end if;
+
+ end Initialize_Lock;
+
+ -------------------
+ -- Finalize_Lock --
+ -------------------
+
+ procedure Finalize_Lock (L : access Lock) is
+ Result : Interfaces.C.int;
+
+ begin
+ Result := pthread_mutex_destroy (L);
+ pragma Assert (Result = 0
+ or else Shutdown ("GNULLI failure---pthread_mutex_destroy"));
+ end Finalize_Lock;
+
+ procedure Finalize_Lock (L : access RTS_Lock) is
+ Result : Interfaces.C.int;
+
+ begin
+ Result := pthread_mutex_destroy (L);
+ pragma Assert (Result = 0
+ or else Shutdown ("GNULLI failure---pthread_mutex_destroy"));
+ end Finalize_Lock;
+
+ ----------------
+ -- Write_Lock --
+ ----------------
+
+ procedure Write_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
+ Result : Interfaces.C.int;
+
+ begin
+ Result := pthread_mutex_lock (L);
+ Ceiling_Violation := Result = EINVAL;
+ -- assumes the cause of EINVAL is a priority ceiling violation
+ pragma Assert (Result = 0 or else Result = EINVAL
+ or else Shutdown ("GNULLI failure---pthread_mutex_lock"));
+ end Write_Lock;
+
+ procedure Write_Lock (L : access RTS_Lock) is
+ Result : Interfaces.C.int;
+
+ begin
+ Result := pthread_mutex_lock (L);
+ pragma Assert (Result = 0
+ or else Shutdown ("GNULLI failure---pthread_mutex_lock"));
+ end Write_Lock;
+
+ procedure Write_Lock (T : Task_ID) is
+ Result : Interfaces.C.int;
+
+ begin
+ Result := pthread_mutex_lock (T.LL.L'Access);
+ pragma Assert (Result = 0
+ or else Shutdown ("GNULLI failure---pthread_mutex_lock"));
+ end Write_Lock;
+
+ ---------------
+ -- Read_Lock --
+ ---------------
+
+ procedure Read_Lock (L : access Lock; Ceiling_Violation : out Boolean) is
+ begin
+ Write_Lock (L, Ceiling_Violation);
+ end Read_Lock;
+
+ ------------
+ -- Unlock --
+ ------------
+
+ procedure Unlock (L : access Lock) is
+ Result : Interfaces.C.int;
+
+ begin
+ Result := pthread_mutex_unlock (L);
+ pragma Assert (Result = 0
+ or else Shutdown ("GNULLI failure---pthread_mutex_unlock"));
+ end Unlock;
+
+ procedure Unlock (L : access RTS_Lock) is
+ Result : Interfaces.C.int;
+
+ begin
+ Result := pthread_mutex_unlock (L);
+ pragma Assert (Result = 0
+ or else Shutdown ("GNULLI failure---pthread_mutex_unlock"));
+ end Unlock;
+
+ procedure Unlock (T : Task_ID) is
+ Result : Interfaces.C.int;
+
+ begin
+ Result := pthread_mutex_unlock (T.LL.L'Access);
+ pragma Assert (Result = 0
+ or else Shutdown ("GNULLI failure---pthread_mutex_unlock"));
+ end Unlock;
+
+ -------------
+ -- Sleep --
+ -------------
+
+ procedure Sleep (Self_ID : Task_ID) is
+ Result : Interfaces.C.int;
+
+ begin
+ pragma Assert (Self_ID = Self
+ or else Shutdown ("GNULLI failure---Self in Sleep"));
+ Result := pthread_cond_wait (Self_ID.LL.CV'Access, Self_ID.LL.L'Access);
+ -- EINTR is not considered a failure.
+ pragma Assert (Result = 0 or else Result = EINTR
+ or else Shutdown ("GNULLI failure---Sleep"));
+ end Sleep;
+
+ ---------------
+ -- Sleep_For --
+ ---------------
+
+ procedure Sleep_For (Self_ID : Task_ID; Rel_Time : Duration) is
+ Result : Interfaces.C.Int;
+ Request : aliased timespec;
+
+ begin
+ pragma Assert (Self_ID = Self
+ or else Shutdown ("GNULLI failure---Self in Sleep_For"));
+ Request := To_Timespec (Rel_Time + Clock + Clock_Delay_Correction);
+ Result := pthread_cond_timedwait
+ (Self_ID.LL.CV'Access, Self_ID.LL.L'Access, Request'Access);
+ pragma Assert
+ (Result = 0
+ or else (Clock >= To_Duration (Request) - Clock_Delay_Correction)
+ or else Shutdown ("GNULLI failure---Sleep_For"));
+ end Sleep_For;
+
+ -----------------
+ -- Sleep_Until --
+ -----------------
+
+ procedure Sleep_Until (Self_ID : Task_ID; Abs_Time : Duration) is
+ Result : Interfaces.C.Int;
+ Request : aliased timespec;
+
+ begin
+ pragma Assert (Self_ID = Self
+ or else Shutdown ("GNULLI failure---Self in Sleep_Until"));
+ Request := To_Timespec (Abs_Time + Clock_Delay_Correction);
+ Result := pthread_cond_timedwait
+ (Self_ID.LL.CV'Access, Self_ID.LL.L'Access, Request'Access);
+ pragma Assert
+ (Result = 0 or else Clock >= Abs_Time
+ or else Shutdown ("GNULLI failure---Sleep_Until (early)"));
+ end Sleep_Until;
+
+ ------------
+ -- Wakeup --
+ ------------
+
+ procedure Wakeup (T : Task_ID) is
+ Result : Interfaces.C.int;
+
+ begin
+ Result := pthread_cond_signal (T.LL.CV'Access);
+ pragma Assert (Result = 0
+ or else Shutdown ("GNULLI failure---Wakeup"));
+ end Wakeup;
+
+ -----------
+ -- Yield --
+ -----------
+
+ procedure Yield is
+ Result : Interfaces.C.int;
+ begin
+ Result := sched_yield;
+ end Yield;
+
+ ------------------
+ -- Set_Priority --
+ ------------------
+
+ -- FreeBSD doesn't have the correct pthread_setschedparam routine
+ -- yet. Instead, pthread_setschedparam is imported from pthread_setprio
+ -- which only takes a pthread_t and integer as arguments.
+-- procedure Set_Priority (T : Task_ID; Prio : System.Any_Priority) is
+-- Result : Interfaces.C.int;
+-- Param : aliased struct_sched_param;
+-- begin
+-- T.LL.Current_Priority := Interfaces.C.int (Prio);
+-- Param.prio := Interfaces.C.int (Prio);
+--
+-- Result := pthread_setschedparam (T.LL.Thread, SCHED_FIFO,
+-- Param'Access);
+-- pragma Assert (Result = 0
+-- or else Shutdown ("GNULLI failure---Set_Priority"));
+--
+-- end Set_Priority;
+ procedure Set_Priority (T : Task_ID; Prio : System.Any_Priority) is
+ Result : Interfaces.C.int;
+ begin
+ T.LL.Current_Priority := Interfaces.C.int (Prio);
+
+ Result := pthread_setschedparam (T.LL.Thread, Interfaces.C.int (Prio));
+ pragma Assert (Result = 0
+ or else Shutdown ("GNULLI failure---Set_Priority"));
+
+ end Set_Priority;
+
+ ------------------
+ -- Get_Priority --
+ ------------------
+
+ function Get_Priority (T : Task_ID) return System.Any_Priority is
+ begin
+ return System.Any_Priority (T.LL.Current_Priority);
+ end Get_Priority;
+
+ ----------------
+ -- Enter_Task --
+ ----------------
+
+ procedure Enter_Task (Self_ID : Task_ID) is
+ Result : Interfaces.C.int;
+ Old_Set : aliased sigset_t;
+
+ begin
+
+ Self_ID.LL.Thread := pthread_self;
+
+ -- It is not safe for the new task accept signals until it
+ -- has bound its TCB pointer to the thread with pthread_setspecific (),
+ -- since the handler wrappers use the TCB pointer
+ -- to restore the stack limit.
+
+ Result := pthread_setspecific (ATCB_Key, To_Address (Self_ID));
+ pragma Assert (Result = 0 or else
+ Shutdown ("GNULLI failure---Enter_Task (pthread_setspecific)"));
+
+ -- Must wait until the above operation is done to unmask signals,
+ -- since signal handler for abort will try to access the ATCB to
+ -- check whether abort is deferred, and exception propagation will
+ -- try to use task-specific data as mentioned above.
+
+ Result := pthread_sigmask
+ (SIG_UNBLOCK, Unblocked_Signal_Mask'Access, Old_Set'Access);
+ pragma Assert (Result = 0
+ or else Shutdown ("GNULLI failure---Enter_Task (pthread_sigmask)"));
+
+ end Enter_Task;
+
+ ----------------------
+ -- Initialize_TCB --
+ ----------------------
+
+ procedure Initialize_TCB (Self_ID : Task_ID; Succeeded : out Boolean) is
+ Mutex_Attr : aliased pthread_mutexattr_t;
+ Result : Interfaces.C.int;
+ Cond_Attr : aliased pthread_condattr_t;
+
+ begin
+ Result := pthread_mutexattr_init (Mutex_Attr'Access);
+ pragma Assert (Result = 0 or else Result = ENOMEM
+ or else Shutdown ("GNULLI failure---pthread_mutexattr_init"));
+
+ if Result /= 0 then
+ Succeeded := False;
+ return;
+ end if;
+
+ Result := pthread_mutex_init (Self_ID.LL.L'Access, Mutex_Attr'Access);
+ pragma Assert (Result = 0 or else Result = ENOMEM
+ or else Shutdown ("GNULLI failure---pthread_mutex_init"));
+
+ if Result /= 0 then
+ Succeeded := False;
+ return;
+ end if;
+
+ Result := pthread_condattr_init (Cond_Attr'Access);
+ pragma Assert (Result = 0 or else Result = ENOMEM
+ or else Shutdown ("GNULLI failure---pthread_condattr_init"));
+
+ if Result /= 0 then
+ Result := pthread_mutex_destroy (Self_ID.LL.L'Access);
+ pragma Assert (Result = 0
+ or else Shutdown ("GNULLI failure---pthread_mutex_destory"));
+ Succeeded := False;
+ return;
+ end if;
+
+ Result := pthread_cond_init (Self_ID.LL.CV'Access, Cond_Attr'Access);
+ pragma Assert (Result = 0 or else Result = ENOMEM
+ or else Shutdown ("GNULLI failure---pthread_cond_init"));
+
+ if Result /= 0 then
+ Result := pthread_mutex_destroy (Self_ID.LL.L'Access);
+ pragma Assert (Result = 0
+ or else Shutdown ("GNULLI failure---pthread_mutex_destory"));
+ Succeeded := False;
+ return;
+ end if;
+
+ Succeeded := True;
+
+ end Initialize_TCB;
+
+ -----------------
+ -- Create_Task --
+ -----------------
+
+ procedure Create_Task
+ (T : Task_ID;
+ Wrapper : System.Address;
+ Stack_Size : System.Parameters.Size_Type;
+ Priority : System.Any_Priority;
+ Succeeded : out Boolean)
+ is
+ Attributes : aliased pthread_attr_t;
+ Adjusted_Stack_Size : Interfaces.C.size_t;
+ Result : Interfaces.C.int;
+ Old_Set : aliased sigset_t;
+
+ function Thread_Body_Access is new
+ Unchecked_Conversion (System.Address, Thread_Body);
+
+ begin
+ if Stack_Size = System.Parameters.Unspecified_Size then
+ Adjusted_Stack_Size := Interfaces.C.size_t (2 * Default_Stack_Size);
+ -- Let's change the s-parame.adb to give a larger Stack_Size ?????
+ else
+ if Stack_Size < Size_Type (Minimum_Stack_Size) then
+ Adjusted_Stack_Size :=
+ Interfaces.C.size_t (Stack_Size + Minimum_Stack_Size);
+
+ -- sum, instead of max: may be overkill, but should be safe
+ -- thr_min_stack is a function call.
+
+ -- Actually, we want to get the Default_Stack_Size and
+ -- Minimum_Stack_Size from the file System.Parameters.
+ -- Right now the package is not made target specific.
+ -- We use our own local definitions for now ???
+
+ else
+ Adjusted_Stack_Size := Interfaces.C.size_t (Stack_Size);
+ end if;
+
+ -- Ask for 4 extra bytes of stack space so that the ATCB
+ -- pointer can be stored below the stack limit, plus extra
+ -- space for the frame of Task_Wrapper. This is so the user
+ -- gets the amount of stack requested exclusive of the needs
+ -- of the runtime.
+
+ end if;
+
+ Adjusted_Stack_Size := Adjusted_Stack_Size + 4;
+
+ -- Since the initial signal mask of a thread is inherited from the
+ -- creator, we need to set our local signal mask mask all signals
+ -- during the creation operation, to make sure the new thread is
+ -- not disturbed by signals before it has set its own Task_ID.
+
+ Result := pthread_attr_init (Attributes'Access);
+ pragma Assert (Result = 0 or else Result = ENOMEM
+ or else Shutdown ("GNULLI failure---pthread_attr_init"));
+
+ if Result /= 0 then
+ Succeeded := False;
+ return;
+ end if;
+
+ -- Create threads detached following email to report@gnat.com
+ -- confirming this is correct (should be fixed for GNAT after 3.09).
+ -- (Peter Burwood)
+ Result := pthread_attr_setdetachstate
+ (Attributes'Access, PTHREAD_CREATE_DETACHED);
+ pragma Assert (Result = 0
+ or else Shutdown ("GNULLI failure---pthread_setdetachstate"));
+
+ Result := pthread_attr_setstacksize
+ (Attributes'Access, Interfaces.C.size_t (Adjusted_Stack_Size));
+ pragma Assert (Result = 0
+ or else Shutdown ("GNULLI failure---pthread_attr_setstacksize"));
+
+ Result := pthread_sigmask
+ (SIG_SETMASK, All_Signal_Mask'Access, Old_Set'Access);
+ pragma Assert (Result = 0 or else
+ Shutdown ("GNULLI failure---Create_Task (pthread_sigmask)"));
+
+ Result := pthread_create
+ (T.LL.Thread'Access,
+ Attributes'Access,
+ Thread_Body_Access (Wrapper),
+ To_Address (T));
+ pragma Assert (Result = 0 or else Result = EAGAIN
+ or else Shutdown ("GNULLI failure---Create_Task (pthread_create)"));
+
+ Succeeded := Result = 0;
+
+ Result := pthread_sigmask
+ (SIG_SETMASK, Old_Set'Unchecked_Access, null);
+ pragma Assert (Result = 0 or else
+ Shutdown ("GNULLI failure---Create_Task (pthread_sigmask)"));
+
+ Set_Priority (T, Priority);
+
+ end Create_Task;
+
+ ------------------
+ -- Finalize_TCB --
+ ------------------
+
+ procedure Finalize_TCB (T : Task_ID) is
+ Result : Interfaces.C.int;
+ Tmp : Task_ID := T;
+
+ procedure Free is new Unchecked_Deallocation
+ (Ada_Task_Control_Block, Task_ID);
+
+ begin
+ Result := pthread_mutex_destroy (T.LL.L'Access);
+ pragma Assert (Result = 0 or else
+ Shutdown ("GNULLI failure---Finalize_TCB (pthread_mutex_destroy)"));
+ Result := pthread_cond_destroy (T.LL.CV'Access);
+ pragma Assert (Result = 0 or else
+ Shutdown ("GNULLI failure---Finalize_TCB (pthread_cond_destroy)"));
+
+ -- Following report to report@gnat.com regarding ATCB memory leak
+ -- this Free is now called. The answer back from ACT didn't give
+ -- the source for a fix, but I calling this Free is sufficient.
+ -- (Peter Burwood)
+ Free (Tmp);
+ end Finalize_TCB;
+
+ ---------------
+ -- Exit_Task --
+ ---------------
+
+ procedure Exit_Task is
+ begin
+ pthread_exit (System.Null_Address);
+ end Exit_Task;
+
+ ----------------
+ -- Abort_Task --
+ ----------------
+
+ procedure Abort_Task (T : Task_ID) is
+ Result : Interfaces.C.int;
+
+ begin
+ Result := pthread_kill (T.LL.Thread,
+ Signal (System.Interrupt_Management.Abort_Task_Interrupt));
+ pragma Assert (Result = 0
+ or else Shutdown ("GNULLI failure---Abort_Task"));
+ end Abort_Task;
+
+ ----------------
+ -- Initialize --
+ ----------------
+
+ procedure Initialize (Environment_Task : Task_ID) is
+ act : aliased struct_sigaction;
+ old_act : aliased struct_sigaction;
+ Tmp_Set : aliased sigset_t;
+ Result : Interfaces.C.int;
+
+ begin
+
+ Enter_Task (Environment_Task);
+
+ -- Install the abort-signal handler
+
+ act.sa_flags := 0;
+ act.sa_handler := Abort_Handler'Address;
+
+ Result := sigemptyset (Tmp_Set'Access);
+ pragma Assert (Result = 0
+ or else Shutdown ("GNULLI failure---Initialize (sigemptyset)"));
+ act.sa_mask := Tmp_Set;
+
+ Result :=
+ sigaction (
+ Signal (System.Interrupt_Management.Abort_Task_Interrupt),
+ act'Access,
+ old_act'Access);
+ pragma Assert (Result = 0
+ or else Shutdown ("GNULLI failure---Initialize (sigaction)"));
+
+ end Initialize;
+
+begin
+ declare
+ Result : Interfaces.C.int;
+ begin
+
+ -- pthread_init;
+ -- This call is needed for MIT thread library. We wish
+ -- we could move this to s-osinte.adb and be executed during
+ -- the package elaboration. However, in doing so we get an
+ -- elaboration problem.
+
+ -- It doesn't appear necessary to call it because pthread_init is
+ -- called before any Ada elaboration occurs.
+
+ Result := sigfillset (All_Signal_Mask'Access);
+ pragma Assert (Result = 0
+ or else Shutdown ("GNULLI failure---Initialize (sigfillset)"));
+
+ Result := sigemptyset (Unblocked_Signal_Mask'Access);
+ pragma Assert (Result = 0
+ or else Shutdown ("GNULLI failure---Initialize (sigemptyset)"));
+
+ for J in Interrupt_Management.Interrupt_ID loop
+ if System.Interrupt_Management.Keep_Unmasked (J) then
+ Result := sigaddset (Unblocked_Signal_Mask'Access, Signal (J));
+ pragma Assert (Result = 0
+ or else Shutdown ("GNULLI failure---Initialize (sigaddset)"));
+ end if;
+ end loop;
+
+ Result := pthread_key_create (ATCB_Key'Access, null);
+ pragma Assert (Result = 0
+ or else Shutdown ("GNULLI failure---Initialize (pthread_keycreate)"));
+ end;
+
+end System.Task_Primitives.Operations;
diff --git a/lang/gnat/files/5ftaspri.ads b/lang/gnat/files/5ftaspri.ads
new file mode 100644
index 000000000000..9cd6b64d989b
--- /dev/null
+++ b/lang/gnat/files/5ftaspri.ads
@@ -0,0 +1,138 @@
+------------------------------------------------------------------------------
+-- --
+-- GNU ADA RUNTIME LIBRARY (GNARL) COMPONENTS --
+-- --
+-- S Y S T E M . T A S K _ P R I M I T I V E S --
+-- --
+-- S p e c --
+-- (Version for new GNARL) --
+-- --
+-- $Revision: 1.1 $ --
+-- --
+-- Copyright (C) 1991,92,93,94,95,1996 Free Software Foundation, Inc. --
+-- --
+-- GNARL is free software; you can redistribute it and/or modify it under --
+-- terms of the GNU General Public License as published by the Free Soft- --
+-- ware Foundation; either version 2, or (at your option) any later ver- --
+-- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
+-- for more details. You should have received a copy of the GNU General --
+-- Public License distributed with GNARL; see file COPYING. If not, write --
+-- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
+-- MA 02111-1307, USA. --
+-- --
+-- As a special exception, if other files instantiate generics from this --
+-- unit, or you link this unit with other files to produce an executable, --
+-- this unit does not by itself cause the resulting executable to be --
+-- covered by the GNU General Public License. This exception does not --
+-- however invalidate any other reasons why the executable file might be --
+-- covered by the GNU Public License. --
+-- --
+-- GNARL was developed by the GNARL team at Florida State University. It is --
+-- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
+-- State University (http://www.gnat.com). --
+-- --
+------------------------------------------------------------------------------
+
+-- This is the FreeBSD PTHREADS version of this package. Contributed
+-- by Daniel M. Eischen (deischen@iworks.InterWorks.org).
+
+-- DO NOT EDIT this file.
+-- It was automatically generated from another file by the m4 macro processor.
+-- The name of the file you should edit is the same as this one, but with
+-- ".ads" replaced by ".sm4", or
+-- ".adb" replaced by ".bm4", or
+-- ".c" replaced by ".cm4", or
+-- ".dat" replaced by ".tm4"
+
+-- Local options selected:
+-- __TARGET = i386-unknown-freebsd
+-- __ARCH = I386
+-- __OS = FREEBSD
+-- __HAS_SIGCONTEXT = 1
+-- __HAS_UCONTEXT = 0
+-- __THREADS = POSIX_THREADS
+-- __THREAD_VARIANT = ??
+-- __HAS_TIMESPEC = 1
+-- __HAS_NANOSLEEP = 1
+-- __HAS_CLOCK_GETTIME = 0
+-- __HAS_GETTIMEOFDAY = 1
+-- __POSIX_THREAD_PRIO_PROTECT = 0
+-- __POSIX_THREAD_PRIO_INHERIT = 0
+-- __POSIX_THREAD_ATTR_STACKADDR = 1
+-- __POSIX_THREAD_ATTR_STACKSIZE = 1
+-- __POSIX_THREAD_PRIORITY_SCHEDULING = 0
+
+-- This package provides low-level support for most tasking features.
+
+with Interfaces.C;
+-- used for int
+-- size_t
+
+with System.OS_Interface;
+-- used for pthread_mutex_t
+-- pthread_cond_t
+-- pthread_t
+
+package System.Task_Primitives is
+
+ type Lock is limited private;
+ -- Should be used for implementation of protected objects.
+
+ type RTS_Lock is limited private;
+ -- Should be used inside the runtime system.
+ -- The difference between Lock and the RTS_Lock is that the later
+ -- one serves only as a semaphore so that do not check for
+ -- ceiling violations.
+
+ type Task_Body_Access is access procedure;
+ -- Pointer to the task body's entry point (or possibly a wrapper
+ -- declared local to the GNARL).
+
+ type Private_Data is limited private;
+ -- Any information that the GNULLI needs maintained on a per-task
+ -- basis. A component of this type is guaranteed to be included
+ -- in the Ada_Task_Control_Block.
+
+private
+
+ type Lock is new System.OS_Interface.pthread_mutex_t;
+ type RTS_Lock is new System.OS_Interface.pthread_mutex_t;
+ type Private_Data is record
+ Thread : aliased System.OS_Interface.pthread_t;
+ pragma Atomic (Thread);
+ -- Thread field may be updated by two different threads of control.
+ -- (See, Enter_Task and Create_Task in s-taprop.adb).
+ -- They put the same value (thr_self value). We do not want to
+ -- use lock on those operations and the only thing we have to
+ -- make sure is that they are updated in atomic fashion.
+ CV : aliased System.OS_Interface.pthread_cond_t;
+ L : aliased RTS_Lock;
+ -- protection for all components is lock L
+ Current_Priority : Interfaces.C.int := 0;
+ -- Active priority, except that the effects of protected object
+ -- priority ceilings are not reflected. This only reflects explicit
+ -- priority changes and priority inherited through task activation
+ -- and rendezvous.
+ -- Ada 95 notes: In Ada 95, this field will be transferred to the
+ -- Priority field of an Entry_Calls component when an entry call
+ -- is initiated. The Priority of the Entry_Calls component will not
+ -- change for the duration of the call. The accepting task can
+ -- use it to boost its own priority without fear of its changing in
+ -- the meantime.
+ -- This can safely be used in the priority ordering
+ -- of entry queues. Once a call is queued, its priority does not
+ -- change.
+ -- Since an entry call cannot be made while executing
+ -- a protected action, the priority of a task will never reflect a
+ -- priority ceiling change at the point of an entry call.
+ -- Protection: Only written by Self, and only accessed when Acceptor
+ -- accepts an entry or when Created activates, at which points Self is
+ -- suspended.
+ Stack_Size : Interfaces.c.size_t;
+ -- Requested stack size.
+ -- Protection: Only used by Self.
+ end record;
+
+end System.Task_Primitives;
diff --git a/lang/gnat/files/patch-aa b/lang/gnat/files/patch-aa
new file mode 100644
index 000000000000..eb8cd4588e4a
--- /dev/null
+++ b/lang/gnat/files/patch-aa
@@ -0,0 +1,141 @@
+diff -c orig/Makefile.in gcc/Makefile.in
+*** orig/Makefile.in Thu Mar 27 17:32:15 1997
+--- gcc-2.7.2.1/Makefile.in Fri Apr 4 19:55:09 1997
+***************
+*** 189,200 ****
+ local_prefix = /usr/local
+ # Directory in which to put host dependent programs and libraries
+ exec_prefix = $(prefix)
+ # Directory in which to put the executable for the command `gcc'
+ bindir = $(exec_prefix)/bin
+ # Directory in which to put the directories used by the compiler.
+ libdir = $(exec_prefix)/lib
+ # Directory in which the compiler finds executables, libraries, etc.
+! libsubdir = $(libdir)/gcc-lib/$(target)/$(version)
+ # Directory in which the compiler finds g++ includes.
+ gxx_include_dir= $(libdir)/g++-include
+ # Directory to search for site-specific includes.
+--- 189,202 ----
+ local_prefix = /usr/local
+ # Directory in which to put host dependent programs and libraries
+ exec_prefix = $(prefix)
++ # directory to hold compilers
++ compdir = $(prefix)/libexec/ada
+ # Directory in which to put the executable for the command `gcc'
+ bindir = $(exec_prefix)/bin
+ # Directory in which to put the directories used by the compiler.
+ libdir = $(exec_prefix)/lib
+ # Directory in which the compiler finds executables, libraries, etc.
+! libsubdir = $(libdir)
+ # Directory in which the compiler finds g++ includes.
+ gxx_include_dir= $(libdir)/g++-include
+ # Directory to search for site-specific includes.
+***************
+*** 213,219 ****
+ mandir = $(prefix)/man/man1
+ # Directory in which to find other cross-compilation tools and headers.
+ # Used in install-cross.
+! tooldir = $(exec_prefix)/$(target)
+ # Dir for temp files.
+ tmpdir = /tmp
+
+--- 215,221 ----
+ mandir = $(prefix)/man/man1
+ # Directory in which to find other cross-compilation tools and headers.
+ # Used in install-cross.
+! tooldir = $(exec_prefix)
+ # Dir for temp files.
+ tmpdir = /tmp
+
+***************
+*** 1141,1148 ****
+
+ gcc.o: gcc.c $(CONFIG_H) multilib.h config.status $(lang_specs_files)
+ $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
+ -DSTANDARD_STARTFILE_PREFIX=\"$(libdir)/\" \
+! -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc-lib/\" \
+ -DDEFAULT_TARGET_VERSION=\"$(version)\" \
+ -DDEFAULT_TARGET_MACHINE=\"$(target)\" \
+ -DTOOLDIR_BASE_PREFIX=\"$(exec_prefix)/\" \
+--- 1143,1152 ----
+
+ gcc.o: gcc.c $(CONFIG_H) multilib.h config.status $(lang_specs_files)
+ $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
++ -DFREEBSD_NATIVE \
++ -DFREEBSD_PREFIX=\"$(prefix)\" \
+ -DSTANDARD_STARTFILE_PREFIX=\"$(libdir)/\" \
+! -DSTANDARD_EXEC_PREFIX=\"$(libdir)/\" \
+ -DDEFAULT_TARGET_VERSION=\"$(version)\" \
+ -DDEFAULT_TARGET_MACHINE=\"$(target)\" \
+ -DTOOLDIR_BASE_PREFIX=\"$(exec_prefix)/\" \
+***************
+*** 2055,2069 ****
+ # Create the installation directory.
+ install-dir:
+ -if [ -d $(libdir) ] ; then true ; else mkdir $(libdir) ; chmod a+rx $(libdir) ; fi
+- -if [ -d $(libdir)/gcc-lib ] ; then true ; else mkdir $(libdir)/gcc-lib ; chmod a+rx $(libdir)/gcc-lib ; fi
+ # This dir isn't currently searched by cpp.
+ # -if [ -d $(libdir)/gcc-lib/include ] ; then true ; else mkdir $(libdir)/gcc-lib/include ; chmod a+rx $(libdir)/gcc-lib/include ; fi
+! -if [ -d $(libdir)/gcc-lib/$(target) ] ; then true ; else mkdir $(libdir)/gcc-lib/$(target) ; chmod a+rx $(libdir)/gcc-lib/$(target) ; fi
+! -if [ -d $(libdir)/gcc-lib/$(target)/$(version) ] ; then true ; else mkdir $(libdir)/gcc-lib/$(target)/$(version) ; chmod a+rx $(libdir)/gcc-lib/$(target)/$(version) ; fi
+! -if [ -d $(libdir)/gcc-lib/$(target)/$(version)/include ] ; then true ; else mkdir $(libdir)/gcc-lib/$(target)/$(version)/include ; chmod a+rx $(libdir)/gcc-lib/$(target)/$(version)/include ; fi
+ -if [ -d $(bindir) ] ; then true ; else mkdir $(bindir) ; chmod a+rx $(bindir) ; fi
+ -if [ -d $(includedir) ] ; then true ; else mkdir $(includedir) ; chmod a+rx $(includedir) ; fi
+ -if [ -d $(tooldir) ] ; then true ; else mkdir $(tooldir) ; chmod a+rx $(tooldir) ; fi
+ -if [ -d $(assertdir) ] ; then true ; else mkdir $(assertdir) ; chmod a+rx $(assertdir) ; fi
+ -if [ -d $(infodir) ] ; then true ; else mkdir $(infodir) ; chmod a+rx $(infodir) ; fi
+ # We don't use mkdir -p to create the parents of mandir,
+--- 2059,2073 ----
+ # Create the installation directory.
+ install-dir:
+ -if [ -d $(libdir) ] ; then true ; else mkdir $(libdir) ; chmod a+rx $(libdir) ; fi
+ # This dir isn't currently searched by cpp.
+ # -if [ -d $(libdir)/gcc-lib/include ] ; then true ; else mkdir $(libdir)/gcc-lib/include ; chmod a+rx $(libdir)/gcc-lib/include ; fi
+! # -if [ -d $(libdir)/gcc-lib/$(target) ] ; then true ; else mkdir $(libdir)/gcc-lib/$(target) ; chmod a+rx $(libdir)/gcc-lib/$(target) ; fi
+! # -if [ -d $(libdir)/gcc-lib/$(target)/$(version) ] ; then true ; else mkdir $(libdir)/gcc-lib/$(target)/$(version) ; chmod a+rx $(libdir)/gcc-lib/$(target)/$(version) ; fi
+! # -if [ -d $(libdir)/gcc-lib/$(target)/$(version)/include ] ; then true ; else mkdir $(libdir)/gcc-lib/$(target)/$(version)/include ; chmod a+rx $(libdir)/gcc-lib/$(target)/$(version)/include ; fi
+ -if [ -d $(bindir) ] ; then true ; else mkdir $(bindir) ; chmod a+rx $(bindir) ; fi
+ -if [ -d $(includedir) ] ; then true ; else mkdir $(includedir) ; chmod a+rx $(includedir) ; fi
+ -if [ -d $(tooldir) ] ; then true ; else mkdir $(tooldir) ; chmod a+rx $(tooldir) ; fi
++ -if [ -d $(compdir) ] ; then true ; else mkdir $(compdir) ; chmod a+rx $(compdir) ; fi
+ -if [ -d $(assertdir) ] ; then true ; else mkdir $(assertdir) ; chmod a+rx $(assertdir) ; fi
+ -if [ -d $(infodir) ] ; then true ; else mkdir $(infodir) ; chmod a+rx $(infodir) ; fi
+ # We don't use mkdir -p to create the parents of mandir,
+***************
+*** 2077,2084 ****
+ install-common: native install-dir $(EXTRA_PARTS) lang.install-common
+ for file in $(COMPILERS); do \
+ if [ -f $$file ] ; then \
+! rm -f $(libsubdir)/$$file; \
+! $(INSTALL_PROGRAM) $$file $(libsubdir)/$$file; \
+ else true; \
+ fi; \
+ done
+--- 2081,2088 ----
+ install-common: native install-dir $(EXTRA_PARTS) lang.install-common
+ for file in $(COMPILERS); do \
+ if [ -f $$file ] ; then \
+! rm -f $(compdir)/$$file; \
+! $(INSTALL_PROGRAM) $$file $(compdir)/$$file; \
+ else true; \
+ fi; \
+ done
+***************
+*** 2110,2117 ****
+ $(INSTALL_DATA) SYSCALLS.c.X $(libsubdir)/SYSCALLS.c.X; \
+ chmod a-x $(libsubdir)/SYSCALLS.c.X; \
+ fi
+! -rm -f $(libsubdir)/cpp$(exeext)
+! $(INSTALL_PROGRAM) cpp$(exeext) $(libsubdir)/cpp$(exeext)
+
+ # Install the driver program as $(target)-gcc
+ # and also as either gcc (if native) or $(tooldir)/bin/gcc.
+--- 2114,2121 ----
+ $(INSTALL_DATA) SYSCALLS.c.X $(libsubdir)/SYSCALLS.c.X; \
+ chmod a-x $(libsubdir)/SYSCALLS.c.X; \
+ fi
+! -rm -f $(compdir)/cpp$(exeext)
+! $(INSTALL_PROGRAM) cpp$(exeext) $(compdir)/cpp$(exeext)
+
+ # Install the driver program as $(target)-gcc
+ # and also as either gcc (if native) or $(tooldir)/bin/gcc.
diff --git a/lang/gnat/files/patch-ab b/lang/gnat/files/patch-ab
new file mode 100644
index 000000000000..baf5ebdeec18
--- /dev/null
+++ b/lang/gnat/files/patch-ab
@@ -0,0 +1,36 @@
+diff -c orig/gcc.c gcc/gcc.c
+*** orig/gcc.c Thu Apr 3 08:37:06 1997
+--- gcc-2.7.2.1/gcc.c Fri Apr 4 23:21:00 1997
+***************
+*** 1354,1362 ****
+ #undef MD_STARTFILE_PREFIX_1
+ #endif
+
+! #ifndef STANDARD_EXEC_PREFIX
+! #define STANDARD_EXEC_PREFIX "/usr/local/lib/gcc-lib/"
+! #endif /* !defined STANDARD_EXEC_PREFIX */
+
+ static char *standard_exec_prefix = STANDARD_EXEC_PREFIX;
+ static char *standard_exec_prefix_1 = "/usr/lib/gcc/";
+--- 1354,1360 ----
+ #undef MD_STARTFILE_PREFIX_1
+ #endif
+
+! #define STANDARD_EXEC_PREFIX FREEBSD_PREFIX "/libexec/"
+
+ static char *standard_exec_prefix = STANDARD_EXEC_PREFIX;
+ static char *standard_exec_prefix_1 = "/usr/lib/gcc/";
+***************
+*** 2708,2715 ****
+--- 2706,2716 ----
+ /* Use 2 as fourth arg meaning try just the machine as a suffix,
+ as well as trying the machine and the version. */
+ #ifdef FREEBSD_NATIVE
++ add_prefix (&exec_prefixes, FREEBSD_PREFIX "/libexec/ada/", 0, 0, NULL_PTR);
++ add_prefix (&exec_prefixes, FREEBSD_PREFIX "/libexec/", 0, 0, NULL_PTR);
+ add_prefix (&exec_prefixes, "/usr/libexec/", 0, 0, NULL_PTR);
+ add_prefix (&exec_prefixes, "/usr/bin/", 0, 0, NULL_PTR);
++ add_prefix (&startfile_prefixes, FREEBSD_PREFIX "/lib/", 0, 0, NULL_PTR);
+ add_prefix (&startfile_prefixes, "/usr/libdata/gcc/", 0, 0, NULL_PTR);
+ #else /* not FREEBSD_NATIVE */
+ #ifndef OS2
diff --git a/lang/gnat/files/patch-ac b/lang/gnat/files/patch-ac
new file mode 100644
index 000000000000..e2e24ca4b439
--- /dev/null
+++ b/lang/gnat/files/patch-ac
@@ -0,0 +1,20 @@
+diff -c orig/ada/Makefile.in gcc/ada/Makefile.in
+*** orig/ada/Makefile.in Thu Apr 3 12:40:23 1997
+--- gcc-2.7.2.1/ada/Makefile.in Thu Apr 3 12:41:49 1997
+***************
+*** 956,962 ****
+ $(srcdir)/../move-if-change tmp-ttypef.ads ttypef.ads
+ touch stamp-ttypef
+
+! ADA_INCLUDE_DIR = $(prefix)/adainclude
+ ADA_RTL_OBJ_DIR = $(libsubdir)/adalib
+
+ # Note: the strings below do not make sense for Ada strings in the OS/2
+--- 956,962 ----
+ $(srcdir)/../move-if-change tmp-ttypef.ads ttypef.ads
+ touch stamp-ttypef
+
+! ADA_INCLUDE_DIR = $(prefix)/include/adainclude
+ ADA_RTL_OBJ_DIR = $(libsubdir)/adalib
+
+ # Note: the strings below do not make sense for Ada strings in the OS/2
diff --git a/lang/gnat/files/patch-ad b/lang/gnat/files/patch-ad
new file mode 100644
index 000000000000..b1a4ed1dd153
--- /dev/null
+++ b/lang/gnat/files/patch-ad
@@ -0,0 +1,46 @@
+diff -c orig/ada/Makefile.in gcc/ada/Makefile.in
+*** orig/ada/Makefile.in Tue Jan 21 00:01:54 1997
+--- gcc-2.7.2.1/ada/Makefile.in Sat May 10 22:42:27 1997
+***************
+*** 189,193 ****
+ $(CC) -c $(ALL_ADAFLAGS) $<
+ .ads.o:
+! $(CC) -c $(ALL_ADAFLAGS) $<
+
+ # This tells GNU make version 3 not to export all the variables
+--- 189,199 ----
+ $(CC) -c $(ALL_ADAFLAGS) $<
+ .ads.o:
+! @if [ -f $*.adb ]; then \
+! echo "$(CC) -c $(ALL_ADAFLAGS) $*.adb"; \
+! $(CC) -c $(ALL_ADAFLAGS) $*.adb; \
+! else \
+! echo "$(CC) -c $(ALL_ADAFLAGS) $*.ads"; \
+! $(CC) -c $(ALL_ADAFLAGS) $*.ads; \
+! fi
+
+ # This tells GNU make version 3 not to export all the variables
+***************
+*** 738,741 ****
+--- 744,748 ----
+ sparc-sun-sunos5*) letter=s ;;\
+ *86*-linux*) letter=l ;;\
++ *86*-freebsd*) letter=f ;;\
+ mips-sgi-irix*) letter=g ;;\
+ hppa*-hp-hpux*) letter=h ;;\
+***************
+*** 779,782 ****
+--- 786,790 ----
+ *-go32-msdos | *-go32 |\
+ *86*-linux* |\
++ *86*-freebsd* |\
+ *) \
+ \
+***************
+*** 845,848 ****
+--- 853,857 ----
+ *-go32-msdos | *-go32 |\
+ *86*-linux* |\
++ *86*-freebsd* |\
+ *) \
+ \
diff --git a/lang/gnat/files/patch-ae b/lang/gnat/files/patch-ae
new file mode 100644
index 000000000000..85b50c157c15
--- /dev/null
+++ b/lang/gnat/files/patch-ae
@@ -0,0 +1,36 @@
+*** gcc/ada/make.adb.orig Thu Jun 5 08:37:34 1997
+--- gcc-2.7.2.1/ada/make.adb Thu Jun 5 11:30:57 1997
+***************
+*** 191,197 ****
+ -- Compiler, Binder & Linker Data and Subprograms --
+ ----------------------------------------------------
+
+! Gcc : String_Access := GNAT.OS_Lib.Locate_Exec_On_Path ("gcc");
+ Gnatbind : String_Access := GNAT.OS_Lib.Locate_Exec_On_Path ("gnatbind");
+ Gnatlink : String_Access := GNAT.OS_Lib.Locate_Exec_On_Path ("gnatlink");
+
+--- 191,197 ----
+ -- Compiler, Binder & Linker Data and Subprograms --
+ ----------------------------------------------------
+
+! Gcc : String_Access := GNAT.OS_Lib.Locate_Exec_On_Path ("adagcc");
+ Gnatbind : String_Access := GNAT.OS_Lib.Locate_Exec_On_Path ("gnatbind");
+ Gnatlink : String_Access := GNAT.OS_Lib.Locate_Exec_On_Path ("gnatlink");
+
+***************
+*** 778,784 ****
+ Comp_Last := Comp_Last + 1;
+ Comp_Args (Comp_Last) := new String'(Name_Buffer (1 .. Name_Len));
+
+! Display ("gcc", Comp_Args (Args'First .. Comp_Last));
+
+ return
+ GNAT.OS_Lib.Non_Blocking_Spawn
+--- 778,784 ----
+ Comp_Last := Comp_Last + 1;
+ Comp_Args (Comp_Last) := new String'(Name_Buffer (1 .. Name_Len));
+
+! Display ("adagcc", Comp_Args (Args'First .. Comp_Last));
+
+ return
+ GNAT.OS_Lib.Non_Blocking_Spawn
diff --git a/lang/gnat/files/patch-af b/lang/gnat/files/patch-af
new file mode 100644
index 000000000000..ed40cbcf144f
--- /dev/null
+++ b/lang/gnat/files/patch-af
@@ -0,0 +1,19 @@
+*** gcc/ada/gnatcmd.adb.orig Wed Jun 4 17:47:51 1997
+--- gcc-2.7.2.1/ada/gnatcmd.adb Wed Jun 4 17:48:17 1997
+***************
+*** 899,905 ****
+
+ (Cname => new S'("COMPILE"),
+ Usage => new S'("GNAT COMPILE file file .. file /qualifiers"),
+! Unixcmd => new S'("gcc -c"),
+ Switches => GCC_Switches'Access,
+ Minfile => 1,
+ Maxfile => 0,
+--- 899,905 ----
+
+ (Cname => new S'("COMPILE"),
+ Usage => new S'("GNAT COMPILE file file .. file /qualifiers"),
+! Unixcmd => new S'("adagcc -c"),
+ Switches => GCC_Switches'Access,
+ Minfile => 1,
+ Maxfile => 0,
diff --git a/lang/gnat/pkg-descr b/lang/gnat/pkg-descr
index c5c10dd7e77d..a38a4e8b6b50 100644
--- a/lang/gnat/pkg-descr
+++ b/lang/gnat/pkg-descr
@@ -1,181 +1,7 @@
-GNAT IMPLEMENTED FEATURES LIST
-Current as of 01/26/95
+The GNU ada compiler Gnat 3.09 built on GCC 2.7.2.1.
-Here is the list of implemented and not implemented features. A more precise
-description of the GNAT system is provided in the file 'gnatinfo.txt', which
-is part of the GNAT distribution.
-
-Latest features in GNAT version 2.02
-====================================
-
- Extension aggregates are implemented (not much tested so far)
- The Storage_Pool mechanism is in place
- Functions returning unconstrained values shouldn't leak anymore
- Enumeration representation clauses are fully implemented
- Record representation clauses are implemented (currently there is
- a restriction that all fields must be given a position and tagged
- records cannot yet be given representation clauses)
- The constrained attribute is implemented
- Conformance checking is fully implemented
- Shared variables (pragmas Shared, Atomic, Atomic_Components,
- Volatile, and Volatile_Components) are implemented
- User-defined Initialize/Adjust/Finalize is now almost complete for
- controlled types as well as for types containing controlled components.
- (aggregates involving controlled types and functions returning objects
- with controlled components may still cause trouble).
- Alignment attribute and attribute definition clause are implemented
- Pred and Succ for fixed-point types are implemented
- Discard_Names pragma is implemented
- Arrays are passed properly to convention C routines
- Pragma Inspection_Point is implemented
- Pragma Locking_Policy is implemented
- Pragma Task_Dispatching_Policy is implemented
- Pragma Memory_Size is implemented (it is ignored anyway)
- Derived types from private types are impelmented
- Floating-point attribute functions are implemented:
- Adjacent, Ceiling, Compose, Copy_Sign, Exponent, Floor, Fraction,
- Leading_Part, Machine, Model, Pred, Remainder, Rounding, Scaling, Succ,
- Truncation, Unbiased_Rounding
- Pragma Optimize is implemented (checks that GCC optimization level is
- consistent)
- Pragma Reviewable is implemented (checks that GCC debug option "-g" is set)
- Pragma Controlled is implemented (but ignored so far)
- The attributes Version and Body_Version are implemented
- Pragma Linker_Options is implemented
- Attribute Max_Size_In_Storage_Elements is implemented
- The attribute Valid is implemented
- Requeue without abort is implemented
- Delay statement on OS/2 is now working correctly.
- The attribute Bit_Order is implemented
- Range checking for modular types
- Length checks are now implemented
- Pragma Import Fortran and COBOL are implemented
- Pragma Convention is now fully implemented (for C, Fortran, COBOL),
- Pragma Convention for Fortran correctly maps multi-dimensional arrays
-
-=======================================================================
-
-Status of Features
-
-============================================================================
-= All of Ada 83 is implemented EXCEPT the following unimplemented features =
-============================================================================
-
- The following language-defined checks are not implemented:
-
- Discriminant Checks
- Elaboration Checks
- Range Checks on the elaboration of a subtype_indication
- Stack overflow checking
-
- Language-Defined Pragmas
- Pack for arrays
-
- Input-Output for Integer for type Long_Long_Integer.
- (only Put currently supported for Long_Long_Integer not Get)
-
- Delay is not yet fixed-point as required (the current temporary
- implementation uses floating-point to represent Delay).
-
- Tasking is currently implemented only on the following platforms
- SGI IRIX 5.2, Sun Sparc (SunOS 4.1), i386 running IBM OS/2
-
-=========================================================================
-= All of Ada 95 implemented EXCEPT the following unimplemented features =
-=========================================================================
-
- CORE
-
- Protected entry families
- Protected subprogram pointers
- Condition protected entry calls
- Requeue Statement involving task entries
- Delay until
-
- Input-Output for Modular Types
- (Only Put is supported currently, Get not yet supported)
-
- Input-Output for Decimal Types
- Input-Output for Wide Text
-
- Objects of type with unknown discriminants
-
- Unimplemented subprograms in package Ada.Text_IO
- Flush
- Look_Ahead
- Get_Immediate
-
- Accessibility checks
-
- Stream-Oriented Attributes of Specific Types
- Stream-Oriented Attributes of Class-Wide Types
-
- ANNEX A. PREDEFINED LANGUAGE ENVIRONMENT
-
- Ada.Exceptions
- Ada.Interrupts
- Ada.Streams.Stream_IO
- Ada.Wide_Text_IO
- Ada.Wide_Text_IO.Complex_IO
-
- ANNEX B. INTERFACING TO OTHER LANGUAGES
-
- The body of Interfaces.COBOL is not yet implemented
-
- ANNEX C. SYSTEMS PROGRAMMING
-
- Machine intrinsic subprograms
- Interrupt support
- The body of package Interrupts is not implemented
- Preelaboration requirements are not fully met
-
- ANNEX D. REAL-TIME SYSTEMS
-
- Tasking restrictions
- Synchronous task control
-
- ANNEX E. DISTRIBUTED SYSTEMS
-
- The distribution annex is under active development. Stub generation
- is not yet implemented, and there is no configuration control program.
- All pragmas are fully implemented.
-
- ANNEX F. INFORMATION SYSTEMS
-
- Ada.Text_IO.Editing
- Ada.Wide_Text_IO.Editing
-
- ANNEX G. NUMERICS
-
- Accuracy requirements for floating-point and complex not fully met
-
- ANNEX H. SAFETY AND SECURITY
-
- pragma Normalize_Scalars
- Safety and security restrictions
-
- ANNEX I. OBSOLESCENT FEATURES
-
- Interrupt entries
-
- ANNEX J. LANGUAGE-DEFINED ATTRIBUTES
-
- Caller
- Definite
- External_Tag
- Identity
- Input
- Output
- Read
- Storage_Pool
- Write
-
- ANNEX K. LANGUAGE DEFINED PRAGMAS
-
- Attach_Handler
- Export
- Interrupt_Handler
- Normalize_Scalars
- Queuing_Policy
- Restrictions
+The libraries supplied with this version of GNAT support tasking if
+minor modifications are made to FreeBSD's libc_r.
+Maurice Castro
+maurice@serc.rmit.edu.au
diff --git a/lang/gnat/pkg-plist b/lang/gnat/pkg-plist
index 47339c633732..d7517fedf61b 100644
--- a/lang/gnat/pkg-plist
+++ b/lang/gnat/pkg-plist
@@ -1,12 +1,17 @@
-libexec/gnat1
+bin/adagcc
bin/gnatbind
-bin/gnatf
-bin/gnatk8
-bin/gnatchp
-bin/gnatchop
bin/gnatbl
-include/adainclude/a-calcon.adb
-include/adainclude/a-calcon.ads
+bin/gnatchop
+bin/gnatchp
+bin/gnatcmd
+bin/gnatf
+bin/gnatkr
+bin/gnatlink
+bin/gnatmake
+bin/gnatprep
+bin/i386-unknown-freebsd2.2-gcc
+include/adainclude/a-astaco.adb
+include/adainclude/a-astaco.ads
include/adainclude/a-caldel.adb
include/adainclude/a-caldel.ads
include/adainclude/a-calend.adb
@@ -15,21 +20,29 @@ include/adainclude/a-chahan.adb
include/adainclude/a-chahan.ads
include/adainclude/a-charac.ads
include/adainclude/a-chlat1.ads
+include/adainclude/a-colien.adb
+include/adainclude/a-colien.ads
include/adainclude/a-comlin.adb
include/adainclude/a-comlin.ads
include/adainclude/a-cwila1.ads
include/adainclude/a-decima.adb
include/adainclude/a-decima.ads
+include/adainclude/a-diocst.adb
+include/adainclude/a-diocst.ads
include/adainclude/a-direio.adb
include/adainclude/a-direio.ads
include/adainclude/a-dynpri.adb
include/adainclude/a-dynpri.ads
+include/adainclude/a-except.adb
include/adainclude/a-except.ads
+include/adainclude/a-filico.adb
+include/adainclude/a-filico.ads
include/adainclude/a-finali.adb
include/adainclude/a-finali.ads
include/adainclude/a-flteio.ads
include/adainclude/a-fwteio.ads
include/adainclude/a-inteio.ads
+include/adainclude/a-interr.adb
include/adainclude/a-interr.ads
include/adainclude/a-intnam.ads
include/adainclude/a-ioexce.ads
@@ -42,15 +55,23 @@ include/adainclude/a-llftio.ads
include/adainclude/a-llfwti.ads
include/adainclude/a-llitio.ads
include/adainclude/a-lliwti.ads
+include/adainclude/a-ncelfu.ads
include/adainclude/a-ngcefu.adb
include/adainclude/a-ngcefu.ads
include/adainclude/a-ngcoty.adb
include/adainclude/a-ngcoty.ads
include/adainclude/a-ngelfu.adb
include/adainclude/a-ngelfu.ads
+include/adainclude/a-nlcefu.ads
+include/adainclude/a-nlcoty.ads
include/adainclude/a-nlelfu.ads
+include/adainclude/a-nllcef.ads
+include/adainclude/a-nllcty.ads
include/adainclude/a-nllefu.ads
+include/adainclude/a-nscefu.ads
+include/adainclude/a-nscoty.ads
include/adainclude/a-nselfu.ads
+include/adainclude/a-nucoty.ads
include/adainclude/a-nudira.adb
include/adainclude/a-nudira.ads
include/adainclude/a-nuelfu.ads
@@ -62,16 +83,18 @@ include/adainclude/a-numran.adb
include/adainclude/a-numran.ads
include/adainclude/a-reatim.adb
include/adainclude/a-reatim.ads
-include/adainclude/a-retico.adb
-include/adainclude/a-retico.ads
include/adainclude/a-retide.adb
include/adainclude/a-retide.ads
include/adainclude/a-sequio.adb
include/adainclude/a-sequio.ads
include/adainclude/a-sfteio.ads
include/adainclude/a-sfwtio.ads
+include/adainclude/a-siocst.adb
+include/adainclude/a-siocst.ads
include/adainclude/a-siteio.ads
include/adainclude/a-siwtio.ads
+include/adainclude/a-ssicst.adb
+include/adainclude/a-ssicst.ads
include/adainclude/a-ssitio.ads
include/adainclude/a-ssiwti.ads
include/adainclude/a-stmaco.ads
@@ -89,6 +112,7 @@ include/adainclude/a-strsea.adb
include/adainclude/a-strsea.ads
include/adainclude/a-strunb.adb
include/adainclude/a-strunb.ads
+include/adainclude/a-ststio.adb
include/adainclude/a-ststio.ads
include/adainclude/a-stwibo.adb
include/adainclude/a-stwibo.ads
@@ -101,6 +125,7 @@ include/adainclude/a-stwise.ads
include/adainclude/a-stwiun.adb
include/adainclude/a-stwiun.ads
include/adainclude/a-swmwco.ads
+include/adainclude/a-sytaco.adb
include/adainclude/a-sytaco.ads
include/adainclude/a-tags.adb
include/adainclude/a-tags.ads
@@ -108,71 +133,154 @@ include/adainclude/a-tasatt.adb
include/adainclude/a-tasatt.ads
include/adainclude/a-taside.adb
include/adainclude/a-taside.ads
-include/adainclude/a-teioau.adb
-include/adainclude/a-teioau.ads
-include/adainclude/a-teiopi.adb
-include/adainclude/a-teiopi.ads
+include/adainclude/a-teioed.adb
+include/adainclude/a-teioed.ads
include/adainclude/a-textio.adb
include/adainclude/a-textio.ads
+include/adainclude/a-ticoau.adb
+include/adainclude/a-ticoau.ads
include/adainclude/a-ticoio.adb
include/adainclude/a-ticoio.ads
+include/adainclude/a-tideau.adb
+include/adainclude/a-tideau.ads
+include/adainclude/a-tideio.adb
+include/adainclude/a-tideio.ads
+include/adainclude/a-tienau.adb
+include/adainclude/a-tienau.ads
+include/adainclude/a-tienio.adb
+include/adainclude/a-tienio.ads
+include/adainclude/a-tifiio.adb
+include/adainclude/a-tifiio.ads
+include/adainclude/a-tiflau.adb
+include/adainclude/a-tiflau.ads
+include/adainclude/a-tiflio.adb
+include/adainclude/a-tiflio.ads
+include/adainclude/a-tigeau.adb
+include/adainclude/a-tigeau.ads
+include/adainclude/a-tiinau.adb
+include/adainclude/a-tiinau.ads
+include/adainclude/a-tiinio.adb
+include/adainclude/a-tiinio.ads
+include/adainclude/a-timoau.adb
+include/adainclude/a-timoau.ads
+include/adainclude/a-timoio.adb
+include/adainclude/a-timoio.ads
+include/adainclude/a-tiocst.adb
+include/adainclude/a-tiocst.ads
include/adainclude/a-titest.adb
include/adainclude/a-titest.ads
include/adainclude/a-unccon.ads
include/adainclude/a-uncdea.adb
include/adainclude/a-uncdea.ads
+include/adainclude/a-witeio.adb
include/adainclude/a-witeio.ads
-include/adainclude/a-wticio.ads
-include/adainclude/a-wtiopi.ads
-include/adainclude/a-wtitst.adb
-include/adainclude/a-wtitst.ads
+include/adainclude/a-wtcoau.adb
+include/adainclude/a-wtcoau.ads
+include/adainclude/a-wtcoio.adb
+include/adainclude/a-wtcoio.ads
+include/adainclude/a-wtcstr.adb
+include/adainclude/a-wtcstr.ads
+include/adainclude/a-wtdeau.adb
+include/adainclude/a-wtdeau.ads
+include/adainclude/a-wtdeio.adb
+include/adainclude/a-wtdeio.ads
+include/adainclude/a-wtedit.adb
+include/adainclude/a-wtedit.ads
+include/adainclude/a-wtenau.adb
+include/adainclude/a-wtenau.ads
+include/adainclude/a-wtenio.adb
+include/adainclude/a-wtenio.ads
+include/adainclude/a-wtfiio.adb
+include/adainclude/a-wtfiio.ads
+include/adainclude/a-wtflau.adb
+include/adainclude/a-wtflau.ads
+include/adainclude/a-wtflio.adb
+include/adainclude/a-wtflio.ads
+include/adainclude/a-wtgeau.adb
+include/adainclude/a-wtgeau.ads
+include/adainclude/a-wtinau.adb
+include/adainclude/a-wtinau.ads
+include/adainclude/a-wtinio.adb
+include/adainclude/a-wtinio.ads
+include/adainclude/a-wtmoau.adb
+include/adainclude/a-wtmoau.ads
+include/adainclude/a-wtmoio.adb
+include/adainclude/a-wtmoio.ads
+include/adainclude/a-wttest.adb
+include/adainclude/a-wttest.ads
include/adainclude/ada.ads
include/adainclude/calendar.ads
include/adainclude/directio.ads
include/adainclude/g-busora.adb
include/adainclude/g-busora.ads
+include/adainclude/g-busorg.adb
+include/adainclude/g-busorg.ads
+include/adainclude/g-casuti.adb
+include/adainclude/g-casuti.ads
include/adainclude/g-hesora.adb
include/adainclude/g-hesora.ads
+include/adainclude/g-hesorg.adb
+include/adainclude/g-hesorg.ads
+include/adainclude/g-htable.adb
+include/adainclude/g-htable.ads
include/adainclude/g-io.adb
include/adainclude/g-io.ads
+include/adainclude/g-io_aux.adb
+include/adainclude/g-io_aux.ads
+include/adainclude/g-os_lib.adb
+include/adainclude/g-os_lib.ads
include/adainclude/gnat.ads
include/adainclude/i-c.adb
include/adainclude/i-c.ads
+include/adainclude/i-cexten.ads
+include/adainclude/i-cobol.adb
include/adainclude/i-cobol.ads
-include/adainclude/i-cpoerr.ads
include/adainclude/i-cpoint.adb
include/adainclude/i-cpoint.ads
-include/adainclude/i-cporte.adb
-include/adainclude/i-cporte.ads
-include/adainclude/i-cpotim.adb
-include/adainclude/i-cpotim.ads
include/adainclude/i-cpp.adb
include/adainclude/i-cpp.ads
-include/adainclude/i-cpthre.adb
-include/adainclude/i-cpthre.ads
+include/adainclude/i-cstrea.adb
+include/adainclude/i-cstrea.ads
include/adainclude/i-cstrin.adb
include/adainclude/i-cstrin.ads
-include/adainclude/i-csycon.ads
include/adainclude/i-fortra.adb
include/adainclude/i-fortra.ads
+include/adainclude/i-os2err.ads
+include/adainclude/i-os2lib.adb
+include/adainclude/i-os2lib.ads
+include/adainclude/i-os2syn.ads
+include/adainclude/i-os2thr.ads
include/adainclude/i-pacdec.adb
include/adainclude/i-pacdec.ads
include/adainclude/interfac.ads
include/adainclude/ioexcept.ads
+include/adainclude/machcode.ads
include/adainclude/s-addima.adb
include/adainclude/s-addima.ads
include/adainclude/s-arit64.adb
include/adainclude/s-arit64.ads
include/adainclude/s-assert.adb
include/adainclude/s-assert.ads
+include/adainclude/s-asthan.adb
+include/adainclude/s-asthan.ads
include/adainclude/s-atacco.adb
include/adainclude/s-atacco.ads
+include/adainclude/s-auxdec.adb
+include/adainclude/s-auxdec.ads
+include/adainclude/s-bitops.adb
+include/adainclude/s-bitops.ads
include/adainclude/s-cconst.ads
+include/adainclude/s-chepoo.ads
include/adainclude/s-comexc.adb
include/adainclude/s-comexc.ads
-include/adainclude/s-comopt.ads
+include/adainclude/s-debpoo.adb
+include/adainclude/s-debpoo.ads
+include/adainclude/s-direio.adb
+include/adainclude/s-direio.ads
include/adainclude/s-errrep.adb
include/adainclude/s-errrep.ads
+include/adainclude/s-exctab.adb
+include/adainclude/s-exctab.ads
include/adainclude/s-exnflt.ads
include/adainclude/s-exngen.adb
include/adainclude/s-exngen.ads
@@ -207,9 +315,13 @@ include/adainclude/s-fatgen.ads
include/adainclude/s-fatlfl.ads
include/adainclude/s-fatllf.ads
include/adainclude/s-fatsfl.ads
-include/adainclude/s-filaux.ads
+include/adainclude/s-ficobl.ads
+include/adainclude/s-fileio.adb
+include/adainclude/s-fileio.ads
include/adainclude/s-finimp.adb
include/adainclude/s-finimp.ads
+include/adainclude/s-finroo.adb
+include/adainclude/s-finroo.ads
include/adainclude/s-fore.adb
include/adainclude/s-fore.ads
include/adainclude/s-imgbiu.adb
@@ -240,11 +352,75 @@ include/adainclude/s-imgwch.adb
include/adainclude/s-imgwch.ads
include/adainclude/s-imgwiu.adb
include/adainclude/s-imgwiu.ads
+include/adainclude/s-inmaop.adb
+include/adainclude/s-inmaop.ads
+include/adainclude/s-interr.adb
+include/adainclude/s-interr.ads
+include/adainclude/s-intman.adb
+include/adainclude/s-intman.ads
include/adainclude/s-io.adb
include/adainclude/s-io.ads
+include/adainclude/s-maccod.ads
+include/adainclude/s-mantis.adb
+include/adainclude/s-mantis.ads
+include/adainclude/s-osinte.adb
+include/adainclude/s-osinte.ads
+include/adainclude/s-pack03.adb
+include/adainclude/s-pack03.ads
+include/adainclude/s-pack05.adb
+include/adainclude/s-pack05.ads
+include/adainclude/s-pack06.adb
+include/adainclude/s-pack06.ads
+include/adainclude/s-pack07.adb
+include/adainclude/s-pack07.ads
+include/adainclude/s-pack09.adb
+include/adainclude/s-pack09.ads
+include/adainclude/s-pack10.adb
+include/adainclude/s-pack10.ads
+include/adainclude/s-pack11.adb
+include/adainclude/s-pack11.ads
+include/adainclude/s-pack12.adb
+include/adainclude/s-pack12.ads
+include/adainclude/s-pack13.adb
+include/adainclude/s-pack13.ads
+include/adainclude/s-pack14.adb
+include/adainclude/s-pack14.ads
+include/adainclude/s-pack15.adb
+include/adainclude/s-pack15.ads
+include/adainclude/s-pack17.adb
+include/adainclude/s-pack17.ads
+include/adainclude/s-pack18.adb
+include/adainclude/s-pack18.ads
+include/adainclude/s-pack19.adb
+include/adainclude/s-pack19.ads
+include/adainclude/s-pack20.adb
+include/adainclude/s-pack20.ads
+include/adainclude/s-pack21.adb
+include/adainclude/s-pack21.ads
+include/adainclude/s-pack22.adb
+include/adainclude/s-pack22.ads
+include/adainclude/s-pack23.adb
+include/adainclude/s-pack23.ads
+include/adainclude/s-pack24.adb
+include/adainclude/s-pack24.ads
+include/adainclude/s-pack25.adb
+include/adainclude/s-pack25.ads
+include/adainclude/s-pack26.adb
+include/adainclude/s-pack26.ads
+include/adainclude/s-pack27.adb
+include/adainclude/s-pack27.ads
+include/adainclude/s-pack28.adb
+include/adainclude/s-pack28.ads
+include/adainclude/s-pack29.adb
+include/adainclude/s-pack29.ads
+include/adainclude/s-pack30.adb
+include/adainclude/s-pack30.ads
+include/adainclude/s-pack31.adb
+include/adainclude/s-pack31.ads
+include/adainclude/s-parame.adb
include/adainclude/s-parame.ads
-include/adainclude/s-pooemp.adb
-include/adainclude/s-pooemp.ads
+include/adainclude/s-parint.adb
+include/adainclude/s-parint.ads
include/adainclude/s-pooglo.adb
include/adainclude/s-pooglo.ads
include/adainclude/s-pooloc.adb
@@ -252,66 +428,76 @@ include/adainclude/s-pooloc.ads
include/adainclude/s-poosiz.adb
include/adainclude/s-poosiz.ads
include/adainclude/s-powtab.ads
+include/adainclude/s-proinf.adb
+include/adainclude/s-proinf.ads
+include/adainclude/s-rpc.adb
+include/adainclude/s-rpc.ads
include/adainclude/s-secsta.adb
include/adainclude/s-secsta.ads
-include/adainclude/s-signal.adb
-include/adainclude/s-signal.ads
+include/adainclude/s-sequio.adb
+include/adainclude/s-sequio.ads
+include/adainclude/s-stalib.adb
include/adainclude/s-stalib.ads
include/adainclude/s-std.adb
include/adainclude/s-std.ads
include/adainclude/s-stoele.adb
include/adainclude/s-stoele.ads
include/adainclude/s-stopoo.ads
+include/adainclude/s-stratt.adb
+include/adainclude/s-stratt.ads
include/adainclude/s-strcon.adb
include/adainclude/s-strcon.ads
include/adainclude/s-strequ.adb
include/adainclude/s-strequ.ads
include/adainclude/s-strops.adb
include/adainclude/s-strops.ads
+include/adainclude/s-taenca.adb
+include/adainclude/s-taenca.ads
include/adainclude/s-taprob.adb
include/adainclude/s-taprob.ads
+include/adainclude/s-taprop.adb
+include/adainclude/s-taprop.ads
include/adainclude/s-tasabo.adb
include/adainclude/s-tasabo.ads
-include/adainclude/s-tasclo.adb
-include/adainclude/s-tasclo.ads
+include/adainclude/s-tasinf.ads
+include/adainclude/s-tasini.adb
+include/adainclude/s-tasini.ads
include/adainclude/s-taskin.adb
include/adainclude/s-taskin.ads
-include/adainclude/s-taslib.adb
-include/adainclude/s-taslib.ads
-include/adainclude/s-tasmem.adb
-include/adainclude/s-tasmem.ads
include/adainclude/s-tasoli.adb
include/adainclude/s-tasoli.ads
include/adainclude/s-taspda.adb
include/adainclude/s-taspda.ads
-include/adainclude/s-taspri.adb
include/adainclude/s-taspri.ads
include/adainclude/s-tasque.adb
include/adainclude/s-tasque.ads
+include/adainclude/s-tasqup.adb
include/adainclude/s-tasren.adb
include/adainclude/s-tasren.ads
include/adainclude/s-tassta.adb
include/adainclude/s-tassta.ads
-include/adainclude/s-tastal.adb
-include/adainclude/s-tastal.ads
include/adainclude/s-tastim.adb
include/adainclude/s-tastim.ads
include/adainclude/s-tasuti.adb
include/adainclude/s-tasuti.ads
-include/adainclude/s-tatise.adb
-include/adainclude/s-tatise.ads
-include/adainclude/s-tcmasp.adb
-include/adainclude/s-tcmasp.ads
+include/adainclude/s-tataat.adb
+include/adainclude/s-tataat.ads
+include/adainclude/s-timope.adb
+include/adainclude/s-timope.ads
include/adainclude/s-timtyp.ads
include/adainclude/s-unstyp.ads
include/adainclude/s-valboo.adb
include/adainclude/s-valboo.ads
include/adainclude/s-valcha.adb
include/adainclude/s-valcha.ads
+include/adainclude/s-valdec.adb
+include/adainclude/s-valdec.ads
include/adainclude/s-valenu.adb
include/adainclude/s-valenu.ads
include/adainclude/s-valint.adb
include/adainclude/s-valint.ads
+include/adainclude/s-vallld.adb
+include/adainclude/s-vallld.ads
include/adainclude/s-vallli.adb
include/adainclude/s-vallli.ads
include/adainclude/s-valllu.adb
@@ -322,8 +508,12 @@ include/adainclude/s-valuns.adb
include/adainclude/s-valuns.ads
include/adainclude/s-valuti.adb
include/adainclude/s-valuti.ads
+include/adainclude/s-valwch.adb
+include/adainclude/s-valwch.ads
include/adainclude/s-vercon.adb
include/adainclude/s-vercon.ads
+include/adainclude/s-wchcnv.adb
+include/adainclude/s-wchcnv.ads
include/adainclude/s-wchcon.ads
include/adainclude/s-wchjis.adb
include/adainclude/s-wchjis.ads
@@ -343,15 +533,56 @@ include/adainclude/s-widllu.adb
include/adainclude/s-widllu.ads
include/adainclude/s-widwch.adb
include/adainclude/s-widwch.ads
+include/adainclude/s-wwdcha.adb
+include/adainclude/s-wwdcha.ads
+include/adainclude/s-wwdenu.adb
+include/adainclude/s-wwdenu.ads
+include/adainclude/s-wwdwch.adb
+include/adainclude/s-wwdwch.ads
include/adainclude/sequenio.ads
include/adainclude/system.ads
include/adainclude/text_io.ads
include/adainclude/unchconv.ads
include/adainclude/unchdeal.adb
include/adainclude/unchdeal.ads
+include/adainclude/win_task-errors.ads
+include/adainclude/win_task-synchronization.ads
+include/adainclude/win_task-threads.ads
+include/adainclude/win_task.adb
+include/adainclude/win_task.ads
+include/assert.h
+info/cpp.info
+info/cpp.info-1
+info/cpp.info-2
+info/cpp.info-3
+info/gcc.info
+info/gcc.info-1
+info/gcc.info-10
+info/gcc.info-11
+info/gcc.info-12
+info/gcc.info-13
+info/gcc.info-14
+info/gcc.info-15
+info/gcc.info-16
+info/gcc.info-17
+info/gcc.info-18
+info/gcc.info-19
+info/gcc.info-2
+info/gcc.info-20
+info/gcc.info-21
+info/gcc.info-22
+info/gcc.info-23
+info/gcc.info-24
+info/gcc.info-25
+info/gcc.info-3
+info/gcc.info-4
+info/gcc.info-5
+info/gcc.info-6
+info/gcc.info-7
+info/gcc.info-8
+info/gcc.info-9
+lib/adalib/a-adaint.o
lib/adalib/a-argv.o
-lib/adalib/a-calcon.ali
-lib/adalib/a-calcon.o
lib/adalib/a-caldel.ali
lib/adalib/a-caldel.o
lib/adalib/a-calend.ali
@@ -363,8 +594,11 @@ lib/adalib/a-charac.o
lib/adalib/a-chlat1.ali
lib/adalib/a-chlat1.o
lib/adalib/a-cio.o
+lib/adalib/a-colien.ali
+lib/adalib/a-colien.o
lib/adalib/a-comlin.ali
lib/adalib/a-comlin.o
+lib/adalib/a-cstrea.o
lib/adalib/a-cwila1.ali
lib/adalib/a-cwila1.o
lib/adalib/a-decima.ali
@@ -372,29 +606,67 @@ lib/adalib/a-decima.o
lib/adalib/a-dynpri.ali
lib/adalib/a-dynpri.o
lib/adalib/a-errno.o
+lib/adalib/a-except.ali
+lib/adalib/a-except.o
lib/adalib/a-exit.o
+lib/adalib/a-filico.ali
+lib/adalib/a-filico.o
+lib/adalib/a-final.o
lib/adalib/a-finali.ali
lib/adalib/a-finali.o
lib/adalib/a-flteio.ali
lib/adalib/a-flteio.o
+lib/adalib/a-fwteio.ali
+lib/adalib/a-fwteio.o
+lib/adalib/a-init.o
lib/adalib/a-inteio.ali
lib/adalib/a-inteio.o
+lib/adalib/a-interr.ali
+lib/adalib/a-interr.o
lib/adalib/a-intnam.ali
lib/adalib/a-intnam.o
lib/adalib/a-ioexce.ali
lib/adalib/a-ioexce.o
+lib/adalib/a-iwteio.ali
+lib/adalib/a-iwteio.o
+lib/adalib/a-lfteio.ali
+lib/adalib/a-lfteio.o
+lib/adalib/a-lfwtio.ali
+lib/adalib/a-lfwtio.o
lib/adalib/a-liteio.ali
lib/adalib/a-liteio.o
+lib/adalib/a-liwtio.ali
+lib/adalib/a-liwtio.o
lib/adalib/a-llftio.ali
lib/adalib/a-llftio.o
+lib/adalib/a-llfwti.ali
+lib/adalib/a-llfwti.o
lib/adalib/a-llitio.ali
lib/adalib/a-llitio.o
+lib/adalib/a-lliwti.ali
+lib/adalib/a-lliwti.o
+lib/adalib/a-ncelfu.ali
+lib/adalib/a-ncelfu.o
+lib/adalib/a-nlcefu.ali
+lib/adalib/a-nlcefu.o
+lib/adalib/a-nlcoty.ali
+lib/adalib/a-nlcoty.o
lib/adalib/a-nlelfu.ali
lib/adalib/a-nlelfu.o
+lib/adalib/a-nllcef.ali
+lib/adalib/a-nllcef.o
+lib/adalib/a-nllcty.ali
+lib/adalib/a-nllcty.o
lib/adalib/a-nllefu.ali
lib/adalib/a-nllefu.o
+lib/adalib/a-nscefu.ali
+lib/adalib/a-nscefu.o
+lib/adalib/a-nscoty.ali
+lib/adalib/a-nscoty.o
lib/adalib/a-nselfu.ali
lib/adalib/a-nselfu.o
+lib/adalib/a-nucoty.ali
+lib/adalib/a-nucoty.o
lib/adalib/a-nuelfu.ali
lib/adalib/a-nuelfu.o
lib/adalib/a-nuflra.ali
@@ -408,16 +680,22 @@ lib/adalib/a-numran.o
lib/adalib/a-raise.o
lib/adalib/a-reatim.ali
lib/adalib/a-reatim.o
-lib/adalib/a-retico.ali
-lib/adalib/a-retico.o
lib/adalib/a-retide.ali
lib/adalib/a-retide.o
lib/adalib/a-sfteio.ali
lib/adalib/a-sfteio.o
+lib/adalib/a-sfwtio.ali
+lib/adalib/a-sfwtio.o
lib/adalib/a-siteio.ali
lib/adalib/a-siteio.o
+lib/adalib/a-siwtio.ali
+lib/adalib/a-siwtio.o
+lib/adalib/a-ssicst.ali
+lib/adalib/a-ssicst.o
lib/adalib/a-ssitio.ali
lib/adalib/a-ssitio.o
+lib/adalib/a-ssiwti.ali
+lib/adalib/a-ssiwti.o
lib/adalib/a-stmaco.ali
lib/adalib/a-stmaco.o
lib/adalib/a-strbou.ali
@@ -434,6 +712,8 @@ lib/adalib/a-strsea.ali
lib/adalib/a-strsea.o
lib/adalib/a-strunb.ali
lib/adalib/a-strunb.o
+lib/adalib/a-ststio.ali
+lib/adalib/a-ststio.o
lib/adalib/a-stwibo.ali
lib/adalib/a-stwibo.o
lib/adalib/a-stwifi.ali
@@ -447,43 +727,89 @@ lib/adalib/a-stwiun.o
lib/adalib/a-swmwco.ali
lib/adalib/a-swmwco.o
lib/adalib/a-sysdep.o
+lib/adalib/a-sytaco.ali
+lib/adalib/a-sytaco.o
lib/adalib/a-tags.ali
lib/adalib/a-tags.o
lib/adalib/a-taside.ali
lib/adalib/a-taside.o
-lib/adalib/a-teioau.ali
-lib/adalib/a-teioau.o
+lib/adalib/a-teioed.ali
+lib/adalib/a-teioed.o
lib/adalib/a-textio.ali
lib/adalib/a-textio.o
+lib/adalib/a-ticoau.ali
+lib/adalib/a-ticoau.o
+lib/adalib/a-tideau.ali
+lib/adalib/a-tideau.o
+lib/adalib/a-tienau.ali
+lib/adalib/a-tienau.o
+lib/adalib/a-tiflau.ali
+lib/adalib/a-tiflau.o
+lib/adalib/a-tigeau.ali
+lib/adalib/a-tigeau.o
+lib/adalib/a-tiinau.ali
+lib/adalib/a-tiinau.o
lib/adalib/a-time.o
+lib/adalib/a-timoau.ali
+lib/adalib/a-timoau.o
+lib/adalib/a-tiocst.ali
+lib/adalib/a-tiocst.o
+lib/adalib/a-titest.ali
+lib/adalib/a-titest.o
+lib/adalib/a-witeio.ali
+lib/adalib/a-witeio.o
+lib/adalib/a-wtcoau.ali
+lib/adalib/a-wtcoau.o
+lib/adalib/a-wtcstr.ali
+lib/adalib/a-wtcstr.o
+lib/adalib/a-wtdeau.ali
+lib/adalib/a-wtdeau.o
+lib/adalib/a-wtedit.ali
+lib/adalib/a-wtedit.o
+lib/adalib/a-wtenau.ali
+lib/adalib/a-wtenau.o
+lib/adalib/a-wtflau.ali
+lib/adalib/a-wtflau.o
+lib/adalib/a-wtgeau.ali
+lib/adalib/a-wtgeau.o
+lib/adalib/a-wtinau.ali
+lib/adalib/a-wtinau.o
+lib/adalib/a-wtmoau.ali
+lib/adalib/a-wtmoau.o
+lib/adalib/a-wttest.ali
+lib/adalib/a-wttest.o
lib/adalib/ada.ali
lib/adalib/ada.o
lib/adalib/calendar.ali
lib/adalib/calendar.o
lib/adalib/g-busora.ali
lib/adalib/g-busora.o
+lib/adalib/g-casuti.ali
+lib/adalib/g-casuti.o
lib/adalib/g-hesora.ali
lib/adalib/g-hesora.o
+lib/adalib/g-htable.ali
+lib/adalib/g-htable.o
lib/adalib/g-io.ali
lib/adalib/g-io.o
+lib/adalib/g-io_aux.ali
+lib/adalib/g-io_aux.o
+lib/adalib/g-os_lib.ali
+lib/adalib/g-os_lib.o
lib/adalib/gnat.ali
lib/adalib/gnat.o
lib/adalib/i-c.ali
lib/adalib/i-c.o
-lib/adalib/i-cpoerr.ali
-lib/adalib/i-cpoerr.o
-lib/adalib/i-cporte.ali
-lib/adalib/i-cporte.o
-lib/adalib/i-cpotim.ali
-lib/adalib/i-cpotim.o
+lib/adalib/i-cexten.ali
+lib/adalib/i-cexten.o
+lib/adalib/i-cobol.ali
+lib/adalib/i-cobol.o
lib/adalib/i-cpp.ali
lib/adalib/i-cpp.o
-lib/adalib/i-cpthre.ali
-lib/adalib/i-cpthre.o
+lib/adalib/i-cstrea.ali
+lib/adalib/i-cstrea.o
lib/adalib/i-cstrin.ali
lib/adalib/i-cstrin.o
-lib/adalib/i-csycon.ali
-lib/adalib/i-csycon.o
lib/adalib/i-fortra.ali
lib/adalib/i-fortra.o
lib/adalib/i-pacdec.ali
@@ -493,22 +819,34 @@ lib/adalib/interfac.o
lib/adalib/io-aux.o
lib/adalib/ioexcept.ali
lib/adalib/ioexcept.o
-lib/adalib/libgnat.a
-lib/adalib/libgthreads.a
+lib/adalib/machcode.ali
+lib/adalib/machcode.o
lib/adalib/s-addima.ali
lib/adalib/s-addima.o
lib/adalib/s-arit64.ali
lib/adalib/s-arit64.o
lib/adalib/s-assert.ali
lib/adalib/s-assert.o
+lib/adalib/s-asthan.ali
+lib/adalib/s-asthan.o
+lib/adalib/s-auxdec.ali
+lib/adalib/s-auxdec.o
+lib/adalib/s-bitops.ali
+lib/adalib/s-bitops.o
lib/adalib/s-cconst.ali
lib/adalib/s-cconst.o
+lib/adalib/s-chepoo.ali
+lib/adalib/s-chepoo.o
lib/adalib/s-comexc.ali
lib/adalib/s-comexc.o
-lib/adalib/s-comopt.ali
-lib/adalib/s-comopt.o
+lib/adalib/s-debpoo.ali
+lib/adalib/s-debpoo.o
+lib/adalib/s-direio.ali
+lib/adalib/s-direio.o
lib/adalib/s-errrep.ali
lib/adalib/s-errrep.o
+lib/adalib/s-exctab.ali
+lib/adalib/s-exctab.o
lib/adalib/s-exnflt.ali
lib/adalib/s-exnflt.o
lib/adalib/s-exngen.ali
@@ -563,10 +901,14 @@ lib/adalib/s-fatllf.ali
lib/adalib/s-fatllf.o
lib/adalib/s-fatsfl.ali
lib/adalib/s-fatsfl.o
-lib/adalib/s-filaux.ali
-lib/adalib/s-filaux.o
+lib/adalib/s-ficobl.ali
+lib/adalib/s-ficobl.o
+lib/adalib/s-fileio.ali
+lib/adalib/s-fileio.o
lib/adalib/s-finimp.ali
lib/adalib/s-finimp.o
+lib/adalib/s-finroo.ali
+lib/adalib/s-finroo.o
lib/adalib/s-fore.ali
lib/adalib/s-fore.o
lib/adalib/s-imgbiu.ali
@@ -597,12 +939,76 @@ lib/adalib/s-imgwch.ali
lib/adalib/s-imgwch.o
lib/adalib/s-imgwiu.ali
lib/adalib/s-imgwiu.o
+lib/adalib/s-inmaop.ali
+lib/adalib/s-inmaop.o
+lib/adalib/s-interr.ali
+lib/adalib/s-interr.o
+lib/adalib/s-intman.ali
+lib/adalib/s-intman.o
lib/adalib/s-io.ali
lib/adalib/s-io.o
+lib/adalib/s-maccod.ali
+lib/adalib/s-maccod.o
+lib/adalib/s-mantis.ali
+lib/adalib/s-mantis.o
+lib/adalib/s-osinte.ali
+lib/adalib/s-osinte.o
+lib/adalib/s-pack03.ali
+lib/adalib/s-pack03.o
+lib/adalib/s-pack05.ali
+lib/adalib/s-pack05.o
+lib/adalib/s-pack06.ali
+lib/adalib/s-pack06.o
+lib/adalib/s-pack07.ali
+lib/adalib/s-pack07.o
+lib/adalib/s-pack09.ali
+lib/adalib/s-pack09.o
+lib/adalib/s-pack10.ali
+lib/adalib/s-pack10.o
+lib/adalib/s-pack11.ali
+lib/adalib/s-pack11.o
+lib/adalib/s-pack12.ali
+lib/adalib/s-pack12.o
+lib/adalib/s-pack13.ali
+lib/adalib/s-pack13.o
+lib/adalib/s-pack14.ali
+lib/adalib/s-pack14.o
+lib/adalib/s-pack15.ali
+lib/adalib/s-pack15.o
+lib/adalib/s-pack17.ali
+lib/adalib/s-pack17.o
+lib/adalib/s-pack18.ali
+lib/adalib/s-pack18.o
+lib/adalib/s-pack19.ali
+lib/adalib/s-pack19.o
+lib/adalib/s-pack20.ali
+lib/adalib/s-pack20.o
+lib/adalib/s-pack21.ali
+lib/adalib/s-pack21.o
+lib/adalib/s-pack22.ali
+lib/adalib/s-pack22.o
+lib/adalib/s-pack23.ali
+lib/adalib/s-pack23.o
+lib/adalib/s-pack24.ali
+lib/adalib/s-pack24.o
+lib/adalib/s-pack25.ali
+lib/adalib/s-pack25.o
+lib/adalib/s-pack26.ali
+lib/adalib/s-pack26.o
+lib/adalib/s-pack27.ali
+lib/adalib/s-pack27.o
+lib/adalib/s-pack28.ali
+lib/adalib/s-pack28.o
+lib/adalib/s-pack29.ali
+lib/adalib/s-pack29.o
+lib/adalib/s-pack30.ali
+lib/adalib/s-pack30.o
+lib/adalib/s-pack31.ali
+lib/adalib/s-pack31.o
lib/adalib/s-parame.ali
lib/adalib/s-parame.o
-lib/adalib/s-pooemp.ali
-lib/adalib/s-pooemp.o
+lib/adalib/s-parint.ali
+lib/adalib/s-parint.o
lib/adalib/s-pooglo.ali
lib/adalib/s-pooglo.o
lib/adalib/s-pooloc.ali
@@ -611,10 +1017,14 @@ lib/adalib/s-poosiz.ali
lib/adalib/s-poosiz.o
lib/adalib/s-powtab.ali
lib/adalib/s-powtab.o
+lib/adalib/s-proinf.ali
+lib/adalib/s-proinf.o
+lib/adalib/s-rpc.ali
+lib/adalib/s-rpc.o
lib/adalib/s-secsta.ali
lib/adalib/s-secsta.o
-lib/adalib/s-signal.ali
-lib/adalib/s-signal.o
+lib/adalib/s-sequio.ali
+lib/adalib/s-sequio.o
lib/adalib/s-stalib.ali
lib/adalib/s-stalib.o
lib/adalib/s-std.ali
@@ -623,24 +1033,28 @@ lib/adalib/s-stoele.ali
lib/adalib/s-stoele.o
lib/adalib/s-stopoo.ali
lib/adalib/s-stopoo.o
+lib/adalib/s-stratt.ali
+lib/adalib/s-stratt.o
lib/adalib/s-strcon.ali
lib/adalib/s-strcon.o
lib/adalib/s-strequ.ali
lib/adalib/s-strequ.o
lib/adalib/s-strops.ali
lib/adalib/s-strops.o
+lib/adalib/s-taenca.ali
+lib/adalib/s-taenca.o
lib/adalib/s-taprob.ali
lib/adalib/s-taprob.o
+lib/adalib/s-taprop.ali
+lib/adalib/s-taprop.o
lib/adalib/s-tasabo.ali
lib/adalib/s-tasabo.o
-lib/adalib/s-tasclo.ali
-lib/adalib/s-tasclo.o
+lib/adalib/s-tasinf.ali
+lib/adalib/s-tasinf.o
+lib/adalib/s-tasini.ali
+lib/adalib/s-tasini.o
lib/adalib/s-taskin.ali
lib/adalib/s-taskin.o
-lib/adalib/s-taslib.ali
-lib/adalib/s-taslib.o
-lib/adalib/s-tasmem.ali
-lib/adalib/s-tasmem.o
lib/adalib/s-tasoli.ali
lib/adalib/s-tasoli.o
lib/adalib/s-taspda.ali
@@ -649,20 +1063,20 @@ lib/adalib/s-taspri.ali
lib/adalib/s-taspri.o
lib/adalib/s-tasque.ali
lib/adalib/s-tasque.o
+lib/adalib/s-tasqup.ali
+lib/adalib/s-tasqup.o
lib/adalib/s-tasren.ali
lib/adalib/s-tasren.o
lib/adalib/s-tassta.ali
lib/adalib/s-tassta.o
-lib/adalib/s-tastal.ali
-lib/adalib/s-tastal.o
lib/adalib/s-tastim.ali
lib/adalib/s-tastim.o
lib/adalib/s-tasuti.ali
lib/adalib/s-tasuti.o
-lib/adalib/s-tatise.ali
-lib/adalib/s-tatise.o
-lib/adalib/s-tcmasp.ali
-lib/adalib/s-tcmasp.o
+lib/adalib/s-tataat.ali
+lib/adalib/s-tataat.o
+lib/adalib/s-timope.ali
+lib/adalib/s-timope.o
lib/adalib/s-timtyp.ali
lib/adalib/s-timtyp.o
lib/adalib/s-unstyp.ali
@@ -671,10 +1085,14 @@ lib/adalib/s-valboo.ali
lib/adalib/s-valboo.o
lib/adalib/s-valcha.ali
lib/adalib/s-valcha.o
+lib/adalib/s-valdec.ali
+lib/adalib/s-valdec.o
lib/adalib/s-valenu.ali
lib/adalib/s-valenu.o
lib/adalib/s-valint.ali
lib/adalib/s-valint.o
+lib/adalib/s-vallld.ali
+lib/adalib/s-vallld.o
lib/adalib/s-vallli.ali
lib/adalib/s-vallli.o
lib/adalib/s-valllu.ali
@@ -685,8 +1103,12 @@ lib/adalib/s-valuns.ali
lib/adalib/s-valuns.o
lib/adalib/s-valuti.ali
lib/adalib/s-valuti.o
+lib/adalib/s-valwch.ali
+lib/adalib/s-valwch.o
lib/adalib/s-vercon.ali
lib/adalib/s-vercon.o
+lib/adalib/s-wchcnv.ali
+lib/adalib/s-wchcnv.o
lib/adalib/s-wchcon.ali
lib/adalib/s-wchcon.o
lib/adalib/s-wchjis.ali
@@ -707,7 +1129,36 @@ lib/adalib/s-widllu.ali
lib/adalib/s-widllu.o
lib/adalib/s-widwch.ali
lib/adalib/s-widwch.o
+lib/adalib/s-wwdcha.ali
+lib/adalib/s-wwdcha.o
+lib/adalib/s-wwdenu.ali
+lib/adalib/s-wwdenu.o
+lib/adalib/s-wwdwch.ali
+lib/adalib/s-wwdwch.o
lib/adalib/system.ali
lib/adalib/system.o
lib/adalib/text_io.ali
lib/adalib/text_io.o
+lib/g++-include
+lib/include/README
+lib/include/float.h
+lib/include/limits.h
+lib/include/objc/NXConstStr.h
+lib/include/objc/Object.h
+lib/include/objc/Protocol.h
+lib/include/objc/encoding.h
+lib/include/objc/hash.h
+lib/include/objc/list.h
+lib/include/objc/objc-api.h
+lib/include/objc/objc.h
+lib/include/objc/sarray.h
+lib/include/objc/typedstream.h
+lib/include/syslimits.h
+lib/libgcc.a
+lib/libgnat.a
+lib/specs
+libexec/ada/cc1
+libexec/ada/cpp
+libexec/ada/gnat1
+man/man1/cccp.1
+man/man1/gcc.1