diff options
Diffstat (limited to 'gdb/gdbserver/target.c')
-rw-r--r-- | gdb/gdbserver/target.c | 67 |
1 files changed, 42 insertions, 25 deletions
diff --git a/gdb/gdbserver/target.c b/gdb/gdbserver/target.c index b570b6c6886..bbfb5fd660e 100644 --- a/gdb/gdbserver/target.c +++ b/gdb/gdbserver/target.c @@ -29,10 +29,7 @@ set_desired_inferior (int use_general) struct thread_info *found; if (use_general == 1) - { - found = (struct thread_info *) find_inferior_id (&all_threads, - general_thread); - } + found = find_thread_pid (general_thread); else { found = NULL; @@ -40,14 +37,14 @@ set_desired_inferior (int use_general) /* If we are continuing any (all) thread(s), use step_thread to decide which thread to step and/or send the specified signal to. */ - if ((step_thread != 0 && step_thread != -1) - && (cont_thread == 0 || cont_thread == -1)) - found = (struct thread_info *) find_inferior_id (&all_threads, - step_thread); + if ((!ptid_equal (step_thread, null_ptid) + && !ptid_equal (step_thread, minus_one_ptid)) + && (ptid_equal (cont_thread, null_ptid) + || ptid_equal (cont_thread, minus_one_ptid))) + found = find_thread_pid (step_thread); if (found == NULL) - found = (struct thread_info *) find_inferior_id (&all_threads, - cont_thread); + found = find_thread_pid (cont_thread); } if (found == NULL) @@ -88,28 +85,24 @@ write_inferior_memory (CORE_ADDR memaddr, const unsigned char *myaddr, return res; } -unsigned long -mywait (struct target_waitstatus *ourstatus, int options, +ptid_t +mywait (ptid_t ptid, struct target_waitstatus *ourstatus, int options, int connected_wait) { - unsigned long ret; + ptid_t ret; if (connected_wait) server_waiting = 1; - ret = (*the_target->wait) (ourstatus, options); + ret = (*the_target->wait) (ptid, ourstatus, options); - if (ourstatus->kind == TARGET_WAITKIND_EXITED - || ourstatus->kind == TARGET_WAITKIND_SIGNALLED) - { - if (ourstatus->kind == TARGET_WAITKIND_EXITED) - fprintf (stderr, - "\nChild exited with status %d\n", ourstatus->value.sig); - if (ourstatus->kind == TARGET_WAITKIND_SIGNALLED) - fprintf (stderr, "\nChild terminated with signal = 0x%x (%s)\n", - target_signal_to_host (ourstatus->value.sig), - target_signal_to_name (ourstatus->value.sig)); - } + if (ourstatus->kind == TARGET_WAITKIND_EXITED) + fprintf (stderr, + "\nChild exited with status %d\n", ourstatus->value.sig); + else if (ourstatus->kind == TARGET_WAITKIND_SIGNALLED) + fprintf (stderr, "\nChild terminated with signal = 0x%x (%s)\n", + target_signal_to_host (ourstatus->value.sig), + target_signal_to_name (ourstatus->value.sig)); if (connected_wait) server_waiting = 0; @@ -137,3 +130,27 @@ set_target_ops (struct target_ops *target) the_target = (struct target_ops *) xmalloc (sizeof (*the_target)); memcpy (the_target, target, sizeof (*the_target)); } + +/* Convert pid to printable format. */ + +const char * +target_pid_to_str (ptid_t ptid) +{ + static char buf[80]; + + if (ptid_equal (ptid, minus_one_ptid)) + snprintf (buf, sizeof (buf), "<all threads>"); + else if (ptid_equal (ptid, null_ptid)) + snprintf (buf, sizeof (buf), "<null thread>"); + else if (ptid_get_tid (ptid) != 0) + snprintf (buf, sizeof (buf), "Thread %d.0x%lx", + ptid_get_pid (ptid), ptid_get_tid (ptid)); + else if (ptid_get_lwp (ptid) != 0) + snprintf (buf, sizeof (buf), "LWP %d.%ld", + ptid_get_pid (ptid), ptid_get_lwp (ptid)); + else + snprintf (buf, sizeof (buf), "Process %d", + ptid_get_pid (ptid)); + + return buf; +} |