Sun Aug 30 00:49:18 1998 Martin M. Hunt <hunt@cygnus.com>
authorMartin Hunt <hunt@redhat.com>
Sun, 30 Aug 1998 07:53:29 +0000 (07:53 +0000)
committerMartin Hunt <hunt@redhat.com>
Sun, 30 Aug 1998 07:53:29 +0000 (07:53 +0000)
* 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.

gdb/ChangeLog-gdbtk
gdb/gdbtk-cmds.c
gdb/gdbtk-hooks.c
gdb/gdbtk.c
gdb/gdbtk.h
gdb/thread.c

index db6dfafc582428c34308456f2995525673f4284b..ca33c68ac0b1590198415bbf782ab7355553a522 100644 (file)
@@ -1,3 +1,21 @@
+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
index fba53570bf3583d27201447deb770ee7e6b11726..15ba833d5f4d6f45593bd65328d2edfc95e97789 100644 (file)
@@ -304,10 +304,15 @@ Gdbtk_Init (interp)
                         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;
 }
index b3178bbb6a35fa1c701723fd6f5ef8cdaafeda0a..d4a9fa1bbcedcf3c8c5cdb7a5c5a2cb77e381900 100644 (file)
@@ -110,6 +110,8 @@ static void gdbtk_post_add_symbol PARAMS ((void));
 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.
@@ -157,7 +159,7 @@ gdbtk_add_hooks(void)
   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
@@ -690,3 +692,12 @@ gdbtk_selected_frame_changed (level)
 {
   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;
+}
index e8d31ad56588ddfba577c92b52f74d34eba94068..c59821f992a98fa6c28a5aec73278d1d717cbef1 100644 (file)
@@ -102,21 +102,21 @@ Tcl_Interp *gdbtk_interp = NULL;
 
 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
index a98be7a28fab4ab283c4cda4fbb84302898d0362..a138a338b31711b15bfb573abcd1c5748a240b41 100644 (file)
@@ -120,6 +120,9 @@ typedef struct gdbtk_result {
    
 extern gdbtk_result *result_ptr;
 
+/* GDB context identifier */
+extern int gdb_context;
+
 /*
  * These functions are used in all the modules of Gdbtk.
  * 
index 4c158ffb5a63c008d92da50a9df69ebd91d4c4c1..8c61a564cd8643f22edf4491c3d85d51bcf2c1d2 100644 (file)
@@ -518,7 +518,8 @@ see the IDs of currently known threads.", num);
     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);
 }