summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Prus <vladimir@codesourcery.com>2008-11-17 12:28:05 +0000
committerVladimir Prus <vladimir@codesourcery.com>2008-11-17 12:28:05 +0000
commite7869269d3657b94d83ea440569ebdcd21c56189 (patch)
tree0607f99fd1722189d40b503456365001a2233ff0
parentc52c9073d08225f822d625a8d76819ba5a0470bf (diff)
downloadgdb-e7869269d3657b94d83ea440569ebdcd21c56189.tar.gz
Notification for attach/detach.
* inferior.c: Call the process observers. * mi/mi-interp.c (mi_new_inferior, mi_inferior_exit): New. (mi_interpreter_init): Register the above.
-rw-r--r--gdb/ChangeLog8
-rw-r--r--gdb/doc/ChangeLog4
-rw-r--r--gdb/doc/observer.texi10
-rw-r--r--gdb/inferior.c5
-rw-r--r--gdb/mi/mi-interp.c24
5 files changed, 51 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 99bfda122df..a224e303e20 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,13 @@
2008-11-17 Vladimir Prus <vladimir@codesourcery.com>
+ Notification for attach/detach.
+
+ * inferior.c: Call the process observers.
+ * mi/mi-interp.c (mi_new_inferior, mi_inferior_exit): New.
+ (mi_interpreter_init): Register the above.
+
+2008-11-17 Vladimir Prus <vladimir@codesourcery.com>
+
Implement -list-thread-groups.
* thread.c (print_thread_info): New parameter pid, to print
diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog
index 363ee18e2ec..18f665000c1 100644
--- a/gdb/doc/ChangeLog
+++ b/gdb/doc/ChangeLog
@@ -1,3 +1,7 @@
+2008-11-17 Vladimir Prus <vladimir@codesourcery.com>
+
+ * observer.texi (new_inferior, inferior_exit): New observers.
+
2008-10-27 Pedro Alves <pedro@codesourcery.com>
* gdbint.texinfo (Adding a New Target): Don't mention TDEPFILES,
diff --git a/gdb/doc/observer.texi b/gdb/doc/observer.texi
index f76bf9ff366..636658af66b 100644
--- a/gdb/doc/observer.texi
+++ b/gdb/doc/observer.texi
@@ -187,3 +187,13 @@ a pointer to the new architecture.
The thread's ptid has changed. The @var{old_ptid} parameter specifies
the old value, and @var{new_ptid} specifies the new value.
@end deftypefun
+
+@deftypefun void new_inferior (int @var{pid})
+@value{GDBN} has attached to a new inferior identified by @var{pid}.
+@end deftypefun
+
+@deftypefun void inferior_exit (int @var{pid})
+Either @value{GDBN} detached from the inferior, or the inferior
+exited. The argument @var{pid} identifies the inferior.
+@end deftypefun
+
diff --git a/gdb/inferior.c b/gdb/inferior.c
index 9fec4cc2887..24f8fa6b5d8 100644
--- a/gdb/inferior.c
+++ b/gdb/inferior.c
@@ -24,6 +24,7 @@
#include "gdbcmd.h"
#include "gdbthread.h"
#include "ui-out.h"
+#include "observer.h"
void _initialize_inferiors (void);
@@ -91,6 +92,8 @@ add_inferior (int pid)
{
struct inferior *inf = add_inferior_silent (pid);
+ observer_notify_new_inferior (pid);
+
if (print_inferior_events)
printf_unfiltered (_("[New inferior %d]\n"), pid);
@@ -147,6 +150,8 @@ delete_inferior_1 (int pid, int silent)
arg.silent = silent;
iterate_over_threads (delete_thread_of_inferior, &arg);
+
+ observer_notify_inferior_exit (pid);
}
void
diff --git a/gdb/mi/mi-interp.c b/gdb/mi/mi-interp.c
index df0d3dfdab3..31216040b04 100644
--- a/gdb/mi/mi-interp.c
+++ b/gdb/mi/mi-interp.c
@@ -69,6 +69,8 @@ static void mi_on_normal_stop (struct bpstats *bs);
static void mi_new_thread (struct thread_info *t);
static void mi_thread_exit (struct thread_info *t);
+static void mi_new_inferior (int pid);
+static void mi_inferior_exit (int pid);
static void mi_on_resume (ptid_t ptid);
static void *
@@ -94,6 +96,8 @@ mi_interpreter_init (int top_level)
{
observer_attach_new_thread (mi_new_thread);
observer_attach_thread_exit (mi_thread_exit);
+ observer_attach_new_inferior (mi_new_inferior);
+ observer_attach_inferior_exit (mi_inferior_exit);
observer_attach_normal_stop (mi_on_normal_stop);
observer_attach_target_resumed (mi_on_resume);
}
@@ -303,6 +307,26 @@ mi_thread_exit (struct thread_info *t)
}
static void
+mi_new_inferior (int pid)
+{
+ struct mi_interp *mi = top_level_interpreter_data ();
+ target_terminal_ours ();
+ fprintf_unfiltered (mi->event_channel, "thread-group-created,id=\"%d\"",
+ pid);
+ gdb_flush (mi->event_channel);
+}
+
+static void
+mi_inferior_exit (int pid)
+{
+ struct mi_interp *mi = top_level_interpreter_data ();
+ target_terminal_ours ();
+ fprintf_unfiltered (mi->event_channel, "thread-group-exited,id=\"%d\"",
+ pid);
+ gdb_flush (mi->event_channel);
+}
+
+static void
mi_on_normal_stop (struct bpstats *bs)
{
/* Since this can be called when CLI command is executing,