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]

[VxWorks 03/20] New toplevel_command_post observer


gdb/ChangeLog:

        * doc/observer.texi (toplevel_command_post): New observer.
        * event-top.c: #include "observer.h".
        (toplevel_command_cleanup): New function.
        (command_handler): Add toplevel_command_cleanup cleanup.
---
 gdb/doc/observer.texi |    5 +++++
 gdb/event-top.c       |   20 +++++++++++++++++++-
 2 files changed, 24 insertions(+), 1 deletions(-)

diff --git a/gdb/doc/observer.texi b/gdb/doc/observer.texi
index d16c865..146731f 100644
--- a/gdb/doc/observer.texi
+++ b/gdb/doc/observer.texi
@@ -132,6 +132,11 @@ Called with @var{objfile} equal to @code{NULL} to indicate
 previously loaded symbol table data has now been invalidated.
 @end deftypefun
 
+@deftypefun void toplevel_command_post (void)
+The debugger just finished executing a command entered at the command
+prompt.
+@end deftypefun
+
 @deftypefun void new_thread (struct thread_info *@var{t})
 The thread specified by @var{t} has been created.
 @end deftypefun
diff --git a/gdb/event-top.c b/gdb/event-top.c
index 71accf6..da10f1d 100644
--- a/gdb/event-top.c
+++ b/gdb/event-top.c
@@ -33,7 +33,7 @@
 #include "cli/cli-script.h"     /* for reset_command_nest_depth */
 #include "main.h"
 #include "gdbthread.h"
-
+#include "observer.h"
 #include "gdbcmd.h"		/* for dont_repeat() */
 
 /* readline include files.  */
@@ -467,6 +467,20 @@ async_disable_stdin (void)
 }
 
 
+/* The actions to perform once a command from the top-level command
+   loop has finished executing.
+
+   This function is defined in such a way as to allow its use with
+   the cleanup mechanism, to make sure that the actions are always
+   performed, even when an exception is raised during the treatment
+   of the command.  */
+
+static void
+toplevel_command_cleanup (void *unused)
+{
+  observer_notify_toplevel_command_post ();
+}
+
 /* Handles a gdb command.  This function is called by
    command_line_handler, which has processed one or more input lines
    into COMMAND.  */
@@ -494,7 +508,11 @@ command_handler (char *command)
       execute_command ("quit", stdin == instream);
     }
 
+  /* We insert the command-stats entry first in order to see
+     the command stats be displayed at the end, after all the other
+     cleanup entries have been handled.  */
   stat_chain = make_command_stats_cleanup (1);
+  make_cleanup (toplevel_command_cleanup, NULL);
 
   execute_command (command, instream == stdin);
 
-- 
1.7.0.4


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