This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
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