+Sun Aug 30 00:49:18 1998 Martin M. Hunt <hunt@cygnus.com>
+
+ * gdbtk-cmds.c (Gdbtk_Init): Link C variable gdb_context
+ with tcl variable gdb_context_id.
+
+ * gdbtk-hooks.c (gdbtk_context_change): Implement new hook called
+ context_hook. Called when threads change.
+
+ * gdbtk.c: Initialize gdb_context.
+
+ * gdbtk.h: Declare gdb_context.
+
+ * infrun (wait_for_inferior): Call context_hook.
+
+ * thread.c (thread_command): Call context_hook.
+
+ * defs.h: Declare context_hook.
+
Fri Aug 28 12:14:49 1998 Martin M. Hunt <hunt@cygnus.com>
* gdbtk-cmds.c (gdb_loadfile): Open the file after doing
call_wrapper, gdb_get_trace_frame_num, NULL);
Tcl_CreateObjCommand (interp, "gdb_stack", call_wrapper, gdb_stack, NULL);
- Tcl_LinkVar (interp, "gdb_selected_frame_level",
+ Tcl_LinkVar (interp, "gdb_selected_frame_level",
(char *) &selected_frame_level,
TCL_LINK_INT | TCL_LINK_READ_ONLY);
+ /* gdb_context is used for debugging multiple threads or tasks */
+ Tcl_LinkVar (interp, "gdb_context_id",
+ (char *) &gdb_context,
+ TCL_LINK_INT | TCL_LINK_READ_ONLY);
+
Tcl_PkgProvide(interp, "Gdbtk", GDBTK_VERSION);
return TCL_OK;
}
static void pc_changed PARAMS ((void));
static void tracepoint_notify PARAMS ((struct tracepoint *, const char *));
static void gdbtk_selected_frame_changed PARAMS ((int));
+static void gdbtk_context_change PARAMS ((int));
+void (*context_hook) PARAMS ((int));
/*
* gdbtk_fputs can't be static, because we need to call it in gdbtk.c.
modify_tracepoint_hook = gdbtk_modify_tracepoint;
pc_changed_hook = pc_changed;
selected_frame_level_changed_hook = gdbtk_selected_frame_changed;
-
+ context_hook = gdbtk_context_change;
}
/* These control where to put the gdb output which is created by
{
Tcl_UpdateLinkedVar (gdbtk_interp, "gdb_selected_frame_level");
}
+
+/* Called when the current thread changes. */
+/* gdb_context is linked to the tcl variable "gdb_context_id" */
+static void
+gdbtk_context_change (num)
+ int num;
+{
+ gdb_context = num;
+}
static int gdbtk_timer_going = 0;
+/* linked variable used to tell tcl what the current thread is */
+int gdb_context = 0;
+
/* This variable is true when the inferior is running. See note in
* gdbtk.h for details.
*/
-
int running_now;
/* This variable determines where memory used for disassembly is read from.
* See note in gdbtk.h for details.
*/
-
int disassemble_from_exec = -1;
/* This variable holds the name of a Tcl file which should be sourced by the
interpreter when it goes idle at startup. Used with the testsuite. */
-
static char *gdbtk_source_filename = NULL;
\f
#ifndef _WIN32
extern gdbtk_result *result_ptr;
+/* GDB context identifier */
+extern int gdb_context;
+
/*
* These functions are used in all the modules of Gdbtk.
*
error ("Thread ID %d has terminated.\n", num);
switch_to_thread (tp->pid);
-
+ if (context_hook)
+ context_hook (num);
printf_filtered ("[Switching to %s]\n", target_pid_to_str (inferior_pid));
print_stack_frame (selected_frame, selected_frame_level, 1);
}