Use remote register numbers in tracepoint mask
[deliverable/binutils-gdb.git] / gdb / tracepoint.h
CommitLineData
c906108c 1/* Data structures associated with tracepoints in GDB.
e2882c85 2 Copyright (C) 1997-2018 Free Software Foundation, Inc.
c906108c 3
c5aa993b 4 This file is part of GDB.
c906108c 5
c5aa993b
JM
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
a9762ec7 8 the Free Software Foundation; either version 3 of the License, or
c5aa993b 9 (at your option) any later version.
c906108c 10
c5aa993b
JM
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
c906108c 15
c5aa993b 16 You should have received a copy of the GNU General Public License
a9762ec7 17 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
18
19#if !defined (TRACEPOINT_H)
20#define TRACEPOINT_H 1
21
f197e0f1 22#include "breakpoint.h"
2a7498d8 23#include "memrange.h"
fa864999 24#include "gdb_vecs.h"
f197e0f1 25
1f45808e
PA
26#include <vector>
27#include <string>
28
393fd4c3
YQ
29/* An object describing the contents of a traceframe. */
30
31struct traceframe_info
32{
33 /* Collected memory. */
4cdd21a8 34 std::vector<mem_range> memory;
28a93511
YQ
35
36 /* Collected trace state variables. */
d0d292a2 37 std::vector<int> tvars;
393fd4c3
YQ
38};
39
2098b393
SM
40typedef std::unique_ptr<traceframe_info> traceframe_info_up;
41
f61e138d 42/* A trace state variable is a value managed by a target being
c378eb4e 43 traced. A trace state variable (or tsv for short) can be accessed
f61e138d
SS
44 and assigned to by tracepoint actions and conditionals, but is not
45 part of the program being traced, and it doesn't have to be
c378eb4e 46 collected. Effectively the variables are scratch space for
f61e138d
SS
47 tracepoints. */
48
49struct trace_state_variable
c252925c
SM
50{
51 trace_state_variable (std::string &&name_, int number_)
52 : name (name_), number (number_)
53 {}
54
55 /* The variable's name. The user has to prefix with a dollar sign,
56 but we don't store that internally. */
57 std::string name;
f61e138d 58
c252925c
SM
59 /* An id number assigned by GDB, and transmitted to targets. */
60 int number = 0;
f61e138d 61
c252925c
SM
62 /* The initial value of a variable is a 64-bit signed integer. */
63 LONGEST initial_value = 0;
f61e138d 64
c252925c
SM
65 /* 1 if the value is known, else 0. The value is known during a
66 trace run, or in tfind mode if the variable was collected into
67 the current trace frame. */
68 int value_known = 0;
f61e138d 69
c252925c
SM
70 /* The value of a variable is a 64-bit signed integer. */
71 LONGEST value = 0;
00bf0b85 72
c252925c
SM
73 /* This is true for variables that are predefined and built into
74 the target. */
75 int builtin = 0;
76 };
00bf0b85
SS
77
78/* The trace status encompasses various info about the general state
79 of the tracing run. */
80
81enum trace_stop_reason
82 {
83 trace_stop_reason_unknown,
84 trace_never_run,
e5a873b7 85 trace_stop_command,
00bf0b85
SS
86 trace_buffer_full,
87 trace_disconnected,
6c28cbf2
SS
88 tracepoint_passcount,
89 tracepoint_error
f61e138d
SS
90 };
91
00bf0b85
SS
92struct trace_status
93{
f5911ea1
HAQ
94 /* If the status is coming from a file rather than a live target,
95 this points at the file's filename. Otherwise, this is NULL. */
96 const char *filename;
00bf0b85
SS
97
98 /* This is true if the value of the running field is known. */
99 int running_known;
100
f196051f 101 /* This is true when the trace experiment is actually running. */
00bf0b85
SS
102 int running;
103
104 enum trace_stop_reason stop_reason;
105
6c28cbf2
SS
106 /* If stop_reason is tracepoint_passcount or tracepoint_error, this
107 is the (on-target) number of the tracepoint which caused the
108 stop. */
00bf0b85
SS
109 int stopping_tracepoint;
110
f196051f
SS
111 /* If stop_reason is tstop_command or tracepoint_error, this is an
112 arbitrary string that may describe the reason for the stop in
113 more detail. */
114
115 char *stop_desc;
6c28cbf2 116
4daf5ac0
SS
117 /* Number of traceframes currently in the buffer. */
118
00bf0b85
SS
119 int traceframe_count;
120
4daf5ac0
SS
121 /* Number of traceframes created since start of run. */
122
123 int traceframes_created;
124
125 /* Total size of the target's trace buffer. */
126
127 int buffer_size;
128
129 /* Unused bytes left in the target's trace buffer. */
00bf0b85 130
4daf5ac0 131 int buffer_free;
33da3f1c
SS
132
133 /* 1 if the target will continue tracing after disconnection, else
134 0. If the target does not report a value, assume 0. */
135
136 int disconnected_tracing;
137
138 /* 1 if the target is using a circular trace buffer, else 0. If the
139 target does not report a value, assume 0. */
140
141 int circular_buffer;
f196051f
SS
142
143 /* The "name" of the person running the trace. This is an
144 arbitrary string. */
145
146 char *user_name;
147
148 /* "Notes" about the trace. This is an arbitrary string not
149 interpreted by GDBserver in any special way. */
150
151 char *notes;
152
153 /* The calendar times at which the trace run started and stopped,
154 both expressed in microseconds of Unix time. */
155
156 LONGEST start_time;
157 LONGEST stop_time;
00bf0b85
SS
158};
159
160struct trace_status *current_trace_status (void);
c906108c 161
35b1e5cc
SS
162extern char *default_collect;
163
393fd4c3
YQ
164extern int trace_regblock_size;
165
7951c4eb
YQ
166extern const char *stop_reason_names[];
167
00bf0b85
SS
168/* Struct to collect random info about tracepoints on the target. */
169
409873ef
SS
170struct uploaded_tp
171{
a18ba4e4
SM
172 int number = 0;
173 enum bptype type = bp_none;
174 ULONGEST addr = 0;
175 int enabled = 0;
176 int step = 0;
177 int pass = 0;
178 int orig_size = 0;
3149d8c1
SS
179
180 /* String that is the encoded form of the tracepoint's condition. */
a18ba4e4 181 char *cond = nullptr;
3149d8c1 182
3e43a32a
MS
183 /* Vectors of strings that are the encoded forms of a tracepoint's
184 actions. */
a18ba4e4
SM
185 std::vector<char *> actions;
186 std::vector<char *> step_actions;
409873ef
SS
187
188 /* The original string defining the location of the tracepoint. */
a18ba4e4 189 char *at_string = nullptr;
409873ef
SS
190
191 /* The original string defining the tracepoint's condition. */
a18ba4e4 192 char *cond_string = nullptr;
409873ef
SS
193
194 /* List of original strings defining the tracepoint's actions. */
a18ba4e4 195 std::vector<char *> cmd_strings;
409873ef 196
f196051f 197 /* The tracepoint's current hit count. */
a18ba4e4 198 int hit_count = 0;
f196051f
SS
199
200 /* The tracepoint's current traceframe usage. */
a18ba4e4 201 ULONGEST traceframe_usage = 0;
f196051f 202
a18ba4e4 203 struct uploaded_tp *next = nullptr;
00bf0b85
SS
204};
205
206/* Struct recording info about trace state variables on the target. */
207
409873ef
SS
208struct uploaded_tsv
209{
00bf0b85
SS
210 const char *name;
211 int number;
212 LONGEST initial_value;
213 int builtin;
214 struct uploaded_tsv *next;
215};
216
0fb4aa4b
PA
217/* Struct recording info about a target static tracepoint marker. */
218
219struct static_tracepoint_marker
220{
5d9310c4
SM
221 DISABLE_COPY_AND_ASSIGN (static_tracepoint_marker);
222
223 static_tracepoint_marker () = default;
224 static_tracepoint_marker (static_tracepoint_marker &&) = default;
225 static_tracepoint_marker &operator= (static_tracepoint_marker &&) = default;
226
227 struct gdbarch *gdbarch = NULL;
228 CORE_ADDR address = 0;
0fb4aa4b
PA
229
230 /* The string ID of the marker. */
5d9310c4 231 std::string str_id;
0fb4aa4b
PA
232
233 /* Extra target reported info associated with the marker. */
5d9310c4 234 std::string extra;
0fb4aa4b
PA
235};
236
dc673c81
YQ
237struct memrange
238{
1f45808e
PA
239 memrange (int type_, bfd_signed_vma start_, bfd_signed_vma end_)
240 : type (type_), start (start_), end (end_)
241 {}
242
243 memrange ()
244 {}
245
dc673c81
YQ
246 /* memrange_absolute for absolute memory range, else basereg
247 number. */
248 int type;
249 bfd_signed_vma start;
250 bfd_signed_vma end;
251};
252
1f45808e 253class collection_list
dc673c81 254{
1f45808e
PA
255public:
256 collection_list ();
1f45808e
PA
257
258 void add_wholly_collected (const char *print_name);
259
260 void append_exp (struct expression *exp);
261
833177a4
PA
262 /* Add AEXPR to the list, taking ownership. */
263 void add_aexpr (agent_expr_up aexpr);
264
4277c4b8
PFC
265 void add_remote_register (unsigned int regno);
266 void add_ax_registers (struct agent_expr *aexpr);
267 void add_local_register (struct gdbarch *gdbarch,
268 unsigned int regno,
269 CORE_ADDR scope);
19f1935d
PA
270 void add_memrange (struct gdbarch *gdbarch,
271 int type, bfd_signed_vma base,
4277c4b8 272 unsigned long len, CORE_ADDR scope);
1f45808e
PA
273 void collect_symbol (struct symbol *sym,
274 struct gdbarch *gdbarch,
275 long frame_regno, long frame_offset,
276 CORE_ADDR scope,
277 int trace_string);
278
279 void add_local_symbols (struct gdbarch *gdbarch, CORE_ADDR pc,
280 long frame_regno, long frame_offset, int type,
281 int trace_string);
282 void add_static_trace_data ();
283
284 void finish ();
285
b44ec619 286 std::vector<std::string> stringify ();
1f45808e
PA
287
288 const std::vector<std::string> &wholly_collected ()
289 { return m_wholly_collected; }
290
291 const std::vector<std::string> &computed ()
292 { return m_computed; }
293
294private:
dc673c81 295 /* room for up to 256 regs */
1f45808e
PA
296 unsigned char m_regs_mask[32];
297
298 std::vector<memrange> m_memranges;
dc673c81 299
6c73cd95 300 std::vector<agent_expr_up> m_aexprs;
dc673c81
YQ
301
302 /* True is the user requested a collection of "$_sdata", "static
303 tracepoint data". */
1f45808e 304 bool m_strace_data;
dc673c81
YQ
305
306 /* A set of names of wholly collected objects. */
1f45808e 307 std::vector<std::string> m_wholly_collected;
dc673c81 308 /* A set of computed expressions. */
1f45808e 309 std::vector<std::string> m_computed;
dc673c81
YQ
310};
311
5d9310c4
SM
312extern void
313 parse_static_tracepoint_marker_definition (const char *line, const char **pp,
314 static_tracepoint_marker *marker);
0fb4aa4b 315
d183932d 316/* A hook used to notify the UI of tracepoint operations. */
c906108c 317
98c5b216
TT
318extern void (*deprecated_trace_find_hook) (char *arg, int from_tty);
319extern void (*deprecated_trace_start_stop_hook) (int start, int from_tty);
c906108c 320
e6e4e701
PA
321/* Returns the current traceframe number. */
322extern int get_traceframe_number (void);
323
393fd4c3
YQ
324/* Returns the tracepoint number for current traceframe. */
325extern int get_tracepoint_number (void);
326
e6e4e701
PA
327/* Make the traceframe NUM be the current trace frame, all the way to
328 the target, and flushes all global state (register/frame caches,
329 etc.). */
330extern void set_current_traceframe (int num);
331
6f14adc5
SM
332struct scoped_restore_current_traceframe
333{
334 scoped_restore_current_traceframe ();
335
336 ~scoped_restore_current_traceframe ()
337 {
338 set_current_traceframe (m_traceframe_number);
339 }
340
341 DISABLE_COPY_AND_ASSIGN (scoped_restore_current_traceframe);
342
343private:
344
345 /* The traceframe we were inspecting. */
346 int m_traceframe_number;
347};
06cd862c 348
1042e4c0 349void free_actions (struct breakpoint *);
3065dfb6 350
92bc6a20 351extern const char *decode_agent_options (const char *exp, int *trace_string);
3065dfb6 352
1f45808e
PA
353extern void encode_actions (struct bp_location *tloc,
354 struct collection_list *tracepoint_list,
355 struct collection_list *stepping_list);
dc673c81
YQ
356
357extern void encode_actions_rsp (struct bp_location *tloc,
b44ec619
SM
358 std::vector<std::string> *tdp_actions,
359 std::vector<std::string> *stepping_actions);
5fbce5df 360
6f937416 361extern void validate_actionline (const char *, struct breakpoint *);
1773c82c 362extern void validate_trace_state_variable_name (const char *name);
c906108c 363
f61e138d 364extern struct trace_state_variable *find_trace_state_variable (const char *name);
dc673c81
YQ
365extern struct trace_state_variable *
366 find_trace_state_variable_by_number (int number);
367
40e1c229 368extern struct trace_state_variable *create_trace_state_variable (const char *name);
f61e138d 369
409873ef 370extern int encode_source_string (int num, ULONGEST addr,
a121b7c1 371 const char *srctype, const char *src,
409873ef
SS
372 char *buf, int buf_size);
373
256642e8 374extern void parse_trace_status (const char *line, struct trace_status *ts);
00bf0b85 375
256642e8 376extern void parse_tracepoint_status (const char *p, struct breakpoint *tp,
f196051f
SS
377 struct uploaded_tp *utp);
378
256642e8 379extern void parse_tracepoint_definition (const char *line,
3e43a32a 380 struct uploaded_tp **utpp);
256642e8 381extern void parse_tsv_definition (const char *line, struct uploaded_tsv **utsvp);
00bf0b85
SS
382
383extern struct uploaded_tp *get_uploaded_tp (int num, ULONGEST addr,
384 struct uploaded_tp **utpp);
7951c4eb
YQ
385extern void free_uploaded_tps (struct uploaded_tp **utpp);
386
393fd4c3
YQ
387extern struct uploaded_tsv *get_uploaded_tsv (int num,
388 struct uploaded_tsv **utsvp);
7951c4eb 389extern void free_uploaded_tsvs (struct uploaded_tsv **utsvp);
d9b3f62e 390extern struct tracepoint *create_tracepoint_from_upload (struct uploaded_tp *utp);
00bf0b85
SS
391extern void merge_uploaded_tracepoints (struct uploaded_tp **utpp);
392extern void merge_uploaded_trace_state_variables (struct uploaded_tsv **utsvp);
393
2f9d54cf
PA
394extern void query_if_trace_running (int from_tty);
395extern void disconnect_tracing (void);
aef525cb 396extern void trace_reset_local_state (void);
573cda03 397
cc3da688
YQ
398extern void check_trace_running (struct trace_status *);
399
0b39b52e
TT
400extern void start_tracing (const char *notes);
401extern void stop_tracing (const char *notes);
f224b49d
VP
402
403extern void trace_status_mi (int on_stop);
404
40e1c229 405extern void tvariables_info_1 (void);
8bf6485c 406extern void save_trace_state_variables (struct ui_file *fp);
40e1c229 407
2098b393
SM
408/* Enumeration of the kinds of traceframe searches that a target may
409 be able to perform. */
410
411enum trace_find_type
412{
413 tfind_number,
414 tfind_pc,
415 tfind_tp,
416 tfind_range,
417 tfind_outside,
418};
419
f197e0f1 420extern void tfind_1 (enum trace_find_type type, int num,
cc5925ad 421 CORE_ADDR addr1, CORE_ADDR addr2,
f197e0f1
VP
422 int from_tty);
423
3f43bc09
YQ
424extern void trace_save_tfile (const char *filename,
425 int target_does_save);
d0353e76
YQ
426extern void trace_save_ctf (const char *dirname,
427 int target_does_save);
011aacb0 428
2098b393 429extern traceframe_info_up parse_traceframe_info (const char *tframe_info);
b3b9301e 430
a79b1bc6 431extern int traceframe_available_memory (std::vector<mem_range> *result,
2a7498d8
PA
432 CORE_ADDR memaddr, ULONGEST len);
433
dc673c81
YQ
434extern struct traceframe_info *get_traceframe_info (void);
435
436extern struct bp_location *get_traceframe_location (int *stepping_frame_p);
437
d183932d 438#endif /* TRACEPOINT_H */
This page took 2.050278 seconds and 4 git commands to generate.