From: Piotr Trojanek <[email protected]>

Interface from Ada to C for calling gmtime was over-complicated. Now we just
rely on the Ada RM and what it guarantees when interfacing for parameters of
elementary types depending on their IN/OUT mode.

gcc/ada/ChangeLog:

        * adaint.c, adaint.h (__gnat_to_gm_time): Adapt C side, while keeping
        the explicit conversion to time_t, if this ever needs to be debugged.
        * libgnat/s-os_lib.adb (To_GM_Time): Adapt Ada side.

Tested on x86_64-pc-linux-gnu, committed on master.

---
 gcc/ada/adaint.c             |  4 ++--
 gcc/ada/adaint.h             |  2 +-
 gcc/ada/libgnat/s-os_lib.adb | 29 ++++++++++++++---------------
 3 files changed, 17 insertions(+), 18 deletions(-)

diff --git a/gcc/ada/adaint.c b/gcc/ada/adaint.c
index 95351a5f4ef..5fb25571774 100644
--- a/gcc/ada/adaint.c
+++ b/gcc/ada/adaint.c
@@ -444,11 +444,11 @@ __gnat_current_time_string (char *result)
 }
 
 void
-__gnat_to_gm_time (OS_Time *p_time, int *p_year, int *p_month, int *p_day,
+__gnat_to_gm_time (OS_Time date, int *p_year, int *p_month, int *p_day,
                   int *p_hours, int *p_mins, int *p_secs)
 {
   struct tm *res;
-  time_t time = (time_t) *p_time;
+  time_t time = (time_t) date;
 
   res = gmtime (&time);
   if (res)
diff --git a/gcc/ada/adaint.h b/gcc/ada/adaint.h
index ca92e08f858..c8973c16cde 100644
--- a/gcc/ada/adaint.h
+++ b/gcc/ada/adaint.h
@@ -146,7 +146,7 @@ extern int  __gnat_in_child_after_fork;
 
 extern OS_Time __gnat_current_time                (void);
 extern void   __gnat_current_time_string           (char *);
-extern void   __gnat_to_gm_time                           (OS_Time *, int *, 
int *,
+extern void   __gnat_to_gm_time                           (OS_Time, int *, int 
*,
                                                    int *, int *,
                                                    int *, int *);
 extern void   __gnat_to_os_time                    (OS_Time *, int, int, int,
diff --git a/gcc/ada/libgnat/s-os_lib.adb b/gcc/ada/libgnat/s-os_lib.adb
index df11e75afc9..ae8ef2b1a08 100644
--- a/gcc/ada/libgnat/s-os_lib.adb
+++ b/gcc/ada/libgnat/s-os_lib.adb
@@ -1304,16 +1304,15 @@ package body System.OS_Lib is
       Second : out Second_Type)
    is
       procedure To_GM_Time
-        (P_OS_Time : Address;
-         P_Year    : Address;
-         P_Month   : Address;
-         P_Day     : Address;
-         P_Hours   : Address;
-         P_Mins    : Address;
-         P_Secs    : Address);
+        (Date    : OS_Time;
+         P_Year  : out Integer;
+         P_Month : out Integer;
+         P_Day   : out Integer;
+         P_Hours : out Integer;
+         P_Mins  : out Integer;
+         P_Secs  : out Integer);
       pragma Import (C, To_GM_Time, "__gnat_to_gm_time");
 
-      T  : OS_Time := Date;
       Y  : Integer;
       Mo : Integer;
       D  : Integer;
@@ -1342,13 +1341,13 @@ package body System.OS_Lib is
       Locked_Processing : begin
          SSL.Lock_Task.all;
          To_GM_Time
-           (P_OS_Time => T'Address,
-            P_Year    => Y'Address,
-            P_Month   => Mo'Address,
-            P_Day     => D'Address,
-            P_Hours   => H'Address,
-            P_Mins    => Mn'Address,
-            P_Secs    => S'Address);
+           (Date    => Date,
+            P_Year  => Y,
+            P_Month => Mo,
+            P_Day   => D,
+            P_Hours => H,
+            P_Mins  => Mn,
+            P_Secs  => S);
          SSL.Unlock_Task.all;
 
       exception
-- 
2.53.0

Reply via email to