From 00330cd18a4ba83beabad4cb9f4215170828cd29 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Sat, 24 Apr 2021 14:35:14 -0400 Subject: [PATCH] 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. --- 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 + + * callback.h: Include stdint.h. + (struct host_callback_struct): Change time return to int64_t. Delete + 2nd arg. + 2021-05-14 Mike Frysinger * 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 #include +#include /* 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 + + * armos.c (ARMul_OSHandleSWI): Delete 2nd arg to time callback. + 2021-05-14 Mike Frysinger * 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 + + * 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 * 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 + + * 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 * mloop.in: Include . 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. */ -- 2.30.2