X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=sim%2Fcommon%2Fsim-events.h;h=60f331558fa2312e0c133fd6481eb2e8fc4e6c6d;hb=b0b8c9e07a7ee9e5d6d4c6d2757da921071add7f;hp=6dd1a2f4f9c1547336a623e83ecfa33609734f21;hpb=e98fe4f7b54cbdf29aef9287bbb1bea8801dd05a;p=deliverable%2Fbinutils-gdb.git diff --git a/sim/common/sim-events.h b/sim/common/sim-events.h index 6dd1a2f4f9..60f331558f 100644 --- a/sim/common/sim-events.h +++ b/sim/common/sim-events.h @@ -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 + Copyright 2002, 2007 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: @@ -100,40 +103,49 @@ struct _sim_events { /* Install the "events" module. */ -EXTERN_SIM_EVENTS\ -(SIM_RC) sim_events_install (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, @@ -147,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, @@ -167,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, @@ -182,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); @@ -192,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. */ @@ -204,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 @@ -223,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 @@ -233,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