]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Fri, 10 Sep 2010 13:48:24 +0000 (15:48 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Fri, 10 Sep 2010 13:48:24 +0000 (15:48 +0200)
2010-09-10  Jose Ruiz  <ruiz@adacore.com>

* exp_cg.adb (Is_Predefined_Dispatching_Operation): Add the "__" scope
separator when trying the pattern matching to detect predefined
primitive operations.

2010-09-10  Robert Dewar  <dewar@adacore.com>

* bindgen.adb, atree.adb: Minor reformatting.

2010-09-10  Ben Brosgol  <brosgol@adacore.com>

* ug_words, gnat_ugn.texi: Revised "Transitioning to 64-Bit GNAT for
OpenVMS" section.

From-SVN: r164175

gcc/ada/ChangeLog
gcc/ada/atree.adb
gcc/ada/bindgen.adb
gcc/ada/exp_cg.adb
gcc/ada/gnat_ugn.texi
gcc/ada/ug_words

index da9e0c06b78b86967d32e1ca65305b3e64ab86a9..c86e6235c8a446b7c2cbef71f994932ee29df903 100644 (file)
@@ -1,3 +1,18 @@
+2010-09-10  Jose Ruiz  <ruiz@adacore.com>
+
+       * exp_cg.adb (Is_Predefined_Dispatching_Operation): Add the "__" scope
+       separator when trying the pattern matching to detect predefined
+       primitive operations.
+
+2010-09-10  Robert Dewar  <dewar@adacore.com>
+
+       * bindgen.adb, atree.adb: Minor reformatting.
+
+2010-09-10  Ben Brosgol  <brosgol@adacore.com>
+
+       * ug_words, gnat_ugn.texi: Revised "Transitioning to 64-Bit GNAT for
+       OpenVMS" section.
+
 2010-09-10  Doug Rupp  <rupp@adacore.com>
 
        * bindgen.adb: Minor comment fix for -H switch.
index 807527230af499346f671c044781a79f16e05d87..6e01d7ed42e564eef37dfc494ef63b06e6b92f42 100644 (file)
@@ -1261,7 +1261,7 @@ package body Atree is
    -- New_Node_Breakpoint --
    -------------------------
 
-   procedure nn is -- New_Node_Breakpoint
+   procedure nn is
    begin
       Write_Str ("Watched node ");
       Write_Int (Int (Watch_Node));
@@ -1273,7 +1273,7 @@ package body Atree is
    -- New_Node_Debugging_Output --
    -------------------------------
 
-   procedure nnd (N : Node_Id) is -- New_Node_Debugging_Output
+   procedure nnd (N : Node_Id) is
       Node_Is_Watched : constant Boolean := N = Watch_Node;
 
    begin
@@ -1666,7 +1666,7 @@ package body Atree is
    -- Rewrite_Breakpoint --
    -------------------------
 
-   procedure rr is -- Rewrite_Breakpoint
+   procedure rr is
    begin
       Write_Str ("Watched node ");
       Write_Int (Int (Watch_Node));
@@ -1678,7 +1678,7 @@ package body Atree is
    -- Rewrite_Debugging_Output --
    ------------------------------
 
-   procedure rrd (Old_Node, New_Node : Node_Id) is -- Rewrite_Debugging_Output
+   procedure rrd (Old_Node, New_Node : Node_Id) is
       Node_Is_Watched : constant Boolean := Old_Node = Watch_Node;
 
    begin
index df47274e9795f3d5555bdbf2bf1ad9eb3c3cd281..cbcc96bbd65dcead67937bb842030b8fb4036d53 100644 (file)
@@ -792,8 +792,9 @@ package body Bindgen is
          Write_Statement_Buffer;
 
          --  Generate call to Install_Handler
-         --  In .NET, when binding with -z, we don't install the signal
-         --  handler to let the caller handle the last exception handler.
+
+         --  In .NET, when binding with -z, we don't install the signal handler
+         --  to let the caller handle the last exception handler.
 
          if VM_Target /= CLI_Target
            or else Bind_Main_Program
index aad5157d9e32323b5d4d7208d4feff257e3da970..14d13908292d71addaa6168fc55b45e548e675db 100644 (file)
@@ -271,12 +271,21 @@ package body Exp_CG is
                for J in Predef_Names_95'Range loop
                   Get_Name_String (Predef_Names_95 (J));
 
-                  if Full_Name'Last - Suffix_Length > Name_Len
+                  --  The predefined primitive operations are identified by the
+                  --  names "_size", "_alignment", etc. If we try a pattern
+                  --  matching against this string, we can wrongly match other
+                  --  primitive operations like "get_size". To avoid this, we
+                  --  add the "__" scope separator, which can only prepend
+                  --  predefined primitive operations because other primitive
+                  --  operations can neither start with an underline nor
+                  --  contain two consecutive underlines in its name.
+
+                  if Full_Name'Last - Suffix_Length > Name_Len + 2
                     and then
                       Full_Name
-                        (Full_Name'Last - Name_Len - Suffix_Length + 1
+                        (Full_Name'Last - Name_Len - 2 - Suffix_Length + 1
                            .. Full_Name'Last - Suffix_Length) =
-                                                  Name_Buffer (1 .. Name_Len)
+                      "__" & Name_Buffer (1 .. Name_Len)
                   then
                      --  For the equality operator the type of the two operands
                      --  must also match.
@@ -291,12 +300,12 @@ package body Exp_CG is
                   for J in Predef_Names_05'Range loop
                      Get_Name_String (Predef_Names_05 (J));
 
-                     if Full_Name'Last - Suffix_Length > Name_Len
+                     if Full_Name'Last - Suffix_Length > Name_Len + 2
                        and then
                          Full_Name
-                           (Full_Name'Last - Name_Len - Suffix_Length + 1
+                           (Full_Name'Last - Name_Len - 2 - Suffix_Length + 1
                               .. Full_Name'Last - Suffix_Length) =
-                                                 Name_Buffer (1 .. Name_Len)
+                         "__" & Name_Buffer (1 .. Name_Len)
                      then
                         return True;
                      end if;
index 2f58df180c128a25f463507a2e8593e560b5a583..e22ac66ef48ef704bace0c9f8f4b2b89b8e11e87 100644 (file)
@@ -8057,6 +8057,7 @@ be presented in subsequent sections.
 * Binder Error Message Control::
 * Elaboration Control::
 * Output Control::
+* Dynamic Allocation Control::
 * Binding with Non-Ada Main Programs::
 * Binding Programs with No Main Subprogram::
 @end menu
@@ -8168,6 +8169,17 @@ flag checks are generated.
 @cindex @option{^-h^/HELP^} (@command{gnatbind})
 Output usage (help) information
 
+@item ^-H32^/32_MALLOC^
+@cindex @option{^-H32^/32_MALLOC^} (@command{gnatbind})
+Use 32-bit allocations for @code{__gnat_malloc} (and thus for access types).
+For further details see @ref{Dynamic Allocation Control}.
+
+@item ^-H64^/64_MALLOC^
+@cindex @option{^-H32^/32_MALLOC^} (@command{gnatbind})
+Use 64-bit allocations for @code{__gnat_malloc} (and thus for access types).
+@cindex @code{__gnat_malloc}
+For further details see @ref{Dynamic Allocation Control}.
+
 @item ^-I^/SEARCH^
 @cindex @option{^-I^/SEARCH^} (@command{gnatbind})
 Specify directory to be searched for source and ALI files.
@@ -8596,6 +8608,35 @@ be used to improve code generation in some cases.
 
 @end table
 
+@node Dynamic Allocation Control
+@subsection Dynamic Allocation Control
+
+@noindent
+The heap control switches -- @option{-H32} and @option{-H64} --
+determine whether dynamic allocation uses 32-bit or 64-bit memory.
+They only affect compiler-generated allocations via @code{__gnat_malloc};
+explicit calls to @code{malloc} and related functions from the C
+run-time library are unaffected.
+
+@table @option
+@item -H32
+Allocate memory on 32-bit heap
+
+@item -H64
+Allocate memory on 64-bit heap.  This is the default
+unless explicitly overridden by a @code{'Size} clause on the access type.
+@end table
+
+@ifset vms
+@noindent
+See also @ref{Access types and 32/64-bit allocation}.
+@end ifset
+@ifclear vms
+@noindent
+These switches are only effective on VMS platforms.
+@end ifclear
+
+
 @node Binding with Non-Ada Main Programs
 @subsection Binding with Non-Ada Main Programs
 
@@ -26509,10 +26550,11 @@ Such code will be referred to below as @emph{64-bit code}.
 
 @menu
 * Address types::
-* Access types::
+* Access types and 32/64-bit allocation::
 * Unchecked conversions::
 * Predefined constants::
 * Interfacing with C::
+* 32/64-bit descriptors::
 * Experience with source compatibility::
 @end menu
 
@@ -26527,9 +26569,13 @@ approach has been taken:
 @itemize @bullet
 @item
 @code{System.Address} always has a size of 64 bits
+@cindex @code{System.Address} size
+@cindex @code{Address} size
 
 @item
 @code{System.Short_Address} is a 32-bit subtype of @code{System.Address}
+@cindex @code{System.Short_Address} size
+@cindex @code{Short_Address} size
 @end itemize
 
 @noindent
@@ -26568,31 +26614,64 @@ required in any code setting or accessing the field; the compiler will
 automatically perform any needed conversions between address
 formats.
 
-@node Access types
-@subsubsection Access types
+@node Access types and 32/64-bit allocation
+@subsubsection Access types and 32/64-bit allocation
+@cindex 32-bit allocation
+@cindex 64-bit allocation
 
 @noindent
-By default, objects designated by access values are always
-allocated in the 32-bit
-address space. Thus legacy code will never contain
-any objects that are not addressable with 32-bit addresses, and
-the compiler will never raise exceptions as result of mixing
-32-bit and 64-bit addresses.
+By default, objects designated by access values are always allocated in
+the 64-bit address space, and access values themselves are represented
+in 64 bits.  If these defaults are not appropriate, and 32-bit allocation
+is required (for example if the address of an allocated object is assigned
+to a @code{Short_Address} variable), then several alternatives are available:
 
-However, the access values themselves are represented in 64 bits, for optimum
-performance and future compatibility with 64-bit code. As was
-the case with @code{System.Address}, the compiler will give an error message
-if an object or record component has a representation clause that
-requires the access value to fit in 32 bits. In such a situation,
-an explicit size clause for the access type, specifying 32 bits,
-will have the desired effect.
+@itemize @bullet
+@item
+A pool-specific access type (ie, an @w{Ada 83} access type, whose
+definition is @code{access T} versus @code{access all T} or
+@code{access constant T}), may be declared with a @code{'Size} representation
+clause that establishes the size as 32 bits.
+In such circumstances allocations for that type will
+be from the 32-bit heap.  Such a clause is not permitted
+for a general access type (declared with @code{access all} or
+@code{access constant}) as values of such types must be able to refer
+to any object of the designated type, including objects residing outside
+the 32-bit address range.  Existing @w{Ada 83} code will not contain such
+type definitions, however, since general access types were introduced
+in @w{Ada 95}.
+
+@item
+Switches for @command{GNAT BIND} control whether the internal GNAT
+allocation routine @code{__gnat_malloc} uses 64-bit or 32-bit allocations.
+@cindex @code{__gnat_malloc}
+The switches are respectively @option{-H64} (the default) and
+@option{-H32}.
+@cindex @option{-H32} (@command{gnatbind})
+@cindex @option{-H64} (@command{gnatbind})
+
+@item
+The environment variable (logical name) @code{GNAT$NO_MALLOC_64}
+@cindex @code{GNAT$NO_MALLOC_64} environment variable
+may be used to force @code{__gnat_malloc} to use 32-bit allocation.
+If this variable is left
+undefined, or defined as @code{"DISABLE"}, @code{"FALSE"}, or @code{"0"},
+then the default (64-bit) allocation is used.
+If defined as @code{"ENABLE"}, @code{"TRUE"}, or @code{"1"},
+then 32-bit allocation is used.  The gnatbind qualifiers described above
+override this logical name.
+
+@item
+A ^gcc switch^gcc switch^ for OpenVMS, @option{-mno-malloc64}, operates
+@cindex @option{-mno-malloc64} (^gcc^gcc^)
+at a low level to convert explicit calls to @code{malloc} and related
+functions from the C run-time library so that they perform allocations
+in the 32-bit heap.
+Since all internal allocations from GNAT use @code{__gnat_malloc},
+this switch is not required unless the program makes explicit calls on
+@code{malloc} (or related functions) from interfaced C code.
+@end itemize
 
-General access types (declared with @code{access all}) can never be
-32 bits, as values of such types must be able to refer to any object
-of the  designated type,
-including objects residing outside the 32-bit address range.
-Existing Ada 83 code will not contain such type definitions,
-however, since general access types were introduced in Ada 95.
 
 @node Unchecked conversions
 @subsubsection Unchecked conversions
@@ -26665,6 +26744,20 @@ pragma Convention(C, int_star);
 for int_star'Size use 64;  -- Necessary to get 64 and not 32 bits
 @end smallexample
 
+@node 32/64-bit descriptors
+@subsubsection 32/64-bit descriptors
+
+@noindent
+By default, GNAT uses a 64-bit descriptor mechanism.  For an imported
+subprogram (i.e., a subprogram identified by pragma @code{Import_Function},
+@code{Import_Procedure}, or @code{Import_Valued_Procedure}) that specifies
+@code{Short_Descriptor} as its mechanism, a 32-bit descriptor is used.
+@cindex @code{Short_Descriptor} mechanism for imported subprograms
+
+If the configuration pragma @code{Short_Descriptors} is supplied, then
+all descriptors will be 32 bits.
+@cindex pragma @code{Short_Descriptors}
+
 @node Experience with source compatibility
 @subsubsection Experience with source compatibility
 
@@ -26697,8 +26790,6 @@ these sorts of potential source code porting problems.
 * Making code 64 bit clean::
 * Allocating memory from the 64 bit storage pool::
 * Restrictions on use of 64 bit objects::
-* Using 64 bit storage pools by default::
-* General access types::
 * STARLET and other predefined libraries::
 @end menu
 
@@ -26742,13 +26833,10 @@ Any attempt to do this will raise @code{Constraint_Error}.
 @subsubsection Allocating memory from the 64-bit storage pool
 
 @noindent
-For any access type @code{T} that potentially requires memory allocations
-beyond the 32-bit address space,
-use the following representation clause:
-
-@smallexample @c ada
-   for T'Storage_Pool use System.Pool_64;
-@end smallexample
+By default, all allocations -- for both pool-specific and general
+access types -- use the 64-bit storage pool.  To override
+this default, for an individual access type or globally, see
+@ref{Access types and 32/64-bit allocation}.
 
 @node Restrictions on use of 64 bit objects
 @subsubsection Restrictions on use of 64-bit objects
@@ -26763,46 +26851,6 @@ or assigning it to a variable of type @code{Short_Address}, will cause
 no exception is raised and execution
 will become erroneous.
 
-@node Using 64 bit storage pools by default
-@subsubsection Using 64-bit storage pools by default
-
-@noindent
-In some cases it may be desirable to have the compiler allocate
-from 64-bit storage pools by default. This may be the case for
-libraries that are 64-bit clean, but may be used in both 32-bit
-and 64-bit contexts. For these cases the following configuration
-pragma may be specified:
-
-@smallexample @c ada
-  pragma Pool_64_Default;
-@end smallexample
-
-@noindent
-Any code compiled in the context of this pragma will by default
-use the @code{System.Pool_64} storage pool. This default may be overridden
-for a specific access type @code{T} by the representation clause:
-
-@smallexample @c ada
-   for T'Storage_Pool use System.Pool_32;
-@end smallexample
-
-@noindent
-Any object whose address may be passed to a subprogram with a
-@code{Short_Address} argument, or assigned to a variable of type
-@code{Short_Address}, needs to be allocated from this pool.
-
-@node General access types
-@subsubsection General access types
-
-@noindent
-Objects designated by access values from a
-general access type (declared with @code{access all}) are never allocated
-from a 64-bit storage pool. Code that uses general access types will
-accept objects allocated in either 32-bit or 64-bit address spaces,
-but never allocate objects outside the 32-bit address space.
-Using general access types ensures maximum compatibility with both
-32-bit and 64-bit code.
-
 @node STARLET and other predefined libraries
 @subsubsection STARLET and other predefined libraries
 
index 6d47ed473e5c23f3d0227b9f10eca8de72d2b03e..5f694b9db847aa0831e9d88d5c95c76a7af96211 100644 (file)
@@ -218,3 +218,5 @@ stderr          ^ SYS$ERROR
 -O1             ^ /OPTIMIZE=SOME
 -O2             ^ /OPTIMIZE=ALL
 -O3             ^ /OPTIMIZE=INLINING
+-H32            ^ /32_MALLOC
+-H64            ^ /64_MALLOC