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