/* Multi-process/thread control for GDB, the GNU debugger.
- Copyright 1986, 1987, 1988, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001
- Free Software Foundation, Inc.
+
+ Copyright 1986, 1987, 1988, 1993, 1994, 1995, 1996, 1997, 1998,
+ 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+
Contributed by Lynx Real-Time Systems, Inc. Los Gatos, CA.
-
This file is part of GDB.
#include "gdbcmd.h"
#include "regcache.h"
#include "gdb.h"
+#include "gdb_string.h"
#include <ctype.h>
#include <sys/types.h>
#include <signal.h>
-#ifdef UI_OUT
#include "ui-out.h"
-#endif
/*#include "lynxos-core.h" */
return 0; /* Never heard of 'im */
}
-#ifdef UI_OUT
+
/* Print a list of thread ids currently known, and the total number of
threads. To be used from within catch_errors. */
static int
-do_captured_list_thread_ids (void *arg)
+do_captured_list_thread_ids (struct ui_out *uiout,
+ void *arg)
{
struct thread_info *tp;
int num = 0;
/* Official gdblib interface function to get a list of thread ids and
the total number. */
enum gdb_rc
-gdb_list_thread_ids (/* output object */)
+gdb_list_thread_ids (struct ui_out *uiout)
{
- return catch_errors (do_captured_list_thread_ids, NULL,
- NULL, RETURN_MASK_ALL);
+ return catch_exceptions (uiout, do_captured_list_thread_ids, NULL,
+ NULL, RETURN_MASK_ALL);
}
-#endif
/* Load infrun state for the thread PID. */
struct thread_info *tp;
ptid_t current_ptid;
struct frame_info *cur_frame;
- int saved_frame_level = selected_frame_level;
+ int saved_frame_level = frame_relative_level (selected_frame);
int counter;
char *extra_info;
}
else
{
- select_frame (cur_frame, saved_frame_level);
+ select_frame (cur_frame);
}
/* re-show current frame. */
flush_cached_frames ();
registers_changed ();
stop_pc = read_pc ();
- select_frame (get_current_frame (), 0);
+ select_frame (get_current_frame ());
}
static void
return;
}
- gdb_thread_select (tidstr);
+ gdb_thread_select (uiout, tidstr);
}
static int
-do_captured_thread_select (void *tidstr)
+do_captured_thread_select (struct ui_out *uiout,
+ void *tidstr)
{
int num;
struct thread_info *tp;
tp = find_thread_id (num);
-#ifdef UI_OUT
if (!tp)
error ("Thread ID %d not known.", num);
-#else
- if (!tp)
- error ("Thread ID %d not known. Use the \"info threads\" command to\n\
-see the IDs of currently known threads.", num);
-#endif
if (!thread_alive (tp))
error ("Thread ID %d has terminated.\n", num);
switch_to_thread (tp->ptid);
-#ifdef UI_OUT
ui_out_text (uiout, "[Switching to thread ");
ui_out_field_int (uiout, "new-thread-id", pid_to_thread_id (inferior_ptid));
ui_out_text (uiout, " (");
ui_out_text (uiout, target_pid_to_str (inferior_ptid));
#endif
ui_out_text (uiout, ")]");
-#else /* UI_OUT */
- printf_filtered ("[Switching to thread %d (%s)]\n",
- pid_to_thread_id (inferior_ptid),
-#if defined(HPUXHPPA)
- target_tid_to_str (inferior_ptid)
-#else
- target_pid_to_str (inferior_ptid)
-#endif
- );
-#endif /* UI_OUT */
- print_stack_frame (selected_frame, selected_frame_level, 1);
+ print_stack_frame (selected_frame, frame_relative_level (selected_frame), 1);
return GDB_RC_OK;
}
enum gdb_rc
-gdb_thread_select (char *tidstr)
+gdb_thread_select (struct ui_out *uiout,
+ char *tidstr)
{
- return catch_errors (do_captured_thread_select, tidstr,
- NULL, RETURN_MASK_ALL);
+ return catch_exceptions (uiout, do_captured_thread_select, tidstr,
+ NULL, RETURN_MASK_ALL);
}
/* Commands with a prefix of `thread'. */