Remove ptid_equal
[deliverable/binutils-gdb.git] / gdb / mi / mi-main.c
index 3ca3500061cadaddac0fef092d2f18acd4cc54ee..18ce4e675f3e0061ab26394a9c7b7c97ca03b75a 100644 (file)
@@ -1,6 +1,6 @@
 /* MI Command Set.
 
-   Copyright (C) 2000-2017 Free Software Foundation, Inc.
+   Copyright (C) 2000-2018 Free Software Foundation, Inc.
 
    Contributed by Cygnus Solutions (a Red Hat company).
 
@@ -52,7 +52,7 @@
 #include "linespec.h"
 #include "extension.h"
 #include "gdbcmd.h"
-#include "observer.h"
+#include "observable.h"
 #include "common/gdb_optional.h"
 #include "common/byte-vector.h"
 
@@ -96,8 +96,8 @@ static void mi_execute_cli_command (const char *cmd, int args_p,
                                    const char *args);
 static void mi_execute_async_cli_command (const char *cli_command,
                                          char **argv, int argc);
-static int register_changed_p (int regnum, struct regcache *,
-                              struct regcache *);
+static bool register_changed_p (int regnum, readonly_detached_regcache *,
+                              readonly_detached_regcache *);
 static void output_register (struct frame_info *, int regnum, int format,
                             int skip_unavailable);
 
@@ -243,13 +243,13 @@ mi_cmd_exec_jump (const char *args, char **argv, int argc)
 static void
 proceed_thread (struct thread_info *thread, int pid)
 {
-  if (!is_stopped (thread->ptid))
+  if (thread->state != THREAD_STOPPED)
     return;
 
-  if (pid != 0 && ptid_get_pid (thread->ptid) != pid)
+  if (pid != 0 && thread->ptid.pid () != pid)
     return;
 
-  switch_to_thread (thread->ptid);
+  switch_to_thread (thread);
   clear_proceed_status (0);
   proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT);
 }
@@ -266,7 +266,7 @@ proceed_thread_callback (struct thread_info *thread, void *arg)
 static void
 exec_continue (char **argv, int argc)
 {
-  prepare_execution_command (&current_target, mi_async_p ());
+  prepare_execution_command (current_top_target (), mi_async_p ());
 
   if (non_stop)
     {
@@ -345,10 +345,10 @@ interrupt_thread_callback (struct thread_info *thread, void *arg)
 {
   int pid = *(int *)arg;
 
-  if (!is_running (thread->ptid))
+  if (thread->state != THREAD_RUNNING)
     return 0;
 
-  if (ptid_get_pid (thread->ptid) != pid)
+  if (thread->ptid.pid () != pid)
     return 0;
 
   target_stop (thread->ptid);
@@ -405,25 +405,20 @@ run_one_inferior (struct inferior *inf, void *arg)
   int start_p = *(int *) arg;
   const char *run_cmd = start_p ? "start" : "run";
   struct target_ops *run_target = find_run_target ();
-  int async_p = mi_async && run_target->to_can_async_p (run_target);
+  int async_p = mi_async && run_target->can_async_p ();
 
   if (inf->pid != 0)
     {
-      if (inf->pid != ptid_get_pid (inferior_ptid))
-       {
-         struct thread_info *tp;
-
-         tp = any_thread_of_process (inf->pid);
-         if (!tp)
-           error (_("Inferior has no threads."));
+      thread_info *tp = any_thread_of_inferior (inf);
+      if (tp == NULL)
+       error (_("Inferior has no threads."));
 
-         switch_to_thread (tp->ptid);
-       }
+      switch_to_thread (tp);
     }
   else
     {
       set_current_inferior (inf);
-      switch_to_thread (null_ptid);
+      switch_to_no_thread ();
       set_current_program_space (inf->pspace);
     }
   mi_execute_cli_command (run_cmd, async_p,
@@ -479,7 +474,7 @@ mi_cmd_exec_run (const char *command, char **argv, int argc)
     {
       const char *run_cmd = start_p ? "start" : "run";
       struct target_ops *run_target = find_run_target ();
-      int async_p = mi_async && run_target->to_can_async_p (run_target);
+      int async_p = mi_async && run_target->can_async_p ();
 
       mi_execute_cli_command (run_cmd, async_p,
                              async_p ? "&" : NULL);
@@ -492,7 +487,7 @@ find_thread_of_process (struct thread_info *ti, void *p)
 {
   int pid = *(int *)p;
 
-  if (ptid_get_pid (ti->ptid) == pid && !is_exited (ti->ptid))
+  if (ti->ptid.pid () == pid && ti->state != THREAD_EXITED)
     return 1;
 
   return 0;
@@ -540,7 +535,7 @@ mi_cmd_target_detach (const char *command, char **argv, int argc)
       if (!tp)
        error (_("Thread group is empty"));
 
-      switch_to_thread (tp->ptid);
+      switch_to_thread (tp);
     }
 
   detach_command (NULL, 0);
@@ -571,10 +566,10 @@ mi_cmd_thread_select (const char *command, char **argv, int argc)
                               USER_SELECTED_THREAD | USER_SELECTED_FRAME);
 
   /* Notify if the thread has effectively changed.  */
-  if (!ptid_equal (inferior_ptid, previous_ptid))
+  if (inferior_ptid != previous_ptid)
     {
-      observer_notify_user_selected_context_changed (USER_SELECTED_THREAD
-                                                    | USER_SELECTED_FRAME);
+      gdb::observers::user_selected_context_changed.notify
+       (USER_SELECTED_THREAD | USER_SELECTED_FRAME);
     }
 }
 
@@ -628,7 +623,7 @@ collect_cores (struct thread_info *ti, void *xdata)
 {
   struct collect_cores_data *data = (struct collect_cores_data *) xdata;
 
-  if (ptid_get_pid (ti->ptid) == data->pid)
+  if (ti->ptid.pid () == data->pid)
     {
       int core = target_core_of_thread (ti->ptid);
 
@@ -931,11 +926,11 @@ mi_cmd_data_list_register_names (const char *command, char **argv, int argc)
 void
 mi_cmd_data_list_changed_registers (const char *command, char **argv, int argc)
 {
-  static std::unique_ptr<struct regcache> this_regs;
+  static std::unique_ptr<readonly_detached_regcache> this_regs;
   struct ui_out *uiout = current_uiout;
-  std::unique_ptr<struct regcache> prev_regs;
+  std::unique_ptr<readonly_detached_regcache> prev_regs;
   struct gdbarch *gdbarch;
-  int regnum, numregs, changed;
+  int regnum, numregs;
   int i;
 
   /* The last time we visited this function, the current frame's
@@ -968,12 +963,9 @@ mi_cmd_data_list_changed_registers (const char *command, char **argv, int argc)
          if (gdbarch_register_name (gdbarch, regnum) == NULL
              || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
            continue;
-         changed = register_changed_p (regnum, prev_regs.get (),
-                                       this_regs.get ());
-         if (changed < 0)
-           error (_("-data-list-changed-registers: "
-                    "Unable to read register contents."));
-         else if (changed)
+
+         if (register_changed_p (regnum, prev_regs.get (),
+                                 this_regs.get ()))
            uiout->field_int (NULL, regnum);
        }
     }
@@ -988,12 +980,8 @@ mi_cmd_data_list_changed_registers (const char *command, char **argv, int argc)
          && gdbarch_register_name (gdbarch, regnum) != NULL
          && *gdbarch_register_name (gdbarch, regnum) != '\000')
        {
-         changed = register_changed_p (regnum, prev_regs.get (),
-                                       this_regs.get ());
-         if (changed < 0)
-           error (_("-data-list-changed-registers: "
-                    "Unable to read register contents."));
-         else if (changed)
+         if (register_changed_p (regnum, prev_regs.get (),
+                                 this_regs.get ()))
            uiout->field_int (NULL, regnum);
        }
       else
@@ -1001,18 +989,17 @@ mi_cmd_data_list_changed_registers (const char *command, char **argv, int argc)
     }
 }
 
-static int
-register_changed_p (int regnum, struct regcache *prev_regs,
-                   struct regcache *this_regs)
+static bool
+register_changed_p (int regnum, readonly_detached_regcache *prev_regs,
+                   readonly_detached_regcache *this_regs)
 {
   struct gdbarch *gdbarch = this_regs->arch ();
   struct value *prev_value, *this_value;
-  int ret;
 
   /* First time through or after gdbarch change consider all registers
      as changed.  */
   if (!prev_regs || prev_regs->arch () != gdbarch)
-    return 1;
+    return true;
 
   /* Get register contents and compare.  */
   prev_value = prev_regs->cooked_read_value (regnum);
@@ -1020,13 +1007,11 @@ register_changed_p (int regnum, struct regcache *prev_regs,
   gdb_assert (prev_value != NULL);
   gdb_assert (this_value != NULL);
 
-  ret = value_contents_eq (prev_value, 0, this_value, 0,
-                          register_size (gdbarch, regnum)) == 0;
+  auto ret = !value_contents_eq (prev_value, 0, this_value, 0,
+                                register_size (gdbarch, regnum));
 
   release_value (prev_value);
   release_value (this_value);
-  value_free (prev_value);
-  value_free (this_value);
   return ret;
 }
 
@@ -1363,11 +1348,8 @@ mi_cmd_data_read_memory (const char *command, char **argv, int argc)
 
   gdb::byte_vector mbuf (total_bytes);
 
-  /* Dispatch memory reads to the topmost target, not the flattened
-     current_target.  */
-  nr_bytes = target_read (current_target.beneath,
-                         TARGET_OBJECT_MEMORY, NULL, mbuf.data (),
-                         addr, total_bytes);
+  nr_bytes = target_read (current_top_target (), TARGET_OBJECT_MEMORY, NULL,
+                         mbuf.data (), addr, total_bytes);
   if (nr_bytes <= 0)
     error (_("Unable to read memory."));
 
@@ -1486,7 +1468,7 @@ mi_cmd_data_read_memory_bytes (const char *command, char **argv, int argc)
   length = atol (argv[1]);
 
   std::vector<memory_read_result> result
-    = read_memory_robust (current_target.beneath, addr, length);
+    = read_memory_robust (current_top_target (), addr, length);
 
   if (result.size () == 0)
     error (_("Unable to read memory."));
@@ -1784,8 +1766,11 @@ mi_cmd_remove_inferior (const char *command, char **argv, int argc)
 
       set_current_inferior (new_inferior);
       if (new_inferior->pid != 0)
-       tp = any_thread_of_process (new_inferior->pid);
-      switch_to_thread (tp ? tp->ptid : null_ptid);
+       tp = any_thread_of_inferior (new_inferior);
+      if (tp != NULL)
+       switch_to_thread (tp);
+      else
+       switch_to_no_thread ();
       set_current_program_space (new_inferior->pspace);
     }
 
@@ -2006,7 +1991,7 @@ mi_execute_command (const char *cmd, int from_tty)
 
       if (/* The notifications are only output when the top-level
             interpreter (specified on the command line) is MI.  */
-         interp_ui_out (top_level_interpreter ())->is_mi_like_p ()
+         top_level_interpreter ()->interp_ui_out ()->is_mi_like_p ()
          /* Don't try report anything if there are no threads --
             the program is dead.  */
          && thread_count () != 0
@@ -2019,11 +2004,11 @@ mi_execute_command (const char *cmd, int from_tty)
 
          if (command->thread == -1)
            {
-             report_change = (!ptid_equal (previous_ptid, null_ptid)
-                              && !ptid_equal (inferior_ptid, previous_ptid)
-                              && !ptid_equal (inferior_ptid, null_ptid));
+             report_change = (previous_ptid != null_ptid
+                              && inferior_ptid != previous_ptid
+                              && inferior_ptid != null_ptid);
            }
-         else if (!ptid_equal (inferior_ptid, null_ptid))
+         else if (inferior_ptid != null_ptid)
            {
              struct thread_info *ti = inferior_thread ();
 
@@ -2032,8 +2017,8 @@ mi_execute_command (const char *cmd, int from_tty)
 
          if (report_change)
            {
-               observer_notify_user_selected_context_changed
-                 (USER_SELECTED_THREAD | USER_SELECTED_FRAME);
+             gdb::observers::user_selected_context_changed.notify
+               (USER_SELECTED_THREAD | USER_SELECTED_FRAME);
            }
        }
     }
@@ -2071,22 +2056,25 @@ mi_cmd_execute (struct mi_parse *parse)
         provide --thread if it wishes to operate on a specific
         thread.  */
       if (inf->pid != 0)
-       tp = any_live_thread_of_process (inf->pid);
-      switch_to_thread (tp ? tp->ptid : null_ptid);
+       tp = any_live_thread_of_inferior (inf);
+      if (tp != NULL)
+       switch_to_thread (tp);
+      else
+       switch_to_no_thread ();
       set_current_program_space (inf->pspace);
     }
 
   if (parse->thread != -1)
     {
-      struct thread_info *tp = find_thread_global_id (parse->thread);
+      thread_info *tp = find_thread_global_id (parse->thread);
 
-      if (!tp)
+      if (tp == NULL)
        error (_("Invalid thread id: %d"), parse->thread);
 
-      if (is_exited (tp->ptid))
+      if (tp->state == THREAD_EXITED)
        error (_("Thread id: %d has terminated"), parse->thread);
 
-      switch_to_thread (tp->ptid);
+      switch_to_thread (tp);
     }
 
   if (parse->frame != -1)
@@ -2581,6 +2569,7 @@ mi_cmd_trace_frame_collected (const char *command, char **argv, int argc)
          break;
        case REGISTERS_FORMAT:
          registers_format = oarg[0];
+         break;
        case MEMORY_CONTENTS:
          memory_contents = 1;
          break;
@@ -2613,8 +2602,6 @@ mi_cmd_trace_frame_collected (const char *command, char **argv, int argc)
 
   /* Explicitly wholly collected variables.  */
   {
-    int i;
-
     ui_out_emit_list list_emitter (uiout, "explicit-variables");
     const std::vector<std::string> &wholly_collected
       = clist->wholly_collected ();
@@ -2627,9 +2614,6 @@ mi_cmd_trace_frame_collected (const char *command, char **argv, int argc)
 
   /* Computed expressions.  */
   {
-    char *p;
-    int i;
-
     ui_out_emit_list list_emitter (uiout, "computed-expressions");
 
     const std::vector<std::string> &computed = clist->computed ();
@@ -2680,7 +2664,7 @@ mi_cmd_trace_frame_collected (const char *command, char **argv, int argc)
 
        if (tsv != NULL)
          {
-           uiout->field_fmt ("name", "$%s", tsv->name);
+           uiout->field_fmt ("name", "$%s", tsv->name.c_str ());
 
            tsv->value_known = target_get_trace_state_variable_value (tsv->number,
                                                                      &tsv->value);
This page took 0.030686 seconds and 4 git commands to generate.