243 lines
9.4 KiB
Diff
243 lines
9.4 KiB
Diff
Description: Ada: select 64 bits time functions from GNU libc when __USE_TIME64_REDIRECTS
|
|
This is version 12.
|
|
Forwarded: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114065
|
|
From: Nicolas Boulenguez <nicolas@debian.org>
|
|
|
|
--- a/src/gcc/ada/libgnarl/a-exetim__posix.adb
|
|
+++ b/src/gcc/ada/libgnarl/a-exetim__posix.adb
|
|
@@ -35,6 +35,7 @@ with Ada.Task_Identification; use Ada.T
|
|
with Ada.Unchecked_Conversion;
|
|
|
|
with System.C_Time;
|
|
+with System.OS_Constants;
|
|
with System.Tasking;
|
|
with System.OS_Interface; use System.OS_Interface;
|
|
with System.Task_Primitives.Operations; use System.Task_Primitives.Operations;
|
|
@@ -115,7 +116,9 @@ package body Ada.Execution_Time is
|
|
(clock_id : Interfaces.C.int;
|
|
tp : access System.C_Time.timespec)
|
|
return int;
|
|
- pragma Import (C, clock_gettime, "clock_gettime");
|
|
+ pragma Import (C, clock_gettime,
|
|
+ (if System.OS_Constants.Glibc_Use_Time_Bits64
|
|
+ then "__clock_gettime64" else "clock_gettime"));
|
|
-- Function from the POSIX.1b Realtime Extensions library
|
|
|
|
function pthread_getcpuclockid
|
|
--- a/src/gcc/ada/libgnarl/s-osinte__gnu.ads
|
|
+++ b/src/gcc/ada/libgnarl/s-osinte__gnu.ads
|
|
@@ -39,6 +39,7 @@
|
|
-- Preelaborate. This package is designed to be a bottom-level (leaf) package
|
|
|
|
with Interfaces.C;
|
|
+with System.OS_Constants;
|
|
with System.C_Time;
|
|
with Ada.Unchecked_Conversion;
|
|
|
|
@@ -208,7 +209,8 @@ package System.OS_Interface is
|
|
-- Indicates whether time slicing is supported (i.e SCHED_RR is supported)
|
|
|
|
function nanosleep (rqtp, rmtp : access C_Time.timespec) return int;
|
|
- pragma Import (C, nanosleep, "nanosleep");
|
|
+ pragma Import (C, nanosleep, (if OS_Constants.Glibc_Use_Time_Bits64
|
|
+ then "__nanosleep64" else "nanosleep"));
|
|
|
|
type clockid_t is new int;
|
|
CLOCK_REALTIME : constant clockid_t := 0;
|
|
@@ -218,12 +220,14 @@ package System.OS_Interface is
|
|
(clock_id : clockid_t;
|
|
tp : access C_Time.timespec)
|
|
return int;
|
|
- pragma Import (C, clock_gettime, "clock_gettime");
|
|
+ pragma Import (C, clock_gettime, (if OS_Constants.Glibc_Use_Time_Bits64
|
|
+ then "__clock_gettime64" else "clock_gettime"));
|
|
|
|
function clock_getres
|
|
(clock_id : clockid_t;
|
|
res : access C_Time.timespec) return int;
|
|
- pragma Import (C, clock_getres, "clock_getres");
|
|
+ pragma Import (C, clock_getres, (if OS_Constants.Glibc_Use_Time_Bits64
|
|
+ then "__clock_getres64" else "clock_getres"));
|
|
|
|
-- From: /usr/include/unistd.h
|
|
function sysconf (name : int) return long;
|
|
@@ -477,7 +481,9 @@ package System.OS_Interface is
|
|
(cond : access pthread_cond_t;
|
|
mutex : access pthread_mutex_t;
|
|
abstime : access C_Time.timespec) return int;
|
|
- pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
|
|
+ pragma Import (C, pthread_cond_timedwait,
|
|
+ (if OS_Constants.Glibc_Use_Time_Bits64 then "__pthread_cond_timedwait64"
|
|
+ else "pthread_cond_timedwait"));
|
|
|
|
Relative_Timed_Wait : constant Boolean := False;
|
|
-- pthread_cond_timedwait requires an absolute delay time
|
|
--- a/src/gcc/ada/libgnarl/s-osinte__kfreebsd-gnu.ads
|
|
+++ b/src/gcc/ada/libgnarl/s-osinte__kfreebsd-gnu.ads
|
|
@@ -40,6 +40,7 @@
|
|
|
|
with Ada.Unchecked_Conversion;
|
|
with Interfaces.C;
|
|
+with System.OS_Constants;
|
|
with System.C_Time;
|
|
|
|
package System.OS_Interface is
|
|
@@ -203,7 +204,8 @@ package System.OS_Interface is
|
|
-- Indicates whether time slicing is supported (i.e SCHED_RR is supported)
|
|
|
|
function nanosleep (rqtp, rmtp : access C_Time.timespec) return int;
|
|
- pragma Import (C, nanosleep, "nanosleep");
|
|
+ pragma Import (C, nanosleep, (if OS_Constants.Glibc_Use_Time_Bits64
|
|
+ then "__nanosleep64" else "nanosleep"));
|
|
|
|
type clockid_t is new int;
|
|
CLOCK_REALTIME : constant clockid_t := 0;
|
|
@@ -212,12 +214,14 @@ package System.OS_Interface is
|
|
(clock_id : clockid_t;
|
|
tp : access C_Time.timespec)
|
|
return int;
|
|
- pragma Import (C, clock_gettime, "clock_gettime");
|
|
+ pragma Import (C, clock_gettime, (if OS_Constants.Glibc_Use_Time_Bits64
|
|
+ then "__clock_gettime64" else "clock_gettime");
|
|
|
|
function clock_getres
|
|
(clock_id : clockid_t;
|
|
res : access C_Time.timespec) return int;
|
|
- pragma Import (C, clock_getres, "clock_getres");
|
|
+ pragma Import (C, clock_getres, (if OS_Constants.Glibc_Use_Time_Bits64
|
|
+ then "__clock_getres64" else "clock_getres");
|
|
|
|
function sysconf (name : int) return long;
|
|
pragma Import (C, sysconf);
|
|
@@ -420,7 +424,9 @@ package System.OS_Interface is
|
|
(cond : access pthread_cond_t;
|
|
mutex : access pthread_mutex_t;
|
|
abstime : access C_Time.timespec) return int;
|
|
- pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
|
|
+ pragma Import (C, pthread_cond_timedwait,
|
|
+ (if OS_Constants.Glibc_Use_Time_Bits64 then "__pthread_cond_timedwait64"
|
|
+ else "pthread_cond_timedwait");
|
|
|
|
--------------------------
|
|
-- POSIX.1c Section 13 --
|
|
--- a/src/gcc/ada/libgnarl/s-osinte__linux.ads
|
|
+++ b/src/gcc/ada/libgnarl/s-osinte__linux.ads
|
|
@@ -229,12 +229,14 @@ package System.OS_Interface is
|
|
|
|
function clock_gettime
|
|
(clock_id : clockid_t; tp : access C_Time.timespec) return int;
|
|
- pragma Import (C, clock_gettime, "clock_gettime");
|
|
+ pragma Import (C, clock_gettime, (if OS_Constants.Glibc_Use_Time_Bits64
|
|
+ then "__clock_gettime64" else "clock_gettime"));
|
|
|
|
function clock_getres
|
|
(clock_id : clockid_t;
|
|
res : access C_Time.timespec) return int;
|
|
- pragma Import (C, clock_getres, "clock_getres");
|
|
+ pragma Import (C, clock_getres, (if OS_Constants.Glibc_Use_Time_Bits64
|
|
+ then "__clock_getres64" else "clock_getres"));
|
|
|
|
function sysconf (name : int) return long;
|
|
pragma Import (C, sysconf);
|
|
@@ -445,7 +447,9 @@ package System.OS_Interface is
|
|
(cond : access pthread_cond_t;
|
|
mutex : access pthread_mutex_t;
|
|
abstime : access C_Time.timespec) return int;
|
|
- pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
|
|
+ pragma Import (C, pthread_cond_timedwait,
|
|
+ (if OS_Constants.Glibc_Use_Time_Bits64 then "__pthread_cond_timedwait64"
|
|
+ else "pthread_cond_timedwait"));
|
|
|
|
--------------------------
|
|
-- POSIX.1c Section 13 --
|
|
--- a/src/gcc/ada/libgnat/g-spogwa.adb
|
|
+++ b/src/gcc/ada/libgnat/g-spogwa.adb
|
|
@@ -42,7 +42,9 @@ is
|
|
writefds : access FD_Set_Type;
|
|
exceptfds : access FD_Set_Type;
|
|
timeout : access System.C_Time.timeval) return Integer
|
|
- with Import => True, Convention => Stdcall, External_Name => "select";
|
|
+ with Import => True, Convention => Stdcall,
|
|
+ External_Name => (if System.OS_Constants.Glibc_Use_Time_Bits64
|
|
+ then "__select64" else "select");
|
|
|
|
Timeout_V : aliased System.C_Time.timeval;
|
|
Timeout_A : access System.C_Time.timeval;
|
|
--- a/src/gcc/ada/libgnat/s-osprim__posix.adb
|
|
+++ b/src/gcc/ada/libgnat/s-osprim__posix.adb
|
|
@@ -31,6 +31,7 @@
|
|
|
|
-- This version is for POSIX-like operating systems
|
|
with System.C_Time;
|
|
+with System.OS_Constants;
|
|
|
|
package body System.OS_Primitives is
|
|
|
|
@@ -41,7 +42,8 @@ package body System.OS_Primitives is
|
|
|
|
function nanosleep (rqtp, rmtp : not null access C_Time.timespec)
|
|
return Integer;
|
|
- pragma Import (C, nanosleep, "nanosleep");
|
|
+ pragma Import (C, nanosleep, (if OS_Constants.Glibc_Use_Time_Bits64
|
|
+ then "__nanosleep64" else "nanosleep"));
|
|
|
|
-----------
|
|
-- Clock --
|
|
@@ -56,7 +58,8 @@ package body System.OS_Primitives is
|
|
function gettimeofday
|
|
(Tv : access C_Time.timeval;
|
|
Tz : System.Address := System.Null_Address) return Integer;
|
|
- pragma Import (C, gettimeofday, "gettimeofday");
|
|
+ pragma Import (C, gettimeofday, (if OS_Constants.Glibc_Use_Time_Bits64
|
|
+ then "__gettimeofday64" else "gettimeofday"));
|
|
|
|
begin
|
|
-- The return codes for gettimeofday are as follows (from man pages):
|
|
--- a/src/gcc/ada/libgnat/s-osprim__posix2008.adb
|
|
+++ b/src/gcc/ada/libgnat/s-osprim__posix2008.adb
|
|
@@ -45,7 +45,8 @@ package body System.OS_Primitives is
|
|
|
|
function nanosleep (rqtp, rmtp : not null access C_Time.timespec)
|
|
return Integer;
|
|
- pragma Import (C, nanosleep, "nanosleep");
|
|
+ pragma Import (C, nanosleep, (if OS_Constants.Glibc_Use_Time_Bits64
|
|
+ then "__nanosleep64" else "nanosleep"));
|
|
|
|
-----------
|
|
-- Clock --
|
|
@@ -62,7 +63,8 @@ package body System.OS_Primitives is
|
|
function clock_gettime
|
|
(clock_id : clockid_t;
|
|
tp : access C_Time.timespec) return int;
|
|
- pragma Import (C, clock_gettime, "clock_gettime");
|
|
+ pragma Import (C, clock_gettime, (if OS_Constants.Glibc_Use_Time_Bits64
|
|
+ thon "__clock_gettime64" else "clock_gettime"));
|
|
|
|
begin
|
|
Result := clock_gettime (CLOCK_REALTIME, TS'Unchecked_Access);
|
|
--- a/src/gcc/ada/s-oscons-tmplt.c
|
|
+++ b/src/gcc/ada/s-oscons-tmplt.c
|
|
@@ -1777,6 +1777,22 @@ CND(SIZEOF_tv_nsec, "tv_nsec");
|
|
|
|
/*
|
|
|
|
+ -- Functions with time_t suseconds_t timeval timespec parameters like
|
|
+ -- clock_get{res,time} gettimeofday nanosleep
|
|
+ -- pthread_cond_{,timed}wait select
|
|
+ -- must be imported from the GNU C library with
|
|
+ -- External_Name => (if Glibc_Use_Time_Bits64 then "__foo64" else "foo")
|
|
+ -- The test is safe in files that do not require GNU specifically.
|
|
+
|
|
+*/
|
|
+#if defined(__USE_TIME64_REDIRECTS) || (__TIMESIZE == 32 && __USE_TIME_BITS64)
|
|
+ C("Glibc_Use_Time_Bits64", Boolean, "True", "Y2038 Glibc transition")
|
|
+#else
|
|
+ C("Glibc_Use_Time_Bits64", Boolean, "False", "Y2038 Glibc transition")
|
|
+#endif
|
|
+
|
|
+/*
|
|
+
|
|
-- Sizes of various data types
|
|
*/
|
|
|