Commit ebe0249e by Eric Botcazou Committed by Eric Botcazou

re PR ada/54040 ([x32] Incorrect timeval and timespec)

	PR ada/54040
	PR ada/59346
	* s-osinte-x32.adb: New file.
	* s-linux.ads (Time): New section.
	* s-linux-alpha.ads (Time): Likewise.
	* s-linux-android.ads (Time: Likewise.
	* s-linux-hppa.ads (Time): Likewise.
	* s-linux-mipsel.ads (Time): Likewise.
	* s-linux-sparc.ads (Time): Likewise.
	* s-linux-x32.ads (Time): Likewise.
	* s-osprim-x32.ads (timespec): Adjust.
	* s-osinte-linux.ads (Time): Define local subtypes for those defined
	in System.Linux.
	* s-taprop-linux.adb (Monotonic_Clock): Do not define timeval.
	* s-osinte-hpux.ads (timespec): Revert POSIX breakage.
	* s-osinte-kfreebsd-gnu.ads (timespec): Likewise.
	* s-osinte-solaris-posix.ads (timespec): Likewise.
	* s-osinte-posix.adb (To_Timespec): Likewise.
	* gcc-interface/Makefile.in (x32/Linux): Use s-osinte-x32.adb.

From-SVN: r209244
parent 5e1f630a
2014-04-09 Eric Botcazou <ebotcazou@adacore.com>
PR ada/54040
PR ada/59346
* s-osinte-x32.adb: New file.
* s-linux.ads (Time): New section.
* s-linux-alpha.ads (Time): Likewise.
* s-linux-android.ads (Time: Likewise.
* s-linux-hppa.ads (Time): Likewise.
* s-linux-mipsel.ads (Time): Likewise.
* s-linux-sparc.ads (Time): Likewise.
* s-linux-x32.ads (Time): Likewise.
* s-osprim-x32.ads (timespec): Adjust.
* s-osinte-linux.ads (Time): Define local subtypes for those defined
in System.Linux.
* s-taprop-linux.adb (Monotonic_Clock): Do not define timeval.
* s-osinte-hpux.ads (timespec): Revert POSIX breakage.
* s-osinte-kfreebsd-gnu.ads (timespec): Likewise.
* s-osinte-solaris-posix.ads (timespec): Likewise.
* s-osinte-posix.adb (To_Timespec): Likewise.
* gcc-interface/Makefile.in (x32/Linux): Use s-osinte-x32.adb.
2014-04-08 Eric Botcazou <ebotcazou@adacore.com>
PR ada/60411
......@@ -6,6 +28,7 @@
* s-intman-android.adb: Likewise.
* sigtramp-armdroid.c: Likewise.
* sigtramp.h: Add Android support.
* s-osinte-android.ads: Adjust.
2014-04-07 Eric Botcazou <ebotcazou@adacore.com>
......
......@@ -2239,7 +2239,7 @@ ifeq ($(strip $(filter-out %x32 linux%,$(target_cpu) $(target_os))),)
s-linux.ads<s-linux-x32.ads \
s-mudido.adb<s-mudido-affinity.adb \
s-osinte.ads<s-osinte-linux.ads \
s-osinte.adb<s-osinte-posix.adb \
s-osinte.adb<s-osinte-x32.adb \
s-osprim.adb<s-osprim-x32.adb \
s-taprop.adb<s-taprop-linux.adb \
s-tasinf.ads<s-tasinf-linux.ads \
......
......@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
-- Copyright (C) 2009-2011, Free Software Foundation, Inc. --
-- Copyright (C) 2009-2014, 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- --
......@@ -35,14 +35,30 @@
-- PLEASE DO NOT add any with-clauses to this package or remove the pragma
-- Preelaborate. This package is designed to be a bottom-level (leaf) package.
with Interfaces.C;
package System.Linux is
pragma Preelaborate;
------------
-- time_t --
------------
type time_t is new Long_Integer;
----------
-- Time --
----------
subtype long is Interfaces.C.long;
subtype suseconds_t is Interfaces.C.long;
subtype time_t is Interfaces.C.long;
type timespec is record
tv_sec : time_t;
tv_nsec : long;
end record;
pragma Convention (C, timespec);
type timeval is record
tv_sec : time_t;
tv_usec : suseconds_t;
end record;
pragma Convention (C, timeval);
-----------
-- Errno --
......
......@@ -35,14 +35,30 @@
-- PLEASE DO NOT add any with-clauses to this package or remove the pragma
-- Preelaborate. This package is designed to be a bottom-level (leaf) package
with Interfaces.C;
package System.Linux is
pragma Preelaborate;
------------
-- time_t --
------------
----------
-- Time --
----------
subtype long is Interfaces.C.long;
subtype suseconds_t is Interfaces.C.long;
subtype time_t is Interfaces.C.long;
type timespec is record
tv_sec : time_t;
tv_nsec : long;
end record;
pragma Convention (C, timespec);
type time_t is new Long_Integer;
type timeval is record
tv_sec : time_t;
tv_usec : suseconds_t;
end record;
pragma Convention (C, timeval);
-----------
-- Errno --
......
......@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
-- Copyright (C) 2008-2011, Free Software Foundation, Inc. --
-- Copyright (C) 2008-2014, 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- --
......@@ -35,14 +35,30 @@
-- PLEASE DO NOT add any with-clauses to this package or remove the pragma
-- Preelaborate. This package is designed to be a bottom-level (leaf) package.
with Interfaces.C;
package System.Linux is
pragma Preelaborate;
------------
-- time_t --
------------
----------
-- Time --
----------
subtype long is Interfaces.C.long;
subtype suseconds_t is Interfaces.C.long;
subtype time_t is Interfaces.C.long;
type timespec is record
tv_sec : time_t;
tv_nsec : long;
end record;
pragma Convention (C, timespec);
type time_t is new Long_Integer;
type timeval is record
tv_sec : time_t;
tv_usec : suseconds_t;
end record;
pragma Convention (C, timeval);
-----------
-- Errno --
......
......@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
-- Copyright (C) 2009-2011, Free Software Foundation, Inc. --
-- Copyright (C) 2009-2014, 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- --
......@@ -34,14 +34,30 @@
-- PLEASE DO NOT add any with-clauses to this package or remove the pragma
-- Preelaborate. This package is designed to be a bottom-level (leaf) package
with Interfaces.C;
package System.Linux is
pragma Preelaborate;
------------
-- time_t --
------------
----------
-- Time --
----------
subtype long is Interfaces.C.long;
subtype suseconds_t is Interfaces.C.long;
subtype time_t is Interfaces.C.long;
type timespec is record
tv_sec : time_t;
tv_nsec : long;
end record;
pragma Convention (C, timespec);
type time_t is new Long_Integer;
type timeval is record
tv_sec : time_t;
tv_usec : suseconds_t;
end record;
pragma Convention (C, timeval);
-----------
-- Errno --
......
......@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
-- Copyright (C) 2009-2011, Free Software Foundation, Inc. --
-- Copyright (C) 2009-2014, 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- --
......@@ -35,14 +35,30 @@
-- PLEASE DO NOT add any with-clauses to this package or remove the pragma
-- Preelaborate. This package is designed to be a bottom-level (leaf) package
with Interfaces.C;
package System.Linux is
pragma Preelaborate;
------------
-- time_t --
------------
type time_t is new Long_Integer;
----------
-- Time --
----------
subtype long is Interfaces.C.long;
subtype suseconds_t is Interfaces.C.long;
subtype time_t is Interfaces.C.long;
type timespec is record
tv_sec : time_t;
tv_nsec : long;
end record;
pragma Convention (C, timespec);
type timeval is record
tv_sec : time_t;
tv_usec : suseconds_t;
end record;
pragma Convention (C, timeval);
-----------
-- Errno --
......
......@@ -6,7 +6,8 @@
-- --
-- S p e c --
-- --
-- Copyright (C) 2013, Free Software Foundation, Inc. --
-- Copyright (C) 2013-2014, 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- --
......@@ -38,12 +39,24 @@
package System.Linux is
pragma Preelaborate;
------------
-- time_t --
------------
----------
-- Time --
----------
type time_t is new Long_Long_Integer;
type timespec is record
tv_sec : time_t;
tv_nsec : Long_Long_Integer;
end record;
pragma Convention (C, timespec);
type timeval is record
tv_sec : time_t;
tv_usec : Long_Long_Integer;
end record;
pragma Convention (C, timeval);
-----------
-- Errno --
-----------
......
......@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
-- Copyright (C) 2008-2011, Free Software Foundation, Inc. --
-- Copyright (C) 2008-2014, 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- --
......@@ -35,14 +35,30 @@
-- PLEASE DO NOT add any with-clauses to this package or remove the pragma
-- Preelaborate. This package is designed to be a bottom-level (leaf) package
with Interfaces.C;
package System.Linux is
pragma Preelaborate;
------------
-- time_t --
------------
----------
-- Time --
----------
subtype long is Interfaces.C.long;
subtype suseconds_t is Interfaces.C.long;
subtype time_t is Interfaces.C.long;
type timespec is record
tv_sec : time_t;
tv_nsec : long;
end record;
pragma Convention (C, timespec);
type time_t is new Long_Integer;
type timeval is record
tv_sec : time_t;
tv_usec : suseconds_t;
end record;
pragma Convention (C, timeval);
-----------
-- Errno --
......
......@@ -7,7 +7,7 @@
-- S p e c --
-- --
-- Copyright (C) 1991-1994, Florida State University --
-- Copyright (C) 1995-2013, Free Software Foundation, Inc. --
-- Copyright (C) 1995-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- --
......@@ -522,7 +522,7 @@ private
type timespec is record
tv_sec : time_t;
tv_nsec : time_t;
tv_nsec : long;
end record;
pragma Convention (C, timespec);
......
......@@ -7,7 +7,7 @@
-- S p e c --
-- --
-- Copyright (C) 1991-1994, Florida State University --
-- Copyright (C) 1995-2013, Free Software Foundation, Inc. --
-- Copyright (C) 1995-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- --
......@@ -492,7 +492,7 @@ private
type timespec is record
tv_sec : time_t;
tv_nsec : time_t;
tv_nsec : long;
end record;
pragma Convention (C, timespec);
......
......@@ -7,7 +7,7 @@
-- S p e c --
-- --
-- Copyright (C) 1991-1994, Florida State University --
-- Copyright (C) 1995-2013, Free Software Foundation, Inc. --
-- Copyright (C) 1995-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- --
......@@ -217,8 +217,9 @@ package System.OS_Interface is
-- Time --
----------
type timespec is private;
type time_t is private;
subtype time_t is System.Linux.time_t;
subtype timespec is System.Linux.timespec;
subtype timeval is System.Linux.timeval;
function To_Duration (TS : timespec) return Duration;
pragma Inline (To_Duration);
......@@ -598,14 +599,6 @@ private
type pid_t is new int;
type time_t is new System.Linux.time_t;
type timespec is record
tv_sec : time_t;
tv_nsec : time_t;
end record;
pragma Convention (C, timespec);
type unsigned_long_long_t is mod 2 ** 64;
-- Local type only used to get the alignment of this type below
......
......@@ -7,7 +7,7 @@
-- B o d y --
-- --
-- Copyright (C) 1991-1994, Florida State University --
-- Copyright (C) 1995-2010, AdaCore --
-- Copyright (C) 1995-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- --
......@@ -30,8 +30,7 @@
-- --
------------------------------------------------------------------------------
-- This is a GNU/LinuxThreads, Solaris pthread and HP-UX pthread version
-- of this package.
-- This version is for POSIX-like operating systems
pragma Polling (Off);
-- Turn off polling, we do not want ATC polling to take place during
......@@ -104,7 +103,7 @@ package body System.OS_Interface is
end if;
return timespec'(tv_sec => S,
tv_nsec => time_t (Long_Long_Integer (F * 10#1#E9)));
tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
end To_Timespec;
end System.OS_Interface;
......@@ -7,7 +7,7 @@
-- S p e c --
-- --
-- Copyright (C) 1991-1994, Florida State University --
-- Copyright (C) 1995-2013, Free Software Foundation, Inc. --
-- Copyright (C) 1995-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- --
......@@ -513,7 +513,7 @@ private
type timespec is record
tv_sec : time_t;
tv_nsec : time_t;
tv_nsec : long;
end record;
pragma Convention (C, timespec);
......
------------------------------------------------------------------------------
-- --
-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
-- --
-- S Y S T E M . O S _ I N T E R F A C E --
-- --
-- B o d y --
-- --
-- Copyright (C) 1991-1994, Florida State University --
-- Copyright (C) 1995-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- --
-- 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 Linux/x32
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.
-- This package encapsulates all direct interfaces to OS services
-- that are needed by children of System.
with Interfaces.C; use Interfaces.C;
package body System.OS_Interface is
--------------------
-- Get_Stack_Base --
--------------------
function Get_Stack_Base (thread : pthread_t) return Address is
pragma Warnings (Off, thread);
begin
return Null_Address;
end Get_Stack_Base;
------------------
-- pthread_init --
------------------
procedure pthread_init is
begin
null;
end pthread_init;
-----------------
-- To_Duration --
-----------------
function To_Duration (TS : timespec) return Duration is
begin
return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9;
end To_Duration;
------------------------
-- To_Target_Priority --
------------------------
function To_Target_Priority
(Prio : System.Any_Priority) return Interfaces.C.int
is
begin
return Interfaces.C.int (Prio);
end To_Target_Priority;
-----------------
-- To_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_Long_Integer (F * 10#1#E9));
end To_Timespec;
end System.OS_Interface;
......@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
-- Copyright (C) 2013, Free Software Foundation, Inc. --
-- Copyright (C) 2013-2014, 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- --
......@@ -42,7 +42,7 @@ package body System.OS_Primitives is
type timespec is record
tv_sec : time_t;
tv_nsec : time_t;
tv_nsec : Long_Long_Integer;
end record;
pragma Convention (C, timespec);
......
......@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
-- Copyright (C) 1992-2012, Free Software Foundation, Inc. --
-- Copyright (C) 1992-2014, 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- --
......@@ -627,8 +627,6 @@ package body System.Task_Primitives.Operations is
function Monotonic_Clock return Duration is
use Interfaces;
type timeval is array (1 .. 2) of System.OS_Interface.time_t;
procedure timeval_to_duration
(T : not null access timeval;
sec : not null access C.long;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment