1 /* Simulator watchpoint support. 2 Copyright (C) 1997-2013 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 3 of the License, or 10 (at your option) 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 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 19 20 21 #ifndef SIM_WATCH_H 22 #define SIM_WATCH_H 23 24 typedef enum { 25 invalid_watchpoint = -1, 26 pc_watchpoint, 27 clock_watchpoint, 28 cycles_watchpoint, 29 nr_watchpoint_types, 30 } watchpoint_type; 31 32 typedef struct _sim_watch_point sim_watch_point; 33 struct _sim_watch_point { 34 int ident; 35 watchpoint_type type; 36 int interrupt_nr; /* == nr_interrupts -> breakpoint */ 37 int is_periodic; 38 int is_within; 39 unsigned long arg0; 40 unsigned long arg1; 41 sim_event *event; 42 sim_watch_point *next; 43 }; 44 45 46 typedef struct _sim_watchpoints { 47 48 /* Pointer into the host's data structures specifying the 49 address/size of the program-counter */ 50 /* FIXME: In the future this shall be generalized so that any of the 51 N processors M registers can be watched */ 52 void *pc; 53 int sizeof_pc; 54 55 /* Pointer to the handler for interrupt watchpoints */ 56 /* FIXME: can this be done better? */ 57 /* NOTE: For the DATA arg, the handler is passed a (char**) pointer 58 that is an offset into the INTERRUPT_NAMES vector. Use 59 arithmetic to determine the interrupt-nr. */ 60 sim_event_handler *interrupt_handler; 61 62 /* Pointer to a null terminated list of interrupt names */ 63 /* FIXME: can this be done better? Look at the PPC's interrupt 64 mechanism and table for a rough idea of where it will go next */ 65 int nr_interrupts; 66 const char **interrupt_names; 67 68 /* active watchpoints */ 69 int last_point_nr; 70 sim_watch_point *points; 71 72 } sim_watchpoints; 73 74 /* Watch install handler. */ 75 MODULE_INSTALL_FN sim_watchpoint_install; 76 77 #endif /* SIM_WATCH_H */ 78