]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - sim/common/sim-events.h
2002-11-22 Andrew Cagney <ac131313@redhat.com>
[thirdparty/binutils-gdb.git] / sim / common / sim-events.h
index dd69f0a05aa2eea09794a4e035f301948871e98f..d910d05f0934f52f8cf9b16725f4989d6cdb20a0 100644 (file)
@@ -1,26 +1,29 @@
-/*  This file is part of the program psim.
+/* The common simulator framework for GDB, the GNU Debugger.
 
-    Copyright (C) 1994-1997, Andrew Cagney <cagney@highland.com.au>
+   Copyright 2002 Free Software Foundation, Inc.
 
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
+   Contributed by Andrew Cagney and Red Hat.
 
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-    */
+   This file is part of GDB.
 
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
 
-#ifndef _SIM_EVENTS_H_
-#define _SIM_EVENTS_H_
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+
+#ifndef SIM_EVENTS_H
+#define SIM_EVENTS_H
 
 
 /* Notes:
@@ -89,7 +92,8 @@ struct _sim_events {
   sim_event *held;
   volatile int nr_held;
   /* timekeeping */
-  SIM_ELAPSED_TIME initial_wallclock;
+  unsigned long elapsed_wallclock;
+  SIM_ELAPSED_TIME resume_wallclock;
   signed64 time_of_event;
   int time_from_event;
   int trace;
@@ -99,54 +103,49 @@ struct _sim_events {
 
 /* Install the "events" module.  */
 
-EXTERN_SIM_EVENTS\
-(SIM_RC) sim_events_install (SIM_DESC sd);
-
-
-/* Uninstall the "events" subsystem.  */
-
-EXTERN_SIM_EVENTS\
-(void)
-sim_events_uninstall (SIM_DESC sd);
-
-
-
-/* Initialization */
-
-EXTERN_SIM_EVENTS\
-(SIM_RC) sim_events_init (SIM_DESC sd);
+extern SIM_RC sim_events_install (SIM_DESC sd);
 
 
-/* Set Tracing Level */
+/* Schedule an event DELTA_TIME ticks into the future */
 
-EXTERN_SIM_EVENTS\
-(void) sim_events_set_trace
+extern sim_event *sim_events_schedule
 (SIM_DESC sd,
- int level);
-
+ signed64 delta_time,
+ sim_event_handler *handler,
+ void *data);
 
-/* Schedule an event DELTA_TIME ticks into the future */
+extern sim_event *sim_events_schedule_tracef
+(SIM_DESC sd,
+ signed64 delta_time,
+ sim_event_handler *handler,
+ void *data,
+ const char *fmt,
+ ...) __attribute__ ((format (printf, 5, 6)));
 
-EXTERN_SIM_EVENTS\
-(sim_event *) sim_events_schedule
+extern sim_event *sim_events_schedule_vtracef
 (SIM_DESC sd,
  signed64 delta_time,
  sim_event_handler *handler,
- void *data);
+ void *data,
+ const char *fmt,
+ va_list ap);
+
 
-EXTERN_SIM_EVENTS\
-(void) sim_events_schedule_after_signal
+extern void sim_events_schedule_after_signal
 (SIM_DESC sd,
  signed64 delta_time,
  sim_event_handler *handler,
  void *data);
 
+/* NB: signal level events can't have trace strings as malloc isn't
+   available */
+
+
 
 /* Schedule an event milli-seconds from NOW.  The exact interpretation
    of wallclock is host dependant. */
 
-EXTERN_SIM_EVENTS\
-(sim_event *) sim_events_watch_clock
+extern sim_event *sim_events_watch_clock
 (SIM_DESC sd,
  unsigned delta_ms_time,
  sim_event_handler *handler,
@@ -160,8 +159,7 @@ EXTERN_SIM_EVENTS\
    HOST_ADDR: pointer into the host address space.
    BYTE_ORDER: 0 - host endian; BIG_ENDIAN; LITTLE_ENDIAN */
 
-EXTERN_SIM_EVENTS\
-(sim_event*) sim_events_watch_sim
+extern sim_event *sim_events_watch_sim
 (SIM_DESC sd,
  void *host_addr,
  int nr_bytes,
@@ -180,11 +178,10 @@ EXTERN_SIM_EVENTS\
    CORE_ADDR/MAP: pointer into the target address space.
    BYTE_ORDER: 0 - current target endian; BIG_ENDIAN; LITTLE_ENDIAN */
 
-EXTERN_SIM_EVENTS\
-(sim_event*) sim_events_watch_core
+extern sim_event *sim_events_watch_core
 (SIM_DESC sd,
  address_word core_addr,
sim_core_maps core_map,
unsigned map,
  int nr_bytes,
  int byte_order,
  int is_within,
@@ -195,8 +192,7 @@ EXTERN_SIM_EVENTS\
 
 /* Deschedule the specified event */
 
-EXTERN_SIM_EVENTS\
-(void) sim_events_deschedule
+extern void sim_events_deschedule
 (SIM_DESC sd,
  sim_event *event_to_remove);
 
@@ -205,7 +201,7 @@ EXTERN_SIM_EVENTS\
    is not event processing.
 
    If the simulator halted part way through event processing then both
-   EVENTS_WERE_LAST and EVENTS_WERE_FIRST shall be true.
+   EVENTS_WERE_LAST and EVENTS_WERE_NEXT shall be true.
 
    If the simulator halted after processing the last cpu, then only
    EVENTS_WERE_NEXT shall be true. */
@@ -217,10 +213,16 @@ INLINE_SIM_EVENTS\
  int events_were_next);
 
 
-/* Progress time - separated into two parts so that the main loop can
-   save its context before the event queue is processed.
+/* Progress time.
+
+   Separated into two parts so that the main loop can save its context
+   before the event queue is processed.  When sim_events_tick*()
+   returns true, any simulation context should be saved and
+   sim_events_process() called.
 
-   sim_events_tickn advances the clock by N cycles (1..MAXINT) */
+   SIM_EVENTS_TICK advances the clock by 1 cycle.
+
+   SIM_EVENTS_TICKN advances the clock by N cycles (1..MAXINT). */
 
 INLINE_SIM_EVENTS\
 (int) sim_events_tick
@@ -236,7 +238,17 @@ INLINE_SIM_EVENTS\
 (SIM_DESC sd);
 
 
-/* Progress time such that an event shall occure upon the next call to
+/* Advance the clock by an additional SLIP cycles at the next call to
+   sim_events_tick*().  For multiple calls, the effect is
+   accumulative. */
+
+INLINE_SIM_EVENTS\
+(void) sim_events_slip
+(SIM_DESC sd,
+ int slip);
+
+
+/* Progress time such that an event shall occur upon the next call to
    sim_events tick */
 
 #if 0
@@ -246,11 +258,23 @@ INLINE_SIM_EVENTS\
 #endif
 
 
-/* local concept of time */
+/* local concept of elapsed target time */
 
 INLINE_SIM_EVENTS\
 (signed64) sim_events_time
 (SIM_DESC sd);
 
 
+/* local concept of elapsed host time (milliseconds) */
+
+INLINE_SIM_EVENTS\
+(unsigned long) sim_events_elapsed_time
+(SIM_DESC sd);
+
+/* Returns the time that remains before the event is raised. */
+INLINE_SIM_EVENTS\
+(signed64) sim_events_remain_time
+(SIM_DESC sd, sim_event *event);
+
+
 #endif