This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] New annotation for threads


 > I plan to represent this patch with a test shortly...

Here it is with documentation.  This is pretty much what I submitted
originally.  Since then the new_thread observer has been moved to
add_thread_silent and, as Daniel points out, might be called at other locations
or change in the future.  With the benefit of hindsight, I think these are good
reasons not to use the observer for annotations.

-- 
Nick                                           http://www.inet.net.nz/~nickrob


2008-05-18  Nick Roberts  <nickrob@snap.net.nz>

	* annotate.c (annotate_new_thread): New function for new-thread
	annotation.

	* annotate.h: (annotate_new_thread): New extern.

	* thread.c (add_thread_with_info): Use it.

	* Makefile.in (thread.o): Add dependency on annotate.h.

2008-05-18  Nick Roberts  <nickrob@snap.net.nz>

	* gdb.base/annota1.exp: Test for new annotation.

2008-05-18  Nick Roberts  <nickrob@snap.net.nz>

	* annotate.texinfo (Multi-threaded Apps): New node for new annotation.


Index: annotate.c
===================================================================
RCS file: /cvs/src/src/gdb/annotate.c,v
retrieving revision 1.15
diff -p -u -r1.15 annotate.c
--- annotate.c	1 Jan 2008 22:53:09 -0000	1.15
+++ annotate.c	18 May 2008 09:07:38 -0000
@@ -234,6 +234,15 @@ annotate_frames_invalid (void)
 }
 
 void
+annotate_new_thread (void)
+{
+  if (annotation_level > 1)
+    {
+      printf_unfiltered (("\n\032\032new-thread\n"));
+    }
+}
+
+void
 annotate_field_begin (struct type *type)
 {
   if (annotation_level == 2)

Index: annotate.h
===================================================================
RCS file: /cvs/src/src/gdb/annotate.h,v
retrieving revision 1.9
diff -p -u -r1.9 annotate.h
--- annotate.h	1 Jan 2008 22:53:09 -0000	1.9
+++ annotate.h	18 May 2008 09:07:38 -0000
@@ -43,6 +43,7 @@ extern void annotate_record (void);
 extern void annotate_breakpoints_table_end (void);
 
 extern void annotate_frames_invalid (void);
+extern void annotate_new_thread (void);
 
 struct type;
 
Index: thread.c
===================================================================
RCS file: /cvs/src/src/gdb/thread.c,v
retrieving revision 1.69
diff -p -u -r1.69 thread.c
--- thread.c	9 May 2008 08:14:47 -0000	1.69
+++ thread.c	18 May 2008 09:07:39 -0000
@@ -40,6 +40,7 @@
 #include <signal.h>
 #include "ui-out.h"
 #include "observer.h"
+#include "annotate.h"
 
 /* Definition of struct thread_info exported to gdbthread.h */
 
@@ -141,7 +142,8 @@ add_thread_with_info (ptid_t ptid, struc
 
   if (print_thread_events)
     printf_unfiltered (_("[New %s]\n"), target_pid_to_str (ptid));
-  
+
+  annotate_new_thread ();
   return result;
 }
 
Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/Makefile.in,v
retrieving revision 1.1021
diff -p -u -r1.1021 Makefile.in
--- Makefile.in	16 May 2008 12:51:21 -0000	1.1021
+++ Makefile.in	18 May 2008 09:07:41 -0000
@@ -2932,7 +2932,7 @@ target-memory.o: target-memory.c $(defs_
 thread.o: thread.c $(defs_h) $(symtab_h) $(frame_h) $(inferior_h) \
 	$(environ_h) $(value_h) $(target_h) $(gdbthread_h) $(exceptions_h) \
 	$(command_h) $(gdbcmd_h) $(regcache_h) $(gdb_h) $(gdb_string_h) \
-	$(ui_out_h) $(observer_h)
+	$(ui_out_h) $(observer_h) $(annotate_h)
 top.o: top.c $(defs_h) $(gdbcmd_h) $(call_cmds_h) $(cli_cmds_h) \
 	$(cli_script_h) $(cli_setshow_h) $(cli_decode_h) $(symtab_h) \
 	$(inferior_h) $(exceptions_h) $(target_h) $(breakpoint_h) \

Index: testsuite/gdb.base/annota1.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.base/annota1.exp,v
retrieving revision 1.29
diff -p -u -r1.29 annota1.exp
--- testsuite/gdb.base/annota1.exp	16 May 2008 12:48:08 -0000	1.29
+++ testsuite/gdb.base/annota1.exp	18 May 2008 09:07:42 -0000
@@ -490,6 +490,39 @@ if [ regexp "core not found" $exec_outpu
     }
 }
 
+set testfile "watch_thread_num"
+set srcfile ${testfile}.c
+set binfile ${objdir}/${subdir}/${testfile}
+set gdb_prompt $old_gdb_prompt
+
+if { ![get_compiler_info ${binfile}] && [gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug nowarnings}] == "" } {
+
+    gdb_exit
+    gdb_start
+    gdb_reinitialize_dir $srcdir/$subdir
+    gdb_load ${binfile}
+    if { ![runto main] } then {
+	fail "run to main"
+	return
+    }
+
+    set gdb_prompt \
+    "\r\n\032\032pre-prompt\r\n$gdb_prompt \r\n\032\032prompt\r\n"
+
+    send_gdb "set annotate 2\n"
+    gdb_expect {
+	-re "set annotate 2\r\n$gdb_prompt$" {}
+    }
+
+    send_gdb "next 2\n"
+    gdb_expect {
+	-re ".*\032\032new-thread" {
+	    pass "new thread"
+	}
+	timeout { fail "new thread (timeout)" }
+    }
+}
+
 # restore the original prompt for the rest of the testsuite
 
 set gdb_prompt $old_gdb_prompt

Index: doc/annotate.texinfo
===================================================================
RCS file: /cvs/src/src/gdb/doc/annotate.texinfo,v
retrieving revision 1.7
diff -p -u -r1.7 annotate.texinfo
--- doc/annotate.texinfo	20 Jan 2007 16:51:56 -0000	1.7
+++ doc/annotate.texinfo	18 May 2008 09:07:42 -0000
@@ -85,6 +85,7 @@ This is Edition @value{EDITION}, @value{
 * Annotations for Running::
                         Whether the program is running, how it stopped, etc.
 * Source Annotations::  Annotations describing source code.
+* Multi-threaded Apps:: An annotation that reports multi-threadedness.
 
 * GNU Free Documentation License::
 @end menu
@@ -820,6 +821,21 @@ source which is being displayed.  @var{a
 followed by one or more lowercase hex digits (note that this does not
 depend on the language).
 
+@node Multi-threaded Apps
+@chapter Multi-threaded Applications
+@cindex annotations for multi-threaded apps
+
+@findex new-thread
+The following annotation reports that the application being debugged is
+multi-threaded.
+
+@smallexample
+^Z^Znew-thread
+@end smallexample
+
+This annotation is issued once for each thread that is created apart from
+the main thread, which is not reported.
+
 @raisesections
 @include fdl.texi
 @lowersections


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]