]> Git Repo - binutils.git/blob - gdb/tracepoint.c
Ensure class_alias is only used for user-defined aliases.
[binutils.git] / gdb / tracepoint.c
1 /* Tracing functionality for remote targets in custom GDB protocol
2
3    Copyright (C) 1997-2020 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 #include "defs.h"
21 #include "arch-utils.h"
22 #include "symtab.h"
23 #include "frame.h"
24 #include "gdbtypes.h"
25 #include "expression.h"
26 #include "gdbcmd.h"
27 #include "value.h"
28 #include "target.h"
29 #include "target-dcache.h"
30 #include "language.h"
31 #include "inferior.h"
32 #include "breakpoint.h"
33 #include "tracepoint.h"
34 #include "linespec.h"
35 #include "regcache.h"
36 #include "completer.h"
37 #include "block.h"
38 #include "dictionary.h"
39 #include "observable.h"
40 #include "user-regs.h"
41 #include "valprint.h"
42 #include "gdbcore.h"
43 #include "objfiles.h"
44 #include "filenames.h"
45 #include "gdbthread.h"
46 #include "stack.h"
47 #include "remote.h"
48 #include "source.h"
49 #include "ax.h"
50 #include "ax-gdb.h"
51 #include "memrange.h"
52 #include "cli/cli-utils.h"
53 #include "probe.h"
54 #include "gdbsupport/filestuff.h"
55 #include "gdbsupport/rsp-low.h"
56 #include "tracefile.h"
57 #include "location.h"
58 #include <algorithm>
59 #include "cli/cli-style.h"
60
61 #include <unistd.h>
62
63 /* Maximum length of an agent aexpression.
64    This accounts for the fact that packets are limited to 400 bytes
65    (which includes everything -- including the checksum), and assumes
66    the worst case of maximum length for each of the pieces of a
67    continuation packet.
68
69    NOTE: expressions get mem2hex'ed otherwise this would be twice as
70    large.  (400 - 31)/2 == 184 */
71 #define MAX_AGENT_EXPR_LEN      184
72
73 /* A hook used to notify the UI of tracepoint operations.  */
74
75 void (*deprecated_trace_find_hook) (char *arg, int from_tty);
76 void (*deprecated_trace_start_stop_hook) (int start, int from_tty);
77
78 /* 
79    Tracepoint.c:
80
81    This module defines the following debugger commands:
82    trace            : set a tracepoint on a function, line, or address.
83    info trace       : list all debugger-defined tracepoints.
84    delete trace     : delete one or more tracepoints.
85    enable trace     : enable one or more tracepoints.
86    disable trace    : disable one or more tracepoints.
87    actions          : specify actions to be taken at a tracepoint.
88    passcount        : specify a pass count for a tracepoint.
89    tstart           : start a trace experiment.
90    tstop            : stop a trace experiment.
91    tstatus          : query the status of a trace experiment.
92    tfind            : find a trace frame in the trace buffer.
93    tdump            : print everything collected at the current tracepoint.
94    save-tracepoints : write tracepoint setup into a file.
95
96    This module defines the following user-visible debugger variables:
97    $trace_frame : sequence number of trace frame currently being debugged.
98    $trace_line  : source line of trace frame currently being debugged.
99    $trace_file  : source file of trace frame currently being debugged.
100    $tracepoint  : tracepoint number of trace frame currently being debugged.
101  */
102
103
104 /* ======= Important global variables: ======= */
105
106 /* The list of all trace state variables.  We don't retain pointers to
107    any of these for any reason - API is by name or number only - so it
108    works to have a vector of objects.  */
109
110 static std::vector<trace_state_variable> tvariables;
111
112 /* The next integer to assign to a variable.  */
113
114 static int next_tsv_number = 1;
115
116 /* Number of last traceframe collected.  */
117 static int traceframe_number;
118
119 /* Tracepoint for last traceframe collected.  */
120 static int tracepoint_number;
121
122 /* The traceframe info of the current traceframe.  NULL if we haven't
123    yet attempted to fetch it, or if the target does not support
124    fetching this object, or if we're not inspecting a traceframe
125    presently.  */
126 static traceframe_info_up current_traceframe_info;
127
128 /* Tracing command lists.  */
129 static struct cmd_list_element *tfindlist;
130
131 /* List of expressions to collect by default at each tracepoint hit.  */
132 char *default_collect;
133
134 static bool disconnected_tracing;
135
136 /* This variable controls whether we ask the target for a linear or
137    circular trace buffer.  */
138
139 static bool circular_trace_buffer;
140
141 /* This variable is the requested trace buffer size, or -1 to indicate
142    that we don't care and leave it up to the target to set a size.  */
143
144 static int trace_buffer_size = -1;
145
146 /* Textual notes applying to the current and/or future trace runs.  */
147
148 char *trace_user = NULL;
149
150 /* Textual notes applying to the current and/or future trace runs.  */
151
152 char *trace_notes = NULL;
153
154 /* Textual notes applying to the stopping of a trace.  */
155
156 char *trace_stop_notes = NULL;
157
158 /* support routines */
159
160 struct collection_list;
161 static char *mem2hex (gdb_byte *, char *, int);
162
163 static counted_command_line all_tracepoint_actions (struct breakpoint *);
164
165 static struct trace_status trace_status;
166
167 const char *stop_reason_names[] = {
168   "tunknown",
169   "tnotrun",
170   "tstop",
171   "tfull",
172   "tdisconnected",
173   "tpasscount",
174   "terror"
175 };
176
177 struct trace_status *
178 current_trace_status (void)
179 {
180   return &trace_status;
181 }
182
183 /* Free and clear the traceframe info cache of the current
184    traceframe.  */
185
186 static void
187 clear_traceframe_info (void)
188 {
189   current_traceframe_info = NULL;
190 }
191
192 /* Set traceframe number to NUM.  */
193 static void
194 set_traceframe_num (int num)
195 {
196   traceframe_number = num;
197   set_internalvar_integer (lookup_internalvar ("trace_frame"), num);
198 }
199
200 /* Set tracepoint number to NUM.  */
201 static void
202 set_tracepoint_num (int num)
203 {
204   tracepoint_number = num;
205   set_internalvar_integer (lookup_internalvar ("tracepoint"), num);
206 }
207
208 /* Set externally visible debug variables for querying/printing
209    the traceframe context (line, function, file).  */
210
211 static void
212 set_traceframe_context (struct frame_info *trace_frame)
213 {
214   CORE_ADDR trace_pc;
215   struct symbol *traceframe_fun;
216   symtab_and_line traceframe_sal;
217
218   /* Save as globals for internal use.  */
219   if (trace_frame != NULL
220       && get_frame_pc_if_available (trace_frame, &trace_pc))
221     {
222       traceframe_sal = find_pc_line (trace_pc, 0);
223       traceframe_fun = find_pc_function (trace_pc);
224
225       /* Save linenumber as "$trace_line", a debugger variable visible to
226          users.  */
227       set_internalvar_integer (lookup_internalvar ("trace_line"),
228                                traceframe_sal.line);
229     }
230   else
231     {
232       traceframe_fun = NULL;
233       set_internalvar_integer (lookup_internalvar ("trace_line"), -1);
234     }
235
236   /* Save func name as "$trace_func", a debugger variable visible to
237      users.  */
238   if (traceframe_fun == NULL
239       || traceframe_fun->linkage_name () == NULL)
240     clear_internalvar (lookup_internalvar ("trace_func"));
241   else
242     set_internalvar_string (lookup_internalvar ("trace_func"),
243                             traceframe_fun->linkage_name ());
244
245   /* Save file name as "$trace_file", a debugger variable visible to
246      users.  */
247   if (traceframe_sal.symtab == NULL)
248     clear_internalvar (lookup_internalvar ("trace_file"));
249   else
250     set_internalvar_string (lookup_internalvar ("trace_file"),
251                         symtab_to_filename_for_display (traceframe_sal.symtab));
252 }
253
254 /* Create a new trace state variable with the given name.  */
255
256 struct trace_state_variable *
257 create_trace_state_variable (const char *name)
258 {
259   tvariables.emplace_back (name, next_tsv_number++);
260   return &tvariables.back ();
261 }
262
263 /* Look for a trace state variable of the given name.  */
264
265 struct trace_state_variable *
266 find_trace_state_variable (const char *name)
267 {
268   for (trace_state_variable &tsv : tvariables)
269     if (tsv.name == name)
270       return &tsv;
271
272   return NULL;
273 }
274
275 /* Look for a trace state variable of the given number.  Return NULL if
276    not found.  */
277
278 struct trace_state_variable *
279 find_trace_state_variable_by_number (int number)
280 {
281   for (trace_state_variable &tsv : tvariables)
282     if (tsv.number == number)
283       return &tsv;
284
285   return NULL;
286 }
287
288 static void
289 delete_trace_state_variable (const char *name)
290 {
291   for (auto it = tvariables.begin (); it != tvariables.end (); it++)
292     if (it->name == name)
293       {
294         gdb::observers::tsv_deleted.notify (&*it);
295         tvariables.erase (it);
296         return;
297       }
298
299   warning (_("No trace variable named \"$%s\", not deleting"), name);
300 }
301
302 /* Throws an error if NAME is not valid syntax for a trace state
303    variable's name.  */
304
305 void
306 validate_trace_state_variable_name (const char *name)
307 {
308   const char *p;
309
310   if (*name == '\0')
311     error (_("Must supply a non-empty variable name"));
312
313   /* All digits in the name is reserved for value history
314      references.  */
315   for (p = name; isdigit (*p); p++)
316     ;
317   if (*p == '\0')
318     error (_("$%s is not a valid trace state variable name"), name);
319
320   for (p = name; isalnum (*p) || *p == '_'; p++)
321     ;
322   if (*p != '\0')
323     error (_("$%s is not a valid trace state variable name"), name);
324 }
325
326 /* The 'tvariable' command collects a name and optional expression to
327    evaluate into an initial value.  */
328
329 static void
330 trace_variable_command (const char *args, int from_tty)
331 {
332   LONGEST initval = 0;
333   struct trace_state_variable *tsv;
334   const char *name_start, *p;
335
336   if (!args || !*args)
337     error_no_arg (_("Syntax is $NAME [ = EXPR ]"));
338
339   /* Only allow two syntaxes; "$name" and "$name=value".  */
340   p = skip_spaces (args);
341
342   if (*p++ != '$')
343     error (_("Name of trace variable should start with '$'"));
344
345   name_start = p;
346   while (isalnum (*p) || *p == '_')
347     p++;
348   std::string name (name_start, p - name_start);
349
350   p = skip_spaces (p);
351   if (*p != '=' && *p != '\0')
352     error (_("Syntax must be $NAME [ = EXPR ]"));
353
354   validate_trace_state_variable_name (name.c_str ());
355
356   if (*p == '=')
357     initval = value_as_long (parse_and_eval (++p));
358
359   /* If the variable already exists, just change its initial value.  */
360   tsv = find_trace_state_variable (name.c_str ());
361   if (tsv)
362     {
363       if (tsv->initial_value != initval)
364         {
365           tsv->initial_value = initval;
366           gdb::observers::tsv_modified.notify (tsv);
367         }
368       printf_filtered (_("Trace state variable $%s "
369                          "now has initial value %s.\n"),
370                        tsv->name.c_str (), plongest (tsv->initial_value));
371       return;
372     }
373
374   /* Create a new variable.  */
375   tsv = create_trace_state_variable (name.c_str ());
376   tsv->initial_value = initval;
377
378   gdb::observers::tsv_created.notify (tsv);
379
380   printf_filtered (_("Trace state variable $%s "
381                      "created, with initial value %s.\n"),
382                    tsv->name.c_str (), plongest (tsv->initial_value));
383 }
384
385 static void
386 delete_trace_variable_command (const char *args, int from_tty)
387 {
388   if (args == NULL)
389     {
390       if (query (_("Delete all trace state variables? ")))
391         tvariables.clear ();
392       dont_repeat ();
393       gdb::observers::tsv_deleted.notify (NULL);
394       return;
395     }
396
397   gdb_argv argv (args);
398
399   for (char *arg : argv)
400     {
401       if (*arg == '$')
402         delete_trace_state_variable (arg + 1);
403       else
404         warning (_("Name \"%s\" not prefixed with '$', ignoring"), arg);
405     }
406
407   dont_repeat ();
408 }
409
410 void
411 tvariables_info_1 (void)
412 {
413   struct ui_out *uiout = current_uiout;
414
415   /* Try to acquire values from the target.  */
416   for (trace_state_variable &tsv : tvariables)
417     tsv.value_known
418       = target_get_trace_state_variable_value (tsv.number, &tsv.value);
419
420   {
421     ui_out_emit_table table_emitter (uiout, 3, tvariables.size (),
422                                      "trace-variables");
423     uiout->table_header (15, ui_left, "name", "Name");
424     uiout->table_header (11, ui_left, "initial", "Initial");
425     uiout->table_header (11, ui_left, "current", "Current");
426
427     uiout->table_body ();
428
429     for (const trace_state_variable &tsv : tvariables)
430       {
431         const char *c;
432
433         ui_out_emit_tuple tuple_emitter (uiout, "variable");
434
435         uiout->field_string ("name", std::string ("$") + tsv.name);
436         uiout->field_string ("initial", plongest (tsv.initial_value));
437
438         ui_file_style style;
439         if (tsv.value_known)
440           c = plongest (tsv.value);
441         else if (uiout->is_mi_like_p ())
442           /* For MI, we prefer not to use magic string constants, but rather
443              omit the field completely.  The difference between unknown and
444              undefined does not seem important enough to represent.  */
445           c = NULL;
446         else if (current_trace_status ()->running || traceframe_number >= 0)
447           {
448             /* The value is/was defined, but we don't have it.  */
449             c = "<unknown>";
450             style = metadata_style.style ();
451           }
452         else
453           {
454             /* It is not meaningful to ask about the value.  */
455             c = "<undefined>";
456             style = metadata_style.style ();
457           }
458         if (c)
459           uiout->field_string ("current", c, style);
460         uiout->text ("\n");
461       }
462   }
463
464   if (tvariables.empty ())
465     uiout->text (_("No trace state variables.\n"));
466 }
467
468 /* List all the trace state variables.  */
469
470 static void
471 info_tvariables_command (const char *args, int from_tty)
472 {
473   tvariables_info_1 ();
474 }
475
476 /* Stash definitions of tsvs into the given file.  */
477
478 void
479 save_trace_state_variables (struct ui_file *fp)
480 {
481   for (const trace_state_variable &tsv : tvariables)
482     {
483       fprintf_unfiltered (fp, "tvariable $%s", tsv.name.c_str ());
484       if (tsv.initial_value)
485         fprintf_unfiltered (fp, " = %s", plongest (tsv.initial_value));
486       fprintf_unfiltered (fp, "\n");
487     }
488 }
489
490 /* ACTIONS functions: */
491
492 /* The three functions:
493    collect_pseudocommand, 
494    while_stepping_pseudocommand, and 
495    end_actions_pseudocommand
496    are placeholders for "commands" that are actually ONLY to be used
497    within a tracepoint action list.  If the actual function is ever called,
498    it means that somebody issued the "command" at the top level,
499    which is always an error.  */
500
501 static void
502 end_actions_pseudocommand (const char *args, int from_tty)
503 {
504   error (_("This command cannot be used at the top level."));
505 }
506
507 static void
508 while_stepping_pseudocommand (const char *args, int from_tty)
509 {
510   error (_("This command can only be used in a tracepoint actions list."));
511 }
512
513 static void
514 collect_pseudocommand (const char *args, int from_tty)
515 {
516   error (_("This command can only be used in a tracepoint actions list."));
517 }
518
519 static void
520 teval_pseudocommand (const char *args, int from_tty)
521 {
522   error (_("This command can only be used in a tracepoint actions list."));
523 }
524
525 /* Parse any collection options, such as /s for strings.  */
526
527 const char *
528 decode_agent_options (const char *exp, int *trace_string)
529 {
530   struct value_print_options opts;
531
532   *trace_string = 0;
533
534   if (*exp != '/')
535     return exp;
536
537   /* Call this to borrow the print elements default for collection
538      size.  */
539   get_user_print_options (&opts);
540
541   exp++;
542   if (*exp == 's')
543     {
544       if (target_supports_string_tracing ())
545         {
546           /* Allow an optional decimal number giving an explicit maximum
547              string length, defaulting it to the "print elements" value;
548              so "collect/s80 mystr" gets at most 80 bytes of string.  */
549           *trace_string = opts.print_max;
550           exp++;
551           if (*exp >= '0' && *exp <= '9')
552             *trace_string = atoi (exp);
553           while (*exp >= '0' && *exp <= '9')
554             exp++;
555         }
556       else
557         error (_("Target does not support \"/s\" option for string tracing."));
558     }
559   else
560     error (_("Undefined collection format \"%c\"."), *exp);
561
562   exp = skip_spaces (exp);
563
564   return exp;
565 }
566
567 /* Enter a list of actions for a tracepoint.  */
568 static void
569 actions_command (const char *args, int from_tty)
570 {
571   struct tracepoint *t;
572
573   t = get_tracepoint_by_number (&args, NULL);
574   if (t)
575     {
576       std::string tmpbuf =
577         string_printf ("Enter actions for tracepoint %d, one per line.",
578                        t->number);
579
580       counted_command_line l = read_command_lines (tmpbuf.c_str (),
581                                                    from_tty, 1,
582                                                    [=] (const char *line)
583                                                      {
584                                                        validate_actionline (line, t);
585                                                      });
586       breakpoint_set_commands (t, std::move (l));
587     }
588   /* else just return */
589 }
590
591 /* Report the results of checking the agent expression, as errors or
592    internal errors.  */
593
594 static void
595 report_agent_reqs_errors (struct agent_expr *aexpr)
596 {
597   /* All of the "flaws" are serious bytecode generation issues that
598      should never occur.  */
599   if (aexpr->flaw != agent_flaw_none)
600     internal_error (__FILE__, __LINE__, _("expression is malformed"));
601
602   /* If analysis shows a stack underflow, GDB must have done something
603      badly wrong in its bytecode generation.  */
604   if (aexpr->min_height < 0)
605     internal_error (__FILE__, __LINE__,
606                     _("expression has min height < 0"));
607
608   /* Issue this error if the stack is predicted to get too deep.  The
609      limit is rather arbitrary; a better scheme might be for the
610      target to report how much stack it will have available.  The
611      depth roughly corresponds to parenthesization, so a limit of 20
612      amounts to 20 levels of expression nesting, which is actually
613      a pretty big hairy expression.  */
614   if (aexpr->max_height > 20)
615     error (_("Expression is too complicated."));
616 }
617
618 /* Call ax_reqs on AEXPR and raise an error if something is wrong.  */
619
620 static void
621 finalize_tracepoint_aexpr (struct agent_expr *aexpr)
622 {
623   ax_reqs (aexpr);
624
625   if (aexpr->len > MAX_AGENT_EXPR_LEN)
626     error (_("Expression is too complicated."));
627
628   report_agent_reqs_errors (aexpr);
629 }
630
631 /* worker function */
632 void
633 validate_actionline (const char *line, struct breakpoint *b)
634 {
635   struct cmd_list_element *c;
636   const char *tmp_p;
637   const char *p;
638   struct bp_location *loc;
639   struct tracepoint *t = (struct tracepoint *) b;
640
641   /* If EOF is typed, *line is NULL.  */
642   if (line == NULL)
643     return;
644
645   p = skip_spaces (line);
646
647   /* Symbol lookup etc.  */
648   if (*p == '\0')       /* empty line: just prompt for another line.  */
649     return;
650
651   if (*p == '#')                /* comment line */
652     return;
653
654   c = lookup_cmd (&p, cmdlist, "", -1, 1);
655   if (c == 0)
656     error (_("`%s' is not a tracepoint action, or is ambiguous."), p);
657
658   if (cmd_cfunc_eq (c, collect_pseudocommand))
659     {
660       int trace_string = 0;
661
662       if (*p == '/')
663         p = decode_agent_options (p, &trace_string);
664
665       do
666         {                       /* Repeat over a comma-separated list.  */
667           QUIT;                 /* Allow user to bail out with ^C.  */
668           p = skip_spaces (p);
669
670           if (*p == '$')        /* Look for special pseudo-symbols.  */
671             {
672               if (0 == strncasecmp ("reg", p + 1, 3)
673                   || 0 == strncasecmp ("arg", p + 1, 3)
674                   || 0 == strncasecmp ("loc", p + 1, 3)
675                   || 0 == strncasecmp ("_ret", p + 1, 4)
676                   || 0 == strncasecmp ("_sdata", p + 1, 6))
677                 {
678                   p = strchr (p, ',');
679                   continue;
680                 }
681               /* else fall thru, treat p as an expression and parse it!  */
682             }
683           tmp_p = p;
684           for (loc = t->loc; loc; loc = loc->next)
685             {
686               p = tmp_p;
687               expression_up exp = parse_exp_1 (&p, loc->address,
688                                                block_for_pc (loc->address), 1);
689
690               if (exp->elts[0].opcode == OP_VAR_VALUE)
691                 {
692                   if (SYMBOL_CLASS (exp->elts[2].symbol) == LOC_CONST)
693                     {
694                       error (_("constant `%s' (value %s) "
695                                "will not be collected."),
696                              exp->elts[2].symbol->print_name (),
697                              plongest (SYMBOL_VALUE (exp->elts[2].symbol)));
698                     }
699                   else if (SYMBOL_CLASS (exp->elts[2].symbol)
700                            == LOC_OPTIMIZED_OUT)
701                     {
702                       error (_("`%s' is optimized away "
703                                "and cannot be collected."),
704                              exp->elts[2].symbol->print_name ());
705                     }
706                 }
707
708               /* We have something to collect, make sure that the expr to
709                  bytecode translator can handle it and that it's not too
710                  long.  */
711               agent_expr_up aexpr = gen_trace_for_expr (loc->address,
712                                                         exp.get (),
713                                                         trace_string);
714
715               finalize_tracepoint_aexpr (aexpr.get ());
716             }
717         }
718       while (p && *p++ == ',');
719     }
720
721   else if (cmd_cfunc_eq (c, teval_pseudocommand))
722     {
723       do
724         {                       /* Repeat over a comma-separated list.  */
725           QUIT;                 /* Allow user to bail out with ^C.  */
726           p = skip_spaces (p);
727
728           tmp_p = p;
729           for (loc = t->loc; loc; loc = loc->next)
730             {
731               p = tmp_p;
732
733               /* Only expressions are allowed for this action.  */
734               expression_up exp = parse_exp_1 (&p, loc->address,
735                                                block_for_pc (loc->address), 1);
736
737               /* We have something to evaluate, make sure that the expr to
738                  bytecode translator can handle it and that it's not too
739                  long.  */
740               agent_expr_up aexpr = gen_eval_for_expr (loc->address, exp.get ());
741
742               finalize_tracepoint_aexpr (aexpr.get ());
743             }
744         }
745       while (p && *p++ == ',');
746     }
747
748   else if (cmd_cfunc_eq (c, while_stepping_pseudocommand))
749     {
750       char *endp;
751
752       p = skip_spaces (p);
753       t->step_count = strtol (p, &endp, 0);
754       if (endp == p || t->step_count == 0)
755         error (_("while-stepping step count `%s' is malformed."), line);
756       p = endp;
757     }
758
759   else if (cmd_cfunc_eq (c, end_actions_pseudocommand))
760     ;
761
762   else
763     error (_("`%s' is not a supported tracepoint action."), line);
764 }
765
766 enum {
767   memrange_absolute = -1
768 };
769
770 /* MEMRANGE functions: */
771
772 /* Compare memranges for std::sort.  */
773
774 static bool
775 memrange_comp (const memrange &a, const memrange &b)
776 {
777   if (a.type == b.type)
778     {
779       if (a.type == memrange_absolute)
780         return (bfd_vma) a.start < (bfd_vma) b.start;
781       else
782         return a.start < b.start;
783     }
784
785   return a.type < b.type;
786 }
787
788 /* Sort the memrange list using std::sort, and merge adjacent memranges.  */
789
790 static void
791 memrange_sortmerge (std::vector<memrange> &memranges)
792 {
793   if (!memranges.empty ())
794     {
795       int a, b;
796
797       std::sort (memranges.begin (), memranges.end (), memrange_comp);
798
799       for (a = 0, b = 1; b < memranges.size (); b++)
800         {
801           /* If memrange b overlaps or is adjacent to memrange a,
802              merge them.  */
803           if (memranges[a].type == memranges[b].type
804               && memranges[b].start <= memranges[a].end)
805             {
806               if (memranges[b].end > memranges[a].end)
807                 memranges[a].end = memranges[b].end;
808               continue;         /* next b, same a */
809             }
810           a++;                  /* next a */
811           if (a != b)
812             memranges[a] = memranges[b];
813         }
814       memranges.resize (a + 1);
815     }
816 }
817
818 /* Add remote register number REGNO to the collection list mask.  */
819
820 void
821 collection_list::add_remote_register (unsigned int regno)
822 {
823   if (info_verbose)
824     printf_filtered ("collect register %d\n", regno);
825
826   m_regs_mask.at (regno / 8) |= 1 << (regno % 8);
827 }
828
829 /* Add all the registers from the mask in AEXPR to the mask in the
830    collection list.  Registers in the AEXPR mask are already remote
831    register numbers.  */
832
833 void
834 collection_list::add_ax_registers (struct agent_expr *aexpr)
835 {
836   if (aexpr->reg_mask_len > 0)
837     {
838       for (int ndx1 = 0; ndx1 < aexpr->reg_mask_len; ndx1++)
839         {
840           QUIT; /* Allow user to bail out with ^C.  */
841           if (aexpr->reg_mask[ndx1] != 0)
842             {
843               /* Assume chars have 8 bits.  */
844               for (int ndx2 = 0; ndx2 < 8; ndx2++)
845                 if (aexpr->reg_mask[ndx1] & (1 << ndx2))
846                   /* It's used -- record it.  */
847                   add_remote_register (ndx1 * 8 + ndx2);
848             }
849         }
850     }
851 }
852
853 /* If REGNO is raw, add its corresponding remote register number to
854    the mask.  If REGNO is a pseudo-register, figure out the necessary
855    registers using a temporary agent expression, and add it to the
856    list if it needs more than just a mask.  */
857
858 void
859 collection_list::add_local_register (struct gdbarch *gdbarch,
860                                      unsigned int regno,
861                                      CORE_ADDR scope)
862 {
863   if (regno < gdbarch_num_regs (gdbarch))
864     {
865       int remote_regno = gdbarch_remote_register_number (gdbarch, regno);
866
867       if (remote_regno < 0)
868         error (_("Can't collect register %d"), regno);
869
870       add_remote_register (remote_regno);
871     }
872   else
873     {
874       agent_expr_up aexpr (new agent_expr (gdbarch, scope));
875
876       ax_reg_mask (aexpr.get (), regno);
877
878       finalize_tracepoint_aexpr (aexpr.get ());
879
880       add_ax_registers (aexpr.get ());
881
882       /* Usually ax_reg_mask for a pseudo-regiser only sets the
883          corresponding raw registers in the ax mask, but if this isn't
884          the case add the expression that is generated to the
885          collection list.  */
886       if (aexpr->len > 0)
887         add_aexpr (std::move (aexpr));
888     }
889 }
890
891 /* Add a memrange to a collection list.  */
892
893 void
894 collection_list::add_memrange (struct gdbarch *gdbarch,
895                                int type, bfd_signed_vma base,
896                                unsigned long len, CORE_ADDR scope)
897 {
898   if (info_verbose)
899     printf_filtered ("(%d,%s,%ld)\n", type, paddress (gdbarch, base), len);
900
901   /* type: memrange_absolute == memory, other n == basereg */
902   /* base: addr if memory, offset if reg relative.  */
903   /* len: we actually save end (base + len) for convenience */
904   m_memranges.emplace_back (type, base, base + len);
905
906   if (type != memrange_absolute)    /* Better collect the base register!  */
907     add_local_register (gdbarch, type, scope);
908 }
909
910 /* Add a symbol to a collection list.  */
911
912 void
913 collection_list::collect_symbol (struct symbol *sym,
914                                  struct gdbarch *gdbarch,
915                                  long frame_regno, long frame_offset,
916                                  CORE_ADDR scope,
917                                  int trace_string)
918 {
919   unsigned long len;
920   unsigned int reg;
921   bfd_signed_vma offset;
922   int treat_as_expr = 0;
923
924   len = TYPE_LENGTH (check_typedef (SYMBOL_TYPE (sym)));
925   switch (SYMBOL_CLASS (sym))
926     {
927     default:
928       printf_filtered ("%s: don't know symbol class %d\n",
929                        sym->print_name (), SYMBOL_CLASS (sym));
930       break;
931     case LOC_CONST:
932       printf_filtered ("constant %s (value %s) will not be collected.\n",
933                        sym->print_name (), plongest (SYMBOL_VALUE (sym)));
934       break;
935     case LOC_STATIC:
936       offset = SYMBOL_VALUE_ADDRESS (sym);
937       if (info_verbose)
938         {
939           printf_filtered ("LOC_STATIC %s: collect %ld bytes at %s.\n",
940                            sym->print_name (), len,
941                            paddress (gdbarch, offset));
942         }
943       /* A struct may be a C++ class with static fields, go to general
944          expression handling.  */
945       if (SYMBOL_TYPE (sym)->code () == TYPE_CODE_STRUCT)
946         treat_as_expr = 1;
947       else
948         add_memrange (gdbarch, memrange_absolute, offset, len, scope);
949       break;
950     case LOC_REGISTER:
951       reg = SYMBOL_REGISTER_OPS (sym)->register_number (sym, gdbarch);
952       if (info_verbose)
953         printf_filtered ("LOC_REG[parm] %s: ", sym->print_name ());
954       add_local_register (gdbarch, reg, scope);
955       /* Check for doubles stored in two registers.  */
956       /* FIXME: how about larger types stored in 3 or more regs?  */
957       if (SYMBOL_TYPE (sym)->code () == TYPE_CODE_FLT &&
958           len > register_size (gdbarch, reg))
959         add_local_register (gdbarch, reg + 1, scope);
960       break;
961     case LOC_REF_ARG:
962       printf_filtered ("Sorry, don't know how to do LOC_REF_ARG yet.\n");
963       printf_filtered ("       (will not collect %s)\n", sym->print_name ());
964       break;
965     case LOC_ARG:
966       reg = frame_regno;
967       offset = frame_offset + SYMBOL_VALUE (sym);
968       if (info_verbose)
969         {
970           printf_filtered ("LOC_LOCAL %s: Collect %ld bytes at offset %s"
971                            " from frame ptr reg %d\n", sym->print_name (), len,
972                            paddress (gdbarch, offset), reg);
973         }
974       add_memrange (gdbarch, reg, offset, len, scope);
975       break;
976     case LOC_REGPARM_ADDR:
977       reg = SYMBOL_VALUE (sym);
978       offset = 0;
979       if (info_verbose)
980         {
981           printf_filtered ("LOC_REGPARM_ADDR %s: Collect %ld bytes at offset %s"
982                            " from reg %d\n", sym->print_name (), len,
983                            paddress (gdbarch, offset), reg);
984         }
985       add_memrange (gdbarch, reg, offset, len, scope);
986       break;
987     case LOC_LOCAL:
988       reg = frame_regno;
989       offset = frame_offset + SYMBOL_VALUE (sym);
990       if (info_verbose)
991         {
992           printf_filtered ("LOC_LOCAL %s: Collect %ld bytes at offset %s"
993                            " from frame ptr reg %d\n", sym->print_name (), len,
994                            paddress (gdbarch, offset), reg);
995         }
996       add_memrange (gdbarch, reg, offset, len, scope);
997       break;
998
999     case LOC_UNRESOLVED:
1000       treat_as_expr = 1;
1001       break;
1002
1003     case LOC_OPTIMIZED_OUT:
1004       printf_filtered ("%s has been optimized out of existence.\n",
1005                        sym->print_name ());
1006       break;
1007
1008     case LOC_COMPUTED:
1009       treat_as_expr = 1;
1010       break;
1011     }
1012
1013   /* Expressions are the most general case.  */
1014   if (treat_as_expr)
1015     {
1016       agent_expr_up aexpr = gen_trace_for_var (scope, gdbarch,
1017                                                sym, trace_string);
1018
1019       /* It can happen that the symbol is recorded as a computed
1020          location, but it's been optimized away and doesn't actually
1021          have a location expression.  */
1022       if (!aexpr)
1023         {
1024           printf_filtered ("%s has been optimized out of existence.\n",
1025                            sym->print_name ());
1026           return;
1027         }
1028
1029       finalize_tracepoint_aexpr (aexpr.get ());
1030
1031       /* Take care of the registers.  */
1032       add_ax_registers (aexpr.get ());
1033
1034       add_aexpr (std::move (aexpr));
1035     }
1036 }
1037
1038 /* Data to be passed around in the calls to the locals and args
1039    iterators.  */
1040
1041 struct add_local_symbols_data
1042 {
1043   struct collection_list *collect;
1044   struct gdbarch *gdbarch;
1045   CORE_ADDR pc;
1046   long frame_regno;
1047   long frame_offset;
1048   int count;
1049   int trace_string;
1050 };
1051
1052 /* The callback for the locals and args iterators.  */
1053
1054 static void
1055 do_collect_symbol (const char *print_name,
1056                    struct symbol *sym,
1057                    void *cb_data)
1058 {
1059   struct add_local_symbols_data *p = (struct add_local_symbols_data *) cb_data;
1060
1061   p->collect->collect_symbol (sym, p->gdbarch, p->frame_regno,
1062                               p->frame_offset, p->pc, p->trace_string);
1063   p->count++;
1064
1065   p->collect->add_wholly_collected (print_name);
1066 }
1067
1068 void
1069 collection_list::add_wholly_collected (const char *print_name)
1070 {
1071   m_wholly_collected.push_back (print_name);
1072 }
1073
1074 /* Add all locals (or args) symbols to collection list.  */
1075
1076 void
1077 collection_list::add_local_symbols (struct gdbarch *gdbarch, CORE_ADDR pc,
1078                                     long frame_regno, long frame_offset, int type,
1079                                     int trace_string)
1080 {
1081   const struct block *block;
1082   struct add_local_symbols_data cb_data;
1083
1084   cb_data.collect = this;
1085   cb_data.gdbarch = gdbarch;
1086   cb_data.pc = pc;
1087   cb_data.frame_regno = frame_regno;
1088   cb_data.frame_offset = frame_offset;
1089   cb_data.count = 0;
1090   cb_data.trace_string = trace_string;
1091
1092   if (type == 'L')
1093     {
1094       block = block_for_pc (pc);
1095       if (block == NULL)
1096         {
1097           warning (_("Can't collect locals; "
1098                      "no symbol table info available.\n"));
1099           return;
1100         }
1101
1102       iterate_over_block_local_vars (block, do_collect_symbol, &cb_data);
1103       if (cb_data.count == 0)
1104         warning (_("No locals found in scope."));
1105     }
1106   else
1107     {
1108       pc = get_pc_function_start (pc);
1109       block = block_for_pc (pc);
1110       if (block == NULL)
1111         {
1112           warning (_("Can't collect args; no symbol table info available."));
1113           return;
1114         }
1115
1116       iterate_over_block_arg_vars (block, do_collect_symbol, &cb_data);
1117       if (cb_data.count == 0)
1118         warning (_("No args found in scope."));
1119     }
1120 }
1121
1122 void
1123 collection_list::add_static_trace_data ()
1124 {
1125   if (info_verbose)
1126     printf_filtered ("collect static trace data\n");
1127   m_strace_data = true;
1128 }
1129
1130 collection_list::collection_list ()
1131   : m_strace_data (false)
1132 {
1133   int max_remote_regno = 0;
1134   for (int i = 0; i < gdbarch_num_regs (target_gdbarch ()); i++)
1135     {
1136       int remote_regno = (gdbarch_remote_register_number
1137                           (target_gdbarch (), i));
1138
1139       if (remote_regno >= 0 && remote_regno > max_remote_regno)
1140         max_remote_regno = remote_regno;
1141     }
1142
1143   m_regs_mask.resize ((max_remote_regno / 8) + 1);
1144
1145   m_memranges.reserve (128);
1146   m_aexprs.reserve (128);
1147 }
1148
1149 /* Reduce a collection list to string form (for gdb protocol).  */
1150
1151 std::vector<std::string>
1152 collection_list::stringify ()
1153 {
1154   gdb::char_vector temp_buf (2048);
1155
1156   int count;
1157   char *end;
1158   long i;
1159   std::vector<std::string> str_list;
1160
1161   if (m_strace_data)
1162     {
1163       if (info_verbose)
1164         printf_filtered ("\nCollecting static trace data\n");
1165       end = temp_buf.data ();
1166       *end++ = 'L';
1167       str_list.emplace_back (temp_buf.data (), end - temp_buf.data ());
1168     }
1169
1170   for (i = m_regs_mask.size () - 1; i > 0; i--)
1171     if (m_regs_mask[i] != 0)    /* Skip leading zeroes in regs_mask.  */
1172       break;
1173   if (m_regs_mask[i] != 0)      /* Prepare to send regs_mask to the stub.  */
1174     {
1175       if (info_verbose)
1176         printf_filtered ("\nCollecting registers (mask): 0x");
1177
1178       /* One char for 'R', one for the null terminator and two per
1179          mask byte.  */
1180       std::size_t new_size = (i + 1) * 2 + 2;
1181       if (new_size > temp_buf.size ())
1182         temp_buf.resize (new_size);
1183
1184       end = temp_buf.data ();
1185       *end++ = 'R';
1186       for (; i >= 0; i--)
1187         {
1188           QUIT;                 /* Allow user to bail out with ^C.  */
1189           if (info_verbose)
1190             printf_filtered ("%02X", m_regs_mask[i]);
1191
1192           end = pack_hex_byte (end, m_regs_mask[i]);
1193         }
1194       *end = '\0';
1195
1196       str_list.emplace_back (temp_buf.data ());
1197     }
1198   if (info_verbose)
1199     printf_filtered ("\n");
1200   if (!m_memranges.empty () && info_verbose)
1201     printf_filtered ("Collecting memranges: \n");
1202   for (i = 0, count = 0, end = temp_buf.data ();
1203        i < m_memranges.size (); i++)
1204     {
1205       QUIT;                     /* Allow user to bail out with ^C.  */
1206       if (info_verbose)
1207         {
1208           printf_filtered ("(%d, %s, %ld)\n", 
1209                            m_memranges[i].type,
1210                            paddress (target_gdbarch (),
1211                                      m_memranges[i].start),
1212                            (long) (m_memranges[i].end
1213                                    - m_memranges[i].start));
1214         }
1215       if (count + 27 > MAX_AGENT_EXPR_LEN)
1216         {
1217           str_list.emplace_back (temp_buf.data (), count);
1218           count = 0;
1219           end = temp_buf.data ();
1220         }
1221
1222       {
1223         bfd_signed_vma length
1224           = m_memranges[i].end - m_memranges[i].start;
1225
1226         /* The "%X" conversion specifier expects an unsigned argument,
1227            so passing -1 (memrange_absolute) to it directly gives you
1228            "FFFFFFFF" (or more, depending on sizeof (unsigned)).
1229            Special-case it.  */
1230         if (m_memranges[i].type == memrange_absolute)
1231           sprintf (end, "M-1,%s,%lX", phex_nz (m_memranges[i].start, 0),
1232                    (long) length);
1233         else
1234           sprintf (end, "M%X,%s,%lX", m_memranges[i].type,
1235                    phex_nz (m_memranges[i].start, 0), (long) length);
1236       }
1237
1238       count += strlen (end);
1239       end = temp_buf.data () + count;
1240     }
1241
1242   for (i = 0; i < m_aexprs.size (); i++)
1243     {
1244       QUIT;                     /* Allow user to bail out with ^C.  */
1245       if ((count + 10 + 2 * m_aexprs[i]->len) > MAX_AGENT_EXPR_LEN)
1246         {
1247           str_list.emplace_back (temp_buf.data (), count);
1248           count = 0;
1249           end = temp_buf.data ();
1250         }
1251       sprintf (end, "X%08X,", m_aexprs[i]->len);
1252       end += 10;                /* 'X' + 8 hex digits + ',' */
1253       count += 10;
1254
1255       end = mem2hex (m_aexprs[i]->buf, end, m_aexprs[i]->len);
1256       count += 2 * m_aexprs[i]->len;
1257     }
1258
1259   if (count != 0)
1260     {
1261       str_list.emplace_back (temp_buf.data (), count);
1262       count = 0;
1263       end = temp_buf.data ();
1264     }
1265
1266   return str_list;
1267 }
1268
1269 /* Add the printed expression EXP to *LIST.  */
1270
1271 void
1272 collection_list::append_exp (struct expression *exp)
1273 {
1274   string_file tmp_stream;
1275
1276   print_expression (exp, &tmp_stream);
1277
1278   m_computed.push_back (std::move (tmp_stream.string ()));
1279 }
1280
1281 void
1282 collection_list::finish ()
1283 {
1284   memrange_sortmerge (m_memranges);
1285 }
1286
1287 static void
1288 encode_actions_1 (struct command_line *action,
1289                   struct bp_location *tloc,
1290                   int frame_reg,
1291                   LONGEST frame_offset,
1292                   struct collection_list *collect,
1293                   struct collection_list *stepping_list)
1294 {
1295   const char *action_exp;
1296   int i;
1297   struct value *tempval;
1298   struct cmd_list_element *cmd;
1299
1300   for (; action; action = action->next)
1301     {
1302       QUIT;                     /* Allow user to bail out with ^C.  */
1303       action_exp = action->line;
1304       action_exp = skip_spaces (action_exp);
1305
1306       cmd = lookup_cmd (&action_exp, cmdlist, "", -1, 1);
1307       if (cmd == 0)
1308         error (_("Bad action list item: %s"), action_exp);
1309
1310       if (cmd_cfunc_eq (cmd, collect_pseudocommand))
1311         {
1312           int trace_string = 0;
1313
1314           if (*action_exp == '/')
1315             action_exp = decode_agent_options (action_exp, &trace_string);
1316
1317           do
1318             {                   /* Repeat over a comma-separated list.  */
1319               QUIT;             /* Allow user to bail out with ^C.  */
1320               action_exp = skip_spaces (action_exp);
1321
1322               if (0 == strncasecmp ("$reg", action_exp, 4))
1323                 {
1324                   for (i = 0; i < gdbarch_num_regs (target_gdbarch ());
1325                        i++)
1326                     {
1327                       int remote_regno = (gdbarch_remote_register_number
1328                                           (target_gdbarch (), i));
1329
1330                       /* Ignore arch regnos without a corresponding
1331                          remote regno.  This can happen for regnos not
1332                          in the tdesc.  */
1333                       if (remote_regno >= 0)
1334                         collect->add_remote_register (remote_regno);
1335                     }
1336                   action_exp = strchr (action_exp, ',');        /* more? */
1337                 }
1338               else if (0 == strncasecmp ("$arg", action_exp, 4))
1339                 {
1340                   collect->add_local_symbols (target_gdbarch (),
1341                                               tloc->address,
1342                                               frame_reg,
1343                                               frame_offset,
1344                                               'A',
1345                                               trace_string);
1346                   action_exp = strchr (action_exp, ',');        /* more? */
1347                 }
1348               else if (0 == strncasecmp ("$loc", action_exp, 4))
1349                 {
1350                   collect->add_local_symbols (target_gdbarch (),
1351                                               tloc->address,
1352                                               frame_reg,
1353                                               frame_offset,
1354                                               'L',
1355                                               trace_string);
1356                   action_exp = strchr (action_exp, ',');        /* more? */
1357                 }
1358               else if (0 == strncasecmp ("$_ret", action_exp, 5))
1359                 {
1360                   agent_expr_up aexpr
1361                     = gen_trace_for_return_address (tloc->address,
1362                                                     target_gdbarch (),
1363                                                     trace_string);
1364
1365                   finalize_tracepoint_aexpr (aexpr.get ());
1366
1367                   /* take care of the registers */
1368                   collect->add_ax_registers (aexpr.get ());
1369
1370                   collect->add_aexpr (std::move (aexpr));
1371                   action_exp = strchr (action_exp, ',');        /* more? */
1372                 }
1373               else if (0 == strncasecmp ("$_sdata", action_exp, 7))
1374                 {
1375                   collect->add_static_trace_data ();
1376                   action_exp = strchr (action_exp, ',');        /* more? */
1377                 }
1378               else
1379                 {
1380                   unsigned long addr;
1381
1382                   expression_up exp = parse_exp_1 (&action_exp, tloc->address,
1383                                                    block_for_pc (tloc->address),
1384                                                    1);
1385
1386                   switch (exp->elts[0].opcode)
1387                     {
1388                     case OP_REGISTER:
1389                       {
1390                         const char *name = &exp->elts[2].string;
1391
1392                         i = user_reg_map_name_to_regnum (target_gdbarch (),
1393                                                          name, strlen (name));
1394                         if (i == -1)
1395                           internal_error (__FILE__, __LINE__,
1396                                           _("Register $%s not available"),
1397                                           name);
1398                         if (info_verbose)
1399                           printf_filtered ("OP_REGISTER: ");
1400                         collect->add_local_register (target_gdbarch (),
1401                                                      i, tloc->address);
1402                         break;
1403                       }
1404
1405                     case UNOP_MEMVAL:
1406                       /* Safe because we know it's a simple expression.  */
1407                       tempval = evaluate_expression (exp.get ());
1408                       addr = value_address (tempval);
1409                       /* Initialize the TYPE_LENGTH if it is a typedef.  */
1410                       check_typedef (exp->elts[1].type);
1411                       collect->add_memrange (target_gdbarch (),
1412                                              memrange_absolute, addr,
1413                                              TYPE_LENGTH (exp->elts[1].type),
1414                                              tloc->address);
1415                       collect->append_exp (exp.get ());
1416                       break;
1417
1418                     case OP_VAR_VALUE:
1419                       {
1420                         struct symbol *sym = exp->elts[2].symbol;
1421                         const char *name = sym->natural_name ();
1422
1423                         collect->collect_symbol (exp->elts[2].symbol,
1424                                                  target_gdbarch (),
1425                                                  frame_reg,
1426                                                  frame_offset,
1427                                                  tloc->address,
1428                                                  trace_string);
1429                         collect->add_wholly_collected (name);
1430                       }
1431                       break;
1432
1433                     default:    /* Full-fledged expression.  */
1434                       agent_expr_up aexpr = gen_trace_for_expr (tloc->address,
1435                                                                 exp.get (),
1436                                                                 trace_string);
1437
1438                       finalize_tracepoint_aexpr (aexpr.get ());
1439
1440                       /* Take care of the registers.  */
1441                       collect->add_ax_registers (aexpr.get ());
1442
1443                       collect->add_aexpr (std::move (aexpr));
1444                       collect->append_exp (exp.get ());
1445                       break;
1446                     }           /* switch */
1447                 }               /* do */
1448             }
1449           while (action_exp && *action_exp++ == ',');
1450         }                       /* if */
1451       else if (cmd_cfunc_eq (cmd, teval_pseudocommand))
1452         {
1453           do
1454             {                   /* Repeat over a comma-separated list.  */
1455               QUIT;             /* Allow user to bail out with ^C.  */
1456               action_exp = skip_spaces (action_exp);
1457
1458                 {
1459                   expression_up exp = parse_exp_1 (&action_exp, tloc->address,
1460                                                    block_for_pc (tloc->address),
1461                                                    1);
1462
1463                   agent_expr_up aexpr = gen_eval_for_expr (tloc->address,
1464                                                            exp.get ());
1465
1466                   finalize_tracepoint_aexpr (aexpr.get ());
1467
1468                   /* Even though we're not officially collecting, add
1469                      to the collect list anyway.  */
1470                   collect->add_aexpr (std::move (aexpr));
1471                 }               /* do */
1472             }
1473           while (action_exp && *action_exp++ == ',');
1474         }                       /* if */
1475       else if (cmd_cfunc_eq (cmd, while_stepping_pseudocommand))
1476         {
1477           /* We check against nested while-stepping when setting
1478              breakpoint action, so no way to run into nested
1479              here.  */
1480           gdb_assert (stepping_list);
1481
1482           encode_actions_1 (action->body_list_0.get (), tloc, frame_reg,
1483                             frame_offset, stepping_list, NULL);
1484         }
1485       else
1486         error (_("Invalid tracepoint command '%s'"), action->line);
1487     }                           /* for */
1488 }
1489
1490 /* Encode actions of tracepoint TLOC->owner and fill TRACEPOINT_LIST
1491    and STEPPING_LIST.  */
1492
1493 void
1494 encode_actions (struct bp_location *tloc,
1495                 struct collection_list *tracepoint_list,
1496                 struct collection_list *stepping_list)
1497 {
1498   int frame_reg;
1499   LONGEST frame_offset;
1500
1501   gdbarch_virtual_frame_pointer (tloc->gdbarch,
1502                                  tloc->address, &frame_reg, &frame_offset);
1503
1504   counted_command_line actions = all_tracepoint_actions (tloc->owner);
1505   encode_actions_1 (actions.get (), tloc, frame_reg, frame_offset,
1506                     tracepoint_list, stepping_list);
1507   encode_actions_1 (breakpoint_commands (tloc->owner), tloc,
1508                     frame_reg, frame_offset, tracepoint_list, stepping_list);
1509
1510   tracepoint_list->finish ();
1511   stepping_list->finish ();
1512 }
1513
1514 /* Render all actions into gdb protocol.  */
1515
1516 void
1517 encode_actions_rsp (struct bp_location *tloc,
1518                     std::vector<std::string> *tdp_actions,
1519                     std::vector<std::string> *stepping_actions)
1520 {
1521   struct collection_list tracepoint_list, stepping_list;
1522
1523   encode_actions (tloc, &tracepoint_list, &stepping_list);
1524
1525   *tdp_actions = tracepoint_list.stringify ();
1526   *stepping_actions = stepping_list.stringify ();
1527 }
1528
1529 void
1530 collection_list::add_aexpr (agent_expr_up aexpr)
1531 {
1532   m_aexprs.push_back (std::move (aexpr));
1533 }
1534
1535 static void
1536 process_tracepoint_on_disconnect (void)
1537 {
1538   int has_pending_p = 0;
1539
1540   /* Check whether we still have pending tracepoint.  If we have, warn the
1541      user that pending tracepoint will no longer work.  */
1542   for (breakpoint *b : all_tracepoints ())
1543     {
1544       if (b->loc == NULL)
1545         {
1546           has_pending_p = 1;
1547           break;
1548         }
1549       else
1550         {
1551           struct bp_location *loc1;
1552
1553           for (loc1 = b->loc; loc1; loc1 = loc1->next)
1554             {
1555               if (loc1->shlib_disabled)
1556                 {
1557                   has_pending_p = 1;
1558                   break;
1559                 }
1560             }
1561
1562           if (has_pending_p)
1563             break;
1564         }
1565     }
1566
1567   if (has_pending_p)
1568     warning (_("Pending tracepoints will not be resolved while"
1569                " GDB is disconnected\n"));
1570 }
1571
1572 /* Reset local state of tracing.  */
1573
1574 void
1575 trace_reset_local_state (void)
1576 {
1577   set_traceframe_num (-1);
1578   set_tracepoint_num (-1);
1579   set_traceframe_context (NULL);
1580   clear_traceframe_info ();
1581 }
1582
1583 void
1584 start_tracing (const char *notes)
1585 {
1586   int any_enabled = 0, num_to_download = 0;
1587   int ret;
1588
1589   std::vector<breakpoint *> tp_vec = all_tracepoints ();
1590
1591   /* No point in tracing without any tracepoints...  */
1592   if (tp_vec.empty ())
1593     error (_("No tracepoints defined, not starting trace"));
1594
1595   for (breakpoint *b : tp_vec)
1596     {
1597       if (b->enable_state == bp_enabled)
1598         any_enabled = 1;
1599
1600       if ((b->type == bp_fast_tracepoint
1601            ? may_insert_fast_tracepoints
1602            : may_insert_tracepoints))
1603         ++num_to_download;
1604       else
1605         warning (_("May not insert %stracepoints, skipping tracepoint %d"),
1606                  (b->type == bp_fast_tracepoint ? "fast " : ""), b->number);
1607     }
1608
1609   if (!any_enabled)
1610     {
1611       if (target_supports_enable_disable_tracepoint ())
1612         warning (_("No tracepoints enabled"));
1613       else
1614         {
1615           /* No point in tracing with only disabled tracepoints that
1616              cannot be re-enabled.  */
1617           error (_("No tracepoints enabled, not starting trace"));
1618         }
1619     }
1620
1621   if (num_to_download <= 0)
1622     error (_("No tracepoints that may be downloaded, not starting trace"));
1623
1624   target_trace_init ();
1625
1626   for (breakpoint *b : tp_vec)
1627     {
1628       struct tracepoint *t = (struct tracepoint *) b;
1629       struct bp_location *loc;
1630       int bp_location_downloaded = 0;
1631
1632       /* Clear `inserted' flag.  */
1633       for (loc = b->loc; loc; loc = loc->next)
1634         loc->inserted = 0;
1635
1636       if ((b->type == bp_fast_tracepoint
1637            ? !may_insert_fast_tracepoints
1638            : !may_insert_tracepoints))
1639         continue;
1640
1641       t->number_on_target = 0;
1642
1643       for (loc = b->loc; loc; loc = loc->next)
1644         {
1645           /* Since tracepoint locations are never duplicated, `inserted'
1646              flag should be zero.  */
1647           gdb_assert (!loc->inserted);
1648
1649           target_download_tracepoint (loc);
1650
1651           loc->inserted = 1;
1652           bp_location_downloaded = 1;
1653         }
1654
1655       t->number_on_target = b->number;
1656
1657       for (loc = b->loc; loc; loc = loc->next)
1658         if (loc->probe.prob != NULL)
1659           loc->probe.prob->set_semaphore (loc->probe.objfile,
1660                                           loc->gdbarch);
1661
1662       if (bp_location_downloaded)
1663         gdb::observers::breakpoint_modified.notify (b);
1664     }
1665
1666   /* Send down all the trace state variables too.  */
1667   for (const trace_state_variable &tsv : tvariables)
1668     target_download_trace_state_variable (tsv);
1669   
1670   /* Tell target to treat text-like sections as transparent.  */
1671   target_trace_set_readonly_regions ();
1672   /* Set some mode flags.  */
1673   target_set_disconnected_tracing (disconnected_tracing);
1674   target_set_circular_trace_buffer (circular_trace_buffer);
1675   target_set_trace_buffer_size (trace_buffer_size);
1676
1677   if (!notes)
1678     notes = trace_notes;
1679   ret = target_set_trace_notes (trace_user, notes, NULL);
1680
1681   if (!ret && (trace_user || notes))
1682     warning (_("Target does not support trace user/notes, info ignored"));
1683
1684   /* Now insert traps and begin collecting data.  */
1685   target_trace_start ();
1686
1687   /* Reset our local state.  */
1688   trace_reset_local_state ();
1689   current_trace_status()->running = 1;
1690 }
1691
1692 /* The tstart command requests the target to start a new trace run.
1693    The command passes any arguments it has to the target verbatim, as
1694    an optional "trace note".  This is useful as for instance a warning
1695    to other users if the trace runs disconnected, and you don't want
1696    anybody else messing with the target.  */
1697
1698 static void
1699 tstart_command (const char *args, int from_tty)
1700 {
1701   dont_repeat ();       /* Like "run", dangerous to repeat accidentally.  */
1702
1703   if (current_trace_status ()->running)
1704     {
1705       if (from_tty
1706           && !query (_("A trace is running already.  Start a new run? ")))
1707         error (_("New trace run not started."));
1708     }
1709
1710   start_tracing (args);
1711 }
1712
1713 /* The tstop command stops the tracing run.  The command passes any
1714    supplied arguments to the target verbatim as a "stop note"; if the
1715    target supports trace notes, then it will be reported back as part
1716    of the trace run's status.  */
1717
1718 static void
1719 tstop_command (const char *args, int from_tty)
1720 {
1721   if (!current_trace_status ()->running)
1722     error (_("Trace is not running."));
1723
1724   stop_tracing (args);
1725 }
1726
1727 void
1728 stop_tracing (const char *note)
1729 {
1730   int ret;
1731
1732   target_trace_stop ();
1733
1734   for (breakpoint *t : all_tracepoints ())
1735     {
1736       struct bp_location *loc;
1737
1738       if ((t->type == bp_fast_tracepoint
1739            ? !may_insert_fast_tracepoints
1740            : !may_insert_tracepoints))
1741         continue;
1742
1743       for (loc = t->loc; loc; loc = loc->next)
1744         {
1745           /* GDB can be totally absent in some disconnected trace scenarios,
1746              but we don't really care if this semaphore goes out of sync.
1747              That's why we are decrementing it here, but not taking care
1748              in other places.  */
1749           if (loc->probe.prob != NULL)
1750             loc->probe.prob->clear_semaphore (loc->probe.objfile,
1751                                               loc->gdbarch);
1752         }
1753     }
1754
1755   if (!note)
1756     note = trace_stop_notes;
1757   ret = target_set_trace_notes (NULL, NULL, note);
1758
1759   if (!ret && note)
1760     warning (_("Target does not support trace notes, note ignored"));
1761
1762   /* Should change in response to reply?  */
1763   current_trace_status ()->running = 0;
1764 }
1765
1766 /* tstatus command */
1767 static void
1768 tstatus_command (const char *args, int from_tty)
1769 {
1770   struct trace_status *ts = current_trace_status ();
1771   int status;
1772   
1773   status = target_get_trace_status (ts);
1774
1775   if (status == -1)
1776     {
1777       if (ts->filename != NULL)
1778         printf_filtered (_("Using a trace file.\n"));
1779       else
1780         {
1781           printf_filtered (_("Trace can not be run on this target.\n"));
1782           return;
1783         }
1784     }
1785
1786   if (!ts->running_known)
1787     {
1788       printf_filtered (_("Run/stop status is unknown.\n"));
1789     }
1790   else if (ts->running)
1791     {
1792       printf_filtered (_("Trace is running on the target.\n"));
1793     }
1794   else
1795     {
1796       switch (ts->stop_reason)
1797         {
1798         case trace_never_run:
1799           printf_filtered (_("No trace has been run on the target.\n"));
1800           break;
1801         case trace_stop_command:
1802           if (ts->stop_desc)
1803             printf_filtered (_("Trace stopped by a tstop command (%s).\n"),
1804                              ts->stop_desc);
1805           else
1806             printf_filtered (_("Trace stopped by a tstop command.\n"));
1807           break;
1808         case trace_buffer_full:
1809           printf_filtered (_("Trace stopped because the buffer was full.\n"));
1810           break;
1811         case trace_disconnected:
1812           printf_filtered (_("Trace stopped because of disconnection.\n"));
1813           break;
1814         case tracepoint_passcount:
1815           printf_filtered (_("Trace stopped by tracepoint %d.\n"),
1816                            ts->stopping_tracepoint);
1817           break;
1818         case tracepoint_error:
1819           if (ts->stopping_tracepoint)
1820             printf_filtered (_("Trace stopped by an "
1821                                "error (%s, tracepoint %d).\n"),
1822                              ts->stop_desc, ts->stopping_tracepoint);
1823           else
1824             printf_filtered (_("Trace stopped by an error (%s).\n"),
1825                              ts->stop_desc);
1826           break;
1827         case trace_stop_reason_unknown:
1828           printf_filtered (_("Trace stopped for an unknown reason.\n"));
1829           break;
1830         default:
1831           printf_filtered (_("Trace stopped for some other reason (%d).\n"),
1832                            ts->stop_reason);
1833           break;
1834         }
1835     }
1836
1837   if (ts->traceframes_created >= 0
1838       && ts->traceframe_count != ts->traceframes_created)
1839     {
1840       printf_filtered (_("Buffer contains %d trace "
1841                          "frames (of %d created total).\n"),
1842                        ts->traceframe_count, ts->traceframes_created);
1843     }
1844   else if (ts->traceframe_count >= 0)
1845     {
1846       printf_filtered (_("Collected %d trace frames.\n"),
1847                        ts->traceframe_count);
1848     }
1849
1850   if (ts->buffer_free >= 0)
1851     {
1852       if (ts->buffer_size >= 0)
1853         {
1854           printf_filtered (_("Trace buffer has %d bytes of %d bytes free"),
1855                            ts->buffer_free, ts->buffer_size);
1856           if (ts->buffer_size > 0)
1857             printf_filtered (_(" (%d%% full)"),
1858                              ((int) ((((long long) (ts->buffer_size
1859                                                     - ts->buffer_free)) * 100)
1860                                      / ts->buffer_size)));
1861           printf_filtered (_(".\n"));
1862         }
1863       else
1864         printf_filtered (_("Trace buffer has %d bytes free.\n"),
1865                          ts->buffer_free);
1866     }
1867
1868   if (ts->disconnected_tracing)
1869     printf_filtered (_("Trace will continue if GDB disconnects.\n"));
1870   else
1871     printf_filtered (_("Trace will stop if GDB disconnects.\n"));
1872
1873   if (ts->circular_buffer)
1874     printf_filtered (_("Trace buffer is circular.\n"));
1875
1876   if (ts->user_name && strlen (ts->user_name) > 0)
1877     printf_filtered (_("Trace user is %s.\n"), ts->user_name);
1878
1879   if (ts->notes && strlen (ts->notes) > 0)
1880     printf_filtered (_("Trace notes: %s.\n"), ts->notes);
1881
1882   /* Now report on what we're doing with tfind.  */
1883   if (traceframe_number >= 0)
1884     printf_filtered (_("Looking at trace frame %d, tracepoint %d.\n"),
1885                      traceframe_number, tracepoint_number);
1886   else
1887     printf_filtered (_("Not looking at any trace frame.\n"));
1888
1889   /* Report start/stop times if supplied.  */
1890   if (ts->start_time)
1891     {
1892       if (ts->stop_time)
1893         {
1894           LONGEST run_time = ts->stop_time - ts->start_time;
1895
1896           /* Reporting a run time is more readable than two long numbers.  */
1897           printf_filtered (_("Trace started at %ld.%06ld secs, stopped %ld.%06ld secs later.\n"),
1898                            (long int) (ts->start_time / 1000000),
1899                            (long int) (ts->start_time % 1000000),
1900                            (long int) (run_time / 1000000),
1901                            (long int) (run_time % 1000000));
1902         }
1903       else
1904         printf_filtered (_("Trace started at %ld.%06ld secs.\n"),
1905                          (long int) (ts->start_time / 1000000),
1906                          (long int) (ts->start_time % 1000000));
1907     }
1908   else if (ts->stop_time)
1909     printf_filtered (_("Trace stopped at %ld.%06ld secs.\n"),
1910                      (long int) (ts->stop_time / 1000000),
1911                      (long int) (ts->stop_time % 1000000));
1912
1913   /* Now report any per-tracepoint status available.  */
1914   for (breakpoint *t : all_tracepoints ())
1915     target_get_tracepoint_status (t, NULL);
1916 }
1917
1918 /* Report the trace status to uiout, in a way suitable for MI, and not
1919    suitable for CLI.  If ON_STOP is true, suppress a few fields that
1920    are not meaningful in the -trace-stop response.
1921
1922    The implementation is essentially parallel to trace_status_command, but
1923    merging them will result in unreadable code.  */
1924 void
1925 trace_status_mi (int on_stop)
1926 {
1927   struct ui_out *uiout = current_uiout;
1928   struct trace_status *ts = current_trace_status ();
1929   int status;
1930
1931   status = target_get_trace_status (ts);
1932
1933   if (status == -1 && ts->filename == NULL)
1934     {
1935       uiout->field_string ("supported", "0");
1936       return;
1937     }
1938
1939   if (ts->filename != NULL)
1940     uiout->field_string ("supported", "file");
1941   else if (!on_stop)
1942     uiout->field_string ("supported", "1");
1943
1944   if (ts->filename != NULL)
1945     uiout->field_string ("trace-file", ts->filename);
1946
1947   gdb_assert (ts->running_known);
1948
1949   if (ts->running)
1950     {
1951       uiout->field_string ("running", "1");
1952
1953       /* Unlike CLI, do not show the state of 'disconnected-tracing' variable.
1954          Given that the frontend gets the status either on -trace-stop, or from
1955          -trace-status after re-connection, it does not seem like this
1956          information is necessary for anything.  It is not necessary for either
1957          figuring the vital state of the target nor for navigation of trace
1958          frames.  If the frontend wants to show the current state is some
1959          configure dialog, it can request the value when such dialog is
1960          invoked by the user.  */
1961     }
1962   else
1963     {
1964       const char *stop_reason = NULL;
1965       int stopping_tracepoint = -1;
1966
1967       if (!on_stop)
1968         uiout->field_string ("running", "0");
1969
1970       if (ts->stop_reason != trace_stop_reason_unknown)
1971         {
1972           switch (ts->stop_reason)
1973             {
1974             case trace_stop_command:
1975               stop_reason = "request";
1976               break;
1977             case trace_buffer_full:
1978               stop_reason = "overflow";
1979               break;
1980             case trace_disconnected:
1981               stop_reason = "disconnection";
1982               break;
1983             case tracepoint_passcount:
1984               stop_reason = "passcount";
1985               stopping_tracepoint = ts->stopping_tracepoint;
1986               break;
1987             case tracepoint_error:
1988               stop_reason = "error";
1989               stopping_tracepoint = ts->stopping_tracepoint;
1990               break;
1991             }
1992           
1993           if (stop_reason)
1994             {
1995               uiout->field_string ("stop-reason", stop_reason);
1996               if (stopping_tracepoint != -1)
1997                 uiout->field_signed ("stopping-tracepoint",
1998                                      stopping_tracepoint);
1999               if (ts->stop_reason == tracepoint_error)
2000                 uiout->field_string ("error-description",
2001                                      ts->stop_desc);
2002             }
2003         }
2004     }
2005
2006   if (ts->traceframe_count != -1)
2007     uiout->field_signed ("frames", ts->traceframe_count);
2008   if (ts->traceframes_created != -1)
2009     uiout->field_signed ("frames-created", ts->traceframes_created);
2010   if (ts->buffer_size != -1)
2011     uiout->field_signed ("buffer-size", ts->buffer_size);
2012   if (ts->buffer_free != -1)
2013     uiout->field_signed ("buffer-free", ts->buffer_free);
2014
2015   uiout->field_signed ("disconnected",  ts->disconnected_tracing);
2016   uiout->field_signed ("circular",  ts->circular_buffer);
2017
2018   uiout->field_string ("user-name", ts->user_name);
2019   uiout->field_string ("notes", ts->notes);
2020
2021   {
2022     char buf[100];
2023
2024     xsnprintf (buf, sizeof buf, "%ld.%06ld",
2025                (long int) (ts->start_time / 1000000),
2026                (long int) (ts->start_time % 1000000));
2027     uiout->field_string ("start-time", buf);
2028     xsnprintf (buf, sizeof buf, "%ld.%06ld",
2029                (long int) (ts->stop_time / 1000000),
2030                (long int) (ts->stop_time % 1000000));
2031     uiout->field_string ("stop-time", buf);
2032   }
2033 }
2034
2035 /* Check if a trace run is ongoing.  If so, and FROM_TTY, query the
2036    user if she really wants to detach.  */
2037
2038 void
2039 query_if_trace_running (int from_tty)
2040 {
2041   if (!from_tty)
2042     return;
2043
2044   /* It can happen that the target that was tracing went away on its
2045      own, and we didn't notice.  Get a status update, and if the
2046      current target doesn't even do tracing, then assume it's not
2047      running anymore.  */
2048   if (target_get_trace_status (current_trace_status ()) < 0)
2049     current_trace_status ()->running = 0;
2050
2051   /* If running interactively, give the user the option to cancel and
2052      then decide what to do differently with the run.  Scripts are
2053      just going to disconnect and let the target deal with it,
2054      according to how it's been instructed previously via
2055      disconnected-tracing.  */
2056   if (current_trace_status ()->running)
2057     {
2058       process_tracepoint_on_disconnect ();
2059
2060       if (current_trace_status ()->disconnected_tracing)
2061         {
2062           if (!query (_("Trace is running and will "
2063                         "continue after detach; detach anyway? ")))
2064             error (_("Not confirmed."));
2065         }
2066       else
2067         {
2068           if (!query (_("Trace is running but will "
2069                         "stop on detach; detach anyway? ")))
2070             error (_("Not confirmed."));
2071         }
2072     }
2073 }
2074
2075 /* This function handles the details of what to do about an ongoing
2076    tracing run if the user has asked to detach or otherwise disconnect
2077    from the target.  */
2078
2079 void
2080 disconnect_tracing (void)
2081 {
2082   /* Also we want to be out of tfind mode, otherwise things can get
2083      confusing upon reconnection.  Just use these calls instead of
2084      full tfind_1 behavior because we're in the middle of detaching,
2085      and there's no point to updating current stack frame etc.  */
2086   trace_reset_local_state ();
2087 }
2088
2089 /* Worker function for the various flavors of the tfind command.  */
2090 void
2091 tfind_1 (enum trace_find_type type, int num,
2092          CORE_ADDR addr1, CORE_ADDR addr2,
2093          int from_tty)
2094 {
2095   int target_frameno = -1, target_tracept = -1;
2096   struct frame_id old_frame_id = null_frame_id;
2097   struct tracepoint *tp;
2098   struct ui_out *uiout = current_uiout;
2099
2100   /* Only try to get the current stack frame if we have a chance of
2101      succeeding.  In particular, if we're trying to get a first trace
2102      frame while all threads are running, it's not going to succeed,
2103      so leave it with a default value and let the frame comparison
2104      below (correctly) decide to print out the source location of the
2105      trace frame.  */
2106   if (!(type == tfind_number && num == -1)
2107       && (has_stack_frames () || traceframe_number >= 0))
2108     old_frame_id = get_frame_id (get_current_frame ());
2109
2110   target_frameno = target_trace_find (type, num, addr1, addr2,
2111                                       &target_tracept);
2112   
2113   if (type == tfind_number
2114       && num == -1
2115       && target_frameno == -1)
2116     {
2117       /* We told the target to get out of tfind mode, and it did.  */
2118     }
2119   else if (target_frameno == -1)
2120     {
2121       /* A request for a non-existent trace frame has failed.
2122          Our response will be different, depending on FROM_TTY:
2123
2124          If FROM_TTY is true, meaning that this command was 
2125          typed interactively by the user, then give an error
2126          and DO NOT change the state of traceframe_number etc.
2127
2128          However if FROM_TTY is false, meaning that we're either
2129          in a script, a loop, or a user-defined command, then 
2130          DON'T give an error, but DO change the state of
2131          traceframe_number etc. to invalid.
2132
2133          The rationale is that if you typed the command, you
2134          might just have committed a typo or something, and you'd
2135          like to NOT lose your current debugging state.  However
2136          if you're in a user-defined command or especially in a
2137          loop, then you need a way to detect that the command
2138          failed WITHOUT aborting.  This allows you to write
2139          scripts that search thru the trace buffer until the end,
2140          and then continue on to do something else.  */
2141   
2142       if (from_tty)
2143         error (_("Target failed to find requested trace frame."));
2144       else
2145         {
2146           if (info_verbose)
2147             printf_filtered ("End of trace buffer.\n");
2148 #if 0 /* dubious now?  */
2149           /* The following will not recurse, since it's
2150              special-cased.  */
2151           tfind_command ("-1", from_tty);
2152 #endif
2153         }
2154     }
2155   
2156   tp = get_tracepoint_by_number_on_target (target_tracept);
2157
2158   reinit_frame_cache ();
2159   target_dcache_invalidate ();
2160
2161   set_tracepoint_num (tp ? tp->number : target_tracept);
2162
2163   if (target_frameno != get_traceframe_number ())
2164     gdb::observers::traceframe_changed.notify (target_frameno, tracepoint_number);
2165
2166   set_current_traceframe (target_frameno);
2167
2168   if (target_frameno == -1)
2169     set_traceframe_context (NULL);
2170   else
2171     set_traceframe_context (get_current_frame ());
2172
2173   if (traceframe_number >= 0)
2174     {
2175       /* Use different branches for MI and CLI to make CLI messages
2176          i18n-eable.  */
2177       if (uiout->is_mi_like_p ())
2178         {
2179           uiout->field_string ("found", "1");
2180           uiout->field_signed ("tracepoint", tracepoint_number);
2181           uiout->field_signed ("traceframe", traceframe_number);
2182         }
2183       else
2184         {
2185           printf_unfiltered (_("Found trace frame %d, tracepoint %d\n"),
2186                              traceframe_number, tracepoint_number);
2187         }
2188     }
2189   else
2190     {
2191       if (uiout->is_mi_like_p ())
2192         uiout->field_string ("found", "0");
2193       else if (type == tfind_number && num == -1)
2194         printf_unfiltered (_("No longer looking at any trace frame\n"));
2195       else /* This case may never occur, check.  */
2196         printf_unfiltered (_("No trace frame found\n"));
2197     }
2198
2199   /* If we're in nonstop mode and getting out of looking at trace
2200      frames, there won't be any current frame to go back to and
2201      display.  */
2202   if (from_tty
2203       && (has_stack_frames () || traceframe_number >= 0))
2204     {
2205       enum print_what print_what;
2206
2207       /* NOTE: in imitation of the step command, try to determine
2208          whether we have made a transition from one function to
2209          another.  If so, we'll print the "stack frame" (ie. the new
2210          function and it's arguments) -- otherwise we'll just show the
2211          new source line.  */
2212
2213       if (frame_id_eq (old_frame_id,
2214                        get_frame_id (get_current_frame ())))
2215         print_what = SRC_LINE;
2216       else
2217         print_what = SRC_AND_LOC;
2218
2219       print_stack_frame (get_selected_frame (NULL), 1, print_what, 1);
2220       do_displays ();
2221     }
2222 }
2223
2224 /* Error on looking at traceframes while trace is running.  */
2225
2226 void
2227 check_trace_running (struct trace_status *status)
2228 {
2229   if (status->running && status->filename == NULL)
2230     error (_("May not look at trace frames while trace is running."));
2231 }
2232
2233 /* trace_find_command takes a trace frame number n, 
2234    sends "QTFrame:<n>" to the target, 
2235    and accepts a reply that may contain several optional pieces
2236    of information: a frame number, a tracepoint number, and an
2237    indication of whether this is a trap frame or a stepping frame.
2238
2239    The minimal response is just "OK" (which indicates that the 
2240    target does not give us a frame number or a tracepoint number).
2241    Instead of that, the target may send us a string containing
2242    any combination of:
2243    F<hexnum>    (gives the selected frame number)
2244    T<hexnum>    (gives the selected tracepoint number)
2245  */
2246
2247 /* tfind command */
2248 static void
2249 tfind_command_1 (const char *args, int from_tty)
2250 { /* This should only be called with a numeric argument.  */
2251   int frameno = -1;
2252
2253   check_trace_running (current_trace_status ());
2254   
2255   if (args == 0 || *args == 0)
2256     { /* TFIND with no args means find NEXT trace frame.  */
2257       if (traceframe_number == -1)
2258         frameno = 0;    /* "next" is first one.  */
2259         else
2260         frameno = traceframe_number + 1;
2261     }
2262   else if (0 == strcmp (args, "-"))
2263     {
2264       if (traceframe_number == -1)
2265         error (_("not debugging trace buffer"));
2266       else if (from_tty && traceframe_number == 0)
2267         error (_("already at start of trace buffer"));
2268       
2269       frameno = traceframe_number - 1;
2270       }
2271   /* A hack to work around eval's need for fp to have been collected.  */
2272   else if (0 == strcmp (args, "-1"))
2273     frameno = -1;
2274   else
2275     frameno = parse_and_eval_long (args);
2276
2277   if (frameno < -1)
2278     error (_("invalid input (%d is less than zero)"), frameno);
2279
2280   tfind_1 (tfind_number, frameno, 0, 0, from_tty);
2281 }
2282
2283 static void
2284 tfind_command (const char *args, int from_tty)
2285 {
2286   tfind_command_1 (args, from_tty);
2287 }
2288
2289 /* tfind end */
2290 static void
2291 tfind_end_command (const char *args, int from_tty)
2292 {
2293   tfind_command_1 ("-1", from_tty);
2294 }
2295
2296 /* tfind start */
2297 static void
2298 tfind_start_command (const char *args, int from_tty)
2299 {
2300   tfind_command_1 ("0", from_tty);
2301 }
2302
2303 /* tfind pc command */
2304 static void
2305 tfind_pc_command (const char *args, int from_tty)
2306 {
2307   CORE_ADDR pc;
2308
2309   check_trace_running (current_trace_status ());
2310
2311   if (args == 0 || *args == 0)
2312     pc = regcache_read_pc (get_current_regcache ());
2313   else
2314     pc = parse_and_eval_address (args);
2315
2316   tfind_1 (tfind_pc, 0, pc, 0, from_tty);
2317 }
2318
2319 /* tfind tracepoint command */
2320 static void
2321 tfind_tracepoint_command (const char *args, int from_tty)
2322 {
2323   int tdp;
2324   struct tracepoint *tp;
2325
2326   check_trace_running (current_trace_status ());
2327
2328   if (args == 0 || *args == 0)
2329     {
2330       if (tracepoint_number == -1)
2331         error (_("No current tracepoint -- please supply an argument."));
2332       else
2333         tdp = tracepoint_number;        /* Default is current TDP.  */
2334     }
2335   else
2336     tdp = parse_and_eval_long (args);
2337
2338   /* If we have the tracepoint on hand, use the number that the
2339      target knows about (which may be different if we disconnected
2340      and reconnected).  */
2341   tp = get_tracepoint (tdp);
2342   if (tp)
2343     tdp = tp->number_on_target;
2344
2345   tfind_1 (tfind_tp, tdp, 0, 0, from_tty);
2346 }
2347
2348 /* TFIND LINE command:
2349
2350    This command will take a sourceline for argument, just like BREAK
2351    or TRACE (ie. anything that "decode_line_1" can handle).
2352
2353    With no argument, this command will find the next trace frame 
2354    corresponding to a source line OTHER THAN THE CURRENT ONE.  */
2355
2356 static void
2357 tfind_line_command (const char *args, int from_tty)
2358 {
2359   check_trace_running (current_trace_status ());
2360
2361   symtab_and_line sal;
2362   if (args == 0 || *args == 0)
2363     {
2364       sal = find_pc_line (get_frame_pc (get_current_frame ()), 0);
2365     }
2366   else
2367     {
2368       std::vector<symtab_and_line> sals
2369         = decode_line_with_current_source (args, DECODE_LINE_FUNFIRSTLINE);
2370       sal = sals[0];
2371     }
2372
2373   if (sal.symtab == 0)
2374     error (_("No line number information available."));
2375
2376   CORE_ADDR start_pc, end_pc;
2377   if (sal.line > 0 && find_line_pc_range (sal, &start_pc, &end_pc))
2378     {
2379       if (start_pc == end_pc)
2380         {
2381           printf_filtered ("Line %d of \"%s\"",
2382                            sal.line,
2383                            symtab_to_filename_for_display (sal.symtab));
2384           wrap_here ("  ");
2385           printf_filtered (" is at address ");
2386           print_address (get_current_arch (), start_pc, gdb_stdout);
2387           wrap_here ("  ");
2388           printf_filtered (" but contains no code.\n");
2389           sal = find_pc_line (start_pc, 0);
2390           if (sal.line > 0
2391               && find_line_pc_range (sal, &start_pc, &end_pc)
2392               && start_pc != end_pc)
2393             printf_filtered ("Attempting to find line %d instead.\n",
2394                              sal.line);
2395           else
2396             error (_("Cannot find a good line."));
2397         }
2398       }
2399     else
2400     /* Is there any case in which we get here, and have an address
2401        which the user would want to see?  If we have debugging
2402        symbols and no line numbers?  */
2403     error (_("Line number %d is out of range for \"%s\"."),
2404            sal.line, symtab_to_filename_for_display (sal.symtab));
2405
2406   /* Find within range of stated line.  */
2407   if (args && *args)
2408     tfind_1 (tfind_range, 0, start_pc, end_pc - 1, from_tty);
2409   else
2410     tfind_1 (tfind_outside, 0, start_pc, end_pc - 1, from_tty);
2411 }
2412
2413 /* tfind range command */
2414 static void
2415 tfind_range_command (const char *args, int from_tty)
2416 {
2417   static CORE_ADDR start, stop;
2418   const char *tmp;
2419
2420   check_trace_running (current_trace_status ());
2421
2422   if (args == 0 || *args == 0)
2423     { /* XXX FIXME: what should default behavior be?  */
2424       printf_filtered ("Usage: tfind range STARTADDR, ENDADDR\n");
2425       return;
2426     }
2427
2428   if (0 != (tmp = strchr (args, ',')))
2429     {
2430       std::string start_addr (args, tmp);
2431       ++tmp;
2432       tmp = skip_spaces (tmp);
2433       start = parse_and_eval_address (start_addr.c_str ());
2434       stop = parse_and_eval_address (tmp);
2435     }
2436   else
2437     {                   /* No explicit end address?  */
2438       start = parse_and_eval_address (args);
2439       stop = start + 1; /* ??? */
2440     }
2441
2442   tfind_1 (tfind_range, 0, start, stop, from_tty);
2443 }
2444
2445 /* tfind outside command */
2446 static void
2447 tfind_outside_command (const char *args, int from_tty)
2448 {
2449   CORE_ADDR start, stop;
2450   const char *tmp;
2451
2452   if (current_trace_status ()->running
2453       && current_trace_status ()->filename == NULL)
2454     error (_("May not look at trace frames while trace is running."));
2455
2456   if (args == 0 || *args == 0)
2457     { /* XXX FIXME: what should default behavior be?  */
2458       printf_filtered ("Usage: tfind outside STARTADDR, ENDADDR\n");
2459       return;
2460     }
2461
2462   if (0 != (tmp = strchr (args, ',')))
2463     {
2464       std::string start_addr (args, tmp);
2465       ++tmp;
2466       tmp = skip_spaces (tmp);
2467       start = parse_and_eval_address (start_addr.c_str ());
2468       stop = parse_and_eval_address (tmp);
2469     }
2470   else
2471     {                   /* No explicit end address?  */
2472       start = parse_and_eval_address (args);
2473       stop = start + 1; /* ??? */
2474     }
2475
2476   tfind_1 (tfind_outside, 0, start, stop, from_tty);
2477 }
2478
2479 /* info scope command: list the locals for a scope.  */
2480 static void
2481 info_scope_command (const char *args_in, int from_tty)
2482 {
2483   struct symbol *sym;
2484   struct bound_minimal_symbol msym;
2485   const struct block *block;
2486   const char *symname;
2487   const char *save_args = args_in;
2488   struct block_iterator iter;
2489   int j, count = 0;
2490   struct gdbarch *gdbarch;
2491   int regno;
2492   const char *args = args_in;
2493
2494   if (args == 0 || *args == 0)
2495     error (_("requires an argument (function, "
2496              "line or *addr) to define a scope"));
2497
2498   event_location_up location = string_to_event_location (&args,
2499                                                          current_language);
2500   std::vector<symtab_and_line> sals
2501     = decode_line_1 (location.get (), DECODE_LINE_FUNFIRSTLINE,
2502                      NULL, NULL, 0);
2503   if (sals.empty ())
2504     {
2505       /* Presumably decode_line_1 has already warned.  */
2506       return;
2507     }
2508
2509   /* Resolve line numbers to PC.  */
2510   resolve_sal_pc (&sals[0]);
2511   block = block_for_pc (sals[0].pc);
2512
2513   while (block != 0)
2514     {
2515       QUIT;                     /* Allow user to bail out with ^C.  */
2516       ALL_BLOCK_SYMBOLS (block, iter, sym)
2517         {
2518           QUIT;                 /* Allow user to bail out with ^C.  */
2519           if (count == 0)
2520             printf_filtered ("Scope for %s:\n", save_args);
2521           count++;
2522
2523           symname = sym->print_name ();
2524           if (symname == NULL || *symname == '\0')
2525             continue;           /* Probably botched, certainly useless.  */
2526
2527           gdbarch = symbol_arch (sym);
2528
2529           printf_filtered ("Symbol %s is ", symname);
2530
2531           if (SYMBOL_COMPUTED_OPS (sym) != NULL)
2532             SYMBOL_COMPUTED_OPS (sym)->describe_location (sym,
2533                                                           BLOCK_ENTRY_PC (block),
2534                                                           gdb_stdout);
2535           else
2536             {
2537               switch (SYMBOL_CLASS (sym))
2538                 {
2539                 default:
2540                 case LOC_UNDEF: /* Messed up symbol?  */
2541                   printf_filtered ("a bogus symbol, class %d.\n",
2542                                    SYMBOL_CLASS (sym));
2543                   count--;              /* Don't count this one.  */
2544                   continue;
2545                 case LOC_CONST:
2546                   printf_filtered ("a constant with value %s (%s)",
2547                                    plongest (SYMBOL_VALUE (sym)),
2548                                    hex_string (SYMBOL_VALUE (sym)));
2549                   break;
2550                 case LOC_CONST_BYTES:
2551                   printf_filtered ("constant bytes: ");
2552                   if (SYMBOL_TYPE (sym))
2553                     for (j = 0; j < TYPE_LENGTH (SYMBOL_TYPE (sym)); j++)
2554                       fprintf_filtered (gdb_stdout, " %02x",
2555                                         (unsigned) SYMBOL_VALUE_BYTES (sym)[j]);
2556                   break;
2557                 case LOC_STATIC:
2558                   printf_filtered ("in static storage at address ");
2559                   printf_filtered ("%s", paddress (gdbarch,
2560                                                    SYMBOL_VALUE_ADDRESS (sym)));
2561                   break;
2562                 case LOC_REGISTER:
2563                   /* GDBARCH is the architecture associated with the objfile
2564                      the symbol is defined in; the target architecture may be
2565                      different, and may provide additional registers.  However,
2566                      we do not know the target architecture at this point.
2567                      We assume the objfile architecture will contain all the
2568                      standard registers that occur in debug info in that
2569                      objfile.  */
2570                   regno = SYMBOL_REGISTER_OPS (sym)->register_number (sym,
2571                                                                       gdbarch);
2572
2573                   if (SYMBOL_IS_ARGUMENT (sym))
2574                     printf_filtered ("an argument in register $%s",
2575                                      gdbarch_register_name (gdbarch, regno));
2576                   else
2577                     printf_filtered ("a local variable in register $%s",
2578                                      gdbarch_register_name (gdbarch, regno));
2579                   break;
2580                 case LOC_ARG:
2581                   printf_filtered ("an argument at stack/frame offset %s",
2582                                    plongest (SYMBOL_VALUE (sym)));
2583                   break;
2584                 case LOC_LOCAL:
2585                   printf_filtered ("a local variable at frame offset %s",
2586                                    plongest (SYMBOL_VALUE (sym)));
2587                   break;
2588                 case LOC_REF_ARG:
2589                   printf_filtered ("a reference argument at offset %s",
2590                                    plongest (SYMBOL_VALUE (sym)));
2591                   break;
2592                 case LOC_REGPARM_ADDR:
2593                   /* Note comment at LOC_REGISTER.  */
2594                   regno = SYMBOL_REGISTER_OPS (sym)->register_number (sym,
2595                                                                       gdbarch);
2596                   printf_filtered ("the address of an argument, in register $%s",
2597                                    gdbarch_register_name (gdbarch, regno));
2598                   break;
2599                 case LOC_TYPEDEF:
2600                   printf_filtered ("a typedef.\n");
2601                   continue;
2602                 case LOC_LABEL:
2603                   printf_filtered ("a label at address ");
2604                   printf_filtered ("%s", paddress (gdbarch,
2605                                                    SYMBOL_VALUE_ADDRESS (sym)));
2606                   break;
2607                 case LOC_BLOCK:
2608                   printf_filtered ("a function at address ");
2609                   printf_filtered ("%s",
2610                                    paddress (gdbarch, BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym))));
2611                   break;
2612                 case LOC_UNRESOLVED:
2613                   msym = lookup_minimal_symbol (sym->linkage_name (),
2614                                                 NULL, NULL);
2615                   if (msym.minsym == NULL)
2616                     printf_filtered ("Unresolved Static");
2617                   else
2618                     {
2619                       printf_filtered ("static storage at address ");
2620                       printf_filtered ("%s",
2621                                        paddress (gdbarch,
2622                                                  BMSYMBOL_VALUE_ADDRESS (msym)));
2623                     }
2624                   break;
2625                 case LOC_OPTIMIZED_OUT:
2626                   printf_filtered ("optimized out.\n");
2627                   continue;
2628                 case LOC_COMPUTED:
2629                   gdb_assert_not_reached (_("LOC_COMPUTED variable missing a method"));
2630                 }
2631             }
2632           if (SYMBOL_TYPE (sym))
2633             {
2634               struct type *t = check_typedef (SYMBOL_TYPE (sym));
2635
2636               printf_filtered (", length %s.\n", pulongest (TYPE_LENGTH (t)));
2637             }
2638         }
2639       if (BLOCK_FUNCTION (block))
2640         break;
2641       else
2642         block = BLOCK_SUPERBLOCK (block);
2643     }
2644   if (count <= 0)
2645     printf_filtered ("Scope for %s contains no locals or arguments.\n",
2646                      save_args);
2647 }
2648
2649 /* Helper for trace_dump_command.  Dump the action list starting at
2650    ACTION.  STEPPING_ACTIONS is true if we're iterating over the
2651    actions of the body of a while-stepping action.  STEPPING_FRAME is
2652    set if the current traceframe was determined to be a while-stepping
2653    traceframe.  */
2654
2655 static void
2656 trace_dump_actions (struct command_line *action,
2657                     int stepping_actions, int stepping_frame,
2658                     int from_tty)
2659 {
2660   const char *action_exp, *next_comma;
2661
2662   for (; action != NULL; action = action->next)
2663     {
2664       struct cmd_list_element *cmd;
2665
2666       QUIT;                     /* Allow user to bail out with ^C.  */
2667       action_exp = action->line;
2668       action_exp = skip_spaces (action_exp);
2669
2670       /* The collection actions to be done while stepping are
2671          bracketed by the commands "while-stepping" and "end".  */
2672
2673       if (*action_exp == '#')   /* comment line */
2674         continue;
2675
2676       cmd = lookup_cmd (&action_exp, cmdlist, "", -1, 1);
2677       if (cmd == 0)
2678         error (_("Bad action list item: %s"), action_exp);
2679
2680       if (cmd_cfunc_eq (cmd, while_stepping_pseudocommand))
2681         {
2682           gdb_assert (action->body_list_1 == nullptr);
2683           trace_dump_actions (action->body_list_0.get (),
2684                               1, stepping_frame, from_tty);
2685         }
2686       else if (cmd_cfunc_eq (cmd, collect_pseudocommand))
2687         {
2688           /* Display the collected data.
2689              For the trap frame, display only what was collected at
2690              the trap.  Likewise for stepping frames, display only
2691              what was collected while stepping.  This means that the
2692              two boolean variables, STEPPING_FRAME and
2693              STEPPING_ACTIONS should be equal.  */
2694           if (stepping_frame == stepping_actions)
2695             {
2696               int trace_string = 0;
2697
2698               if (*action_exp == '/')
2699                 action_exp = decode_agent_options (action_exp, &trace_string);
2700
2701               do
2702                 {               /* Repeat over a comma-separated list.  */
2703                   QUIT;         /* Allow user to bail out with ^C.  */
2704                   if (*action_exp == ',')
2705                     action_exp++;
2706                   action_exp = skip_spaces (action_exp);
2707
2708                   next_comma = strchr (action_exp, ',');
2709
2710                   if (0 == strncasecmp (action_exp, "$reg", 4))
2711                     registers_info (NULL, from_tty);
2712                   else if (0 == strncasecmp (action_exp, "$_ret", 5))
2713                     ;
2714                   else if (0 == strncasecmp (action_exp, "$loc", 4))
2715                     info_locals_command (NULL, from_tty);
2716                   else if (0 == strncasecmp (action_exp, "$arg", 4))
2717                     info_args_command (NULL, from_tty);
2718                   else
2719                     {           /* variable */
2720                       std::string contents;
2721                       const char *exp = action_exp;
2722                       if (next_comma != NULL)
2723                         {
2724                           size_t len = next_comma - action_exp;
2725                           contents = std::string (action_exp, len);
2726                           exp = contents.c_str ();
2727                         }
2728
2729                       printf_filtered ("%s = ", exp);
2730                       output_command (exp, from_tty);
2731                       printf_filtered ("\n");
2732                     }
2733                   action_exp = next_comma;
2734                 }
2735               while (action_exp && *action_exp == ',');
2736             }
2737         }
2738     }
2739 }
2740
2741 /* Return bp_location of the tracepoint associated with the current
2742    traceframe.  Set *STEPPING_FRAME_P to 1 if the current traceframe
2743    is a stepping traceframe.  */
2744
2745 struct bp_location *
2746 get_traceframe_location (int *stepping_frame_p)
2747 {
2748   struct tracepoint *t;
2749   struct bp_location *tloc;
2750   struct regcache *regcache;
2751
2752   if (tracepoint_number == -1)
2753     error (_("No current trace frame."));
2754
2755   t = get_tracepoint (tracepoint_number);
2756
2757   if (t == NULL)
2758     error (_("No known tracepoint matches 'current' tracepoint #%d."),
2759            tracepoint_number);
2760
2761   /* The current frame is a trap frame if the frame PC is equal to the
2762      tracepoint PC.  If not, then the current frame was collected
2763      during single-stepping.  */
2764   regcache = get_current_regcache ();
2765
2766   /* If the traceframe's address matches any of the tracepoint's
2767      locations, assume it is a direct hit rather than a while-stepping
2768      frame.  (FIXME this is not reliable, should record each frame's
2769      type.)  */
2770   for (tloc = t->loc; tloc; tloc = tloc->next)
2771     if (tloc->address == regcache_read_pc (regcache))
2772       {
2773         *stepping_frame_p = 0;
2774         return tloc;
2775       }
2776
2777   /* If this is a stepping frame, we don't know which location
2778      triggered.  The first is as good (or bad) a guess as any...  */
2779   *stepping_frame_p = 1;
2780   return t->loc;
2781 }
2782
2783 /* Return the default collect actions of a tracepoint T.  */
2784
2785 static counted_command_line
2786 all_tracepoint_actions (struct breakpoint *t)
2787 {
2788   counted_command_line actions (nullptr, command_lines_deleter ());
2789
2790   /* If there are default expressions to collect, make up a collect
2791      action and prepend to the action list to encode.  Note that since
2792      validation is per-tracepoint (local var "xyz" might be valid for
2793      one tracepoint and not another, etc), we make up the action on
2794      the fly, and don't cache it.  */
2795   if (*default_collect)
2796     {
2797       gdb::unique_xmalloc_ptr<char> default_collect_line
2798         (xstrprintf ("collect %s", default_collect));
2799
2800       validate_actionline (default_collect_line.get (), t);
2801       actions.reset (new struct command_line (simple_control,
2802                                               default_collect_line.release ()),
2803                      command_lines_deleter ());
2804     }
2805
2806   return actions;
2807 }
2808
2809 /* The tdump command.  */
2810
2811 static void
2812 tdump_command (const char *args, int from_tty)
2813 {
2814   int stepping_frame = 0;
2815   struct bp_location *loc;
2816
2817   /* This throws an error is not inspecting a trace frame.  */
2818   loc = get_traceframe_location (&stepping_frame);
2819
2820   printf_filtered ("Data collected at tracepoint %d, trace frame %d:\n",
2821                    tracepoint_number, traceframe_number);
2822
2823   /* This command only makes sense for the current frame, not the
2824      selected frame.  */
2825   scoped_restore_current_thread restore_thread;
2826
2827   select_frame (get_current_frame ());
2828
2829   counted_command_line actions = all_tracepoint_actions (loc->owner);
2830
2831   trace_dump_actions (actions.get (), 0, stepping_frame, from_tty);
2832   trace_dump_actions (breakpoint_commands (loc->owner), 0, stepping_frame,
2833                       from_tty);
2834 }
2835
2836 /* Encode a piece of a tracepoint's source-level definition in a form
2837    that is suitable for both protocol and saving in files.  */
2838 /* This version does not do multiple encodes for long strings; it should
2839    return an offset to the next piece to encode.  FIXME  */
2840
2841 int
2842 encode_source_string (int tpnum, ULONGEST addr,
2843                       const char *srctype, const char *src,
2844                       char *buf, int buf_size)
2845 {
2846   if (80 + strlen (srctype) > buf_size)
2847     error (_("Buffer too small for source encoding"));
2848   sprintf (buf, "%x:%s:%s:%x:%x:",
2849            tpnum, phex_nz (addr, sizeof (addr)),
2850            srctype, 0, (int) strlen (src));
2851   if (strlen (buf) + strlen (src) * 2 >= buf_size)
2852     error (_("Source string too long for buffer"));
2853   bin2hex ((gdb_byte *) src, buf + strlen (buf), strlen (src));
2854   return -1;
2855 }
2856
2857 /* Tell the target what to do with an ongoing tracing run if GDB
2858    disconnects for some reason.  */
2859
2860 static void
2861 set_disconnected_tracing (const char *args, int from_tty,
2862                           struct cmd_list_element *c)
2863 {
2864   target_set_disconnected_tracing (disconnected_tracing);
2865 }
2866
2867 static void
2868 set_circular_trace_buffer (const char *args, int from_tty,
2869                            struct cmd_list_element *c)
2870 {
2871   target_set_circular_trace_buffer (circular_trace_buffer);
2872 }
2873
2874 static void
2875 set_trace_buffer_size (const char *args, int from_tty,
2876                            struct cmd_list_element *c)
2877 {
2878   target_set_trace_buffer_size (trace_buffer_size);
2879 }
2880
2881 static void
2882 set_trace_user (const char *args, int from_tty,
2883                 struct cmd_list_element *c)
2884 {
2885   int ret;
2886
2887   ret = target_set_trace_notes (trace_user, NULL, NULL);
2888
2889   if (!ret)
2890     warning (_("Target does not support trace notes, user ignored"));
2891 }
2892
2893 static void
2894 set_trace_notes (const char *args, int from_tty,
2895                  struct cmd_list_element *c)
2896 {
2897   int ret;
2898
2899   ret = target_set_trace_notes (NULL, trace_notes, NULL);
2900
2901   if (!ret)
2902     warning (_("Target does not support trace notes, note ignored"));
2903 }
2904
2905 static void
2906 set_trace_stop_notes (const char *args, int from_tty,
2907                       struct cmd_list_element *c)
2908 {
2909   int ret;
2910
2911   ret = target_set_trace_notes (NULL, NULL, trace_stop_notes);
2912
2913   if (!ret)
2914     warning (_("Target does not support trace notes, stop note ignored"));
2915 }
2916
2917 /* Convert the memory pointed to by mem into hex, placing result in buf.
2918  * Return a pointer to the last char put in buf (null)
2919  * "stolen" from sparc-stub.c
2920  */
2921
2922 static const char hexchars[] = "0123456789abcdef";
2923
2924 static char *
2925 mem2hex (gdb_byte *mem, char *buf, int count)
2926 {
2927   gdb_byte ch;
2928
2929   while (count-- > 0)
2930     {
2931       ch = *mem++;
2932
2933       *buf++ = hexchars[ch >> 4];
2934       *buf++ = hexchars[ch & 0xf];
2935     }
2936
2937   *buf = 0;
2938
2939   return buf;
2940 }
2941
2942 int
2943 get_traceframe_number (void)
2944 {
2945   return traceframe_number;
2946 }
2947
2948 int
2949 get_tracepoint_number (void)
2950 {
2951   return tracepoint_number;
2952 }
2953
2954 /* Make the traceframe NUM be the current trace frame.  Does nothing
2955    if NUM is already current.  */
2956
2957 void
2958 set_current_traceframe (int num)
2959 {
2960   int newnum;
2961
2962   if (traceframe_number == num)
2963     {
2964       /* Nothing to do.  */
2965       return;
2966     }
2967
2968   newnum = target_trace_find (tfind_number, num, 0, 0, NULL);
2969
2970   if (newnum != num)
2971     warning (_("could not change traceframe"));
2972
2973   set_traceframe_num (newnum);
2974
2975   /* Changing the traceframe changes our view of registers and of the
2976      frame chain.  */
2977   registers_changed ();
2978
2979   clear_traceframe_info ();
2980 }
2981
2982 scoped_restore_current_traceframe::scoped_restore_current_traceframe ()
2983 : m_traceframe_number (traceframe_number)
2984 {}
2985
2986 /* Given a number and address, return an uploaded tracepoint with that
2987    number, creating if necessary.  */
2988
2989 struct uploaded_tp *
2990 get_uploaded_tp (int num, ULONGEST addr, struct uploaded_tp **utpp)
2991 {
2992   struct uploaded_tp *utp;
2993
2994   for (utp = *utpp; utp; utp = utp->next)
2995     if (utp->number == num && utp->addr == addr)
2996       return utp;
2997
2998   utp = new uploaded_tp;
2999   utp->number = num;
3000   utp->addr = addr;
3001   utp->next = *utpp;
3002   *utpp = utp;
3003
3004   return utp;
3005 }
3006
3007 void
3008 free_uploaded_tps (struct uploaded_tp **utpp)
3009 {
3010   struct uploaded_tp *next_one;
3011
3012   while (*utpp)
3013     {
3014       next_one = (*utpp)->next;
3015       delete *utpp;
3016       *utpp = next_one;
3017     }
3018 }
3019
3020 /* Given a number and address, return an uploaded tracepoint with that
3021    number, creating if necessary.  */
3022
3023 struct uploaded_tsv *
3024 get_uploaded_tsv (int num, struct uploaded_tsv **utsvp)
3025 {
3026   struct uploaded_tsv *utsv;
3027
3028   for (utsv = *utsvp; utsv; utsv = utsv->next)
3029     if (utsv->number == num)
3030       return utsv;
3031
3032   utsv = XCNEW (struct uploaded_tsv);
3033   utsv->number = num;
3034   utsv->next = *utsvp;
3035   *utsvp = utsv;
3036
3037   return utsv;
3038 }
3039
3040 void
3041 free_uploaded_tsvs (struct uploaded_tsv **utsvp)
3042 {
3043   struct uploaded_tsv *next_one;
3044
3045   while (*utsvp)
3046     {
3047       next_one = (*utsvp)->next;
3048       xfree (*utsvp);
3049       *utsvp = next_one;
3050     }
3051 }
3052
3053 /* FIXME this function is heuristic and will miss the cases where the
3054    conditional is semantically identical but differs in whitespace,
3055    such as "x == 0" vs "x==0".  */
3056
3057 static int
3058 cond_string_is_same (char *str1, char *str2)
3059 {
3060   if (str1 == NULL || str2 == NULL)
3061     return (str1 == str2);
3062
3063   return (strcmp (str1, str2) == 0);
3064 }
3065
3066 /* Look for an existing tracepoint that seems similar enough to the
3067    uploaded one.  Enablement isn't compared, because the user can
3068    toggle that freely, and may have done so in anticipation of the
3069    next trace run.  Return the location of matched tracepoint.  */
3070
3071 static struct bp_location *
3072 find_matching_tracepoint_location (struct uploaded_tp *utp)
3073 {
3074   struct bp_location *loc;
3075
3076   for (breakpoint *b : all_tracepoints ())
3077     {
3078       struct tracepoint *t = (struct tracepoint *) b;
3079
3080       if (b->type == utp->type
3081           && t->step_count == utp->step
3082           && t->pass_count == utp->pass
3083           && cond_string_is_same (t->cond_string,
3084                                   utp->cond_string.get ())
3085           /* FIXME also test actions.  */
3086           )
3087         {
3088           /* Scan the locations for an address match.  */
3089           for (loc = b->loc; loc; loc = loc->next)
3090             {
3091               if (loc->address == utp->addr)
3092                 return loc;
3093             }
3094         }
3095     }
3096   return NULL;
3097 }
3098
3099 /* Given a list of tracepoints uploaded from a target, attempt to
3100    match them up with existing tracepoints, and create new ones if not
3101    found.  */
3102
3103 void
3104 merge_uploaded_tracepoints (struct uploaded_tp **uploaded_tps)
3105 {
3106   struct uploaded_tp *utp;
3107   /* A set of tracepoints which are modified.  */
3108   std::vector<breakpoint *> modified_tp;
3109
3110   /* Look for GDB tracepoints that match up with our uploaded versions.  */
3111   for (utp = *uploaded_tps; utp; utp = utp->next)
3112     {
3113       struct bp_location *loc;
3114       struct tracepoint *t;
3115
3116       loc = find_matching_tracepoint_location (utp);
3117       if (loc)
3118         {
3119           int found = 0;
3120
3121           /* Mark this location as already inserted.  */
3122           loc->inserted = 1;
3123           t = (struct tracepoint *) loc->owner;
3124           printf_filtered (_("Assuming tracepoint %d is same "
3125                              "as target's tracepoint %d at %s.\n"),
3126                            loc->owner->number, utp->number,
3127                            paddress (loc->gdbarch, utp->addr));
3128
3129           /* The tracepoint LOC->owner was modified (the location LOC
3130              was marked as inserted in the target).  Save it in
3131              MODIFIED_TP if not there yet.  The 'breakpoint-modified'
3132              observers will be notified later once for each tracepoint
3133              saved in MODIFIED_TP.  */
3134           for (breakpoint *b : modified_tp)
3135             if (b == loc->owner)
3136               {
3137                 found = 1;
3138                 break;
3139               }
3140           if (!found)
3141             modified_tp.push_back (loc->owner);
3142         }
3143       else
3144         {
3145           t = create_tracepoint_from_upload (utp);
3146           if (t)
3147             printf_filtered (_("Created tracepoint %d for "
3148                                "target's tracepoint %d at %s.\n"),
3149                              t->number, utp->number,
3150                              paddress (get_current_arch (), utp->addr));
3151           else
3152             printf_filtered (_("Failed to create tracepoint for target's "
3153                                "tracepoint %d at %s, skipping it.\n"),
3154                              utp->number,
3155                              paddress (get_current_arch (), utp->addr));
3156         }
3157       /* Whether found or created, record the number used by the
3158          target, to help with mapping target tracepoints back to their
3159          counterparts here.  */
3160       if (t)
3161         t->number_on_target = utp->number;
3162     }
3163
3164   /* Notify 'breakpoint-modified' observer that at least one of B's
3165      locations was changed.  */
3166   for (breakpoint *b : modified_tp)
3167     gdb::observers::breakpoint_modified.notify (b);
3168
3169   free_uploaded_tps (uploaded_tps);
3170 }
3171
3172 /* Trace state variables don't have much to identify them beyond their
3173    name, so just use that to detect matches.  */
3174
3175 static struct trace_state_variable *
3176 find_matching_tsv (struct uploaded_tsv *utsv)
3177 {
3178   if (!utsv->name)
3179     return NULL;
3180
3181   return find_trace_state_variable (utsv->name);
3182 }
3183
3184 static struct trace_state_variable *
3185 create_tsv_from_upload (struct uploaded_tsv *utsv)
3186 {
3187   const char *namebase;
3188   std::string buf;
3189   int try_num = 0;
3190   struct trace_state_variable *tsv;
3191
3192   if (utsv->name)
3193     {
3194       namebase = utsv->name;
3195       buf = namebase;
3196     }
3197   else
3198     {
3199       namebase = "__tsv";
3200       buf = string_printf ("%s_%d", namebase, try_num++);
3201     }
3202
3203   /* Fish for a name that is not in use.  */
3204   /* (should check against all internal vars?)  */
3205   while (find_trace_state_variable (buf.c_str ()))
3206     buf = string_printf ("%s_%d", namebase, try_num++);
3207
3208   /* We have an available name, create the variable.  */
3209   tsv = create_trace_state_variable (buf.c_str ());
3210   tsv->initial_value = utsv->initial_value;
3211   tsv->builtin = utsv->builtin;
3212
3213   gdb::observers::tsv_created.notify (tsv);
3214
3215   return tsv;
3216 }
3217
3218 /* Given a list of uploaded trace state variables, try to match them
3219    up with existing variables, or create additional ones.  */
3220
3221 void
3222 merge_uploaded_trace_state_variables (struct uploaded_tsv **uploaded_tsvs)
3223 {
3224   struct uploaded_tsv *utsv;
3225   int highest;
3226
3227   /* Most likely some numbers will have to be reassigned as part of
3228      the merge, so clear them all in anticipation.  */
3229   for (trace_state_variable &tsv : tvariables)
3230     tsv.number = 0;
3231
3232   for (utsv = *uploaded_tsvs; utsv; utsv = utsv->next)
3233     {
3234       struct trace_state_variable *tsv = find_matching_tsv (utsv);
3235       if (tsv)
3236         {
3237           if (info_verbose)
3238             printf_filtered (_("Assuming trace state variable $%s "
3239                                "is same as target's variable %d.\n"),
3240                              tsv->name.c_str (), utsv->number);
3241         }
3242       else
3243         {
3244           tsv = create_tsv_from_upload (utsv);
3245           if (info_verbose)
3246             printf_filtered (_("Created trace state variable "
3247                                "$%s for target's variable %d.\n"),
3248                              tsv->name.c_str (), utsv->number);
3249         }
3250       /* Give precedence to numberings that come from the target.  */
3251       if (tsv)
3252         tsv->number = utsv->number;
3253     }
3254
3255   /* Renumber everything that didn't get a target-assigned number.  */
3256   highest = 0;
3257   for (const trace_state_variable &tsv : tvariables)
3258     highest = std::max (tsv.number, highest);
3259
3260   ++highest;
3261   for (trace_state_variable &tsv : tvariables)
3262     if (tsv.number == 0)
3263       tsv.number = highest++;
3264
3265   free_uploaded_tsvs (uploaded_tsvs);
3266 }
3267
3268 /* Parse the part of trace status syntax that is shared between
3269    the remote protocol and the trace file reader.  */
3270
3271 void
3272 parse_trace_status (const char *line, struct trace_status *ts)
3273 {
3274   const char *p = line, *p1, *p2, *p3, *p_temp;
3275   int end;
3276   ULONGEST val;
3277
3278   ts->running_known = 1;
3279   ts->running = (*p++ == '1');
3280   ts->stop_reason = trace_stop_reason_unknown;
3281   xfree (ts->stop_desc);
3282   ts->stop_desc = NULL;
3283   ts->traceframe_count = -1;
3284   ts->traceframes_created = -1;
3285   ts->buffer_free = -1;
3286   ts->buffer_size = -1;
3287   ts->disconnected_tracing = 0;
3288   ts->circular_buffer = 0;
3289   xfree (ts->user_name);
3290   ts->user_name = NULL;
3291   xfree (ts->notes);
3292   ts->notes = NULL;
3293   ts->start_time = ts->stop_time = 0;
3294
3295   while (*p++)
3296     {
3297       p1 = strchr (p, ':');
3298       if (p1 == NULL)
3299         error (_("Malformed trace status, at %s\n\
3300 Status line: '%s'\n"), p, line);
3301       p3 = strchr (p, ';');
3302       if (p3 == NULL)
3303         p3 = p + strlen (p);
3304       if (strncmp (p, stop_reason_names[trace_buffer_full], p1 - p) == 0)
3305         {
3306           p = unpack_varlen_hex (++p1, &val);
3307           ts->stop_reason = trace_buffer_full;
3308         }
3309       else if (strncmp (p, stop_reason_names[trace_never_run], p1 - p) == 0)
3310         {
3311           p = unpack_varlen_hex (++p1, &val);
3312           ts->stop_reason = trace_never_run;
3313         }
3314       else if (strncmp (p, stop_reason_names[tracepoint_passcount],
3315                         p1 - p) == 0)
3316         {
3317           p = unpack_varlen_hex (++p1, &val);
3318           ts->stop_reason = tracepoint_passcount;
3319           ts->stopping_tracepoint = val;
3320         }
3321       else if (strncmp (p, stop_reason_names[trace_stop_command], p1 - p) == 0)
3322         {
3323           p2 = strchr (++p1, ':');
3324           if (!p2 || p2 > p3)
3325             {
3326               /*older style*/
3327               p2 = p1;
3328             }
3329           else if (p2 != p1)
3330             {
3331               ts->stop_desc = (char *) xmalloc (strlen (line));
3332               end = hex2bin (p1, (gdb_byte *) ts->stop_desc, (p2 - p1) / 2);
3333               ts->stop_desc[end] = '\0';
3334             }
3335           else
3336             ts->stop_desc = xstrdup ("");
3337
3338           p = unpack_varlen_hex (++p2, &val);
3339           ts->stop_reason = trace_stop_command;
3340         }
3341       else if (strncmp (p, stop_reason_names[trace_disconnected], p1 - p) == 0)
3342         {
3343           p = unpack_varlen_hex (++p1, &val);
3344           ts->stop_reason = trace_disconnected;
3345         }
3346       else if (strncmp (p, stop_reason_names[tracepoint_error], p1 - p) == 0)
3347         {
3348           p2 = strchr (++p1, ':');
3349           if (p2 != p1)
3350             {
3351               ts->stop_desc = (char *) xmalloc ((p2 - p1) / 2 + 1);
3352               end = hex2bin (p1, (gdb_byte *) ts->stop_desc, (p2 - p1) / 2);
3353               ts->stop_desc[end] = '\0';
3354             }
3355           else
3356             ts->stop_desc = xstrdup ("");
3357
3358           p = unpack_varlen_hex (++p2, &val);
3359           ts->stopping_tracepoint = val;
3360           ts->stop_reason = tracepoint_error;
3361         }
3362       else if (strncmp (p, "tframes", p1 - p) == 0)
3363         {
3364           p = unpack_varlen_hex (++p1, &val);
3365           ts->traceframe_count = val;
3366         }
3367       else if (strncmp (p, "tcreated", p1 - p) == 0)
3368         {
3369           p = unpack_varlen_hex (++p1, &val);
3370           ts->traceframes_created = val;
3371         }
3372       else if (strncmp (p, "tfree", p1 - p) == 0)
3373         {
3374           p = unpack_varlen_hex (++p1, &val);
3375           ts->buffer_free = val;
3376         }
3377       else if (strncmp (p, "tsize", p1 - p) == 0)
3378         {
3379           p = unpack_varlen_hex (++p1, &val);
3380           ts->buffer_size = val;
3381         }
3382       else if (strncmp (p, "disconn", p1 - p) == 0)
3383         {
3384           p = unpack_varlen_hex (++p1, &val);
3385           ts->disconnected_tracing = val;
3386         }
3387       else if (strncmp (p, "circular", p1 - p) == 0)
3388         {
3389           p = unpack_varlen_hex (++p1, &val);
3390           ts->circular_buffer = val;
3391         }
3392       else if (strncmp (p, "starttime", p1 - p) == 0)
3393         {
3394           p = unpack_varlen_hex (++p1, &val);
3395           ts->start_time = val;
3396         }
3397       else if (strncmp (p, "stoptime", p1 - p) == 0)
3398         {
3399           p = unpack_varlen_hex (++p1, &val);
3400           ts->stop_time = val;
3401         }
3402       else if (strncmp (p, "username", p1 - p) == 0)
3403         {
3404           ++p1;
3405           ts->user_name = (char *) xmalloc (strlen (p) / 2);
3406           end = hex2bin (p1, (gdb_byte *) ts->user_name, (p3 - p1)  / 2);
3407           ts->user_name[end] = '\0';
3408           p = p3;
3409         }
3410       else if (strncmp (p, "notes", p1 - p) == 0)
3411         {
3412           ++p1;
3413           ts->notes = (char *) xmalloc (strlen (p) / 2);
3414           end = hex2bin (p1, (gdb_byte *) ts->notes, (p3 - p1) / 2);
3415           ts->notes[end] = '\0';
3416           p = p3;
3417         }
3418       else
3419         {
3420           /* Silently skip unknown optional info.  */
3421           p_temp = strchr (p1 + 1, ';');
3422           if (p_temp)
3423             p = p_temp;
3424           else
3425             /* Must be at the end.  */
3426             break;
3427         }
3428     }
3429 }
3430
3431 void
3432 parse_tracepoint_status (const char *p, struct breakpoint *bp,
3433                          struct uploaded_tp *utp)
3434 {
3435   ULONGEST uval;
3436   struct tracepoint *tp = (struct tracepoint *) bp;
3437
3438   p = unpack_varlen_hex (p, &uval);
3439   if (tp)
3440     tp->hit_count += uval;
3441   else
3442     utp->hit_count += uval;
3443   p = unpack_varlen_hex (p + 1, &uval);
3444   if (tp)
3445     tp->traceframe_usage += uval;
3446   else
3447     utp->traceframe_usage += uval;
3448   /* Ignore any extra, allowing for future extensions.  */
3449 }
3450
3451 /* Given a line of text defining a part of a tracepoint, parse it into
3452    an "uploaded tracepoint".  */
3453
3454 void
3455 parse_tracepoint_definition (const char *line, struct uploaded_tp **utpp)
3456 {
3457   const char *p;
3458   char piece;
3459   ULONGEST num, addr, step, pass, orig_size, xlen, start;
3460   int enabled, end;
3461   enum bptype type;
3462   const char *srctype;
3463   char *buf;
3464   struct uploaded_tp *utp = NULL;
3465
3466   p = line;
3467   /* Both tracepoint and action definitions start with the same number
3468      and address sequence.  */
3469   piece = *p++;
3470   p = unpack_varlen_hex (p, &num);
3471   p++;  /* skip a colon */
3472   p = unpack_varlen_hex (p, &addr);
3473   p++;  /* skip a colon */
3474   if (piece == 'T')
3475     {
3476       gdb::unique_xmalloc_ptr<char[]> cond;
3477
3478       enabled = (*p++ == 'E');
3479       p++;  /* skip a colon */
3480       p = unpack_varlen_hex (p, &step);
3481       p++;  /* skip a colon */
3482       p = unpack_varlen_hex (p, &pass);
3483       type = bp_tracepoint;
3484       /* Thumb through optional fields.  */
3485       while (*p == ':')
3486         {
3487           p++;  /* skip a colon */
3488           if (*p == 'F')
3489             {
3490               type = bp_fast_tracepoint;
3491               p++;
3492               p = unpack_varlen_hex (p, &orig_size);
3493             }
3494           else if (*p == 'S')
3495             {
3496               type = bp_static_tracepoint;
3497               p++;
3498             }
3499           else if (*p == 'X')
3500             {
3501               p++;
3502               p = unpack_varlen_hex (p, &xlen);
3503               p++;  /* skip a comma */
3504               cond.reset ((char *) xmalloc (2 * xlen + 1));
3505               strncpy (&cond[0], p, 2 * xlen);
3506               cond[2 * xlen] = '\0';
3507               p += 2 * xlen;
3508             }
3509           else
3510             warning (_("Unrecognized char '%c' in tracepoint "
3511                        "definition, skipping rest"), *p);
3512         }
3513       utp = get_uploaded_tp (num, addr, utpp);
3514       utp->type = type;
3515       utp->enabled = enabled;
3516       utp->step = step;
3517       utp->pass = pass;
3518       utp->cond = std::move (cond);
3519     }
3520   else if (piece == 'A')
3521     {
3522       utp = get_uploaded_tp (num, addr, utpp);
3523       utp->actions.emplace_back (xstrdup (p));
3524     }
3525   else if (piece == 'S')
3526     {
3527       utp = get_uploaded_tp (num, addr, utpp);
3528       utp->step_actions.emplace_back (xstrdup (p));
3529     }
3530   else if (piece == 'Z')
3531     {
3532       /* Parse a chunk of source form definition.  */
3533       utp = get_uploaded_tp (num, addr, utpp);
3534       srctype = p;
3535       p = strchr (p, ':');
3536       p++;  /* skip a colon */
3537       p = unpack_varlen_hex (p, &start);
3538       p++;  /* skip a colon */
3539       p = unpack_varlen_hex (p, &xlen);
3540       p++;  /* skip a colon */
3541
3542       buf = (char *) alloca (strlen (line));
3543
3544       end = hex2bin (p, (gdb_byte *) buf, strlen (p) / 2);
3545       buf[end] = '\0';
3546
3547       if (startswith (srctype, "at:"))
3548         utp->at_string.reset (xstrdup (buf));
3549       else if (startswith (srctype, "cond:"))
3550         utp->cond_string.reset (xstrdup (buf));
3551       else if (startswith (srctype, "cmd:"))
3552         utp->cmd_strings.emplace_back (xstrdup (buf));
3553     }
3554   else if (piece == 'V')
3555     {
3556       utp = get_uploaded_tp (num, addr, utpp);
3557
3558       parse_tracepoint_status (p, NULL, utp);
3559     }
3560   else
3561     {
3562       /* Don't error out, the target might be sending us optional
3563          info that we don't care about.  */
3564       warning (_("Unrecognized tracepoint piece '%c', ignoring"), piece);
3565     }
3566 }
3567
3568 /* Convert a textual description of a trace state variable into an
3569    uploaded object.  */
3570
3571 void
3572 parse_tsv_definition (const char *line, struct uploaded_tsv **utsvp)
3573 {
3574   const char *p;
3575   char *buf;
3576   ULONGEST num, initval, builtin;
3577   int end;
3578   struct uploaded_tsv *utsv = NULL;
3579
3580   buf = (char *) alloca (strlen (line));
3581
3582   p = line;
3583   p = unpack_varlen_hex (p, &num);
3584   p++; /* skip a colon */
3585   p = unpack_varlen_hex (p, &initval);
3586   p++; /* skip a colon */
3587   p = unpack_varlen_hex (p, &builtin);
3588   p++; /* skip a colon */
3589   end = hex2bin (p, (gdb_byte *) buf, strlen (p) / 2);
3590   buf[end] = '\0';
3591
3592   utsv = get_uploaded_tsv (num, utsvp);
3593   utsv->initial_value = initval;
3594   utsv->builtin = builtin;
3595   utsv->name = xstrdup (buf);
3596 }
3597
3598 /* Given a line of text defining a static tracepoint marker, parse it
3599    into a "static tracepoint marker" object.  Throws an error is
3600    parsing fails.  If PP is non-null, it points to one past the end of
3601    the parsed marker definition.  */
3602
3603 void
3604 parse_static_tracepoint_marker_definition (const char *line, const char **pp,
3605                                            static_tracepoint_marker *marker)
3606 {
3607   const char *p, *endp;
3608   ULONGEST addr;
3609
3610   p = line;
3611   p = unpack_varlen_hex (p, &addr);
3612   p++;  /* skip a colon */
3613
3614   marker->gdbarch = target_gdbarch ();
3615   marker->address = (CORE_ADDR) addr;
3616
3617   endp = strchr (p, ':');
3618   if (endp == NULL)
3619     error (_("bad marker definition: %s"), line);
3620
3621   marker->str_id = hex2str (p, (endp - p) / 2);
3622
3623   p = endp;
3624   p++; /* skip a colon */
3625
3626   /* This definition may be followed by another one, separated by a comma.  */
3627   int hex_len;
3628   endp = strchr (p, ',');
3629   if (endp != nullptr)
3630     hex_len = endp - p;
3631   else
3632     hex_len = strlen (p);
3633
3634   marker->extra = hex2str (p, hex_len / 2);
3635
3636   if (pp != nullptr)
3637     *pp = p + hex_len;
3638 }
3639
3640 /* Print MARKER to gdb_stdout.  */
3641
3642 static void
3643 print_one_static_tracepoint_marker (int count,
3644                                     const static_tracepoint_marker &marker)
3645 {
3646   struct symbol *sym;
3647
3648   char wrap_indent[80];
3649   char extra_field_indent[80];
3650   struct ui_out *uiout = current_uiout;
3651
3652   symtab_and_line sal;
3653   sal.pc = marker.address;
3654
3655   std::vector<breakpoint *> tracepoints
3656     = static_tracepoints_here (marker.address);
3657
3658   ui_out_emit_tuple tuple_emitter (uiout, "marker");
3659
3660   /* A counter field to help readability.  This is not a stable
3661      identifier!  */
3662   uiout->field_signed ("count", count);
3663
3664   uiout->field_string ("marker-id", marker.str_id.c_str ());
3665
3666   uiout->field_fmt ("enabled", "%c",
3667                     !tracepoints.empty () ? 'y' : 'n');
3668   uiout->spaces (2);
3669
3670   strcpy (wrap_indent, "                                   ");
3671
3672   if (gdbarch_addr_bit (marker.gdbarch) <= 32)
3673     strcat (wrap_indent, "           ");
3674   else
3675     strcat (wrap_indent, "                   ");
3676
3677   strcpy (extra_field_indent, "         ");
3678
3679   uiout->field_core_addr ("addr", marker.gdbarch, marker.address);
3680
3681   sal = find_pc_line (marker.address, 0);
3682   sym = find_pc_sect_function (marker.address, NULL);
3683   if (sym)
3684     {
3685       uiout->text ("in ");
3686       uiout->field_string ("func", sym->print_name (),
3687                            function_name_style.style ());
3688       uiout->wrap_hint (wrap_indent);
3689       uiout->text (" at ");
3690     }
3691   else
3692     uiout->field_skip ("func");
3693
3694   if (sal.symtab != NULL)
3695     {
3696       uiout->field_string ("file",
3697                            symtab_to_filename_for_display (sal.symtab),
3698                            file_name_style.style ());
3699       uiout->text (":");
3700
3701       if (uiout->is_mi_like_p ())
3702         {
3703           const char *fullname = symtab_to_fullname (sal.symtab);
3704
3705           uiout->field_string ("fullname", fullname);
3706         }
3707       else
3708         uiout->field_skip ("fullname");
3709
3710       uiout->field_signed ("line", sal.line);
3711     }
3712   else
3713     {
3714       uiout->field_skip ("fullname");
3715       uiout->field_skip ("line");
3716     }
3717
3718   uiout->text ("\n");
3719   uiout->text (extra_field_indent);
3720   uiout->text (_("Data: \""));
3721   uiout->field_string ("extra-data", marker.extra.c_str ());
3722   uiout->text ("\"\n");
3723
3724   if (!tracepoints.empty ())
3725     {
3726       int ix;
3727
3728       {
3729         ui_out_emit_tuple inner_tuple_emitter (uiout, "tracepoints-at");
3730
3731         uiout->text (extra_field_indent);
3732         uiout->text (_("Probed by static tracepoints: "));
3733         for (ix = 0; ix < tracepoints.size (); ix++)
3734           {
3735             if (ix > 0)
3736               uiout->text (", ");
3737             uiout->text ("#");
3738             uiout->field_signed ("tracepoint-id", tracepoints[ix]->number);
3739           }
3740       }
3741
3742       if (uiout->is_mi_like_p ())
3743         uiout->field_signed ("number-of-tracepoints", tracepoints.size ());
3744       else
3745         uiout->text ("\n");
3746     }
3747 }
3748
3749 static void
3750 info_static_tracepoint_markers_command (const char *arg, int from_tty)
3751 {
3752   struct ui_out *uiout = current_uiout;
3753   std::vector<static_tracepoint_marker> markers
3754     = target_static_tracepoint_markers_by_strid (NULL);
3755
3756   /* We don't have to check target_can_use_agent and agent's capability on
3757      static tracepoint here, in order to be compatible with older GDBserver.
3758      We don't check USE_AGENT is true or not, because static tracepoints
3759      don't work without in-process agent, so we don't bother users to type
3760      `set agent on' when to use static tracepoint.  */
3761
3762   ui_out_emit_table table_emitter (uiout, 5, -1,
3763                                    "StaticTracepointMarkersTable");
3764
3765   uiout->table_header (7, ui_left, "counter", "Cnt");
3766
3767   uiout->table_header (40, ui_left, "marker-id", "ID");
3768
3769   uiout->table_header (3, ui_left, "enabled", "Enb");
3770   if (gdbarch_addr_bit (target_gdbarch ()) <= 32)
3771     uiout->table_header (10, ui_left, "addr", "Address");
3772   else
3773     uiout->table_header (18, ui_left, "addr", "Address");
3774   uiout->table_header (40, ui_noalign, "what", "What");
3775
3776   uiout->table_body ();
3777
3778   for (int i = 0; i < markers.size (); i++)
3779     print_one_static_tracepoint_marker (i + 1, markers[i]);
3780 }
3781
3782 /* The $_sdata convenience variable is a bit special.  We don't know
3783    for sure type of the value until we actually have a chance to fetch
3784    the data --- the size of the object depends on what has been
3785    collected.  We solve this by making $_sdata be an internalvar that
3786    creates a new value on access.  */
3787
3788 /* Return a new value with the correct type for the sdata object of
3789    the current trace frame.  Return a void value if there's no object
3790    available.  */
3791
3792 static struct value *
3793 sdata_make_value (struct gdbarch *gdbarch, struct internalvar *var,
3794                   void *ignore)
3795 {
3796   /* We need to read the whole object before we know its size.  */
3797   gdb::optional<gdb::byte_vector> buf
3798     = target_read_alloc (current_top_target (), TARGET_OBJECT_STATIC_TRACE_DATA,
3799                          NULL);
3800   if (buf)
3801     {
3802       struct value *v;
3803       struct type *type;
3804
3805       type = init_vector_type (builtin_type (gdbarch)->builtin_true_char,
3806                                buf->size ());
3807       v = allocate_value (type);
3808       memcpy (value_contents_raw (v), buf->data (), buf->size ());
3809       return v;
3810     }
3811   else
3812     return allocate_value (builtin_type (gdbarch)->builtin_void);
3813 }
3814
3815 #if !defined(HAVE_LIBEXPAT)
3816
3817 struct std::unique_ptr<traceframe_info>
3818 parse_traceframe_info (const char *tframe_info)
3819 {
3820   static int have_warned;
3821
3822   if (!have_warned)
3823     {
3824       have_warned = 1;
3825       warning (_("Can not parse XML trace frame info; XML support "
3826                  "was disabled at compile time"));
3827     }
3828
3829   return NULL;
3830 }
3831
3832 #else /* HAVE_LIBEXPAT */
3833
3834 #include "xml-support.h"
3835
3836 /* Handle the start of a <memory> element.  */
3837
3838 static void
3839 traceframe_info_start_memory (struct gdb_xml_parser *parser,
3840                               const struct gdb_xml_element *element,
3841                               void *user_data,
3842                               std::vector<gdb_xml_value> &attributes)
3843 {
3844   struct traceframe_info *info = (struct traceframe_info *) user_data;
3845   ULONGEST *start_p, *length_p;
3846
3847   start_p
3848     = (ULONGEST *) xml_find_attribute (attributes, "start")->value.get ();
3849   length_p
3850     = (ULONGEST *) xml_find_attribute (attributes, "length")->value.get ();
3851
3852   info->memory.emplace_back (*start_p, *length_p);
3853 }
3854
3855 /* Handle the start of a <tvar> element.  */
3856
3857 static void
3858 traceframe_info_start_tvar (struct gdb_xml_parser *parser,
3859                              const struct gdb_xml_element *element,
3860                              void *user_data,
3861                              std::vector<gdb_xml_value> &attributes)
3862 {
3863   struct traceframe_info *info = (struct traceframe_info *) user_data;
3864   const char *id_attrib
3865     = (const char *) xml_find_attribute (attributes, "id")->value.get ();
3866   int id = gdb_xml_parse_ulongest (parser, id_attrib);
3867
3868   info->tvars.push_back (id);
3869 }
3870
3871 /* The allowed elements and attributes for an XML memory map.  */
3872
3873 static const struct gdb_xml_attribute memory_attributes[] = {
3874   { "start", GDB_XML_AF_NONE, gdb_xml_parse_attr_ulongest, NULL },
3875   { "length", GDB_XML_AF_NONE, gdb_xml_parse_attr_ulongest, NULL },
3876   { NULL, GDB_XML_AF_NONE, NULL, NULL }
3877 };
3878
3879 static const struct gdb_xml_attribute tvar_attributes[] = {
3880   { "id", GDB_XML_AF_NONE, NULL, NULL },
3881   { NULL, GDB_XML_AF_NONE, NULL, NULL }
3882 };
3883
3884 static const struct gdb_xml_element traceframe_info_children[] = {
3885   { "memory", memory_attributes, NULL,
3886     GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL,
3887     traceframe_info_start_memory, NULL },
3888   { "tvar", tvar_attributes, NULL,
3889     GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL,
3890     traceframe_info_start_tvar, NULL },
3891   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3892 };
3893
3894 static const struct gdb_xml_element traceframe_info_elements[] = {
3895   { "traceframe-info", NULL, traceframe_info_children, GDB_XML_EF_NONE,
3896     NULL, NULL },
3897   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3898 };
3899
3900 /* Parse a traceframe-info XML document.  */
3901
3902 traceframe_info_up
3903 parse_traceframe_info (const char *tframe_info)
3904 {
3905   traceframe_info_up result (new traceframe_info);
3906
3907   if (gdb_xml_parse_quick (_("trace frame info"),
3908                            "traceframe-info.dtd", traceframe_info_elements,
3909                            tframe_info, result.get ()) == 0)
3910     return result;
3911
3912   return NULL;
3913 }
3914
3915 #endif /* HAVE_LIBEXPAT */
3916
3917 /* Returns the traceframe_info object for the current traceframe.
3918    This is where we avoid re-fetching the object from the target if we
3919    already have it cached.  */
3920
3921 struct traceframe_info *
3922 get_traceframe_info (void)
3923 {
3924   if (current_traceframe_info == NULL)
3925     current_traceframe_info = target_traceframe_info ();
3926
3927   return current_traceframe_info.get ();
3928 }
3929
3930 /* If the target supports the query, return in RESULT the set of
3931    collected memory in the current traceframe, found within the LEN
3932    bytes range starting at MEMADDR.  Returns true if the target
3933    supports the query, otherwise returns false, and RESULT is left
3934    undefined.  */
3935
3936 int
3937 traceframe_available_memory (std::vector<mem_range> *result,
3938                              CORE_ADDR memaddr, ULONGEST len)
3939 {
3940   struct traceframe_info *info = get_traceframe_info ();
3941
3942   if (info != NULL)
3943     {
3944       result->clear ();
3945
3946       for (mem_range &r : info->memory)
3947         if (mem_ranges_overlap (r.start, r.length, memaddr, len))
3948           {
3949             ULONGEST lo1, hi1, lo2, hi2;
3950
3951             lo1 = memaddr;
3952             hi1 = memaddr + len;
3953
3954             lo2 = r.start;
3955             hi2 = r.start + r.length;
3956
3957             CORE_ADDR start = std::max (lo1, lo2);
3958             int length = std::min (hi1, hi2) - start;
3959
3960             result->emplace_back (start, length);
3961           }
3962
3963       normalize_mem_ranges (result);
3964       return 1;
3965     }
3966
3967   return 0;
3968 }
3969
3970 /* Implementation of `sdata' variable.  */
3971
3972 static const struct internalvar_funcs sdata_funcs =
3973 {
3974   sdata_make_value,
3975   NULL,
3976   NULL
3977 };
3978
3979 /* See tracepoint.h.  */
3980 cmd_list_element *while_stepping_cmd_element = nullptr;
3981
3982 /* module initialization */
3983 void _initialize_tracepoint ();
3984 void
3985 _initialize_tracepoint ()
3986 {
3987   struct cmd_list_element *c;
3988
3989   /* Explicitly create without lookup, since that tries to create a
3990      value with a void typed value, and when we get here, gdbarch
3991      isn't initialized yet.  At this point, we're quite sure there
3992      isn't another convenience variable of the same name.  */
3993   create_internalvar_type_lazy ("_sdata", &sdata_funcs, NULL);
3994
3995   traceframe_number = -1;
3996   tracepoint_number = -1;
3997
3998   add_info ("scope", info_scope_command,
3999             _("List the variables local to a scope."));
4000
4001   add_cmd ("tracepoints", class_trace,
4002            _("Tracing of program execution without stopping the program."),
4003            &cmdlist);
4004
4005   add_com ("tdump", class_trace, tdump_command,
4006            _("Print everything collected at the current tracepoint."));
4007
4008   c = add_com ("tvariable", class_trace, trace_variable_command,_("\
4009 Define a trace state variable.\n\
4010 Argument is a $-prefixed name, optionally followed\n\
4011 by '=' and an expression that sets the initial value\n\
4012 at the start of tracing."));
4013   set_cmd_completer (c, expression_completer);
4014
4015   add_cmd ("tvariable", class_trace, delete_trace_variable_command, _("\
4016 Delete one or more trace state variables.\n\
4017 Arguments are the names of the variables to delete.\n\
4018 If no arguments are supplied, delete all variables."), &deletelist);
4019   /* FIXME add a trace variable completer.  */
4020
4021   add_info ("tvariables", info_tvariables_command, _("\
4022 Status of trace state variables and their values."));
4023
4024   add_info ("static-tracepoint-markers",
4025             info_static_tracepoint_markers_command, _("\
4026 List target static tracepoints markers."));
4027
4028   add_prefix_cmd ("tfind", class_trace, tfind_command, _("\
4029 Select a trace frame.\n\
4030 No argument means forward by one frame; '-' means backward by one frame."),
4031                   &tfindlist, "tfind ", 1, &cmdlist);
4032
4033   add_cmd ("outside", class_trace, tfind_outside_command, _("\
4034 Select a trace frame whose PC is outside the given range (exclusive).\n\
4035 Usage: tfind outside ADDR1, ADDR2"),
4036            &tfindlist);
4037
4038   add_cmd ("range", class_trace, tfind_range_command, _("\
4039 Select a trace frame whose PC is in the given range (inclusive).\n\
4040 Usage: tfind range ADDR1, ADDR2"),
4041            &tfindlist);
4042
4043   add_cmd ("line", class_trace, tfind_line_command, _("\
4044 Select a trace frame by source line.\n\
4045 Argument can be a line number (with optional source file),\n\
4046 a function name, or '*' followed by an address.\n\
4047 Default argument is 'the next source line that was traced'."),
4048            &tfindlist);
4049
4050   add_cmd ("tracepoint", class_trace, tfind_tracepoint_command, _("\
4051 Select a trace frame by tracepoint number.\n\
4052 Default is the tracepoint for the current trace frame."),
4053            &tfindlist);
4054
4055   add_cmd ("pc", class_trace, tfind_pc_command, _("\
4056 Select a trace frame by PC.\n\
4057 Default is the current PC, or the PC of the current trace frame."),
4058            &tfindlist);
4059
4060   add_cmd ("end", class_trace, tfind_end_command, _("\
4061 De-select any trace frame and resume 'live' debugging."),
4062            &tfindlist);
4063
4064   add_alias_cmd ("none", "end", class_trace, 0, &tfindlist);
4065
4066   add_cmd ("start", class_trace, tfind_start_command,
4067            _("Select the first trace frame in the trace buffer."),
4068            &tfindlist);
4069
4070   add_com ("tstatus", class_trace, tstatus_command,
4071            _("Display the status of the current trace data collection."));
4072
4073   add_com ("tstop", class_trace, tstop_command, _("\
4074 Stop trace data collection.\n\
4075 Usage: tstop [NOTES]...\n\
4076 Any arguments supplied are recorded with the trace as a stop reason and\n\
4077 reported by tstatus (if the target supports trace notes)."));
4078
4079   add_com ("tstart", class_trace, tstart_command, _("\
4080 Start trace data collection.\n\
4081 Usage: tstart [NOTES]...\n\
4082 Any arguments supplied are recorded with the trace as a note and\n\
4083 reported by tstatus (if the target supports trace notes)."));
4084
4085   add_com ("end", class_trace, end_actions_pseudocommand, _("\
4086 Ends a list of commands or actions.\n\
4087 Several GDB commands allow you to enter a list of commands or actions.\n\
4088 Entering \"end\" on a line by itself is the normal way to terminate\n\
4089 such a list.\n\n\
4090 Note: the \"end\" command cannot be used at the gdb prompt."));
4091
4092   while_stepping_cmd_element = add_com ("while-stepping", class_trace,
4093                                         while_stepping_pseudocommand, _("\
4094 Specify single-stepping behavior at a tracepoint.\n\
4095 Argument is number of instructions to trace in single-step mode\n\
4096 following the tracepoint.  This command is normally followed by\n\
4097 one or more \"collect\" commands, to specify what to collect\n\
4098 while single-stepping.\n\n\
4099 Note: this command can only be used in a tracepoint \"actions\" list."));
4100
4101   add_com_alias ("ws", "while-stepping", class_trace, 0);
4102   add_com_alias ("stepping", "while-stepping", class_trace, 0);
4103
4104   add_com ("collect", class_trace, collect_pseudocommand, _("\
4105 Specify one or more data items to be collected at a tracepoint.\n\
4106 Accepts a comma-separated list of (one or more) expressions.  GDB will\n\
4107 collect all data (variables, registers) referenced by that expression.\n\
4108 Also accepts the following special arguments:\n\
4109     $regs   -- all registers.\n\
4110     $args   -- all function arguments.\n\
4111     $locals -- all variables local to the block/function scope.\n\
4112     $_sdata -- static tracepoint data (ignored for non-static tracepoints).\n\
4113 Note: this command can only be used in a tracepoint \"actions\" list."));
4114
4115   add_com ("teval", class_trace, teval_pseudocommand, _("\
4116 Specify one or more expressions to be evaluated at a tracepoint.\n\
4117 Accepts a comma-separated list of (one or more) expressions.\n\
4118 The result of each evaluation will be discarded.\n\
4119 Note: this command can only be used in a tracepoint \"actions\" list."));
4120
4121   add_com ("actions", class_trace, actions_command, _("\
4122 Specify the actions to be taken at a tracepoint.\n\
4123 Tracepoint actions may include collecting of specified data,\n\
4124 single-stepping, or enabling/disabling other tracepoints,\n\
4125 depending on target's capabilities."));
4126
4127   default_collect = xstrdup ("");
4128   add_setshow_string_cmd ("default-collect", class_trace,
4129                           &default_collect, _("\
4130 Set the list of expressions to collect by default."), _("\
4131 Show the list of expressions to collect by default."), NULL,
4132                           NULL, NULL,
4133                           &setlist, &showlist);
4134
4135   add_setshow_boolean_cmd ("disconnected-tracing", no_class,
4136                            &disconnected_tracing, _("\
4137 Set whether tracing continues after GDB disconnects."), _("\
4138 Show whether tracing continues after GDB disconnects."), _("\
4139 Use this to continue a tracing run even if GDB disconnects\n\
4140 or detaches from the target.  You can reconnect later and look at\n\
4141 trace data collected in the meantime."),
4142                            set_disconnected_tracing,
4143                            NULL,
4144                            &setlist,
4145                            &showlist);
4146
4147   add_setshow_boolean_cmd ("circular-trace-buffer", no_class,
4148                            &circular_trace_buffer, _("\
4149 Set target's use of circular trace buffer."), _("\
4150 Show target's use of circular trace buffer."), _("\
4151 Use this to make the trace buffer into a circular buffer,\n\
4152 which will discard traceframes (oldest first) instead of filling\n\
4153 up and stopping the trace run."),
4154                            set_circular_trace_buffer,
4155                            NULL,
4156                            &setlist,
4157                            &showlist);
4158
4159   add_setshow_zuinteger_unlimited_cmd ("trace-buffer-size", no_class,
4160                                        &trace_buffer_size, _("\
4161 Set requested size of trace buffer."), _("\
4162 Show requested size of trace buffer."), _("\
4163 Use this to choose a size for the trace buffer.  Some targets\n\
4164 may have fixed or limited buffer sizes.  Specifying \"unlimited\" or -1\n\
4165 disables any attempt to set the buffer size and lets the target choose."),
4166                                        set_trace_buffer_size, NULL,
4167                                        &setlist, &showlist);
4168
4169   add_setshow_string_cmd ("trace-user", class_trace,
4170                           &trace_user, _("\
4171 Set the user name to use for current and future trace runs."), _("\
4172 Show the user name to use for current and future trace runs."), NULL,
4173                           set_trace_user, NULL,
4174                           &setlist, &showlist);
4175
4176   add_setshow_string_cmd ("trace-notes", class_trace,
4177                           &trace_notes, _("\
4178 Set notes string to use for current and future trace runs."), _("\
4179 Show the notes string to use for current and future trace runs."), NULL,
4180                           set_trace_notes, NULL,
4181                           &setlist, &showlist);
4182
4183   add_setshow_string_cmd ("trace-stop-notes", class_trace,
4184                           &trace_stop_notes, _("\
4185 Set notes string to use for future tstop commands."), _("\
4186 Show the notes string to use for future tstop commands."), NULL,
4187                           set_trace_stop_notes, NULL,
4188                           &setlist, &showlist);
4189 }
This page took 0.268979 seconds and 4 git commands to generate.