2010-03-18 Stan Shebs <stan@codesourcery.com>
[external/binutils.git] / gdb / tracepoint.h
1 /* Data structures associated with tracepoints in GDB.
2    Copyright (C) 1997, 1998, 1999, 2000, 2007, 2008, 2009, 2010
3    Free Software Foundation, Inc.
4
5    This file is part of GDB.
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 #if !defined (TRACEPOINT_H)
21 #define TRACEPOINT_H 1
22
23 /* The data structure for an action: */
24 struct action_line
25   {
26     struct action_line *next;
27     char *action;
28   };
29
30 enum actionline_type
31   {
32     BADLINE = -1,
33     GENERIC = 0,
34     END = 1,
35     STEPPING = 2
36   };
37
38 /* A trace state variable is a value managed by a target being
39    traced. A trace state variable (or tsv for short) can be accessed
40    and assigned to by tracepoint actions and conditionals, but is not
41    part of the program being traced, and it doesn't have to be
42    collected. Effectively the variables are scratch space for
43    tracepoints.  */
44
45 struct trace_state_variable
46   {
47     /* The variable's name.  The user has to prefix with a dollar sign,
48        but we don't store that internally.  */
49     const char *name;
50
51     /* An id number assigned by GDB, and transmitted to targets.  */
52     int number;
53
54     /* The initial value of a variable is a 64-bit signed integer.  */
55     LONGEST initial_value;
56
57     /* 1 if the value is known, else 0.  The value is known during a
58        trace run, or in tfind mode if the variable was collected into
59        the current trace frame.  */
60     int value_known;
61
62     /* The value of a variable is a 64-bit signed integer.  */
63     LONGEST value;
64
65     /* This is true for variables that are predefined and built into
66        the target.  */
67     int builtin;
68    };
69
70 /* The trace status encompasses various info about the general state
71    of the tracing run.  */
72
73 enum trace_stop_reason
74   {
75     trace_stop_reason_unknown,
76     trace_never_run,
77     tstop_command,
78     trace_buffer_full,
79     trace_disconnected,
80     tracepoint_passcount
81   };
82
83 struct trace_status
84 {
85   /* This is true if the status is coming from a file rather
86      than a live target.  */
87   int from_file;
88
89   /* This is true if the value of the running field is known.  */
90   int running_known;
91
92   int running;
93
94   enum trace_stop_reason stop_reason;
95
96   int stopping_tracepoint;
97
98   /* Number of traceframes currently in the buffer.  */
99
100   int traceframe_count;
101
102   /* Number of traceframes created since start of run.  */
103
104   int traceframes_created;
105
106   /* Total size of the target's trace buffer.  */
107
108   int buffer_size;
109
110   /* Unused bytes left in the target's trace buffer.  */
111
112   int buffer_free;
113 };
114
115 struct trace_status *current_trace_status (void);
116
117 extern char *default_collect;
118
119 /* Struct to collect random info about tracepoints on the target.  */
120
121 struct uploaded_tp {
122   int number;
123   enum bptype type;
124   ULONGEST addr;
125   int enabled;
126   int step;
127   int pass;
128   int orig_size;
129   char *cond;
130   int numactions;
131   char *actions[100];
132   int num_step_actions;
133   char *step_actions[100];
134   struct uploaded_tp *next;
135 };
136
137 /* Struct recording info about trace state variables on the target.  */
138
139 struct uploaded_tsv {
140   const char *name;
141   int number;
142   LONGEST initial_value;
143   int builtin;
144   struct uploaded_tsv *next;
145 };
146
147 /* A hook used to notify the UI of tracepoint operations.  */
148
149 extern void (*deprecated_trace_find_hook) (char *arg, int from_tty);
150 extern void (*deprecated_trace_start_stop_hook) (int start, int from_tty);
151
152 int get_traceframe_number (void);
153 void set_traceframe_number (int);
154 struct cleanup *make_cleanup_restore_current_traceframe (void);
155
156 void free_actions (struct breakpoint *);
157 enum actionline_type validate_actionline (char **, struct breakpoint *);
158
159 extern void end_actions_pseudocommand (char *args, int from_tty);
160 extern void while_stepping_pseudocommand (char *args, int from_tty);
161
162 extern struct trace_state_variable *find_trace_state_variable (const char *name);
163
164 extern void parse_trace_status (char *line, struct trace_status *ts);
165
166 extern void parse_tracepoint_definition (char *line, struct uploaded_tp **utpp);
167 extern void parse_tsv_definition (char *line, struct uploaded_tsv **utsvp);
168
169 extern struct uploaded_tp *get_uploaded_tp (int num, ULONGEST addr,
170                                             struct uploaded_tp **utpp);
171 extern struct breakpoint *create_tracepoint_from_upload (struct uploaded_tp *utp);
172 extern void merge_uploaded_tracepoints (struct uploaded_tp **utpp);
173 extern void merge_uploaded_trace_state_variables (struct uploaded_tsv **utsvp);
174
175 extern void disconnect_or_stop_tracing (int from_tty);
176
177 #endif  /* TRACEPOINT_H */