aboutsummaryrefslogtreecommitdiffstats
path: root/lang/gnat
diff options
context:
space:
mode:
authorDaniel Eischen <deischen@FreeBSD.org>2000-11-02 02:57:03 +0800
committerDaniel Eischen <deischen@FreeBSD.org>2000-11-02 02:57:03 +0800
commit95df74e9baace796f238694e8060a8aaad78fd95 (patch)
treee8f734327bbc401fb47599534f5d61283ba60ff4 /lang/gnat
parente0837ffadb6344b2be76bd7a887fe31ed28d85df (diff)
downloadfreebsd-ports-95df74e9baace796f238694e8060a8aaad78fd95.tar.gz
freebsd-ports-95df74e9baace796f238694e8060a8aaad78fd95.tar.zst
freebsd-ports-95df74e9baace796f238694e8060a8aaad78fd95.zip
Update to the latest public release 3.13p.
Thanks to Samuel Tardieu <sam@inf.enst.fr> for instigating this update and providing some of the changes.
Notes
Notes: svn path=/head/; revision=34561
Diffstat (limited to 'lang/gnat')
-rw-r--r--lang/gnat/Makefile90
-rw-r--r--lang/gnat/distinfo4
-rw-r--r--lang/gnat/files/5fintman.adb46
-rw-r--r--lang/gnat/files/5fosinte.ads41
-rw-r--r--lang/gnat/files/5fsystem.ads242
-rw-r--r--lang/gnat/files/5ftaprop.adb239
-rw-r--r--lang/gnat/files/patch-ac39
-rw-r--r--lang/gnat/files/patch-ai44
-rw-r--r--lang/gnat/files/patch-aj29
-rw-r--r--lang/gnat/files/patch-al6
-rw-r--r--lang/gnat/files/patch-am31
-rw-r--r--lang/gnat/files/patch-an18
-rw-r--r--lang/gnat/pkg-descr5
-rw-r--r--lang/gnat/pkg-plist46
14 files changed, 645 insertions, 235 deletions
diff --git a/lang/gnat/Makefile b/lang/gnat/Makefile
index c5c308eb34b9..27eadfbe4f46 100644
--- a/lang/gnat/Makefile
+++ b/lang/gnat/Makefile
@@ -14,21 +14,26 @@
# using symbolic links.
PORTNAME= gnat
-PORTVERSION= 3.12p
+PORTVERSION= 3.13p
CATEGORIES= lang
-MASTER_SITES= ftp://cs.nyu.edu/pub/gnat/ \
- ${MASTER_SITE_GNU}
-DISTNAME= gcc-2.8.1
-DISTFILES= gnat-3.12p-src.tar.gz gcc-2.8.1.tar.gz
+MASTER_SITES= ftp://cs.nyu.edu/pub/gnat/${PORTVERSION}/ \
+ ${MASTER_SITE_LOCAL} ${MASTER_SITE_GNU}
+MASTER_SITE_SUBDIR= gcc
+DISTFILES= ${GNATNAME}.tgz gcc-2.8.1.tar.gz
MAINTAINER= eischen@vigrid.com
.include <bsd.port.pre.mk>
+WRKSRC= ${WRKDIR}/gcc-2.8.1
+GNATNAME= gnat-${PORTVERSION}-src
GNUHOST= ${ARCH}-unknown-freebsd${OSREL}
GCC_VERSION= 2.8.1
-PLIST_SUB= GNUHOST=${GNUHOST} GCC_VERSION=${GCC_VERSION}
+PLIST_SUB= GNUHOST=${GNUHOST} GCC_VERSION=${GCC_VERSION} \
+ LIBRARY_VERSION=${LIBRARY_VERSION} \
+ SHARED_MAJOR=${SHARED_MAJOR}
+
# Make no mistake about what host/target we are building on/for.
# This package does not support cross-compiling, and this fixes
# problems with bsd.port.mk files from earlier FreeBSD 3.x releases.
@@ -38,12 +43,12 @@ GNU_CONFIGURE= yes
USE_GMAKE= yes
MAN1= adagcc.1 cccp.1
-# You need a compiler who calls an existing GNAT compiler (3.11 or greater).
+# You need a compiler who calls an existing GNAT compiler (3.12 or greater).
# If you have one, point CC at it. By default, we'll look for one in the
# obvious places. If we can't find one, we'll fetch a distfile containing
# a minimum (still pretty large) compiler toolset and use that to build.
-# For the GNAT compiler, we look in ${PREFIX} and in /usr/local.
+# For the GNAT compiler, we look in ${PREFIX} and in ${LOCALBASE}.
.ifdef PREFIX
have_boot!= if [ -x ${PREFIX}/bin/adagcc -a -x ${PREFIX}/bin/gnatbind ]; then \
${ECHO} "${PREFIX}/bin"; \
@@ -54,8 +59,8 @@ have_boot!= if [ -x ${PREFIX}/bin/adagcc -a -x ${PREFIX}/bin/gnatbind ]; then \
have_boot=
.endif
.if empty(have_boot)
-have_boot!= if [ -x /usr/local/bin/adagcc -a -x /usr/local/bin/gnatbind ]; then \
- ${ECHO} "/usr/local/bin"; \
+have_boot!= if [ -x {LOCALBASE}/bin/adagcc -a -x {LOCALBASE}/bin/gnatbind ]; then \
+ ${ECHO} "{LOCALBASE}/bin"; \
else \
${ECHO} ""; \
fi
@@ -86,7 +91,7 @@ BROKEN= "Cannot build with or for an aout compiler."
.endif
.if empty(have_boot)
-DISTFILES+= gnat-3.11p-boot.tar.gz
+DISTFILES+= gnat-3.13p-boot.tar.gz
# Warning! You need the trailing slash on GCC_EXEC_PREFIX.
COMPILEDATA= GCC_EXEC_PREFIX=${WRKDIR}/adaboot/lib/gcc-lib/ \
ADA_INCLUDE_PATH=${WRKDIR}/adaboot/lib/gcc-lib/adainclude \
@@ -95,9 +100,21 @@ have_boot= ${WRKDIR}/adaboot
.endif
# Make sure we use the Ada-aware gcc compiler.
-CC = adagcc
+CC = adagcc
CONFIGURE_ENV= ${COMPILE_DATA} PATH=${have_boot}/bin:$$PATH
+.if OVERRIDE_CFLAGS
+GNATCFLAGS= ${CFLAGS}
+GNATLIBCFLAGS= ${CFLAGS}
+.else
+GNATCFLAGS= -O2
+GNATLIBCFLAGS= -O2
+.endif
+
+# Shared library handling
+LIBRARY_VERSION= 3.13
+SHARED_MAJOR= 1
+
# Account for signal set changes
.if ${OSVERSION} > 400010
SIGSET_WORDS= 4
@@ -108,14 +125,16 @@ SIGACTION= old_struct_sigaction
.endif
pre-patch:
- @${MV} ${WRKSRC}/config/i386/freebsd.h ${WRKSRC}/config/i386/freebsd-aout.h
- @${MV} ${WRKSRC}/config/i386/freebsd-elf.h ${WRKSRC}/config/i386/freebsd.h
+ @if [ ! -f ${WRKSRC}/config/i386/freebsd-aout.h ]; then \
+ ${MV} ${WRKSRC}/config/i386/freebsd.h ${WRKSRC}/config/i386/freebsd-aout.h; \
+ ${MV} ${WRKSRC}/config/i386/freebsd-elf.h ${WRKSRC}/config/i386/freebsd.h; \
+ fi
@${ECHO} "===> Applying FreeBSD patches to gcc for ${DISTNAME}"
-( ${PATCH} ${PATCH_ARGS} < ${FILESDIR}/freebsdgcc28-patches )
- @${ECHO} "===> Patching gcc for ${DISTNAME}"
- -( ${PATCH} ${PATCH_ARGS} < ${WRKDIR}/gnat-3.12p-src/src/gcc-281.dif )
+ @${ECHO} "===> Patching gcc for ${GNATNAME}"
+ -( ${PATCH} ${PATCH_ARGS} < ${WRKDIR}/${GNATNAME}/src/gcc-281.dif )
@${ECHO} "===> Copying GNAT compiler sources into GCC tree."
- -( ${MV} ${WRKDIR}/gnat-3.12p-src/src/ada ${WRKDIR}/gcc-2.8.1 )
+ -( ${MV} ${WRKDIR}/${GNATNAME}/src/ada ${WRKDIR}/gcc-2.8.1 )
@${ECHO} "===> Making way for FreeBSD GNAT support files"
-( ${RM} -f ${WRKSRC}/ada/[45]f* )
@@ -149,23 +168,40 @@ do-configure:
#
# We intentionally override CFLAGS because the build procedure is explicitly
-# spelled out in gnat-3.12p-src/src/README.BUILD. Remove CFLAGS from the
+# spelled out in gnat-3.13p-src/src/README.BUILD. Remove CFLAGS from the
# do-build target at your own risk.
#
do-build:
(cd ${WRKSRC}; \
PATH=${have_boot}/bin:$$PATH \
- ${COMPILEDATA} ${GMAKE} CC="${CC}" OLDCC="adagcc" CFLAGS="-O2" LANGUAGES="c ada gcov" )
+ ${COMPILEDATA} ${GMAKE} CC="${CC}" OLDCC="adagcc" CFLAGS="${GNATCFLAGS}" LANGUAGES="c ada gcov" )
+ (cd ${WRKSRC}; \
+ ${GMAKE} CFLAGS="${GNATCFLAGS}" LANGUAGES="c ada gcov" bootstrap )
(cd ${WRKSRC}; \
- ${GMAKE} CFLAGS="-O2" LANGUAGES="c ada gcov" bootstrap )
+ ${GMAKE} CFLAGS="${GNATCFLAGS}" gnattools )
(cd ${WRKSRC}; \
- ${GMAKE} CFLAGS="-O2" gnattools )
+ ${GMAKE} CFLAGS="${GNATCFLAGS}" GNATLIBCFLAGS="-fPIC ${GNATLIBCFLAGS}" \
+ soext=.so.${SHARED_MAJOR} LIBRARY_VERSION=${LIBRARY_VERSION} \
+ gnatlib-shared )
+ ${MV} ${WRKSRC}/ada/rts/lib*-${LIBRARY_VERSION}.so.${SHARED_MAJOR} \
+ ${WRKSRC}/ada
+ ${RM} ${WRKSRC}/stamp-gnatlib2
(cd ${WRKSRC}; \
- ${GMAKE} CFLAGS="-O2" GNATLIBCFLAGS="-O2" gnatlib )
+ ${GMAKE} CFLAGS="${GNATCFLAGS}" GNATLIBCFLAGS="${GNATLIBCFLAGS}" gnatlib )
do-install:
(cd ${WRKSRC}; \
${GMAKE} CC="${CC}" LANGUAGES="c ada gcov" ${INSTALL_TARGET} )
+ ${INSTALL_DATA} \
+ ${WRKSRC}/ada/libgnat-${LIBRARY_VERSION}.so.${SHARED_MAJOR} \
+ ${PREFIX}/lib
+ ${INSTALL_DATA} \
+ ${WRKSRC}/ada/libgnarl-${LIBRARY_VERSION}.so.${SHARED_MAJOR} \
+ ${PREFIX}/lib
+ ${LN} -s ${PREFIX}/lib/libgnat-${LIBRARY_VERSION}.so.${SHARED_MAJOR} \
+ ${PREFIX}/lib/gcc-lib/${GNUHOST}/${GCC_VERSION}/adalib/libgnat.so
+ ${LN} -s ${PREFIX}/lib/libgnarl-${LIBRARY_VERSION}.so.${SHARED_MAJOR} \
+ ${PREFIX}/lib/gcc-lib/${GNUHOST}/${GCC_VERSION}/adalib/libgnarl.so
post-install:
@(for prog in ${PREFIX}/bin/adagcc \
@@ -193,13 +229,7 @@ post-install:
fi \
done)
@(${TOUCH} ${TOUCH_FLAGS} ${PREFIX}/lib/gcc-lib/${GNUHOST}/${GCC_VERSION}/include/float.h)
- @(${CHOWN} -R bin:bin ${PREFIX}/lib/gcc-lib/${GNUHOST}/${GCC_VERSION})
- @(${ECHO} "-----------------------------------------------------------" )
- @(${ECHO} "" )
- @(${ECHO} "For information about using the tasking library please read" )
- @(${ECHO} "the README.Tasking file" )
- @(${ECHO} "" )
- @(${ECHO} "-----------------------------------------------------------" )
- @(${ECHO} "" )
+ @(chown -R bin:bin ${PREFIX}/lib/gcc-lib/${GNUHOST}/${GCC_VERSION})
+ ${LDCONFIG} -m ${PREFIX}/lib
.include <bsd.port.post.mk>
diff --git a/lang/gnat/distinfo b/lang/gnat/distinfo
index e6d549c68716..c6fc71b06875 100644
--- a/lang/gnat/distinfo
+++ b/lang/gnat/distinfo
@@ -1,3 +1,3 @@
-MD5 (gnat-3.12p-src.tar.gz) = e441db93cfef98702f8cf16dffaab6e8
+MD5 (gnat-3.13p-src.tgz) = 74098abaed1c89ff9526ac8155c2dd74
MD5 (gcc-2.8.1.tar.gz) = 311829e9c36080fb54b0145285746a9e
-MD5 (gnat-3.11p-boot.tar.gz) = e78d6bfa82e0fa941e779d7f14dc4708
+MD5 (gnat-3.13p-boot.tar.gz) = a62db6267f7f71dc71a8162ebe794e01
diff --git a/lang/gnat/files/5fintman.adb b/lang/gnat/files/5fintman.adb
index 68b22762685f..2dbb0d8aa338 100644
--- a/lang/gnat/files/5fintman.adb
+++ b/lang/gnat/files/5fintman.adb
@@ -101,13 +101,13 @@ package body System.Interrupt_Management is
(signo : Signal;
code : Interfaces.C.int;
context : access struct_sigcontext) is
+ Result : Interfaces.C.int;
begin
+ -- With the __builtin_longjmp, the signal mask is not restored, so we
+ -- need to restore it explicitely.
- -- 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.
+ Result := pthread_sigmask (SIG_UNBLOCK, Signal_Mask'Access, null);
+ pragma Assert (Result = 0);
-- Check that treatment of exception propagation here
-- is consistent with treatment of the abort signal in
@@ -147,20 +147,23 @@ begin
begin
- Abort_Task_Interrupt := SIGABRT;
+ Abort_Task_Interrupt := SIGADAABORT;
-- 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.
+ act.sa_flags := 0;
+
+ -- On some targets, we 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. ???
+ -- Since SA_NODEFER is obsolete, instead we reset explicitely
+ -- the mask in the exception handler.
Result := sigemptyset (Signal_Mask'Access);
pragma Assert (Result = 0);
@@ -184,8 +187,6 @@ begin
end loop;
Keep_Unmasked (Abort_Task_Interrupt) := True;
- Keep_Unmasked (SIGSTOP) := True;
- Keep_Unmasked (SIGKILL) := True;
-- By keeping SIGINT unmasked, allow the user to do a Ctrl-C, but in the
-- same time, disable the ability of handling this signal
@@ -195,24 +196,19 @@ begin
if Unreserve_All_Interrupts = 0 then
Keep_Unmasked (SIGINT) := True;
- else
- Keep_Unmasked (SIGINT) := False;
end if;
- -- FreeBSD uses SIGINFO to dump thread status to stdout. If
- -- the user really wants to attach his own handler, let him.
+ for I in Unmasked'Range loop
+ Keep_Unmasked (Interrupt_ID (Unmasked (I))) := True;
+ end loop;
- -- FreeBSD pthreads uses setitimer/getitimer for thread scheduling.
- -- Specifically, it uses timer ITIMER_PROF which generates SIGPROF.
- -- FreeBSD pthreads also needs SIGCHLD. The FreeBSD threads library
- -- also uses SIGINFO for debugging, but it's not required so we'll
- -- let an Ada application use it.
- Keep_Unmasked (SIGCHLD) := True;
- Keep_Unmasked (SIGPROF) := True;
+ Reserve := Keep_Unmasked or Keep_Masked;
- Reserve := Reserve or Keep_Unmasked or Keep_Masked;
+ for I in Reserved'Range loop
+ Reserve (Interrupt_ID (Reserved (I))) := True;
+ end loop;
- Reserve (0) := true;
+ 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
diff --git a/lang/gnat/files/5fosinte.ads b/lang/gnat/files/5fosinte.ads
index 42f9eedc5ae7..5cb6ce3c62cc 100644
--- a/lang/gnat/files/5fosinte.ads
+++ b/lang/gnat/files/5fosinte.ads
@@ -54,18 +54,18 @@
-- __ARCH = I386
-- __OS = FREEBSD
-- __HAS_SIGCONTEXT = 1
--- __HAS_UCONTEXT = 0
+-- __HAS_UCONTEXT = 1
-- __THREADS = POSIX_THREADS
-- __THREAD_VARIANT = ??
-- __HAS_TIMESPEC = 1
-- __HAS_NANOSLEEP = 1
--- __HAS_CLOCK_GETTIME = 0
+-- __HAS_CLOCK_GETTIME = 1
-- __HAS_GETTIMEOFDAY = 1
--- __POSIX_THREAD_PRIO_PROTECT = 0
--- __POSIX_THREAD_PRIO_INHERIT = 0
+-- __POSIX_THREAD_PRIO_PROTECT = 1
+-- __POSIX_THREAD_PRIO_INHERIT = 1
-- __POSIX_THREAD_ATTR_STACKADDR = 1
-- __POSIX_THREAD_ATTR_STACKSIZE = 1
--- __POSIX_THREAD_PRIORITY_SCHEDULING = 0
+-- __POSIX_THREAD_PRIORITY_SCHEDULING = 1
-- This package encapsulates all direct interfaces to OS services
-- that are needed by children of System.
@@ -192,6 +192,22 @@ package System.OS_Interface is
SIGUSR1 : constant := 30; -- user defined signal 1
SIGUSR2 : constant := 31; -- user defined signal 2
+ SIGADAABORT : constant := SIGABRT;
+ -- Change this if you want to use another signal for task abort.
+ -- SIGTERM might be a good one.
+
+ type Signal_Set is array (Natural range <>) of Signal;
+
+ -- Interrupts that must be unmasked at all times. FreeBSD
+ -- pthreads will not allow an application to mask out any
+ -- interrupt needed by the threads library.
+ Unmasked : constant Signal_Set :=
+ (SIGTRAP, SIGBUS, SIGTTIN, SIGTTOU, SIGTSTP);
+
+ -- FreeBSD will uses SIGPROF for timing. Do not allow a
+ -- handler to attach to this signal.
+ Reserved : constant Signal_Set := (0 .. 0 => SIGPROF);
+
type sigset_t is private;
function sigaddset
@@ -239,7 +255,7 @@ package System.OS_Interface is
end record;
pragma Convention (C, new_struct_sigaction);
- subtype struct_sigaction is __FreeBSD__sigaction;
+ subtype struct_sigaction is new_struct_sigaction;
type struct_sigaction_ptr is access all struct_sigaction;
@@ -268,7 +284,7 @@ package System.OS_Interface is
-- Time --
----------
- Time_Slice_Supported : constant boolean := True;
+ Time_Slice_Supported : constant Boolean := True;
-- Indicates wether time slicing is supported (i.e SCHED_RR is supported)
type timespec is private;
@@ -321,10 +337,6 @@ package System.OS_Interface is
-- Priority Scheduling --
-------------------------
- MIN_PRIO : constant := 0;
- MAX_PRIO : constant := 126;
- DEFAULT_PRIO : constant := 64;
-
SCHED_FIFO : constant := 1;
SCHED_OTHER : constant := 2;
SCHED_RR : constant := 3;
@@ -371,7 +383,7 @@ package System.OS_Interface is
-- Stack --
-----------
- Stack_Base_Available : constant boolean := False;
+ Stack_Base_Available : constant Boolean := False;
-- Indicates wether the stack base is available on this target.
-- This allows us to share s-osinte.adb between all the FSU run time.
-- Note that this value can only be true if pthread_t has a complete
@@ -509,6 +521,9 @@ package System.OS_Interface is
return int;
pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
+ Relative_Timed_Wait : constant Boolean := False;
+ -- pthread_cond_timedwait requires an absolute delay time
+
----------------------------
-- POSIX.1c Section 13 --
----------------------------
@@ -721,7 +736,7 @@ package System.OS_Interface is
private
- type sigset_t is array (1 .. __FreeBSD__sigset_words) of unsigned;
+ type sigset_t is array (1 .. 4) of unsigned;
-- In FreeBSD the component sa_handler turns out to
-- be one a union type, and the selector is a macro:
diff --git a/lang/gnat/files/5fsystem.ads b/lang/gnat/files/5fsystem.ads
new file mode 100644
index 000000000000..f4c1192b1981
--- /dev/null
+++ b/lang/gnat/files/5fsystem.ads
@@ -0,0 +1,242 @@
+------------------------------------------------------------------------------
+-- --
+-- GNAT RUN-TIME COMPONENTS --
+-- --
+-- S Y S T E M --
+-- --
+-- S p e c --
+-- (Default Version) --
+-- --
+-- $Revision: 1.40 $
+-- --
+-- Copyright (C) 1992-2000 Free Software Foundation, Inc. --
+-- --
+-- This specification is derived from the Ada Reference Manual for use with --
+-- GNAT. The copyright notice above, and the license provisions that follow --
+-- apply solely to the contents of the part following the private keyword. --
+-- --
+-- GNAT is free software; you can redistribute it and/or modify it under --
+-- terms of the GNU General Public License as published by the Free Soft- --
+-- ware Foundation; either version 2, or (at your option) any later ver- --
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
+-- for more details. You should have received a copy of the GNU General --
+-- Public License distributed with GNAT; see file COPYING. If not, write --
+-- to the Free Software Foundation, 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. --
+-- --
+-- GNAT was originally developed by the GNAT team at New York University. --
+-- It is now maintained by Ada Core Technologies Inc (http://www.gnat.com). --
+-- --
+------------------------------------------------------------------------------
+
+package System is
+pragma Pure (System);
+-- Note that we take advantage of the implementation permission to
+-- make this unit Pure instead of Preelaborable, see RM 13.7(36)
+
+ type Name is (SYSTEM_NAME_GNAT);
+ System_Name : constant Name := SYSTEM_NAME_GNAT;
+
+ -- System-Dependent Named Numbers
+
+ Min_Int : constant := Long_Long_Integer'First;
+ Max_Int : constant := Long_Long_Integer'Last;
+
+ Max_Binary_Modulus : constant := 2 ** Long_Long_Integer'Size;
+ Max_Nonbinary_Modulus : constant := Integer'Last;
+
+ Max_Base_Digits : constant := Long_Long_Float'Digits;
+ Max_Digits : constant := Long_Long_Float'Digits;
+
+ Max_Mantissa : constant := 63;
+ Fine_Delta : constant := 2.0 ** (-Max_Mantissa);
+
+ Tick : constant := Standard'Tick;
+
+ -- Storage-related Declarations
+
+ type Address is private;
+ Null_Address : constant Address;
+
+ Storage_Unit : constant := Standard'Storage_Unit;
+ Word_Size : constant := Standard'Word_Size;
+ Memory_Size : constant := 2 ** Standard'Address_Size;
+
+ -- Address comparison
+
+ function "<" (Left, Right : Address) return Boolean;
+ function "<=" (Left, Right : Address) return Boolean;
+ function ">" (Left, Right : Address) return Boolean;
+ function ">=" (Left, Right : Address) return Boolean;
+ function "=" (Left, Right : Address) return Boolean;
+
+ pragma Import (Intrinsic, "<");
+ pragma Import (Intrinsic, "<=");
+ pragma Import (Intrinsic, ">");
+ pragma Import (Intrinsic, ">=");
+ pragma Import (Intrinsic, "=");
+
+ -- Other System-Dependent Declarations
+
+ type Bit_Order is (High_Order_First, Low_Order_First);
+ Default_Bit_Order : constant Bit_Order :=
+ Bit_Order'Val (Standard'Default_Bit_Order);
+
+ -- Priority-related Declarations (RM D.1)
+
+ Max_Priority : constant Positive := 30;
+
+ Max_Interrupt_Priority : constant Positive := 31;
+
+ subtype Any_Priority is Integer
+ range 0 .. Standard'Max_Interrupt_Priority;
+
+ subtype Priority is Any_Priority
+ range 0 .. Standard'Max_Priority;
+
+ -- Functional notation is needed in the following to avoid visibility
+ -- problems when this package is compiled through rtsfind in the middle
+ -- of another compilation.
+
+ subtype Interrupt_Priority is Any_Priority
+ range
+ Standard."+" (Standard'Max_Priority, 1) ..
+ Standard'Max_Interrupt_Priority;
+
+ Default_Priority : constant Priority :=
+ Standard."/" (Standard."+" (Priority'First, Priority'Last), 2);
+
+private
+
+ type Address is mod Memory_Size;
+ Null_Address : constant Address := 0;
+
+ --------------------------------------
+ -- System Implementation Parameters --
+ --------------------------------------
+
+ -- These parameters provide information about the target that is used
+ -- by the compiler. They are in the private part of System, where they
+ -- can be accessed using Rtsfind. All values defined here must be
+ -- constants, since they are accessed at compile time.
+
+ -- Note these definitions must come before the definitions of any
+ -- complex types or other code that may require Rtsfind to access
+ -- these entities during compilation of System itself.
+
+ -----------------------------------
+ -- Control of Exception Handling --
+ -----------------------------------
+
+ -- GNAT provides two methods of implementing exceptions:
+
+ -- Longjmp/Setjmp (-gnatL)
+
+ -- This approach uses longjmp/setjmp to handle exceptions. It
+ -- uses less storage, and can often propagate exceptions faster,
+ -- at the expense of (sometimes considerable) overhead in setting
+ -- up an exception handler. This approach is available on all
+ -- targets, and is the default where it is the only approach.
+
+ -- Zero Cost (-gnatZ)
+
+ -- This approach uses separate exception tables. These use extra
+ -- storage, and exception propagation can be quite slow, but there
+ -- is no overhead in setting up an exception handler (it is to this
+ -- latter operation that the phrase zero-cost refers). This approach
+ -- is only available on some targets, and is the default where it is
+ -- available.
+
+ Zero_Cost_Exceptions : constant Boolean := False;
+ -- Set False for Longjmp/Setjmp, True for Zero Cost
+
+ -------------------------------
+ -- Control of Stack Checking --
+ -------------------------------
+
+ -- GNAT provides two methods of implementing exceptions:
+
+ -- GCC Probing Mechanism
+
+ -- This approach uses the standard GCC mechanism for
+ -- stack checking. The method assumes that accessing
+ -- storage immediately beyond the end of the stack
+ -- will result in a trap that is converted to a storage
+ -- error by the runtime system. This mechanism has
+ -- minimal overhead, but requires complex hardware,
+ -- operating system and run-time support. Probing is
+ -- the default method where it is available. The stack
+ -- size for the environment task depends on the operating
+ -- system and cannot be set in a system-independent way.
+
+ -- GNAT Stack-limit Checking
+
+ -- This method relies on comparing the stack pointer
+ -- with per-task stack limits. If the check fails, an
+ -- exception is explicitly raised. The advantage is
+ -- that the method requires no extra system dependent
+ -- runtime support and can be used on systems without
+ -- memory protection as well, but at the cost of more
+ -- overhead for doing the check. This method is the
+ -- default on systems that lack complete support for
+ -- probing.
+
+ Stack_Check_Probes : constant Boolean := True;
+ -- Set True for GCC Probing, False for GNAT Stack-limit Checking
+
+ Stack_Check_Default : constant Boolean := True;
+ -- Set True for systems where stack checking is performed by default
+
+ ----------------------------------------------
+ -- Boolean-Valued Floating-Point Attributes --
+ ----------------------------------------------
+
+ -- The constants below give the values for representation oriented
+ -- floating-point attributes that are the same for all float types
+ -- on the target. These are all boolean values.
+
+ -- A value is only True if the target reliably supports the corresponding
+ -- feature. Reliably here means that support is guaranteed for all
+ -- possible settings of the relevant compiler switches (like -mieee),
+ -- since we cannot control the user setting of those switches.
+
+ -- The attributes cannot dependent on the current setting of compiler
+ -- switches, since the values must be static and consistent throughout
+ -- the partition. We probably should add such consistency checks in future,
+ -- but for now we don't do this.
+
+ Denorm : constant Boolean := True;
+
+ Machine_Rounds : constant Boolean := True;
+
+ Machine_Overflows : constant Boolean := False;
+
+ Signed_Zeros : constant Boolean := True;
+
+ ----------------------------
+ -- Support of Long Shifts --
+ ----------------------------
+
+ -- In GNORT mode, we cannot call library routines, and in particular
+ -- we cannot call routines for long (64-bit) shifts if such routines
+ -- are required on the target. This comes up in the context of support
+ -- of packed arrays. We can only represent packed arrays whose length
+ -- is in the range 33- to 64-bits as modular types if long shifts are
+ -- done with inline code.
+
+ -- For the default version, for now we set long shifts inlined as True
+ -- This may not be quite accurate, but until we get proper separate
+ -- System's for each target, it is a safer choice.
+
+ Long_Shifts_Inlined : constant Boolean := True;
+
+end System;
diff --git a/lang/gnat/files/5ftaprop.adb b/lang/gnat/files/5ftaprop.adb
index cf3cb14b9fd6..ff9a62ca1590 100644
--- a/lang/gnat/files/5ftaprop.adb
+++ b/lang/gnat/files/5ftaprop.adb
@@ -6,9 +6,9 @@
-- --
-- B o d y --
-- --
--- $Revision: 1.5 $ --
+-- $Revision: 1.33 $
-- --
--- Copyright (C) 1997, Florida State University --
+-- Copyright (C) 1991-2000, 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- --
@@ -37,6 +37,16 @@
-- This is the FreeBSD PTHREADS version of this package. Contributed
-- by Daniel M. Eischen (eischen@vigrid.com).
+-- This package contains all the GNULL primitives that interface directly
+-- with the underlying OS.
+
+-- Note: this file can only be used for POSIX compliant systems that
+-- implement SCHED_FIFO and Ceiling Locking correctly (that is, for now:
+-- FSU Threads, RTEMS Threads, and FreeBSD Threads).
+
+-- For configurations where SCHED_FIFO and priority ceiling are not a
+-- requirement, this file can also be used (e.g AiX threads)
+
pragma Polling (Off);
-- Turn off polling, we do not want ATC polling to take place during
-- tasking operations. It causes infinite loops and other problems.
@@ -91,7 +101,7 @@ package body System.Task_Primitives.Operations is
use System.Parameters;
use System.OS_Primitives;
- package TSL renames System.Soft_Links;
+ package SSL renames System.Soft_Links;
pragma Linker_Options ("-pthread");
@@ -103,7 +113,7 @@ package body System.Task_Primitives.Operations is
-- at run time.
All_Tasks_L : aliased System.Task_Primitives.RTS_Lock;
- -- See comments on locking rules in System.Locking_Rules (spec).
+ -- See comments on locking rules in System.Tasking (spec).
Environment_Task_ID : Task_ID;
-- A variable to hold Task_ID for the environment task.
@@ -111,6 +121,11 @@ package body System.Task_Primitives.Operations is
Unblocked_Signal_Mask : aliased sigset_t;
-- The set of signals that should unblocked in all tasks
+ Default_Prio : Interfaces.C.int := 15;
+ -- FreeBSDs default priority for a thread.
+
+ -- The followings are internal configuration constants needed.
+
Next_Serial_Number : Task_Serial_Number := 100;
-- We start at 100, to reserve some special values for
-- using in error checking.
@@ -131,7 +146,6 @@ package body System.Task_Primitives.Operations is
function To_Address is new Unchecked_Conversion (Task_ID, System.Address);
-
--------------------
-- Local Packages --
--------------------
@@ -245,7 +259,7 @@ package body System.Task_Primitives.Operations is
procedure Stack_Guard (T : ST.Task_ID; On : Boolean) is
- Stack_Base : constant Address := Get_Stack_Base (T.LL.Thread);
+ Stack_Base : constant Address := Get_Stack_Base (T.Common.LL.Thread);
Guard_Page_Address : Address;
Res : Interfaces.C.int;
@@ -273,7 +287,7 @@ package body System.Task_Primitives.Operations is
function Get_Thread_Id (T : ST.Task_ID) return OSI.Thread_Id is
begin
- return T.LL.Thread;
+ return T.Common.LL.Thread;
end Get_Thread_Id;
----------
@@ -306,7 +320,7 @@ package body System.Task_Primitives.Operations is
pragma Assert (Result = 0 or else Result = ENOMEM);
if Result = ENOMEM then
- raise STORAGE_ERROR;
+ raise Storage_Error;
end if;
Result := pthread_mutexattr_setprotocol
@@ -316,17 +330,16 @@ package body System.Task_Primitives.Operations is
-- Convert the Ada priority to be based around the default
-- system priority.
Adjusted_Prio := Interfaces.C.int (Prio) -
- Interfaces.C.int (System.Default_Priority) + DEFAULT_PRIO;
+ Interfaces.C.int (System.Default_Priority) + Default_Prio;
Result := pthread_mutexattr_setprioceiling
- (Attributes'Access, Interfaces.C.int (Adjusted_Prio));
+ (Attributes'Access, Adjusted_Prio);
pragma Assert (Result = 0);
Result := pthread_mutex_init (L, Attributes'Access);
-
pragma Assert (Result = 0 or else Result = ENOMEM);
if Result = ENOMEM then
- raise STORAGE_ERROR;
+ raise Storage_Error;
end if;
Result := pthread_mutexattr_destroy (Attributes'Access);
@@ -343,32 +356,26 @@ package body System.Task_Primitives.Operations is
pragma Assert (Result = 0 or else Result = ENOMEM);
if Result = ENOMEM then
- raise STORAGE_ERROR;
+ raise Storage_Error;
end if;
-- Convert the Ada priority to be based around the default
-- system priority.
Adjusted_Prio := Interfaces.C.int (System.Any_Priority'Last) -
- Interfaces.C.int (System.Default_Priority) + DEFAULT_PRIO;
-
+ Interfaces.C.int (System.Default_Priority) + Default_Prio;
Result := pthread_mutexattr_setprotocol
(Attributes'Access, PTHREAD_PRIO_PROTECT);
pragma Assert (Result = 0);
Result := pthread_mutexattr_setprioceiling
- (Attributes'Access, Interfaces.C.int (Adjusted_Prio));
- pragma Assert (Result = 0);
-
- Result := pthread_mutexattr_setprioceiling
- (Attributes'Access, Interfaces.C.int (Adjusted_Prio));
+ (Attributes'Access, Adjusted_Prio);
pragma Assert (Result = 0);
Result := pthread_mutex_init (L, Attributes'Access);
-
pragma Assert (Result = 0 or else Result = ENOMEM);
if Result = ENOMEM then
- raise STORAGE_ERROR;
+ raise Storage_Error;
end if;
Result := pthread_mutexattr_destroy (Attributes'Access);
@@ -420,9 +427,10 @@ package body System.Task_Primitives.Operations is
end Write_Lock;
procedure Write_Lock (T : Task_ID) is
- Result : Interfaces.C.int;
+ Result : Interfaces.C.int;
+
begin
- Result := pthread_mutex_lock (T.LL.L'Access);
+ Result := pthread_mutex_lock (T.Common.LL.L'Access);
pragma Assert (Result = 0);
end Write_Lock;
@@ -456,9 +464,10 @@ package body System.Task_Primitives.Operations is
end Unlock;
procedure Unlock (T : Task_ID) is
- Result : Interfaces.C.int;
+ Result : Interfaces.C.int;
+
begin
- Result := pthread_mutex_unlock (T.LL.L'Access);
+ Result := pthread_mutex_unlock (T.Common.LL.L'Access);
pragma Assert (Result = 0);
end Unlock;
@@ -468,17 +477,16 @@ package body System.Task_Primitives.Operations is
procedure Sleep (Self_ID : Task_ID;
Reason : System.Tasking.Task_States) is
-
Result : Interfaces.C.int;
begin
pragma Assert (Self_ID = Self);
- Result := pthread_cond_wait (Self_ID.LL.CV'Access, Self_ID.LL.L'Access);
+ Result := pthread_cond_wait (Self_ID.Common.LL.CV'Access,
+ Self_ID.Common.LL.L'Access);
-- EINTR is not considered a failure.
pragma Assert (Result = 0 or else Result = EINTR);
-
end Sleep;
-----------------
@@ -493,15 +501,15 @@ package body System.Task_Primitives.Operations is
(Self_ID : Task_ID;
Time : Duration;
Mode : ST.Delay_Modes;
- Reason : System.Tasking.Task_States;
+ Reason : Task_States;
Timedout : out Boolean;
Yielded : out Boolean)
is
-
- Check_Time : constant Duration := Clock;
- Abs_Time : Duration;
- Request : aliased timespec;
- Result : Interfaces.C.int;
+ Check_Time : constant Duration := Clock;
+ Rel_Time : Duration;
+ Abs_Time : Duration;
+ Request : aliased timespec;
+ Result : Interfaces.C.int;
begin
Timedout := True;
@@ -509,18 +517,32 @@ package body System.Task_Primitives.Operations is
if Mode = Relative then
Abs_Time := Duration'Min (Time, Max_Sensible_Delay) + Check_Time;
+
+ if Relative_Timed_Wait then
+ Rel_Time := Duration'Min (Max_Sensible_Delay, Time);
+ end if;
+
else
- Abs_Time := Time;
+ Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
+
+ if Relative_Timed_Wait then
+ Rel_Time := Duration'Min (Max_Sensible_Delay, Time - Check_Time);
+ end if;
end if;
if Abs_Time > Check_Time then
- Request := To_Timespec (Abs_Time);
+ if Relative_Timed_Wait then
+ Request := To_Timespec (Rel_Time);
+ else
+ Request := To_Timespec (Abs_Time);
+ end if;
+
loop
exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
or else Self_ID.Pending_Priority_Change;
- Result := pthread_cond_timedwait
- (Self_ID.LL.CV'Access, Self_ID.LL.L'Access, Request'Access);
+ Result := pthread_cond_timedwait (Self_ID.Common.LL.CV'Access,
+ Self_ID.Common.LL.L'Access, Request'Access);
exit when Abs_Time <= Clock;
@@ -550,41 +572,55 @@ package body System.Task_Primitives.Operations is
Time : Duration;
Mode : ST.Delay_Modes)
is
+ Check_Time : constant Duration := Clock;
+ Abs_Time : Duration;
+ Rel_Time : Duration;
+ Request : aliased timespec;
+ Result : Interfaces.C.int;
- Check_Time : constant Duration := Clock;
- Abs_Time : Duration;
- Request : aliased timespec;
- Result : Interfaces.C.int;
begin
-
-- Only the little window between deferring abort and
-- locking Self_ID is the reason we need to
-- check for pending abort and priority change below! :(
- TSL.Abort_Defer.all;
+ SSL.Abort_Defer.all;
Write_Lock (Self_ID);
if Mode = Relative then
- Abs_Time := Time + Check_Time;
+ Abs_Time := Duration'Min (Time, Max_Sensible_Delay) + Check_Time;
+
+ if Relative_Timed_Wait then
+ Rel_Time := Duration'Min (Max_Sensible_Delay, Time);
+ end if;
+
else
- Abs_Time := Time;
+ Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
+
+ if Relative_Timed_Wait then
+ Rel_Time := Duration'Min (Max_Sensible_Delay, Time - Check_Time);
+ end if;
end if;
if Abs_Time > Check_Time then
- Request := To_Timespec (Abs_Time);
- Self_ID.State := Delay_Sleep;
+ if Relative_Timed_Wait then
+ Request := To_Timespec (Rel_Time);
+ else
+ Request := To_Timespec (Abs_Time);
+ end if;
+
+ Self_ID.Common.State := Delay_Sleep;
loop
if Self_ID.Pending_Priority_Change then
Self_ID.Pending_Priority_Change := False;
- Self_ID.Base_Priority := Self_ID.New_Base_Priority;
- Set_Priority (Self_ID, Self_ID.Base_Priority);
+ Self_ID.Common.Base_Priority := Self_ID.New_Base_Priority;
+ Set_Priority (Self_ID, Self_ID.Common.Base_Priority);
end if;
exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level;
- Result := pthread_cond_timedwait
- (Self_ID.LL.CV'Access, Self_ID.LL.L'Access, Request'Access);
+ Result := pthread_cond_timedwait (Self_ID.Common.LL.CV'Access,
+ Self_ID.Common.LL.L'Access, Request'Access);
exit when Abs_Time <= Clock;
pragma Assert (Result = 0
@@ -592,12 +628,12 @@ package body System.Task_Primitives.Operations is
or else Result = EINTR);
end loop;
- Self_ID.State := Runnable;
+ Self_ID.Common.State := Runnable;
end if;
Unlock (Self_ID);
Result := sched_yield;
- TSL.Abort_Undefer.all;
+ SSL.Abort_Undefer.all;
end Timed_Delay;
-----------
@@ -632,7 +668,7 @@ package body System.Task_Primitives.Operations is
Result : Interfaces.C.int;
begin
- Result := pthread_cond_signal (T.LL.CV'Access);
+ Result := pthread_cond_signal (T.Common.LL.CV'Access);
pragma Assert (Result = 0);
end Wakeup;
@@ -662,19 +698,19 @@ package body System.Task_Primitives.Operations is
Param : aliased struct_sched_param;
begin
- T.LL.Current_Priority := Interfaces.C.int (Prio);
+ T.Common.Current_Priority := Prio;
-- Convert the Ada priority to be based around the default
-- system priority.
- Param.sched_priority := DEFAULT_PRIO + Interfaces.C.int (Prio) -
+ Param.sched_priority := Default_Prio + Interfaces.C.int (Prio) -
Interfaces.C.int (System.Default_Priority);
if Time_Slice_Supported and then Time_Slice_Val > 0 then
Result := pthread_setschedparam
- (T.LL.Thread, SCHED_RR, Param'Access);
+ (T.Common.LL.Thread, SCHED_RR, Param'Access);
else
Result := pthread_setschedparam
- (T.LL.Thread, SCHED_FIFO, Param'Access);
+ (T.Common.LL.Thread, SCHED_FIFO, Param'Access);
end if;
pragma Assert (Result = 0);
@@ -686,7 +722,7 @@ package body System.Task_Primitives.Operations is
function Get_Priority (T : Task_ID) return System.Any_Priority is
begin
- return System.Any_Priority (T.LL.Current_Priority);
+ return T.Common.Current_Priority;
end Get_Priority;
----------------
@@ -695,7 +731,7 @@ package body System.Task_Primitives.Operations is
procedure Enter_Task (Self_ID : Task_ID) is
begin
- Self_ID.LL.Thread := pthread_self;
+ Self_ID.Common.LL.Thread := pthread_self;
Specific.Set (Self_ID);
@@ -749,17 +785,18 @@ package body System.Task_Primitives.Operations is
-- Convert the Ada priority to be based around the default
-- system priority.
Adjusted_Prio := Interfaces.C.int (System.Any_Priority'Last) -
- Interfaces.C.int (System.Default_Priority) + DEFAULT_PRIO;
+ Interfaces.C.int (System.Default_Priority) + Default_Prio;
Result := pthread_mutexattr_setprotocol
(Mutex_Attr'Access, PTHREAD_PRIO_PROTECT);
pragma Assert (Result = 0);
Result := pthread_mutexattr_setprioceiling
- (Mutex_Attr'Access, Interfaces.C.int (Adjusted_Prio));
+ (Mutex_Attr'Access, Adjusted_Prio);
pragma Assert (Result = 0);
- Result := pthread_mutex_init (Self_ID.LL.L'Access, Mutex_Attr'Access);
+ Result := pthread_mutex_init (Self_ID.Common.LL.L'Access,
+ Mutex_Attr'Access);
pragma Assert (Result = 0 or else Result = ENOMEM);
if Result /= 0 then
@@ -767,29 +804,33 @@ package body System.Task_Primitives.Operations is
return;
end if;
+ Result := pthread_mutexattr_destroy (Mutex_Attr'Access);
+ pragma Assert (Result = 0);
+
Result := pthread_condattr_init (Cond_Attr'Access);
pragma Assert (Result = 0 or else Result = ENOMEM);
if Result /= 0 then
- Result := pthread_mutex_destroy (Self_ID.LL.L'Access);
+ Result := pthread_mutex_destroy (Self_ID.Common.LL.L'Access);
pragma Assert (Result = 0);
Succeeded := False;
return;
end if;
- Result := pthread_cond_init (Self_ID.LL.CV'Access, Cond_Attr'Access);
+ Result := pthread_cond_init (Self_ID.Common.LL.CV'Access,
+ Cond_Attr'Access);
pragma Assert (Result = 0 or else Result = ENOMEM);
if Result /= 0 then
- Result := pthread_mutex_destroy (Self_ID.LL.L'Access);
+ Result := pthread_condattr_destroy (Cond_Attr'Access);
pragma Assert (Result = 0);
- Result := pthread_mutexattr_destroy (Mutex_Attr'Access);
+ Result := pthread_mutex_destroy (Self_ID.Common.LL.L'Access);
pragma Assert (Result = 0);
Succeeded := False;
return;
end if;
- Result := pthread_mutexattr_destroy (Mutex_Attr'Access);
+ Result := pthread_condattr_destroy (Cond_Attr'Access);
pragma Assert (Result = 0);
Succeeded := True;
@@ -806,8 +847,6 @@ package body System.Task_Primitives.Operations is
Priority : System.Any_Priority;
Succeeded : out Boolean)
is
- use System.Task_Info;
-
Attributes : aliased pthread_attr_t;
Adjusted_Stack_Size : Interfaces.C.size_t;
Result : Interfaces.C.int;
@@ -815,12 +854,15 @@ package body System.Task_Primitives.Operations is
function Thread_Body_Access is new
Unchecked_Conversion (System.Address, Thread_Body);
+ use System.Task_Info;
+
begin
if Stack_Size = Unspecified_Size then
Adjusted_Stack_Size := Interfaces.C.size_t (Default_Stack_Size);
elsif Stack_Size < Minimum_Stack_Size then
Adjusted_Stack_Size := Interfaces.C.size_t (Minimum_Stack_Size);
+
else
Adjusted_Stack_Size := Interfaces.C.size_t (Stack_Size);
end if;
@@ -849,7 +891,7 @@ package body System.Task_Primitives.Operations is
pragma Assert (Result = 0);
Result := pthread_attr_setstacksize
- (Attributes'Access, Interfaces.C.size_t (Adjusted_Stack_Size));
+ (Attributes'Access, Adjusted_Stack_Size);
pragma Assert (Result = 0);
if Time_Slice_Supported and then Time_Slice_Val > 0 then
@@ -873,26 +915,20 @@ package body System.Task_Primitives.Operations is
-- All tasks in RTS will have All_Tasks_Mask initially.
Result := pthread_create
- (T.LL.Thread'Access,
+ (T.Common.LL.Thread'Access,
Attributes'Access,
Thread_Body_Access (Wrapper),
To_Address (T));
pragma Assert (Result = 0 or else Result = EAGAIN);
- if Result /= 0 then
- Result := pthread_attr_destroy (Attributes'Access);
- Succeeded := false;
- return;
- end if;
-
- Succeeded := true;
+ Succeeded := Result = 0;
- if T.Task_Image /= null then
+ if T.Common.Task_Image /= null then
declare
- Name : aliased string (1 .. T.Task_Image.all'Length + 1);
+ Name : aliased String (1 .. T.Common.Task_Image.all'Length + 1);
begin
- Name := T.Task_Image.all & Ascii.Nul;
- Result := pthread_set_name_np (T.LL.Thread, Name'Address);
+ Name := T.Common.Task_Image.all & ASCII.Nul;
+ Result := pthread_set_name_np (T.Common.LL.Thread, Name'Address);
end;
end if;
@@ -911,10 +947,10 @@ package body System.Task_Primitives.Operations is
Unchecked_Deallocation (Ada_Task_Control_Block, Task_ID);
begin
- Result := pthread_mutex_destroy (T.LL.L'Access);
+ Result := pthread_mutex_destroy (T.Common.LL.L'Access);
pragma Assert (Result = 0);
- Result := pthread_cond_destroy (T.LL.CV'Access);
+ Result := pthread_cond_destroy (T.Common.LL.CV'Access);
pragma Assert (Result = 0);
if T.Known_Tasks_Index /= -1 then
@@ -941,7 +977,7 @@ package body System.Task_Primitives.Operations is
Result : Interfaces.C.int;
begin
- Result := pthread_kill (T.LL.Thread,
+ Result := pthread_kill (T.Common.LL.Thread,
Signal (System.Interrupt_Management.Abort_Task_Interrupt));
pragma Assert (Result = 0);
end Abort_Task;
@@ -1025,9 +1061,6 @@ package body System.Task_Primitives.Operations is
old_act : aliased struct_sigaction;
Tmp_Set : aliased sigset_t;
Result : Interfaces.C.int;
- Policy : aliased Interfaces.C.int;
- param : aliased struct_sched_param;
- My_Tid : pthread_t;
begin
Environment_Task_ID := Environment_Task;
@@ -1056,26 +1089,16 @@ package body System.Task_Primitives.Operations is
old_act'Unchecked_Access);
pragma Assert (Result = 0);
-
- if Time_Slice_Supported and then Time_Slice_Val > 0 then
- -- Is Environment_Task.LL.Thread initialized yet?
- My_Tid := pthread_self;
- if pthread_getschedparam
- (My_Tid, Policy'Access, param'Access) = 0
- then
- Result := pthread_setschedparam (My_Tid, SCHED_RR, param'Access);
- pragma Assert (Result = 0);
- end if;
- end if;
-
end Initialize;
begin
declare
Result : Interfaces.C.int;
+ My_Tid : pthread_t;
+ Param : aliased struct_sched_param;
+ Policy : aliased Interfaces.C.int;
begin
-
-- Mask Environment task for all signals. The original mask of the
-- Environment task will be recovered by Interrupt_Server task
-- during the elaboration of s-interr.adb.
@@ -1094,6 +1117,14 @@ begin
pragma Assert (Result = 0);
end if;
end loop;
+
+ -- Earlier versions of FreeBSDs threads libraries used a priority
+ -- range of 0..126. Newer versions use POSIX priorities 0..31.
+ -- Autodetect the range by looking at the current priority.
+ My_Tid := pthread_self;
+ if pthread_getschedparam (My_Tid, Policy'Access, Param'Access) = 0 then
+ Default_Prio := Param.sched_priority;
+ end if;
end;
end System.Task_Primitives.Operations;
diff --git a/lang/gnat/files/patch-ac b/lang/gnat/files/patch-ac
index 29b3b147ca68..966caf1dd517 100644
--- a/lang/gnat/files/patch-ac
+++ b/lang/gnat/files/patch-ac
@@ -1,8 +1,8 @@
-*** ./ada/Makefile.in.orig Fri Sep 24 08:41:35 1999
---- ./ada/Makefile.in Tue Nov 2 10:53:14 1999
+*** ada/Makefile.in.orig Wed Jul 19 15:08:56 2000
+--- ada/Makefile.in Sun Oct 15 01:09:35 2000
***************
-*** 909,914 ****
---- 909,927 ----
+*** 976,981 ****
+--- 976,1002 ----
endif
endif
@@ -11,14 +11,39 @@
+ a-intnam.ads<4fintnam.ads \
+ s-inmaop.adb<7sinmaop.adb \
+ s-intman.adb<5fintman.adb \
++ s-mastop.adb<5omastop.adb \
+ s-osinte.adb<5fosinte.adb \
+ s-osinte.ads<5fosinte.ads \
+ s-osprim.adb<7sosprim.adb \
+ s-taprop.adb<5ftaprop.adb \
-+ s-taspri.ads<5ftaspri.ads \
-+ s-tpopsp.adb<7stpopsp.adb
++ s-taspri.ads<7staspri.ads \
++ s-tpopsp.adb<7stpopsp.adb \
++ s-traceb.adb<5wtraceb.adb \
++ system.ads<5fsystem.ads
++
++ threadslib=
++ LIBRARY_VERSION := $(strip $(shell grep Library_Version $(fsrcpfx)gnatvsn.ads | sed -e 's/.*GNAT Lib v\(.*\)[ "].*/\1/'))
++ SHARED_MAJOR = 1
++ soext = .so.$(SHARED_MAJOR)
+ endif
+
ifeq ($(strip $(filter-out mips sgi irix%,$(targ))),)
+ ifeq ($(strip $(filter-out mips sgi irix6%,$(targ))),)
+ LIBGNAT_TARGET_PAIRS = \
+***************
+*** 1818,1824 ****
+ $(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) $(misclib) -lm
+ cd rts; ../../xgcc -B../../ -shared $(TARGET_LIBGCC2_CFLAGS) \
+ -o libgnarl-$(LIBRARY_VERSION)$(soext) $(SO_OPTS)libgnarl-$(LIBRARY_VERSION)$(soext) \
+! $(GNATRTL_TASKING_OBJS) -l$(threadslib)
+
+ gnatlib-shared-dual:
+ $(MAKE) $(FLAGS_TO_PASS) \
+--- 1839,1845 ----
+ $(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) $(misclib) -lm
+ cd rts; ../../xgcc -B../../ -shared $(TARGET_LIBGCC2_CFLAGS) \
+ -o libgnarl-$(LIBRARY_VERSION)$(soext) $(SO_OPTS)libgnarl-$(LIBRARY_VERSION)$(soext) \
+! $(GNATRTL_TASKING_OBJS) $(threadslib)
- threadsletter=A
+ gnatlib-shared-dual:
+ $(MAKE) $(FLAGS_TO_PASS) \
diff --git a/lang/gnat/files/patch-ai b/lang/gnat/files/patch-ai
index f0a487f505f0..ff080cda20fe 100644
--- a/lang/gnat/files/patch-ai
+++ b/lang/gnat/files/patch-ai
@@ -1,8 +1,8 @@
-*** ./ada/a-init.c.orig Fri Sep 24 08:42:43 1999
---- ./ada/a-init.c Mon Jun 26 21:43:54 2000
+*** ada/a-init.c.orig Wed Jul 19 15:09:57 2000
+--- ada/a-init.c Fri Oct 13 11:25:52 2000
***************
-*** 1445,1450 ****
---- 1445,1532 ----
+*** 1441,1446 ****
+--- 1441,1528 ----
}
@@ -80,11 +80,11 @@
+ {
+ __gnat_install_handler ();
+
-+ /* XXX - Initialize floating-point coprocessor. This call is
-+ needed because FreeBSD defaults to 53-bit precision instead
-+ of 64-bit precision. We require the full precision for
++ /* XXX - Initialize floating-point coprocessor. This call is
++ needed because FreeBSD defaults to 64-bit precision instead
++ of 80-bit precision? We require the full precision for
+ proper operation, given that we have set Max_Digits etc
-+ with this in mind. */
++ with this in mind */
+ __gnat_init_float ();
+ }
+
@@ -92,19 +92,19 @@
/* __gnat_initialize (default version) */
/***************************************/
***************
-*** 1470,1476 ****
- defined in all Win32 versions, but only actually does something on
- the i386 version, where it properly initializes the FPU for GNAT use. */
+*** 1466,1472 ****
+ WIN32 and could be used under OS/2 */
-! #if defined (_WIN32) || defined (__INTERIX)
- void
- __gnat_init_float ()
- {
---- 1552,1558 ----
- defined in all Win32 versions, but only actually does something on
- the i386 version, where it properly initializes the FPU for GNAT use. */
+ #if defined (_WIN32) || defined (__INTERIX) || defined (__EMX__) \
+! || defined (__Lynx__)
+
+ #define HAVE_GNAT_INIT_FLOAT
+
+--- 1548,1554 ----
+ WIN32 and could be used under OS/2 */
+
+ #if defined (_WIN32) || defined (__INTERIX) || defined (__EMX__) \
+! || defined (__Lynx__) || defined (__FreeBSD__)
+
+ #define HAVE_GNAT_INIT_FLOAT
-! #if defined (_WIN32) || defined (__INTERIX) || defined (__FreeBSD__)
- void
- __gnat_init_float ()
- {
diff --git a/lang/gnat/files/patch-aj b/lang/gnat/files/patch-aj
index 420743c178e7..27861217e09f 100644
--- a/lang/gnat/files/patch-aj
+++ b/lang/gnat/files/patch-aj
@@ -1,29 +1,28 @@
-*** ./ada/a-sysdep.c.orig Fri Sep 24 08:42:39 1999
---- ./ada/a-sysdep.c Sat Nov 6 16:27:43 1999
+*** ada/a-sysdep.c.orig Wed Jul 19 15:09:47 2000
+--- ada/a-sysdep.c Fri Oct 13 08:58:43 2000
***************
-*** 235,241 ****
- #endif
+*** 236,242 ****
#if defined (linux) || defined (sun) || defined (sgi) || defined (__EMX__) \
-! || (defined (__osf__) && ! defined (__alpha_vxworks)) || defined (WINNT)
+ || (defined (__osf__) && ! defined (__alpha_vxworks)) || defined (WINNT) \
+! || defined (__MACHTEN__)
#include <termios.h>
#include <fcntl.h>
#elif defined (VMS)
---- 235,242 ----
- #endif
+--- 236,242 ----
#if defined (linux) || defined (sun) || defined (sgi) || defined (__EMX__) \
-! || (defined (__osf__) && ! defined (__alpha_vxworks)) || defined (WINNT) \
-! || defined (__FreeBSD__)
+ || (defined (__osf__) && ! defined (__alpha_vxworks)) || defined (WINNT) \
+! || defined (__MACHTEN__) || defined (__FreeBSD__)
#include <termios.h>
#include <fcntl.h>
#elif defined (VMS)
***************
-*** 285,291 ****
+*** 286,292 ****
{
#if defined (linux) || defined (sun) || defined (sgi) || defined (__EMX__) \
|| (defined (__osf__) && ! defined (__alpha_vxworks)) \
-! || defined (__CYGWIN32__)
+! || defined (__CYGWIN32__) || defined (__MACHTEN__)
char c;
int nread;
int good_one = 0;
@@ -31,16 +30,16 @@
{
#if defined (linux) || defined (sun) || defined (sgi) || defined (__EMX__) \
|| (defined (__osf__) && ! defined (__alpha_vxworks)) \
-! || defined (__CYGWIN32__) || defined (__FreeBSD__)
+! || defined (__CYGWIN32__) || defined (__MACHTEN__) || defined (__FreeBSD__)
char c;
int nread;
int good_one = 0;
***************
-*** 302,308 ****
+*** 303,309 ****
/* Set RAW mode */
termios_rec.c_lflag = termios_rec.c_lflag & ~ICANON;
#if defined(sgi) || defined (sun) || defined (__EMX__) || defined (__osf__) \
-! || defined (linux)
+! || defined (linux) || defined (__MACHTEN__)
eof_ch = termios_rec.c_cc[VEOF];
/* If waiting (i.e. Get_Immediate (Char)), set MIN = 1 and wait for
@@ -48,7 +47,7 @@
/* Set RAW mode */
termios_rec.c_lflag = termios_rec.c_lflag & ~ICANON;
#if defined(sgi) || defined (sun) || defined (__EMX__) || defined (__osf__) \
-! || defined (linux) || defined (__FreeBSD__)
+! || defined (linux) || defined (__MACHTEN__) || defined (__FreeBSD__)
eof_ch = termios_rec.c_cc[VEOF];
/* If waiting (i.e. Get_Immediate (Char)), set MIN = 1 and wait for
diff --git a/lang/gnat/files/patch-al b/lang/gnat/files/patch-al
index 366a106755b9..fb2b6b81638d 100644
--- a/lang/gnat/files/patch-al
+++ b/lang/gnat/files/patch-al
@@ -14,7 +14,7 @@
+
+ procedure tmpnam (tname : chars) is
+ use type System.Address;
-+ Template : string (1 .. 18) := "/var/tmp/tmp.XXXX" & Ascii.Nul;
++ Template : String (1 .. 18) := "/var/tmp/tmp.XXXX" & ASCII.Nul;
+ Name : chars;
+ begin
+ Name := C_mktemp (Template'Address);
@@ -24,8 +24,8 @@
+ end tmpnam;
+
+ function tmpfile return FILEs is
-+ Name : string (1 .. L_tmpnam) := (others => Ascii.Nul);
-+ Mode : string (1 .. 3) := "w+" & Ascii.Nul;
++ Name : String (1 .. L_tmpnam) := (others => ASCII.Nul);
++ Mode : String (1 .. 3) := "w+" & ASCII.Nul;
+ begin
+ tmpnam (Name'Address);
+ return (fopen (Name'Address, Mode'Address));
diff --git a/lang/gnat/files/patch-am b/lang/gnat/files/patch-am
new file mode 100644
index 000000000000..20093d20bfec
--- /dev/null
+++ b/lang/gnat/files/patch-am
@@ -0,0 +1,31 @@
+--- ada/g-os_lib.adb.orig Wed Jul 19 15:09:39 2000
++++ ada/g-os_lib.adb Fri Oct 13 09:09:33 2000
+@@ -173,25 +173,12 @@
+ (FD : out File_Descriptor;
+ Name : out Temp_File_Name)
+ is
+- function Get_Temp_Name (T : Address) return Address;
+- pragma Import (C, Get_Temp_Name, "mktemp");
+-
+- function Open_New_Temp
+- (Name : System.Address;
+- Fmode : Mode)
+- return File_Descriptor;
+- pragma Import (C, Open_New_Temp, "open_new_temp");
++ function Open_New_Temp (T : Address) return File_Descriptor;
++ pragma Import (C, Open_New_Temp, "mkstemp");
+
+ begin
+ Name := "GNAT-XXXXXX" & ASCII.NUL;
+-
+- -- Check for NULL pointer returned by C
+-
+- if Get_Temp_Name (Name'Address) = Null_Address then
+- FD := -1;
+- else
+- FD := Open_New_Temp (Name'Address, Binary);
+- end if;
++ FD := Open_New_Temp (Name'Address);
+ end Create_Temp_File;
+
+ -----------------
diff --git a/lang/gnat/files/patch-an b/lang/gnat/files/patch-an
new file mode 100644
index 000000000000..1ef1098cdb6e
--- /dev/null
+++ b/lang/gnat/files/patch-an
@@ -0,0 +1,18 @@
+--- ada/a-link.c.orig Sat May 6 19:38:57 2000
++++ ada/a-link.c Sat May 6 19:41:09 2000
+@@ -149,6 +149,15 @@
+ unsigned char objlist_file_supported = 0;
+ unsigned char using_gnu_linker = 0;
+
++#elif defined (__FreeBSD__)
++char *object_file_option = "";
++char *run_path_option = "";
++char shared_libgnat_default = SHARED;
++int link_max = 2147483647;
++unsigned char objlist_file_supported = 0;
++unsigned char using_gnu_linker = 0;
++char *object_library_extension = ".a";
++
+ #elif defined (linux)
+ char *object_file_option = "";
+ char *run_path_option = "-Wl,-rpath,";
diff --git a/lang/gnat/pkg-descr b/lang/gnat/pkg-descr
index f7bdc5da88ea..57087f22b873 100644
--- a/lang/gnat/pkg-descr
+++ b/lang/gnat/pkg-descr
@@ -1,7 +1,6 @@
The GNU Ada compiler system built on GCC 2.8.1.
The libraries supplied with this version of GNAT support tasking
-with FreeBSD 3.x, and 4.x versions of libc_r.
+with FreeBSD 3.x, 4.x, and 5.x versions of libc_r.
-Daniel Eischen
-eischen@vigrid.com
+WWW: http://www.gnat.com/
diff --git a/lang/gnat/pkg-plist b/lang/gnat/pkg-plist
index 460489f6271c..0f8b32d799bc 100644
--- a/lang/gnat/pkg-plist
+++ b/lang/gnat/pkg-plist
@@ -1,3 +1,5 @@
+@exec /sbin/ldconfig -m %D/lib
+@unexec /sbin/ldconfig -R
bin/adagcc
bin/adagcov
bin/gnat
@@ -27,6 +29,8 @@ lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/a-charac.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/a-chlat1.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/a-colien.adb
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/a-colien.ads
+lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/a-colire.adb
+lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/a-colire.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/a-comlin.adb
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/a-comlin.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/a-cwila1.ads
@@ -38,7 +42,6 @@ lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/a-direio.adb
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/a-direio.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/a-dynpri.adb
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/a-dynpri.ads
-lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/a-emstop.adb
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/a-except.adb
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/a-except.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/a-excpol.adb
@@ -136,6 +139,8 @@ lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/a-stwiun.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/a-suteio.adb
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/a-suteio.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/a-swmwco.ads
+lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/a-swuwti.adb
+lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/a-swuwti.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/a-sytaco.adb
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/a-sytaco.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/a-tags.adb
@@ -225,15 +230,23 @@ lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/g-busora.adb
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/g-busora.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/g-busorg.adb
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/g-busorg.ads
+lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/g-calend.adb
+lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/g-calend.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/g-casuti.adb
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/g-casuti.ads
+lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/g-catiio.adb
+lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/g-catiio.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/g-comlin.adb
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/g-comlin.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/g-curexc.ads
+lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/g-debpoo.adb
+lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/g-debpoo.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/g-debuti.adb
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/g-debuti.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/g-dirope.adb
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/g-dirope.ads
+lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/g-except.ads
+lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/g-flocon.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/g-hesora.adb
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/g-hesora.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/g-hesorg.adb
@@ -296,6 +309,7 @@ lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/i-os2syn.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/i-os2thr.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/i-pacdec.adb
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/i-pacdec.ads
+lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/i-vxwork.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/interfac.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/ioexcept.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/machcode.ads
@@ -314,8 +328,6 @@ lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-auxdec.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-bitops.adb
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-bitops.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-chepoo.ads
-lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-debpoo.adb
-lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-debpoo.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-direio.adb
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-direio.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-errrep.adb
@@ -405,6 +417,8 @@ lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-io.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-maccod.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-mantis.adb
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-mantis.ads
+lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-mastop.adb
+lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-mastop.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-osinte.adb
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-osinte.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-osprim.adb
@@ -579,8 +593,6 @@ lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-taprop.adb
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-taprop.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-tarest.adb
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-tarest.ads
-lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-tasabo.adb
-lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-tasabo.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-tasdeb.adb
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-tasdeb.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-tasinf.adb
@@ -589,10 +601,6 @@ lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-tasini.adb
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-tasini.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-taskin.adb
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-taskin.ads
-lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-tasoli.adb
-lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-tasoli.ads
-lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-taspda.adb
-lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-taspda.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-taspri.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-tasque.adb
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-tasque.ads
@@ -614,6 +622,8 @@ lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-tpobop.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-tpopsp.adb
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-tposen.adb
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-tposen.ads
+lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-traceb.adb
+lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-traceb.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-unstyp.ads
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-vaflop.adb
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude/s-vaflop.ads
@@ -684,6 +694,7 @@ lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/a-chahan.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/a-charac.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/a-chlat1.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/a-colien.ali
+lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/a-colire.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/a-comlin.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/a-cwila1.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/a-decima.ali
@@ -748,6 +759,7 @@ lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/a-stwise.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/a-stwiun.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/a-suteio.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/a-swmwco.ali
+lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/a-swuwti.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/a-sytaco.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/a-tags.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/a-taside.ali
@@ -776,11 +788,16 @@ lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/a-wttest.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/ada.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/calendar.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/g-busora.ali
+lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/g-calend.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/g-casuti.ali
+lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/g-catiio.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/g-comlin.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/g-curexc.ali
+lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/g-debpoo.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/g-debuti.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/g-dirope.ali
+lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/g-except.ali
+lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/g-flocon.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/g-hesora.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/g-htable.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/g-io.ali
@@ -809,7 +826,12 @@ lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/i-fortra.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/i-pacdec.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/interfac.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/ioexcept.ali
+lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/libgnarl.a
+lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/libgnarl.so
+lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/libgnarl.so.%%SHARED_MAJOR%%
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/libgnat.a
+lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/libgnat.so
+lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/libgnat.so.%%SHARED_MAJOR%%
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/machcode.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-addima.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-arit64.ali
@@ -818,7 +840,6 @@ lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-asthan.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-auxdec.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-bitops.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-chepoo.ali
-lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-debpoo.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-direio.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-errrep.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-except.ali
@@ -875,6 +896,7 @@ lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-intman.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-io.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-maccod.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-mantis.ali
+lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-mastop.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-osinte.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-osprim.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-pack03.ali
@@ -963,7 +985,6 @@ lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-taenca.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-taprob.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-taprop.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-tarest.ali
-lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-tasabo.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-tasdeb.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-tasinf.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-tasini.ali
@@ -979,6 +1000,7 @@ lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-tpinop.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-tpoben.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-tpobop.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-tposen.ali
+lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-traceb.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-unstyp.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-vaflop.ali
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib/s-valboo.ali
@@ -1025,6 +1047,8 @@ lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/cpp
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/gnat1
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/libgcc.a
lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/specs
+lib/libgnat-%%LIBRARY_VERSION%%.so.%%SHARED_MAJOR%%
+lib/libgnarl-%%LIBRARY_VERSION%%.so.%%SHARED_MAJOR%%
%%GNUHOST%%/include/assert.h
@dirrm lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adainclude
@dirrm lib/gcc-lib/%%GNUHOST%%/%%GCC_VERSION%%/adalib