aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2009-04-10 11:54:58 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2009-04-10 11:54:58 +0200
commit4f64abad80d072773ac390c9a93470dd57da4c31 (patch)
treeca016515e2c39953802eccef1154942b0439e346
parent4dadda8fb0ca2ba78608c3e86afcb2d12d5f7f25 (diff)
downloadgcc-4f64abad80d072773ac390c9a93470dd57da4c31.zip
gcc-4f64abad80d072773ac390c9a93470dd57da4c31.tar.gz
gcc-4f64abad80d072773ac390c9a93470dd57da4c31.tar.bz2
[multiple changes]
2009-04-10 Robert Dewar <dewar@adacore.com> * make.adb: Add comment. Minor reformatting 2009-04-10 Nicolas Setton <setton@adacore.com> * s-osprim-darwin.adb: New file. * s-osinte-darwin.adb, s-osinte-darwin.ads: Fix binding to timespec. 2009-04-10 Thomas Quinot <quinot@adacore.com> * g-socket.ads: Add comment clarifying alignment requirement for Fd_Set From-SVN: r145880
-rw-r--r--gcc/ada/ChangeLog15
-rw-r--r--gcc/ada/g-socket.ads3
-rw-r--r--gcc/ada/make.adb7
-rw-r--r--gcc/ada/s-osinte-darwin.adb2
-rw-r--r--gcc/ada/s-osinte-darwin.ads4
-rw-r--r--gcc/ada/s-osprim-darwin.adb167
6 files changed, 194 insertions, 4 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 95872a4..c8a1785 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,18 @@
+2009-04-10 Robert Dewar <dewar@adacore.com>
+
+ * make.adb: Add comment.
+ Minor reformatting
+
+2009-04-10 Nicolas Setton <setton@adacore.com>
+
+ * s-osprim-darwin.adb: New file.
+
+ * s-osinte-darwin.adb, s-osinte-darwin.ads: Fix binding to timespec.
+
+2009-04-10 Thomas Quinot <quinot@adacore.com>
+
+ * g-socket.ads: Add comment clarifying alignment requirement for Fd_Set
+
2009-04-09 Nick Clifton <nickc@redhat.com>
* adadecode.h: Change copyright header to refer to version
diff --git a/gcc/ada/g-socket.ads b/gcc/ada/g-socket.ads
index eab3c30..b730065 100644
--- a/gcc/ada/g-socket.ads
+++ b/gcc/ada/g-socket.ads
@@ -1096,6 +1096,9 @@ private
type Fd_Set is
new System.Storage_Elements.Storage_Array (1 .. SOSC.SIZEOF_fd_set);
for Fd_Set'Alignment use Interfaces.C.long'Alignment;
+ -- Set conservative alignment so that our Fd_Sets are always adequately
+ -- aligned for the underlying data type (which is implementation defined
+ -- and may be an array of C long integers).
type Fd_Set_Access is access all Fd_Set;
pragma Convention (C, Fd_Set_Access);
diff --git a/gcc/ada/make.adb b/gcc/ada/make.adb
index 57f0cfb..ca1b980 100644
--- a/gcc/ada/make.adb
+++ b/gcc/ada/make.adb
@@ -6451,6 +6451,13 @@ package body Make is
then
Skip := True;
+ -- Here we capture and duplicate the linker argument. We
+ -- need to do the duplication since the arguments will
+ -- get normalized. Not doing so will result in calling
+ -- normalized two times for the same set of arguments if
+ -- gnatmake is passed multiple mains. This can result in
+ -- the wrong argument being passed to the linker.
+
else
Last_Arg := Last_Arg + 1;
Args (Last_Arg) :=
diff --git a/gcc/ada/s-osinte-darwin.adb b/gcc/ada/s-osinte-darwin.adb
index 3a33e5c..904e910 100644
--- a/gcc/ada/s-osinte-darwin.adb
+++ b/gcc/ada/s-osinte-darwin.adb
@@ -85,7 +85,7 @@ package body System.OS_Interface is
end if;
return timespec'(tv_sec => S,
- tv_nsec => int32_t (Long_Long_Integer (F * 10#1#E9)));
+ tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
end To_Timespec;
----------------
diff --git a/gcc/ada/s-osinte-darwin.ads b/gcc/ada/s-osinte-darwin.ads
index 93dfc6b..f8c6711 100644
--- a/gcc/ada/s-osinte-darwin.ads
+++ b/gcc/ada/s-osinte-darwin.ads
@@ -517,7 +517,7 @@ private
type timespec is record
tv_sec : time_t;
- tv_nsec : int32_t;
+ tv_nsec : long;
end record;
pragma Convention (C, timespec);
@@ -565,8 +565,6 @@ private
--
type pthread_t is new System.Address;
- type pthread_lock_t is new long;
-
type pthread_attr_t is record
sig : long;
opaque : padding (1 .. System.OS_Constants.PTHREAD_ATTR_SIZE);
diff --git a/gcc/ada/s-osprim-darwin.adb b/gcc/ada/s-osprim-darwin.adb
new file mode 100644
index 0000000..2425cf6
--- /dev/null
+++ b/gcc/ada/s-osprim-darwin.adb
@@ -0,0 +1,167 @@
+------------------------------------------------------------------------------
+-- --
+-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
+-- --
+-- S Y S T E M . O S _ P R I M I T I V E S --
+-- --
+-- B o d y --
+-- --
+-- Copyright (C) 1998-2008, Free Software Foundation, Inc. --
+-- --
+-- GNARL is free software; you can redistribute it and/or modify it under --
+-- terms of the GNU General Public License as published by the Free Soft- --
+-- ware Foundation; either version 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/>. --
+-- --
+-- GNARL was developed by the GNARL team at Florida State University. --
+-- Extensive contributions were provided by Ada Core Technologies, Inc. --
+-- --
+------------------------------------------------------------------------------
+
+-- This version is for darwin
+
+package body System.OS_Primitives is
+
+ -- ??? These definitions are duplicated from System.OS_Interface
+ -- because we don't want to depend on any package. Consider removing
+ -- these declarations in System.OS_Interface and move these ones in
+ -- the spec.
+
+ type struct_timezone is record
+ tz_minuteswest : Integer;
+ tz_dsttime : Integer;
+ end record;
+ pragma Convention (C, struct_timezone);
+ type struct_timezone_ptr is access all struct_timezone;
+
+ type time_t is new Long_Integer;
+
+ type struct_timeval is record
+ tv_sec : time_t;
+ tv_usec : Integer;
+ end record;
+ pragma Convention (C, struct_timeval);
+
+ function gettimeofday
+ (tv : not null access struct_timeval;
+ tz : struct_timezone_ptr) return Integer;
+ pragma Import (C, gettimeofday, "gettimeofday");
+
+ type timespec is record
+ tv_sec : time_t;
+ tv_nsec : Long_Integer;
+ end record;
+ pragma Convention (C, timespec);
+
+ function nanosleep (rqtp, rmtp : not null access timespec) return Integer;
+ pragma Import (C, nanosleep, "nanosleep");
+
+ -----------
+ -- Clock --
+ -----------
+
+ function Clock return Duration is
+ TV : aliased struct_timeval;
+
+ Result : Integer;
+ pragma Unreferenced (Result);
+
+ begin
+ Result := gettimeofday (TV'Access, null);
+ return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
+ end Clock;
+
+ ---------------------
+ -- Monotonic_Clock --
+ ---------------------
+
+ function Monotonic_Clock return Duration renames Clock;
+
+ -----------------
+ -- To_Timespec --
+ -----------------
+
+ function To_Timespec (D : Duration) return timespec;
+
+ function To_Timespec (D : Duration) return timespec is
+ S : time_t;
+ F : Duration;
+
+ begin
+ S := time_t (Long_Long_Integer (D));
+ F := D - Duration (S);
+
+ -- If F has negative value due to a round-up, adjust for positive F
+ -- value.
+
+ if F < 0.0 then
+ S := S - 1;
+ F := F + 1.0;
+ end if;
+
+ return
+ timespec'(tv_sec => S,
+ tv_nsec => Long_Integer (Long_Long_Integer (F * 10#1#E9)));
+ end To_Timespec;
+
+ -----------------
+ -- Timed_Delay --
+ -----------------
+
+ procedure Timed_Delay
+ (Time : Duration;
+ Mode : Integer)
+ is
+ Request : aliased timespec;
+ Remaind : aliased timespec;
+ Rel_Time : Duration;
+ Abs_Time : Duration;
+ Base_Time : constant Duration := Clock;
+ Check_Time : Duration := Base_Time;
+
+ Result : Integer;
+ pragma Unreferenced (Result);
+
+ begin
+ if Mode = Relative then
+ Rel_Time := Time;
+ Abs_Time := Time + Check_Time;
+ else
+ Rel_Time := Time - Check_Time;
+ Abs_Time := Time;
+ end if;
+
+ if Rel_Time > 0.0 then
+ loop
+ Request := To_Timespec (Rel_Time);
+ Result := nanosleep (Request'Access, Remaind'Access);
+ Check_Time := Clock;
+
+ exit when Abs_Time <= Check_Time or else Check_Time < Base_Time;
+
+ Rel_Time := Abs_Time - Check_Time;
+ end loop;
+ end if;
+ end Timed_Delay;
+
+ ----------------
+ -- Initialize --
+ ----------------
+
+ procedure Initialize is
+ begin
+ null;
+ end Initialize;
+
+end System.OS_Primitives;