gdb: add option to reverse order of _initialize function calls
[binutils-gdb.git] / gdb / tracepoint.c
index 0cbd2c68224997be66c2b215d593967846f87ec1..eca1a9d385cba91580b2b8dc5c6dcdb49f2eb875 100644 (file)
@@ -57,6 +57,7 @@
 #include "location.h"
 #include <algorithm>
 #include "cli/cli-style.h"
+#include "expop.h"
 
 #include <unistd.h>
 
@@ -689,19 +690,24 @@ validate_actionline (const char *line, struct breakpoint *b)
 
              if (exp->first_opcode () == OP_VAR_VALUE)
                {
-                 if (SYMBOL_CLASS (exp->elts[2].symbol) == LOC_CONST)
+                 symbol *sym;
+                 expr::var_value_operation *vvop
+                   = (dynamic_cast<expr::var_value_operation *>
+                      (exp->op.get ()));
+                 sym = vvop->get_symbol ();
+
+                 if (SYMBOL_CLASS (sym) == LOC_CONST)
                    {
                      error (_("constant `%s' (value %s) "
                               "will not be collected."),
-                            exp->elts[2].symbol->print_name (),
-                            plongest (SYMBOL_VALUE (exp->elts[2].symbol)));
+                            sym->print_name (),
+                            plongest (SYMBOL_VALUE (sym)));
                    }
-                 else if (SYMBOL_CLASS (exp->elts[2].symbol)
-                          == LOC_OPTIMIZED_OUT)
+                 else if (SYMBOL_CLASS (sym) == LOC_OPTIMIZED_OUT)
                    {
                      error (_("`%s' is optimized away "
                               "and cannot be collected."),
-                            exp->elts[2].symbol->print_name ());
+                            sym->print_name ());
                    }
                }
 
@@ -1384,7 +1390,10 @@ encode_actions_1 (struct command_line *action,
                    {
                    case OP_REGISTER:
                      {
-                       const char *name = &exp->elts[2].string;
+                       expr::register_operation *regop
+                         = (dynamic_cast<expr::register_operation *>
+                            (exp->op.get ()));
+                       const char *name = regop->get_name ();
 
                        i = user_reg_map_name_to_regnum (target_gdbarch (),
                                                         name, strlen (name));
@@ -1400,25 +1409,34 @@ encode_actions_1 (struct command_line *action,
                      }
 
                    case UNOP_MEMVAL:
-                     /* Safe because we know it's a simple expression.  */
-                     tempval = evaluate_expression (exp.get ());
-                     addr = value_address (tempval);
-                     /* Initialize the TYPE_LENGTH if it is a typedef.  */
-                     check_typedef (exp->elts[1].type);
-                     collect->add_memrange (target_gdbarch (),
-                                            memrange_absolute, addr,
-                                            TYPE_LENGTH (exp->elts[1].type),
-                                            tloc->address);
-                     collect->append_exp (std::string (exp_start,
-                                                       action_exp));
+                     {
+                       /* Safe because we know it's a simple expression.  */
+                       tempval = evaluate_expression (exp.get ());
+                       addr = value_address (tempval);
+                       expr::unop_memval_operation *memop
+                         = (dynamic_cast<expr::unop_memval_operation *>
+                            (exp->op.get ()));
+                       struct type *type = memop->get_type ();
+                       /* Initialize the TYPE_LENGTH if it is a typedef.  */
+                       check_typedef (type);
+                       collect->add_memrange (target_gdbarch (),
+                                              memrange_absolute, addr,
+                                              TYPE_LENGTH (type),
+                                              tloc->address);
+                       collect->append_exp (std::string (exp_start,
+                                                         action_exp));
+                     }
                      break;
 
                    case OP_VAR_VALUE:
                      {
-                       struct symbol *sym = exp->elts[2].symbol;
+                       expr::var_value_operation *vvo
+                         = (dynamic_cast<expr::var_value_operation *>
+                            (exp->op.get ()));
+                       struct symbol *sym = vvo->get_symbol ();
                        const char *name = sym->natural_name ();
 
-                       collect->collect_symbol (exp->elts[2].symbol,
+                       collect->collect_symbol (sym,
                                                 target_gdbarch (),
                                                 frame_reg,
                                                 frame_offset,
@@ -3660,7 +3678,7 @@ print_one_static_tracepoint_marker (int count,
      identifier!  */
   uiout->field_signed ("count", count);
 
-  uiout->field_string ("marker-id", marker.str_id.c_str ());
+  uiout->field_string ("marker-id", marker.str_id);
 
   uiout->field_fmt ("enabled", "%c",
                    !tracepoints.empty () ? 'y' : 'n');
@@ -3717,7 +3735,7 @@ print_one_static_tracepoint_marker (int count,
   uiout->text ("\n");
   uiout->text (extra_field_indent);
   uiout->text (_("Data: \""));
-  uiout->field_string ("extra-data", marker.extra.c_str ());
+  uiout->field_string ("extra-data", marker.extra);
   uiout->text ("\"\n");
 
   if (!tracepoints.empty ())
@@ -3794,7 +3812,8 @@ sdata_make_value (struct gdbarch *gdbarch, struct internalvar *var,
 {
   /* We need to read the whole object before we know its size.  */
   gdb::optional<gdb::byte_vector> buf
-    = target_read_alloc (current_top_target (), TARGET_OBJECT_STATIC_TRACE_DATA,
+    = target_read_alloc (current_inferior ()->top_target (),
+                        TARGET_OBJECT_STATIC_TRACE_DATA,
                         NULL);
   if (buf)
     {
@@ -4027,7 +4046,7 @@ List target static tracepoints markers."));
   add_prefix_cmd ("tfind", class_trace, tfind_command, _("\
 Select a trace frame.\n\
 No argument means forward by one frame; '-' means backward by one frame."),
-                 &tfindlist, "tfind ", 1, &cmdlist);
+                 &tfindlist, 1, &cmdlist);
 
   add_cmd ("outside", class_trace, tfind_outside_command, _("\
 Select a trace frame whose PC is outside the given range (exclusive).\n\
@@ -4056,11 +4075,11 @@ Select a trace frame by PC.\n\
 Default is the current PC, or the PC of the current trace frame."),
           &tfindlist);
 
-  add_cmd ("end", class_trace, tfind_end_command, _("\
-De-select any trace frame and resume 'live' debugging."),
-          &tfindlist);
+  cmd_list_element *tfind_end_cmd
+    = add_cmd ("end", class_trace, tfind_end_command, _("\
+De-select any trace frame and resume 'live' debugging."), &tfindlist);
 
-  add_alias_cmd ("none", "end", class_trace, 0, &tfindlist);
+  add_alias_cmd ("none", tfind_end_cmd, class_trace, 0, &tfindlist);
 
   add_cmd ("start", class_trace, tfind_start_command,
           _("Select the first trace frame in the trace buffer."),
@@ -4097,8 +4116,8 @@ one or more \"collect\" commands, to specify what to collect\n\
 while single-stepping.\n\n\
 Note: this command can only be used in a tracepoint \"actions\" list."));
 
-  add_com_alias ("ws", "while-stepping", class_trace, 0);
-  add_com_alias ("stepping", "while-stepping", class_trace, 0);
+  add_com_alias ("ws", while_stepping_cmd_element, class_trace, 0);
+  add_com_alias ("stepping", while_stepping_cmd_element, class_trace, 0);
 
   add_com ("collect", class_trace, collect_pseudocommand, _("\
 Specify one or more data items to be collected at a tracepoint.\n\