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