From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27539 invoked by alias); 12 Nov 2008 20:35:59 -0000 Received: (qmail 27429 invoked by uid 22791); 12 Nov 2008 20:35:58 -0000 X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (65.74.133.4) by sourceware.org (qpsmtpd/0.31) with ESMTP; Wed, 12 Nov 2008 20:35:04 +0000 Received: (qmail 28789 invoked from network); 12 Nov 2008 20:30:49 -0000 Received: from unknown (HELO localhost) (vladimir@127.0.0.2) by mail.codesourcery.com with ESMTPA; 12 Nov 2008 20:30:49 -0000 From: Vladimir Prus To: gdb-patches@sources.redhat.com Subject: [RFC] Notification for attach/detach. Date: Wed, 12 Nov 2008 21:07:00 -0000 User-Agent: KMail/1.9.10 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Message-Id: <200811122335.01950.vladimir@codesourcery.com> Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2008-11/txt/msg00247.txt.bz2 This patch introduces new =3Dthread-group-created and =3Dthread-group-exite= d notifications, to help the frontend in multiprocess case. I'll commit in a few days if there are no objections. - Volodya =46rom c41177a84715643cdb6315256e2c5635275336ea Mon Sep 17 00:00:00 2001 gdb/ * Makefile.in: Update dependencies. * inferior.c: Call the process observers. * mi/mi-interp.c (mi_new_inferior, mi_inferior_exit): New. (mi_interpreter_init): Register the above. gdb/doc/ * observer.texi (new_inferior, inferior_exit): New observers. --- gdb/doc/observer.texi | 10 ++++++++++ gdb/inferior.c | 5 +++++ gdb/mi/mi-interp.c | 24 ++++++++++++++++++++++++ gdb/mi/mi-main.c | 12 ++++++------ 4 files changed, 45 insertions(+), 6 deletions(-) diff --git a/gdb/doc/observer.texi b/gdb/doc/observer.texi index f76bf9f..cc0eb06 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}) +The inferior identified by @var{pid} has either exited, or was detached +from. +@end deftypefun + diff --git a/gdb/inferior.c b/gdb/inferior.c index 9fec4cc..24f8fa6 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" =20 void _initialize_inferiors (void); =20 @@ -91,6 +92,8 @@ add_inferior (int pid) { struct inferior *inf =3D add_inferior_silent (pid); =20 + observer_notify_new_inferior (pid); + if (print_inferior_events) printf_unfiltered (_("[New inferior %d]\n"), pid); =20 @@ -147,6 +150,8 @@ delete_inferior_1 (int pid, int silent) arg.silent =3D silent; =20 iterate_over_threads (delete_thread_of_inferior, &arg); + + observer_notify_inferior_exit (pid); } =20 void diff --git a/gdb/mi/mi-interp.c b/gdb/mi/mi-interp.c index df0d3df..3121604 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); =20 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); =20 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) } =20 static void +mi_new_inferior (int pid) +{ + struct mi_interp *mi =3D top_level_interpreter_data (); + target_terminal_ours (); + fprintf_unfiltered (mi->event_channel, "thread-group-created,id=3D\"%d\"= ",=20 + pid); + gdb_flush (mi->event_channel); +} + +static void +mi_inferior_exit (int pid) +{ + struct mi_interp *mi =3D top_level_interpreter_data (); + target_terminal_ours (); + fprintf_unfiltered (mi->event_channel, "thread-group-exited,id=3D\"%d\""= ,=20 + pid); + gdb_flush (mi->event_channel);=20=20 +} + +static void mi_on_normal_stop (struct bpstats *bs) { /* Since this can be called when CLI command is executing, diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c index 544fec6..43ec0b4 100644 --- a/gdb/mi/mi-main.c +++ b/gdb/mi/mi-main.c @@ -46,7 +46,7 @@ #include "mi-main.h" #include "language.h" #include "valprint.h" -#include "processes.h" +#include "inferior.h" =20 #include #include @@ -250,13 +250,13 @@ mi_cmd_thread_info (char *command, char **argv, int a= rgc) } =20 static int -print_one_process (struct process_info *process, void *arg) +print_one_inferior (struct inferior *inferior, void *arg) { struct cleanup *back_to =3D make_cleanup_ui_out_tuple_begin_end (uiout, = NULL); =20 - ui_out_field_fmt (uiout, "id", "p%d", process->pid); + ui_out_field_fmt (uiout, "id", "%d", inferior->pid); ui_out_field_string (uiout, "type", "process"); - ui_out_field_int (uiout, "pid", process->pid); + ui_out_field_int (uiout, "pid", inferior->pid); =20=20=20 do_cleanups (back_to); return 0; @@ -284,14 +284,14 @@ mi_cmd_list_thread_groups (char *command, char **argv= , int argc) if (id) { int pid =3D atoi (id); - if (!in_process_list (pid)) + if (!in_inferior_list (pid)) error ("Invalid thread group id '%s'", id); print_thread_info (uiout, -1, pid);=20=20=20=20 } else { make_cleanup_ui_out_list_begin_end (uiout, "groups"); - iterate_over_processes (print_one_process, NULL); + iterate_over_inferiors (print_one_inferior, NULL); } =20=20=20 do_cleanups (back_to); --=20 1.5.3.5