Imported Upstream version 7.9
[platform/upstream/gdb.git] / sim / common / sim-watch.h
1 /* Simulator watchpoint support.
2    Copyright (C) 1997-2015 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 */