123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- /* Simulator watchpoint support.
- Copyright (C) 1997-2015 Free Software Foundation, Inc.
- Contributed by Cygnus Support.
- This file is part of GDB, the GNU debugger.
- 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 3 of the License, or
- (at your option) any later version.
- 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, see <http://www.gnu.org/licenses/>. */
- #ifndef SIM_WATCH_H
- #define SIM_WATCH_H
- typedef enum {
- invalid_watchpoint = -1,
- pc_watchpoint,
- clock_watchpoint,
- cycles_watchpoint,
- nr_watchpoint_types,
- } watchpoint_type;
- typedef struct _sim_watch_point sim_watch_point;
- struct _sim_watch_point {
- int ident;
- watchpoint_type type;
- int interrupt_nr; /* == nr_interrupts -> breakpoint */
- int is_periodic;
- int is_within;
- unsigned long arg0;
- unsigned long arg1;
- sim_event *event;
- sim_watch_point *next;
- };
- typedef struct _sim_watchpoints {
- /* Pointer into the host's data structures specifying the
- address/size of the program-counter */
- /* FIXME: In the future this shall be generalized so that any of the
- N processors M registers can be watched */
- void *pc;
- int sizeof_pc;
- /* Pointer to the handler for interrupt watchpoints */
- /* FIXME: can this be done better? */
- /* NOTE: For the DATA arg, the handler is passed a (char**) pointer
- that is an offset into the INTERRUPT_NAMES vector. Use
- arithmetic to determine the interrupt-nr. */
- sim_event_handler *interrupt_handler;
- /* Pointer to a null terminated list of interrupt names */
- /* FIXME: can this be done better? Look at the PPC's interrupt
- mechanism and table for a rough idea of where it will go next */
- int nr_interrupts;
- const char **interrupt_names;
- /* active watchpoints */
- int last_point_nr;
- sim_watch_point *points;
- } sim_watchpoints;
- /* Watch install handler. */
- MODULE_INSTALL_FN sim_watchpoint_install;
- #endif /* SIM_WATCH_H */
|