gdbserver:prepare_access_memory: pick another thread
[deliverable/binutils-gdb.git] / gdb / gdbserver / nto-low.c
index 35871568ea7408b615851a862734671cc4d1729d..d72c46515d1312e91e4108cb3da47eeabbaddb09 100644 (file)
@@ -1,6 +1,6 @@
 /* QNX Neutrino specific low level interface, for the remote server
    for GDB.
-   Copyright (C) 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -28,7 +28,6 @@
 #include <spawn.h>
 #include <sys/procfs.h>
 #include <sys/auxv.h>
-#include <stdarg.h>
 #include <sys/iomgr.h>
 #include <sys/neutrino.h>
 
@@ -623,12 +622,12 @@ nto_fetch_registers (struct regcache *regcache, int regno)
   if (regno >= the_low_target.num_regs)
     return;
 
-  if (current_inferior == NULL)
+  if (current_thread == NULL)
     {
-      TRACE ("current_inferior is NULL\n");
+      TRACE ("current_thread is NULL\n");
       return;
     }
-  ptid = thread_to_gdb_id (current_inferior);
+  ptid = thread_to_gdb_id (current_thread);
   if (!nto_set_thread (ptid))
     return;
 
@@ -670,12 +669,12 @@ nto_store_registers (struct regcache *regcache, int regno)
 
   TRACE ("%s (regno:%d)\n", __func__, regno);
 
-  if (current_inferior == NULL)
+  if (current_thread == NULL)
     {
-      TRACE ("current_inferior is NULL\n");
+      TRACE ("current_thread is NULL\n");
       return;
     }
-  ptid = thread_to_gdb_id (current_inferior);
+  ptid = thread_to_gdb_id (current_thread);
   if (!nto_set_thread (ptid))
     return;
 
@@ -795,7 +794,7 @@ nto_insert_point (enum raw_bkpt_type type, CORE_ADDR addr,
 {
   int wtype = _DEBUG_BREAK_HW; /* Always request HW.  */
 
-  TRACE ("%s type:%c addr: 0x%08lx len:%d\n", __func__, (int)type, addr, len);
+  TRACE ("%s type:%c addr: 0x%08lx len:%d\n", __func__, (int)type, addr, size);
   switch (type)
     {
     case raw_bkpt_type_sw:
@@ -827,7 +826,7 @@ nto_remove_point (enum raw_bkpt_type type, CORE_ADDR addr,
 {
   int wtype = _DEBUG_BREAK_HW; /* Always request HW.  */
 
-  TRACE ("%s type:%c addr: 0x%08lx len:%d\n", __func__, (int)type, addr, len);
+  TRACE ("%s type:%c addr: 0x%08lx len:%d\n", __func__, (int)type, addr, size);
   switch (type)
     {
     case raw_bkpt_type_sw:
@@ -862,11 +861,11 @@ nto_stopped_by_watchpoint (void)
   int ret = 0;
 
   TRACE ("%s\n", __func__);
-  if (nto_inferior.ctl_fd != -1 && current_inferior != NULL)
+  if (nto_inferior.ctl_fd != -1 && current_thread != NULL)
     {
       ptid_t ptid;
 
-      ptid = thread_to_gdb_id (current_inferior);
+      ptid = thread_to_gdb_id (current_thread);
       if (nto_set_thread (ptid))
        {
          const int watchmask = _DEBUG_FLAG_TRACE_RD | _DEBUG_FLAG_TRACE_WR
@@ -894,11 +893,11 @@ nto_stopped_data_address (void)
   CORE_ADDR ret = (CORE_ADDR)0;
 
   TRACE ("%s\n", __func__);
-  if (nto_inferior.ctl_fd != -1 && current_inferior != NULL)
+  if (nto_inferior.ctl_fd != -1 && current_thread != NULL)
     {
       ptid_t ptid;
 
-      ptid = thread_to_gdb_id (current_inferior);
+      ptid = thread_to_gdb_id (current_thread);
 
       if (nto_set_thread (ptid))
        {
@@ -922,10 +921,19 @@ nto_supports_non_stop (void)
   return 0;
 }
 
+/* Implementation of the target_ops method "sw_breakpoint_from_kind".  */
+
+static const gdb_byte *
+nto_sw_breakpoint_from_kind (int kind, int *size)
+{
+  *size = the_low_target.breakpoint_len;
+  return the_low_target.breakpoint;
+}
 
 
 static struct target_ops nto_target_ops = {
   nto_create_inferior,
+  NULL,  /* arch_setup */
   nto_attach,
   nto_kill,
   nto_detach,
@@ -946,6 +954,11 @@ static struct target_ops nto_target_ops = {
   nto_supports_z_point_type,
   nto_insert_point,
   nto_remove_point,
+  NULL, /* stopped_by_sw_breakpoint */
+  NULL, /* supports_stopped_by_sw_breakpoint */
+  NULL, /* stopped_by_hw_breakpoint */
+  NULL, /* supports_stopped_by_hw_breakpoint */
+  target_can_do_hardware_single_step,
   nto_stopped_by_watchpoint,
   nto_stopped_data_address,
   NULL, /* nto_read_offsets */
@@ -956,7 +969,42 @@ static struct target_ops nto_target_ops = {
   NULL, /* xfer_siginfo */
   nto_supports_non_stop,
   NULL, /* async */
-  NULL  /* start_non_stop */
+  NULL, /* start_non_stop */
+  NULL, /* supports_multi_process */
+  NULL, /* supports_fork_events */
+  NULL, /* supports_vfork_events */
+  NULL, /* supports_exec_events */
+  NULL, /* handle_new_gdb_connection */
+  NULL, /* handle_monitor_command */
+  NULL, /* core_of_thread */
+  NULL, /* read_loadmap */
+  NULL, /* process_qsupported */
+  NULL, /* supports_tracepoints */
+  NULL, /* read_pc */
+  NULL, /* write_pc */
+  NULL, /* thread_stopped */
+  NULL, /* get_tib_address */
+  NULL, /* pause_all */
+  NULL, /* unpause_all */
+  NULL, /* stabilize_threads */
+  NULL, /* install_fast_tracepoint_jump_pad */
+  NULL, /* emit_ops */
+  NULL, /* supports_disable_randomization */
+  NULL, /* get_min_fast_tracepoint_insn_len */
+  NULL, /* qxfer_libraries_svr4 */
+  NULL, /* support_agent */
+  NULL, /* support_btrace */
+  NULL, /* enable_btrace */
+  NULL, /* disable_btrace */
+  NULL, /* read_btrace */
+  NULL, /* read_btrace_conf */
+  NULL, /* supports_range_stepping */
+  NULL, /* pid_to_exec_file */
+  NULL, /* multifs_open */
+  NULL, /* multifs_unlink */
+  NULL, /* multifs_readlink */
+  NULL, /* breakpoint_kind_from_pc */
+  nto_sw_breakpoint_from_kind,
 };
 
 
@@ -970,8 +1018,6 @@ initialize_low (void)
 
   TRACE ("%s\n", __func__);
   set_target_ops (&nto_target_ops);
-  set_breakpoint_data (the_low_target.breakpoint,
-                      the_low_target.breakpoint_len);
 
   /* We use SIGUSR1 to gain control after we block waiting for a process.
      We use sigwaitevent to wait.  */
This page took 0.026153 seconds and 4 git commands to generate.