1/* Simulator watchpoint support. 2 Copyright (C) 1997, 2007 Free Software Foundation, Inc. 3 Contributed by Cygnus Support. 4 5This file is part of GDB, the GNU debugger. 6 7This program is free software; you can redistribute it and/or modify 8it under the terms of the GNU General Public License as published by 9the Free Software Foundation; either version 3 of the License, or 10(at your option) any later version. 11 12This program is distributed in the hope that it will be useful, 13but WITHOUT ANY WARRANTY; without even the implied warranty of 14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15GNU General Public License for more details. 16 17You should have received a copy of the GNU General Public License 18along with this program. If not, see <http://www.gnu.org/licenses/>. */ 19 20 21#ifndef SIM_WATCH_H 22#define SIM_WATCH_H 23 24typedef enum { 25 invalid_watchpoint = -1, 26 pc_watchpoint, 27 clock_watchpoint, 28 cycles_watchpoint, 29 nr_watchpoint_types, 30} watchpoint_type; 31 32typedef struct _sim_watch_point sim_watch_point; 33struct _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 46typedef 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 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. */ 75MODULE_INSTALL_FN sim_watchpoint_install; 76 77#endif /* SIM_WATCH_H */ 78