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