1 /* Simulator watchpoint support. 2 Copyright (C) 1997 Free Software Foundation, Inc. 3 Contributed by Cygnus Support. 4 5 This file is part of GDB, the GNU debugger. 6 7 This program is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation; either version 2, or (at your option) 10 any later version. 11 12 This program is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License along 18 with this program; if not, write to the Free Software Foundation, Inc., 19 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ 20 21 22 #ifndef SIM_WATCH_H 23 #define SIM_WATCH_H 24 25 typedef enum { 26 invalid_watchpoint = -1, 27 pc_watchpoint, 28 clock_watchpoint, 29 cycles_watchpoint, 30 nr_watchpoint_types, 31 } watchpoint_type; 32 33 typedef struct _sim_watch_point sim_watch_point; 34 struct _sim_watch_point { 35 int ident; 36 watchpoint_type type; 37 int interrupt_nr; /* == nr_interrupts -> breakpoint */ 38 int is_periodic; 39 int is_within; 40 unsigned long arg0; 41 unsigned long arg1; 42 sim_event *event; 43 sim_watch_point *next; 44 }; 45 46 47 typedef struct _sim_watchpoints { 48 49 /* Pointer into the host's data structures specifying the 50 address/size of the program-counter */ 51 /* FIXME: In the future this shall be generalized so that any of the 52 N processors M registers can be watched */ 53 void *pc; 54 int sizeof_pc; 55 56 /* Pointer to the handler for interrupt watchpoints */ 57 /* FIXME: can this be done better? */ 58 /* NOTE: For the DATA arg, the handler is passed a (char**) pointer 59 that is an offset into the INTERRUPT_NAMES vector. Use 60 arithmetic to determine the interrupt-nr. */ 61 sim_event_handler *interrupt_handler; 62 63 /* Pointer to a null terminated list of interrupt names */ 64 /* FIXME: can this be done better? Look at the PPC's interrupt 65 mechanism and table for a rough idea of where it will go next */ 66 int nr_interrupts; 67 char **interrupt_names; 68 69 /* active watchpoints */ 70 int last_point_nr; 71 sim_watch_point *points; 72 73 } sim_watchpoints; 74 75 /* Watch install handler. */ 76 MODULE_INSTALL_FN sim_watchpoint_install; 77 78 #endif /* SIM_WATCH_H */ 79