2014-07-31 Pascal Obry <obry@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 31 Jul 2014 13:29:58 +0000 (13:29 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 31 Jul 2014 13:29:58 +0000 (13:29 +0000)
* a-stream.ads (Stream_Element_Offset): Now a signed 64bit type.
* i-cstrea.ads, s-crtl.ads (fseek64): Offset is always a 64bit value.
(ftell64): Always returns a 64bit value.
* cstreams.c (int64): New definition.
(_FILE_OFFSET_BITS): Set to 64 to enable 64bit offset support.
(__gnat_ftell64): Always returns a 64bit value. The implemenation now
uses ftello() on UNIX.
(__gnat_fseek64): Offset is always a 64bit value. The
implementation now uses fseeko() on UNIX.
* a-ststio.adb, s-direio.adb (Set_Position): Simplify code,
always use fseek64 to set the offset.
(Size): Simplify code, always use fseek64/ftell64.
* s-direio.ads (Count): Now an int64.
* g-socket.ads (Vector_Element): Adjust definition for Length
to be a size_t. This matches the C definition and avoid using
a 64bit integer on 32bit platforms now that Count is always 64bit.
* g-socthi-mingw.adb (Ada.Streams): Removed as not used anymore.
(C_Recvmsg): Change some conversion to account for change in
Vector_Element.
(C_Sendmsg): Likewise.

2014-07-31  Robert Dewar  <dewar@adacore.com>

* cstand.adb (Create_Standard): Remove handling of -gnatdm flag.
* debug.adb: Remove documentation of -gnatdm flag.
* gnat1drv.adb (Adjust_Global_Switches): Remove handling of
-gnatdm flag.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@213365 138bc75d-0d04-0410-961f-82ee72b054a4

13 files changed:
gcc/ada/ChangeLog
gcc/ada/a-stream.ads
gcc/ada/a-ststio.adb
gcc/ada/cstand.adb
gcc/ada/cstreams.c
gcc/ada/debug.adb
gcc/ada/g-socket.ads
gcc/ada/g-socthi-mingw.adb
gcc/ada/gnat1drv.adb
gcc/ada/i-cstrea.ads
gcc/ada/s-crtl.ads
gcc/ada/s-direio.adb
gcc/ada/s-direio.ads

index 08ec13e..6f0cda8 100644 (file)
@@ -1,3 +1,33 @@
+2014-07-31  Pascal Obry  <obry@adacore.com>
+
+       * a-stream.ads (Stream_Element_Offset): Now a signed 64bit type.
+       * i-cstrea.ads, s-crtl.ads (fseek64): Offset is always a 64bit value.
+       (ftell64): Always returns a 64bit value.
+       * cstreams.c (int64): New definition.
+       (_FILE_OFFSET_BITS): Set to 64 to enable 64bit offset support.
+       (__gnat_ftell64): Always returns a 64bit value. The implemenation now
+       uses ftello() on UNIX.
+       (__gnat_fseek64): Offset is always a 64bit value. The
+       implementation now uses fseeko() on UNIX.
+       * a-ststio.adb, s-direio.adb (Set_Position): Simplify code,
+       always use fseek64 to set the offset.
+       (Size): Simplify code, always use fseek64/ftell64.
+       * s-direio.ads (Count): Now an int64.
+       * g-socket.ads (Vector_Element): Adjust definition for Length
+       to be a size_t. This matches the C definition and avoid using
+       a 64bit integer on 32bit platforms now that Count is always 64bit.
+       * g-socthi-mingw.adb (Ada.Streams): Removed as not used anymore.
+       (C_Recvmsg): Change some conversion to account for change in
+       Vector_Element.
+       (C_Sendmsg): Likewise.
+
+2014-07-31  Robert Dewar  <dewar@adacore.com>
+
+       * cstand.adb (Create_Standard): Remove handling of -gnatdm flag.
+       * debug.adb: Remove documentation of -gnatdm flag.
+       * gnat1drv.adb (Adjust_Global_Switches): Remove handling of
+       -gnatdm flag.
+
 2014-07-31  Arnaud Charlet  <charlet@adacore.com>
 
        * lib-writ.adb (Write_Unit_Information): Fix case where U =
index 75810f3..388b5da 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 1992-2013, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2014, 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 --
@@ -41,9 +41,7 @@ package Ada.Streams is
 
    type Stream_Element is mod 2 ** Standard'Storage_Unit;
 
-   type Stream_Element_Offset is range
-     -(2 ** (Standard'Address_Size - 1)) ..
-     +(2 ** (Standard'Address_Size - 1)) - 1;
+   type Stream_Element_Offset is range -(2 ** 63) .. +(2 ** 63) - 1;
 
    subtype Stream_Element_Count is
       Stream_Element_Offset range 0 .. Stream_Element_Offset'Last;
index ef8af62..fb3b59c 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2012, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2014, 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- --
@@ -382,17 +382,10 @@ package body Ada.Streams.Stream_IO is
    ------------------
 
    procedure Set_Position (File : File_Type) is
-      use type System.CRTL.long;
-      use type System.CRTL.ssize_t;
+      use type System.CRTL.int64;
       R : int;
    begin
-      if Standard'Address_Size = 64 then
-         R := fseek64 (File.Stream,
-                       System.CRTL.ssize_t (File.Index) - 1, SEEK_SET);
-      else
-         R := fseek (File.Stream,
-                     System.CRTL.long (File.Index) - 1, SEEK_SET);
-      end if;
+      R := fseek64 (File.Stream, System.CRTL.int64 (File.Index) - 1, SEEK_SET);
 
       if R /= 0 then
          raise Use_Error;
@@ -410,14 +403,14 @@ package body Ada.Streams.Stream_IO is
       if File.File_Size = -1 then
          File.Last_Op := Op_Other;
 
-         if fseek (File.Stream, 0, SEEK_END) /= 0 then
+         if fseek64 (File.Stream, 0, SEEK_END) /= 0 then
             raise Device_Error;
          end if;
 
-         if Standard'Address_Size = 64 then
-            File.File_Size := Stream_Element_Offset (ftell64 (File.Stream));
-         else
-            File.File_Size := Stream_Element_Offset (ftell (File.Stream));
+         File.File_Size := Stream_Element_Offset (ftell64 (File.Stream));
+
+         if File.File_Size = -1 then
+            raise Use_Error;
          end if;
       end if;
 
index f24bf79..c4a8b1d 100644 (file)
@@ -740,17 +740,8 @@ package body CStand is
       Build_Signed_Integer_Type
         (Standard_Integer, Standard_Integer_Size);
 
-      declare
-         LIS : Nat;
-      begin
-         if Debug_Flag_M then
-            LIS := 64;
-         else
-            LIS := Standard_Long_Integer_Size;
-         end if;
-
-         Build_Signed_Integer_Type (Standard_Long_Integer, LIS);
-      end;
+      Build_Signed_Integer_Type
+        (Standard_Long_Integer, Standard_Long_Integer_Size);
 
       Build_Signed_Integer_Type
         (Standard_Long_Long_Integer, Standard_Long_Long_Integer_Size);
index 5d5bc8d..3de270f 100644 (file)
 
 /* Routines required for implementing routines in Interfaces.C.Streams.  */
 
+#define _FILE_OFFSET_BITS 64
+/* the define above will make off_t a 64bit type on GNU/Linux */
+
+#include <stdio.h>
+#include <sys/types.h>
+
 #ifdef __vxworks
 #include "vxWorks.h"
 #endif
@@ -247,8 +253,10 @@ __gnat_full_name (char *nam, char *buffer)
   return buffer;
 }
 
-#ifdef _WIN64
-  /* On Windows 64 we want to use the fseek/fteel supporting large files. This
+#define __int64 long long
+
+#ifdef _WIN32
+  /* On Windows we want to use the fseek/fteel supporting large files. This
      issue is due to the fact that a long on Win64 is still a 32 bits value */
 __int64
 __gnat_ftell64 (FILE *stream)
@@ -263,16 +271,22 @@ __gnat_fseek64 (FILE *stream, __int64 offset, int origin)
 }
 
 #else
-long
+__int64
 __gnat_ftell64 (FILE *stream)
 {
-  return ftell (stream);
+  return (__int64)ftello (stream);
 }
 
 int
-__gnat_fseek64 (FILE *stream, long offset, int origin)
+__gnat_fseek64 (FILE *stream, __int64 offset, int origin)
 {
-  return fseek (stream, offset, origin);
+  /* make sure that the offset is not bigger than the OS off_t, if so return
+     with error as this mean that we are trying to handle files larger than
+     2Gb on a patform not supporting it. */
+  if ((off_t)offset == offset)
+    return fseeko (stream, (off_t) offset, origin);
+  else
+    return -1;
 }
 #endif
 
index 02f8d1f..9bf4faf 100644 (file)
@@ -49,7 +49,7 @@ package body Debug is
    --  dj   Suppress "junk null check" for access parameter values
    --  dk   Generate GNATBUG message on abort, even if previous errors
    --  dl   Generate unit load trace messages
-   --  dm   Allow VMS features even if not OpenVMS version
+   --  dm
    --  dn   Generate messages for node/list allocation
    --  do   Print source from tree (original code only)
    --  dp   Generate messages for parser scope stack push/pops
@@ -281,14 +281,6 @@ package body Debug is
    --       generated each time a request is made to the library manager to
    --       load a new unit.
 
-   --  dm   Some features are permitted only in OpenVMS ports of GNAT (e.g.
-   --       the specification of passing by descriptor). Normally any use
-   --       of these features will be flagged as an error, but this debug
-   --       flag allows acceptance of these features in non OpenVMS ports.
-   --       Of course they may not have any useful effect, and in particular
-   --       attempting to generate code with this flag set may blow up.
-   --       The flag also forces the use of 64-bits for Long_Integer.
-
    --  dn   Generate messages for node/list allocation. Each time a node or
    --       list header is allocated, a line of output is generated. Certain
    --       other basic tree operations also cause a line of output to be
index 7df5af0..d93536c 100644 (file)
@@ -797,7 +797,7 @@ package GNAT.Sockets is
 
    type Vector_Element is record
       Base   : Stream_Element_Reference;
-      Length : Ada.Streams.Stream_Element_Count;
+      Length : Interfaces.C.size_t;
    end record;
 
    type Vector_Type is array (Integer range <>) of Vector_Element;
index 719ab54..e8ee6dc 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---                     Copyright (C) 2001-2013, AdaCore                     --
+--                     Copyright (C) 2001-2014, AdaCore                     --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -35,7 +35,6 @@
 
 --  This version is for NT
 
-with Ada.Streams;             use Ada.Streams;
 with Ada.Unchecked_Conversion;
 with Interfaces.C.Strings;    use Interfaces.C.Strings;
 with System;                  use System;
@@ -334,11 +333,11 @@ package body GNAT.Sockets.Thin is
             exit;
 
          else
-            pragma Assert (Stream_Element_Count (Res) <= Current_Iovec.Length);
+            pragma Assert (Interfaces.C.size_t (Res) <= Current_Iovec.Length);
 
             Count := Count + Res;
             Current_Iovec.Length :=
-              Current_Iovec.Length - Stream_Element_Count (Res);
+              Current_Iovec.Length - Interfaces.C.size_t (Res);
             Current_Iovec.Base :=
               To_Access (Current_Iovec.Base.all'Address
                 + Storage_Offset (Res));
@@ -507,7 +506,7 @@ package body GNAT.Sockets.Thin is
 
          --  Exit now if the buffer is not fully transmitted
 
-         exit when Stream_Element_Count (Res) < Iovec (J).Length;
+         exit when Interfaces.C.size_t (Res) < Iovec (J).Length;
       end loop;
 
       return System.CRTL.ssize_t (Count);
index 960f75d..a816f4e 100644 (file)
@@ -38,7 +38,6 @@ with Fname;    use Fname;
 with Fname.UF; use Fname.UF;
 with Frontend;
 with Gnatvsn;  use Gnatvsn;
-with Hostparm;
 with Inline;
 with Lib;      use Lib;
 with Lib.Writ; use Lib.Writ;
@@ -477,17 +476,11 @@ procedure Gnat1drv is
          Ttypes.Bytes_Big_Endian := not Ttypes.Bytes_Big_Endian;
       end if;
 
-      --  Deal with forcing OpenVMS switches True if debug flag M is set, but
-      --  record the setting of Targparm.Open_VMS_On_Target in True_VMS_Target
-      --  before doing this, so we know if we are in real OpenVMS or not.
+      --  Temporarily set True_VMS_Target to OpenVMS_On_Target. This is just
+      --  temporary, we no longer deal with the debug flag -gnatdm here.
 
       Opt.True_VMS_Target := Targparm.OpenVMS_On_Target;
 
-      if Debug_Flag_M then
-         Targparm.OpenVMS_On_Target := True;
-         Hostparm.OpenVMS := True;
-      end if;
-
       --  Activate front end layout if debug flag -gnatdF is set
 
       if Debug_Flag_FF then
index 48fbfc4..9a00b49 100644 (file)
@@ -43,6 +43,7 @@ package Interfaces.C_Streams is
    subtype long is System.CRTL.long;
    subtype size_t is System.CRTL.size_t;
    subtype ssize_t is System.CRTL.ssize_t;
+   subtype int64 is System.CRTL.int64;
    subtype voids is System.Address;
 
    NULL_Stream : constant FILEs;
@@ -159,14 +160,14 @@ package Interfaces.C_Streams is
 
    function fseek64
      (stream : FILEs;
-      offset : ssize_t;
+      offset : int64;
       origin : int) return int
      renames System.CRTL.fseek64;
 
    function ftell (stream : FILEs) return long
      renames System.CRTL.ftell;
 
-   function ftell64 (stream : FILEs) return ssize_t
+   function ftell64 (stream : FILEs) return int64
      renames System.CRTL.ftell64;
 
    function fwrite
index faa7031..ba7332d 100644 (file)
@@ -62,6 +62,8 @@ package System.CRTL is
    type ssize_t is range -(2 ** (Standard'Address_Size - 1))
                       .. +(2 ** (Standard'Address_Size - 1)) - 1;
 
+   type int64 is range -(2 ** 63) .. (2 ** 63) - 1;
+
    type Filename_Encoding is (UTF8, ASCII_8bits, Unspecified);
    for Filename_Encoding use (UTF8 => 0, ASCII_8bits => 1, Unspecified => 2);
    pragma Convention (C, Filename_Encoding);
@@ -147,14 +149,14 @@ package System.CRTL is
 
    function fseek64
      (stream : FILEs;
-      offset : ssize_t;
+      offset : int64;
       origin : int) return int;
    pragma Import (C, fseek64, "__gnat_fseek64");
 
    function ftell (stream : FILEs) return long;
    pragma Import (C, ftell, "ftell");
 
-   function ftell64 (stream : FILEs) return ssize_t;
+   function ftell64 (stream : FILEs) return int64;
    pragma Import (C, ftell64, "__gnat_ftell64");
 
    function getenv (S : String) return System.Address;
index 99f8ddf..297454e 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2012, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2014, 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- --
@@ -45,7 +45,7 @@ package body System.Direct_IO is
    subtype AP is FCB.AFCB_Ptr;
    use type FCB.Shared_Status_Type;
 
-   use type System.CRTL.long;
+   use type System.CRTL.int64;
    use type System.CRTL.size_t;
 
    -----------------------
@@ -280,18 +280,10 @@ package body System.Direct_IO is
    ------------------
 
    procedure Set_Position (File : File_Type) is
-      use type System.CRTL.ssize_t;
       R : int;
    begin
-      if Standard'Address_Size = 64 then
-         R := fseek64
-           (File.Stream, ssize_t (File.Bytes) *
-              ssize_t (File.Index - 1), SEEK_SET);
-      else
-         R := fseek
-           (File.Stream, long (File.Bytes) *
-              long (File.Index - 1), SEEK_SET);
-      end if;
+      R := fseek64
+        (File.Stream, int64 (File.Bytes) * int64 (File.Index - 1), SEEK_SET);
 
       if R /= 0 then
          raise Use_Error;
@@ -303,20 +295,22 @@ package body System.Direct_IO is
    ----------
 
    function Size (File : File_Type) return Count is
-      use type System.CRTL.ssize_t;
+      Pos : int64;
    begin
       FIO.Check_File_Open (AP (File));
       File.Last_Op := Op_Other;
 
-      if fseek (File.Stream, 0, SEEK_END) /= 0 then
+      if fseek64 (File.Stream, 0, SEEK_END) /= 0 then
          raise Device_Error;
       end if;
 
-      if Standard'Address_Size = 64 then
-         return Count (ftell64 (File.Stream) / ssize_t (File.Bytes));
-      else
-         return Count (ftell (File.Stream) / long (File.Bytes));
+      Pos := ftell64 (File.Stream);
+
+      if Pos = -1 then
+         raise Use_Error;
       end if;
+
+      return Count (Pos / int64 (File.Bytes));
    end Size;
 
    -----------
index 35fcef0..4a60ee7 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 1992-2009, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2014, 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- --
@@ -45,7 +45,7 @@ package System.Direct_IO is
    type Operation is (Op_Read, Op_Write, Op_Other);
    --  Type used to record last operation (to optimize sequential operations)
 
-   subtype Count is Interfaces.C_Streams.long;
+   subtype Count is Interfaces.C_Streams.int64;
    --  The Count type in each instantiation is derived from this type
 
    subtype Positive_Count is Count range 1 .. Count'Last;