[binutils-gdb] sim: callback: convert time interface to 64-bit

Michael Frysinger vapier@sourceware.org
Sat May 15 01:06:35 GMT 2021


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=00330cd18a4ba83beabad4cb9f4215170828cd29

commit 00330cd18a4ba83beabad4cb9f4215170828cd29
Author: Mike Frysinger <vapier@gentoo.org>
Date:   Sat Apr 24 14:35:14 2021 -0400

    sim: callback: convert time interface to 64-bit
    
    PR sim/27705
    Rather than rely on time_t being the right size between the host &
    target, have the interface always be 64-bit.  We can figure out if
    we need to truncate when actually outputting it to the right target.

Diff:
---
 include/sim/ChangeLog  |  6 ++++++
 include/sim/callback.h |  3 ++-
 sim/arm/ChangeLog      |  4 ++++
 sim/arm/armos.c        |  6 +++---
 sim/common/ChangeLog   |  9 +++++++++
 sim/common/callback.c  | 10 +++++-----
 sim/common/sim-io.c    |  7 +++----
 sim/common/sim-io.h    |  2 +-
 sim/common/syscall.c   |  2 +-
 sim/cris/ChangeLog     |  5 +++++
 sim/cris/traps.c       | 11 ++++-------
 11 files changed, 43 insertions(+), 22 deletions(-)

diff --git a/include/sim/ChangeLog b/include/sim/ChangeLog
index a70d8f06cf2..393b7b8262e 100644
--- a/include/sim/ChangeLog
+++ b/include/sim/ChangeLog
@@ -1,3 +1,9 @@
+2021-05-14  Mike Frysinger  <vapier@gentoo.org>
+
+	* callback.h: Include stdint.h.
+	(struct host_callback_struct): Change time return to int64_t.  Delete
+	2nd arg.
+
 2021-05-14  Mike Frysinger  <vapier@gentoo.org>
 
 	* callback.h (p1, p2): Change PTR to void*.
diff --git a/include/sim/callback.h b/include/sim/callback.h
index 87a61df0855..f40385e5761 100644
--- a/include/sim/callback.h
+++ b/include/sim/callback.h
@@ -47,6 +47,7 @@
 
 #include <ansidecl.h>
 #include <stdarg.h>
+#include <stdint.h>
 /* Needed for enum bfd_endian.  */
 #include "bfd.h"
 
@@ -78,7 +79,7 @@ struct host_callback_struct
   int (*read_stdin) ( host_callback *, char *, int);
   int (*rename) (host_callback *, const char *, const char *);
   int (*system) (host_callback *, const char *);
-  long (*time) (host_callback *, long *);
+  int64_t (*time) (host_callback *);
   int (*unlink) (host_callback *, const char *);
   int (*write) (host_callback *,int, const char *, int);
   int (*write_stdout) (host_callback *, const char *, int);
diff --git a/sim/arm/ChangeLog b/sim/arm/ChangeLog
index 7124a6d0a32..5282e70a81a 100644
--- a/sim/arm/ChangeLog
+++ b/sim/arm/ChangeLog
@@ -1,3 +1,7 @@
+2021-05-14  Mike Frysinger  <vapier@gentoo.org>
+
+	* armos.c (ARMul_OSHandleSWI): Delete 2nd arg to time callback.
+
 2021-05-14  Mike Frysinger  <vapier@gentoo.org>
 
 	* armos.c: Update include path.
diff --git a/sim/arm/armos.c b/sim/arm/armos.c
index 77b256fd5b3..72bdf599718 100644
--- a/sim/arm/armos.c
+++ b/sim/arm/armos.c
@@ -437,7 +437,7 @@ ARMul_OSHandleSWI (ARMul_State * state, ARMword number)
     case SWI_Time:
       if (swi_mask & SWI_MASK_DEMON)
 	{
-	  state->Reg[0] = (ARMword) sim_callback->time (sim_callback, NULL);
+	  state->Reg[0] = (ARMword) sim_callback->time (sim_callback);
 	  OSptr->ErrorNo = sim_callback->get_errno (sim_callback);
 	}
       else
@@ -592,7 +592,7 @@ ARMul_OSHandleSWI (ARMul_State * state, ARMword number)
 	      break;
 
 	    case AngelSWI_Reason_Time:
-	      state->Reg[0] = (ARMword) sim_callback->time (sim_callback, NULL);
+	      state->Reg[0] = (ARMword) sim_callback->time (sim_callback);
 	      OSptr->ErrorNo = sim_callback->get_errno (sim_callback);
 	      break;
 
@@ -781,7 +781,7 @@ ARMul_OSHandleSWI (ARMul_State * state, ARMword number)
 	      break;
 
 	    case 17: /* Utime.  */
-	      state->Reg[0] = state->Reg[1] = (ARMword) sim_callback->time (sim_callback, NULL);
+	      state->Reg[0] = state->Reg[1] = (ARMword) sim_callback->time (sim_callback);
 	      OSptr->ErrorNo = sim_callback->get_errno (sim_callback);
 	      break;
 
diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog
index ac804647c17..879aac96a95 100644
--- a/sim/common/ChangeLog
+++ b/sim/common/ChangeLog
@@ -1,3 +1,12 @@
+2021-05-14  Mike Frysinger  <vapier@gentoo.org>
+
+	* callback.c (os_time): Change return to int64_t.  Delete 2nd arg.
+	(os_fstat): Delete 2nd arg to time callback.
+	* sim-io.c (sim_io_time): Change return to int64_t.  Delete 2nd arg
+	to time callback.
+	* sim-io.h (sim_io_time): Change return to int64_t.
+	* syscall.c (cb_syscall): Delete 2nd arg to time callback.
+
 2021-05-14  Mike Frysinger  <vapier@gentoo.org>
 
 	* callback.c (cb_host_to_target_stat): Change PTR to void*.
diff --git a/sim/common/callback.c b/sim/common/callback.c
index 1b53823c418..fb5e86431cc 100644
--- a/sim/common/callback.c
+++ b/sim/common/callback.c
@@ -420,12 +420,12 @@ os_system (host_callback *p, const char *s)
   return result;
 }
 
-static long
-os_time (host_callback *p, long *t)
+static int64_t
+os_time (host_callback *p)
 {
-  long result;
+  int64_t result;
 
-  result = time (t);
+  result = time (NULL);
   p->last_errno = errno;
   return result;
 }
@@ -466,7 +466,7 @@ os_fstat (host_callback *p, int fd, struct stat *buf)
   if (p->ispipe[fd])
     {
 #if defined (HAVE_STRUCT_STAT_ST_ATIME) || defined (HAVE_STRUCT_STAT_ST_CTIME) || defined (HAVE_STRUCT_STAT_ST_MTIME)
-      time_t t = (*p->time) (p, NULL);
+      time_t t = (*p->time) (p);
 #endif
 
       /* We have to fake the struct stat contents, since the pipe is
diff --git a/sim/common/sim-io.c b/sim/common/sim-io.c
index f418c3748cd..e5da7f1fdaa 100644
--- a/sim/common/sim-io.c
+++ b/sim/common/sim-io.c
@@ -68,11 +68,10 @@ sim_io_unlink (SIM_DESC sd,
 }
 
 
-long
-sim_io_time (SIM_DESC sd,
-	     long *t)
+int64_t
+sim_io_time (SIM_DESC sd)
 {
-  return STATE_CALLBACK (sd)->time (STATE_CALLBACK (sd), t);
+  return STATE_CALLBACK (sd)->time (STATE_CALLBACK (sd));
 }
 
 
diff --git a/sim/common/sim-io.h b/sim/common/sim-io.h
index f018538ce46..a091fd08e46 100644
--- a/sim/common/sim-io.h
+++ b/sim/common/sim-io.h
@@ -31,7 +31,7 @@ int sim_io_shutdown (SIM_DESC sd);
 
 int sim_io_unlink (SIM_DESC sd, const char *);
 
-long sim_io_time (SIM_DESC sd, long *);
+int64_t sim_io_time (SIM_DESC sd);
 
 int sim_io_system (SIM_DESC sd, const char *);
 
diff --git a/sim/common/syscall.c b/sim/common/syscall.c
index 258b3d694f4..0a1d3f4114d 100644
--- a/sim/common/syscall.c
+++ b/sim/common/syscall.c
@@ -588,7 +588,7 @@ cb_syscall (host_callback *cb, CB_SYSCALL *sc)
 	   We might also want gettimeofday or times, but if system calls
 	   can be built on others, we can keep the number we have to support
 	   here down.  */
-	time_t t = (*cb->time) (cb, (time_t *) 0);
+	time_t t = (*cb->time) (cb);
 	result = t;
 	/* It is up to target code to process the argument to time().  */
       }
diff --git a/sim/cris/ChangeLog b/sim/cris/ChangeLog
index 81ae5e6f267..68cd0bfd52c 100644
--- a/sim/cris/ChangeLog
+++ b/sim/cris/ChangeLog
@@ -1,3 +1,8 @@
+2021-05-14  Mike Frysinger  <vapier@gentoo.org>
+
+	* traps.c (cris_break_13_handler): Delete 2nd arg to time callback.
+	(cris_time): Change return to int64_t.  Delete 2nd arg.
+
 2021-05-04  Tom Tromey  <tromey@adacore.com>
 
 	* mloop.in: Include <stdlib.h>.
diff --git a/sim/cris/traps.c b/sim/cris/traps.c
index 1c8ca41d14e..483747fb4e0 100644
--- a/sim/cris/traps.c
+++ b/sim/cris/traps.c
@@ -2234,7 +2234,7 @@ cris_break_13_handler (SIM_CPU *current_cpu, USI callnum, USI arg1,
 
 	case TARGET_SYS_time:
 	  {
-	    retval = (int) (*cb->time) (cb, 0L);
+	    retval = (int) (*cb->time) (cb);
 
 	    /* At time of this writing, CB_SYSCALL_time doesn't do the
 	       part of setting *arg1 to the return value.  */
@@ -3327,13 +3327,10 @@ cris_pipe_empty (host_callback *cb,
 
 /* We have a simulator-specific notion of time.  See TARGET_TIME.  */
 
-static long
-cris_time (host_callback *cb ATTRIBUTE_UNUSED, long *t)
+static int64_t
+cris_time (host_callback *cb ATTRIBUTE_UNUSED)
 {
-  long retval = TARGET_TIME (current_cpu_for_cb_callback);
-  if (t)
-    *t = retval;
-  return retval;
+  return TARGET_TIME (current_cpu_for_cb_callback);
 }
 
 /* Set target-specific callback data. */


More information about the Gdb-cvs mailing list