aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.4.3/gcc/ada/s-shasto.ads
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.4.3/gcc/ada/s-shasto.ads')
-rw-r--r--gcc-4.4.3/gcc/ada/s-shasto.ads183
1 files changed, 0 insertions, 183 deletions
diff --git a/gcc-4.4.3/gcc/ada/s-shasto.ads b/gcc-4.4.3/gcc/ada/s-shasto.ads
deleted file mode 100644
index 0ef65cc59..000000000
--- a/gcc-4.4.3/gcc/ada/s-shasto.ads
+++ /dev/null
@@ -1,183 +0,0 @@
-------------------------------------------------------------------------------
--- --
--- GNAT COMPILER COMPONENTS --
--- --
--- S Y S T E M . S H A R E D _ S T O R A G E --
--- --
--- S p e c --
--- --
--- Copyright (C) 1998-2009, Free Software Foundation, Inc. --
--- --
--- GNAT is free software; you can redistribute it and/or modify it under --
--- terms of the GNU General Public License as published by the Free Soft- --
--- ware Foundation; either version 3, or (at your option) any later ver- --
--- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
--- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
--- or FITNESS FOR A PARTICULAR PURPOSE. --
--- --
--- As a special exception under Section 7 of GPL version 3, you are granted --
--- additional permissions described in the GCC Runtime Library Exception, --
--- version 3.1, as published by the Free Software Foundation. --
--- --
--- You should have received a copy of the GNU General Public License and --
--- a copy of the GCC Runtime Library Exception along with this program; --
--- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
--- <http://www.gnu.org/licenses/>. --
--- --
--- GNAT was originally developed by the GNAT team at New York University. --
--- Extensive contributions were provided by Ada Core Technologies Inc. --
--- --
-------------------------------------------------------------------------------
-
--- This package manages the shared/persistent storage required for
--- full implementation of variables in Shared_Passive packages, more
--- precisely variables whose enclosing dynamic scope is a shared
--- passive package. This implementation is specific to GNAT and GLADE
--- provides a more general implementation not dedicated to file
--- storage.
-
--- This unit (and shared passive partitions) are supported on all
--- GNAT implementations except on OpenVMS (where problems arise from
--- trying to share files, and with version numbers of files)
-
--- --------------------------
--- -- Shared Storage Model --
--- --------------------------
-
--- The basic model used is that each partition that references the
--- Shared_Passive package has a local copy of the package data that
--- is initialized in accordance with the declarations of the package
--- in the normal manner. The routines in System.Shared_Storage are
--- then used to ensure that the values in these separate copies are
--- properly synchronized with the state of the overall system.
-
--- In the GNAT implementation, this synchronization is ensured by
--- maintaining a set of files, in a designated directory. The
--- directory is designated by setting the environment variable
--- SHARED_MEMORY_DIRECTORY. This variable must be set for all
--- partitions. If the environment variable is not defined, then the
--- current directory is used.
-
--- There is one storage for each variable. The name is the fully
--- qualified name of the variable with all letters forced to lower
--- case. For example, the variable Var in the shared passive package
--- Pkg results in the storage name pkg.var.
-
--- If the storage does not exist, it indicates that no partition has
--- assigned a new value, so that the initial value is the correct
--- one. This is the critical component of the model. It means that
--- there is no system-wide synchronization required for initializing
--- the package, since the shared storages need not (and do not)
--- reflect the initial state. There is therefore no issue of
--- synchronizing initialization and read/write access.
-
--- -----------------------
--- -- Read/Write Access --
--- -----------------------
-
--- The approach is as follows:
-
--- For each shared variable, var, an instantiation of the below generic
--- package is created which provides Read and Write supporting procedures.
-
--- The routine Read in package System.Shared_Storage.Shared_Var_Procs
--- ensures to assign variable V to the last written value among processes
--- referencing it. A call to this procedure is generated by the expander
--- before each read access to the shared variable.
-
--- The routine Write in package System.Shared_Storage.Shared_Var_Proc
--- set a new value to the shared variable and, according to the used
--- implementation, propagate this value among processes referencing it.
--- A call to this procedure is generated by the expander after each
--- assignment of the shared variable.
-
--- Note: a special circuit allows the use of stream attributes Read and
--- Write for limited types (using the corresponding attribute for the
--- full type), but there are limitations on the data that can be placed
--- in shared passive partitions. See sem_smem.ads/adb for details.
-
--- ----------------------------------------------------------------
--- -- Handling of Protected Objects in Shared Passive Partitions --
--- ----------------------------------------------------------------
-
--- In the context of GNAT, during the execution of a protected
--- subprogram call, access is locked out using a locking mechanism
--- per protected object, as provided by the GNAT.Lock_Files
--- capability in the specific case of GNAT. This package contains the
--- lock and unlock calls, and the expander generates a call to the
--- lock routine before the protected call and a call to the unlock
--- routine after the protected call.
-
--- Within the code of the protected subprogram, the access to the
--- protected object itself uses the local copy, without any special
--- synchronization. Since global access is locked out, no other task
--- or partition can attempt to read or write this data as long as the
--- lock is held.
-
--- The data in the local copy does however need synchronizing with
--- the global values in the shared storage. This is achieved as
--- follows:
-
--- The protected object generates a read and assignment routine as
--- described for other shared passive variables. The code for the
--- 'Read and 'Write attributes (not normally allowed, but allowed
--- in this special case) simply reads or writes the values of the
--- components in the protected record.
-
--- The lock call is followed by a call to the shared read routine to
--- synchronize the local copy to contain the proper global value.
-
--- The unlock call in the procedure case only is preceded by a call
--- to the shared assign routine to synchronize the global shared
--- storages with the (possibly modified) local copy.
-
--- These calls to the read and assign routines, as well as the lock
--- and unlock routines, are inserted by the expander (see exp_smem.adb).
-
-package System.Shared_Storage is
-
- procedure Shared_Var_Lock (Var : String);
- -- This procedure claims the shared storage lock. It is used for
- -- protected types in shared passive packages. A call to this
- -- locking routine is generated as the first operation in the code
- -- for the body of a protected subprogram, and it busy waits if
- -- the lock is busy.
-
- procedure Shared_Var_Unlock (Var : String);
- -- This procedure releases the shared storage lock obtained by a
- -- prior call to the Shared_Var_Lock procedure, and is to be
- -- generated as the last operation in the body of a protected
- -- subprogram.
-
- -- This generic package is instantiated for each shared passive
- -- variable. It provides supporting procedures called upon each
- -- read or write access by the expanded code.
-
- generic
-
- type Typ is limited private;
- -- Shared passive variable type
-
- V : in out Typ;
- -- Shared passive variable
-
- Full_Name : String;
- -- Shared passive variable storage name
-
- package Shared_Var_Procs is
-
- procedure Read;
- -- Shared passive variable access routine. Each reference to the
- -- shared variable, V, is preceded by a call to the corresponding
- -- Read procedure, which either leaves the initial value unchanged
- -- if the storage does not exist, or reads the current value from
- -- the shared storage.
-
- procedure Write;
- -- Shared passive variable assignment routine. Each assignment to
- -- the shared variable, V, is followed by a call to the corresponding
- -- Write procedure, which writes the new value to the shared storage.
-
- end Shared_Var_Procs;
-
-end System.Shared_Storage;