GDB (xrefs)
/tmp/gdb-8.1/gdb/tracepoint.h
Go to the documentation of this file.
1 /* Data structures associated with tracepoints in GDB.
2  Copyright (C) 1997-2018 Free Software Foundation, Inc.
3 
4  This file is part of GDB.
5 
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
8  the Free Software Foundation; either version 3 of the License, or
9  (at your option) any later version.
10 
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.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program. If not, see <http://www.gnu.org/licenses/>. */
18 
19 #if !defined (TRACEPOINT_H)
20 #define TRACEPOINT_H 1
21 
22 #include "breakpoint.h"
23 #include "memrange.h"
24 #include "gdb_vecs.h"
25 
26 #include <vector>
27 #include <string>
28 
29 /* An object describing the contents of a traceframe. */
30 
32 {
33  /* Collected memory. */
34  std::vector<mem_range> memory;
35 
36  /* Collected trace state variables. */
37  std::vector<int> tvars;
38 };
39 
40 typedef std::unique_ptr<traceframe_info> traceframe_info_up;
41 
42 /* A trace state variable is a value managed by a target being
43  traced. A trace state variable (or tsv for short) can be accessed
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
46  collected. Effectively the variables are scratch space for
47  tracepoints. */
48 
50  {
51  /* The variable's name. The user has to prefix with a dollar sign,
52  but we don't store that internally. */
53  const char *name;
54 
55  /* An id number assigned by GDB, and transmitted to targets. */
56  int number;
57 
58  /* The initial value of a variable is a 64-bit signed integer. */
60 
61  /* 1 if the value is known, else 0. The value is known during a
62  trace run, or in tfind mode if the variable was collected into
63  the current trace frame. */
65 
66  /* The value of a variable is a 64-bit signed integer. */
68 
69  /* This is true for variables that are predefined and built into
70  the target. */
71  int builtin;
72  };
73 
74 /* The trace status encompasses various info about the general state
75  of the tracing run. */
76 
78  {
86  };
87 
89 {
90  /* If the status is coming from a file rather than a live target,
91  this points at the file's filename. Otherwise, this is NULL. */
92  const char *filename;
93 
94  /* This is true if the value of the running field is known. */
96 
97  /* This is true when the trace experiment is actually running. */
98  int running;
99 
101 
102  /* If stop_reason is tracepoint_passcount or tracepoint_error, this
103  is the (on-target) number of the tracepoint which caused the
104  stop. */
106 
107  /* If stop_reason is tstop_command or tracepoint_error, this is an
108  arbitrary string that may describe the reason for the stop in
109  more detail. */
110 
111  char *stop_desc;
112 
113  /* Number of traceframes currently in the buffer. */
114 
116 
117  /* Number of traceframes created since start of run. */
118 
120 
121  /* Total size of the target's trace buffer. */
122 
124 
125  /* Unused bytes left in the target's trace buffer. */
126 
128 
129  /* 1 if the target will continue tracing after disconnection, else
130  0. If the target does not report a value, assume 0. */
131 
133 
134  /* 1 if the target is using a circular trace buffer, else 0. If the
135  target does not report a value, assume 0. */
136 
138 
139  /* The "name" of the person running the trace. This is an
140  arbitrary string. */
141 
142  char *user_name;
143 
144  /* "Notes" about the trace. This is an arbitrary string not
145  interpreted by GDBserver in any special way. */
146 
147  char *notes;
148 
149  /* The calendar times at which the trace run started and stopped,
150  both expressed in microseconds of Unix time. */
151 
154 };
155 
156 struct trace_status *current_trace_status (void);
157 
158 extern char *default_collect;
159 
160 extern int trace_regblock_size;
161 
162 extern const char *stop_reason_names[];
163 
164 /* Struct to collect random info about tracepoints on the target. */
165 
167 {
168  int number;
169  enum bptype type;
171  int enabled;
172  int step;
173  int pass;
175 
176  /* String that is the encoded form of the tracepoint's condition. */
177  char *cond;
178 
179  /* Vectors of strings that are the encoded forms of a tracepoint's
180  actions. */
181  VEC(char_ptr) *actions;
182  VEC(char_ptr) *step_actions;
183 
184  /* The original string defining the location of the tracepoint. */
185  char *at_string;
186 
187  /* The original string defining the tracepoint's condition. */
188  char *cond_string;
189 
190  /* List of original strings defining the tracepoint's actions. */
191  VEC(char_ptr) *cmd_strings;
192 
193  /* The tracepoint's current hit count. */
195 
196  /* The tracepoint's current traceframe usage. */
198 
199  struct uploaded_tp *next;
200 };
201 
202 /* Struct recording info about trace state variables on the target. */
203 
205 {
206  const char *name;
207  int number;
209  int builtin;
211 };
212 
213 /* Struct recording info about a target static tracepoint marker. */
214 
216 {
217  struct gdbarch *gdbarch;
219 
220  /* The string ID of the marker. */
221  char *str_id;
222 
223  /* Extra target reported info associated with the marker. */
224  char *extra;
225 };
226 
227 struct memrange
228 {
229  memrange (int type_, bfd_signed_vma start_, bfd_signed_vma end_)
230  : type (type_), start (start_), end (end_)
231  {}
232 
234  {}
235 
236  /* memrange_absolute for absolute memory range, else basereg
237  number. */
238  int type;
239  bfd_signed_vma start;
240  bfd_signed_vma end;
241 };
242 
244 {
245 public:
246  collection_list ();
247 
248  void add_wholly_collected (const char *print_name);
249 
250  void append_exp (struct expression *exp);
251 
252  /* Add AEXPR to the list, taking ownership. */
253  void add_aexpr (agent_expr_up aexpr);
254 
255  void add_register (unsigned int regno);
256  void add_memrange (struct gdbarch *gdbarch,
257  int type, bfd_signed_vma base,
258  unsigned long len);
259  void collect_symbol (struct symbol *sym,
260  struct gdbarch *gdbarch,
261  long frame_regno, long frame_offset,
262  CORE_ADDR scope,
263  int trace_string);
264 
265  void add_local_symbols (struct gdbarch *gdbarch, CORE_ADDR pc,
266  long frame_regno, long frame_offset, int type,
267  int trace_string);
268  void add_static_trace_data ();
269 
270  void finish ();
271 
272  std::vector<std::string> stringify ();
273 
274  const std::vector<std::string> &wholly_collected ()
275  { return m_wholly_collected; }
276 
277  const std::vector<std::string> &computed ()
278  { return m_computed; }
279 
280 private:
281  /* room for up to 256 regs */
282  unsigned char m_regs_mask[32];
283 
284  std::vector<memrange> m_memranges;
285 
286  std::vector<agent_expr_up> m_aexprs;
287 
288  /* True is the user requested a collection of "$_sdata", "static
289  tracepoint data". */
291 
292  /* A set of names of wholly collected objects. */
293  std::vector<std::string> m_wholly_collected;
294  /* A set of computed expressions. */
295  std::vector<std::string> m_computed;
296 };
297 
299  (const char *line, const char **pp,
300  struct static_tracepoint_marker *marker);
302 extern void free_current_marker (void *arg);
303 
304 /* A hook used to notify the UI of tracepoint operations. */
305 
306 extern void (*deprecated_trace_find_hook) (char *arg, int from_tty);
307 extern void (*deprecated_trace_start_stop_hook) (int start, int from_tty);
308 
309 /* Returns the current traceframe number. */
310 extern int get_traceframe_number (void);
311 
312 /* Returns the tracepoint number for current traceframe. */
313 extern int get_tracepoint_number (void);
314 
315 /* Make the traceframe NUM be the current trace frame, all the way to
316  the target, and flushes all global state (register/frame caches,
317  etc.). */
318 extern void set_current_traceframe (int num);
319 
321 
322 void free_actions (struct breakpoint *);
323 
324 extern const char *decode_agent_options (const char *exp, int *trace_string);
325 
326 extern void encode_actions (struct bp_location *tloc,
327  struct collection_list *tracepoint_list,
328  struct collection_list *stepping_list);
329 
330 extern void encode_actions_rsp (struct bp_location *tloc,
331  std::vector<std::string> *tdp_actions,
332  std::vector<std::string> *stepping_actions);
333 
334 extern void validate_actionline (const char *, struct breakpoint *);
335 extern void validate_trace_state_variable_name (const char *name);
336 
337 extern struct trace_state_variable *find_trace_state_variable (const char *name);
338 extern struct trace_state_variable *
340 
341 extern struct trace_state_variable *create_trace_state_variable (const char *name);
342 
343 extern int encode_source_string (int num, ULONGEST addr,
344  const char *srctype, const char *src,
345  char *buf, int buf_size);
346 
347 extern void parse_trace_status (const char *line, struct trace_status *ts);
348 
349 extern void parse_tracepoint_status (const char *p, struct breakpoint *tp,
350  struct uploaded_tp *utp);
351 
352 extern void parse_tracepoint_definition (const char *line,
353  struct uploaded_tp **utpp);
354 extern void parse_tsv_definition (const char *line, struct uploaded_tsv **utsvp);
355 
356 extern struct uploaded_tp *get_uploaded_tp (int num, ULONGEST addr,
357  struct uploaded_tp **utpp);
358 extern void free_uploaded_tps (struct uploaded_tp **utpp);
359 
360 extern struct uploaded_tsv *get_uploaded_tsv (int num,
361  struct uploaded_tsv **utsvp);
362 extern void free_uploaded_tsvs (struct uploaded_tsv **utsvp);
363 extern struct tracepoint *create_tracepoint_from_upload (struct uploaded_tp *utp);
364 extern void merge_uploaded_tracepoints (struct uploaded_tp **utpp);
365 extern void merge_uploaded_trace_state_variables (struct uploaded_tsv **utsvp);
366 
367 extern void query_if_trace_running (int from_tty);
368 extern void disconnect_tracing (void);
369 extern void trace_reset_local_state (void);
370 
371 extern void check_trace_running (struct trace_status *);
372 
373 extern void start_tracing (const char *notes);
374 extern void stop_tracing (const char *notes);
375 
376 extern void trace_status_mi (int on_stop);
377 
378 extern void tvariables_info_1 (void);
379 extern void save_trace_state_variables (struct ui_file *fp);
380 
381 /* Enumeration of the kinds of traceframe searches that a target may
382  be able to perform. */
383 
385 {
391 };
392 
393 extern void tfind_1 (enum trace_find_type type, int num,
394  CORE_ADDR addr1, CORE_ADDR addr2,
395  int from_tty);
396 
397 extern void trace_save_tfile (const char *filename,
398  int target_does_save);
399 extern void trace_save_ctf (const char *dirname,
400  int target_does_save);
401 
402 extern traceframe_info_up parse_traceframe_info (const char *tframe_info);
403 
404 extern int traceframe_available_memory (std::vector<mem_range> *result,
405  CORE_ADDR memaddr, ULONGEST len);
406 
407 extern struct traceframe_info *get_traceframe_info (void);
408 
409 extern struct bp_location *get_traceframe_location (int *stepping_frame_p);
410 
411 #endif /* TRACEPOINT_H */
int type
Definition: tracepoint.h:238
void release_static_tracepoint_marker(struct static_tracepoint_marker *)
Definition: tracepoint.c:3736
std::vector< std::string > m_wholly_collected
Definition: tracepoint.h:293
std::vector< mem_range > memory
Definition: tracepoint.h:34
VEC(char_ptr) *actions
std::unique_ptr< agent_expr > agent_expr_up
Definition: ax.h:159
bfd_vma CORE_ADDR
Definition: common-types.h:41
LONGEST initial_value
Definition: tracepoint.h:208
void add_aexpr(agent_expr_up aexpr)
Definition: tracepoint.c:1513
std::vector< int > tvars
Definition: tracepoint.h:37
int circular_buffer
Definition: tracepoint.h:137
void set_current_traceframe(int num)
Definition: tracepoint.c:2991
void tvariables_info_1(void)
Definition: tracepoint.c:438
void parse_tsv_definition(const char *line, struct uploaded_tsv **utsvp)
Definition: tracepoint.c:3651
const std::vector< std::string > & computed()
Definition: tracepoint.h:277
struct gdbarch * gdbarch
Definition: tracepoint.h:217
void free_current_marker(void *arg)
Definition: tracepoint.c:3678
int traceframes_created
Definition: tracepoint.h:119
void check_trace_running(struct trace_status *)
Definition: tracepoint.c:2241
const std::vector< std::string > & wholly_collected()
Definition: tracepoint.h:274
void encode_actions(struct bp_location *tloc, struct collection_list *tracepoint_list, struct collection_list *stepping_list)
Definition: tracepoint.c:1477
int get_traceframe_number(void)
Definition: tracepoint.c:2976
void parse_trace_status(const char *line, struct trace_status *ts)
Definition: tracepoint.c:3352
ULONGEST traceframe_usage
Definition: tracepoint.h:197
char * char_ptr
Definition: gdb_vecs.h:25
void stop_tracing(const char *notes)
Definition: tracepoint.c:1730
struct trace_state_variable * find_trace_state_variable_by_number(int number)
Definition: tracepoint.c:297
int get_tracepoint_number(void)
Definition: tracepoint.c:2982
LONGEST stop_time
Definition: tracepoint.h:153
void merge_uploaded_tracepoints(struct uploaded_tp **utpp)
Definition: tracepoint.c:3176
trace_find_type
Definition: tracepoint.h:384
void trace_save_tfile(const char *filename, int target_does_save)
Definition: tracefile.c:358
char * at_string
Definition: tracepoint.h:185
void validate_trace_state_variable_name(const char *name)
Definition: tracepoint.c:333
void query_if_trace_running(int from_tty)
Definition: tracepoint.c:2053
void merge_uploaded_trace_state_variables(struct uploaded_tsv **utsvp)
Definition: tracepoint.c:3299
const char *const name
Definition: aarch64-tdep.c:76
struct trace_state_variable * create_trace_state_variable(const char *name)
Definition: tracepoint.c:268
enum bptype type
Definition: tracepoint.h:169
void parse_tracepoint_definition(const char *line, struct uploaded_tp **utpp)
Definition: tracepoint.c:3535
std::vector< std::string > m_computed
Definition: tracepoint.h:295
int trace_regblock_size
char * cond_string
Definition: tracepoint.h:188
struct uploaded_tsv * next
Definition: tracepoint.h:210
const char * name
Definition: tracepoint.h:206
void(* deprecated_trace_start_stop_hook)(int start, int from_tty)
Definition: tracepoint.c:83
void disconnect_tracing(void)
Definition: tracepoint.c:2094
bfd_signed_vma start
Definition: tracepoint.h:239
void parse_tracepoint_status(const char *p, struct breakpoint *tp, struct uploaded_tp *utp)
Definition: tracepoint.c:3512
void add_static_trace_data()
Definition: tracepoint.c:1104
void trace_status_mi(int on_stop)
Definition: tracepoint.c:1939
void append_exp(struct expression *exp)
Definition: tracepoint.c:1231
struct bp_location * get_traceframe_location(int *stepping_frame_p)
Definition: tracepoint.c:2771
struct uploaded_tp * next
Definition: tracepoint.h:199
enum trace_stop_reason stop_reason
Definition: tracepoint.h:100
memrange(int type_, bfd_signed_vma start_, bfd_signed_vma end_)
Definition: tracepoint.h:229
void collect_symbol(struct symbol *sym, struct gdbarch *gdbarch, long frame_regno, long frame_offset, CORE_ADDR scope, int trace_string)
Definition: tracepoint.c:872
void tfind_1(enum trace_find_type type, int num, CORE_ADDR addr1, CORE_ADDR addr2, int from_tty)
Definition: tracepoint.c:2105
Definition: gdbtypes.h:749
const char * filename
Definition: tracepoint.h:92
char * default_collect
unsigned char m_regs_mask[32]
Definition: tracepoint.h:282
char * user_name
Definition: tracepoint.h:142
void validate_actionline(const char *, struct breakpoint *)
Definition: tracepoint.c:643
void free_actions(struct breakpoint *)
void parse_static_tracepoint_marker_definition(const char *line, const char **pp, struct static_tracepoint_marker *marker)
Definition: tracepoint.c:3698
int stopping_tracepoint
Definition: tracepoint.h:105
void add_wholly_collected(const char *print_name)
Definition: tracepoint.c:1050
std::vector< memrange > m_memranges
Definition: tracepoint.h:284
const char * stop_reason_names[]
bptype
Definition: breakpoint.h:67
std::vector< std::string > stringify()
Definition: tracepoint.c:1122
struct trace_state_variable * find_trace_state_variable(const char *name)
Definition: tracepoint.c:281
int running_known
Definition: tracepoint.h:95
void save_trace_state_variables(struct ui_file *fp)
Definition: tracepoint.c:503
char * stop_desc
Definition: tracepoint.h:111
void trace_reset_local_state(void)
Definition: tracepoint.c:1563
int traceframe_count
Definition: tracepoint.h:115
char * notes
Definition: tracepoint.h:147
std::unique_ptr< traceframe_info > traceframe_info_up
Definition: tracepoint.h:40
struct cleanup * make_cleanup_restore_current_traceframe(void)
Definition: tracepoint.c:3042
const char * decode_agent_options(const char *exp, int *trace_string)
Definition: tracepoint.c:555
char * cond
Definition: tracepoint.h:177
void trace_save_ctf(const char *dirname, int target_does_save)
Definition: tracefile.c:372
struct trace_status * current_trace_status(void)
Definition: tracepoint.c:189
int disconnected_tracing
Definition: tracepoint.h:132
void encode_actions_rsp(struct bp_location *tloc, std::vector< std::string > *tdp_actions, std::vector< std::string > *stepping_actions)
Definition: tracepoint.c:1500
void start_tracing(const char *notes)
Definition: tracepoint.c:1572
ULONGEST addr
Definition: tracepoint.h:170
bfd_signed_vma end
Definition: tracepoint.h:240
trace_stop_reason
Definition: tracepoint.h:77
struct traceframe_info * get_traceframe_info(void)
Definition: tracepoint.c:4042
struct uploaded_tsv * get_uploaded_tsv(int num, struct uploaded_tsv **utsvp)
Definition: tracepoint.c:3094
void add_memrange(struct gdbarch *gdbarch, int type, bfd_signed_vma base, unsigned long len)
Definition: tracepoint.c:853
unsigned long long ULONGEST
Definition: common-types.h:53
struct tracepoint * create_tracepoint_from_upload(struct uploaded_tp *utp)
Definition: breakpoint.c:14792
void add_register(unsigned int regno)
Definition: tracepoint.c:840
int traceframe_available_memory(std::vector< mem_range > *result, CORE_ADDR memaddr, ULONGEST len)
Definition: tracepoint.c:4057
traceframe_info_up parse_traceframe_info(const char *tframe_info)
Definition: tracepoint.c:4023
void free_uploaded_tsvs(struct uploaded_tsv **utsvp)
Definition: tracepoint.c:3111
void add_local_symbols(struct gdbarch *gdbarch, CORE_ADDR pc, long frame_regno, long frame_offset, int type, int trace_string)
Definition: tracepoint.c:1058
struct uploaded_tp * get_uploaded_tp(int num, ULONGEST addr, struct uploaded_tp **utpp)
Definition: tracepoint.c:3057
void free_uploaded_tps(struct uploaded_tp **utpp)
Definition: tracepoint.c:3078
void(* deprecated_trace_find_hook)(char *arg, int from_tty)
Definition: tracepoint.c:82
std::vector< agent_expr_up > m_aexprs
Definition: tracepoint.h:286
long long LONGEST
Definition: common-types.h:52
int encode_source_string(int num, ULONGEST addr, const char *srctype, const char *src, char *buf, int buf_size)
Definition: tracepoint.c:2875
const char * name
Definition: tracepoint.h:53
LONGEST start_time
Definition: tracepoint.h:152