[Ada] New GDB/MI command: -ada-tasks-info
authorJoel Brobecker <brobecker@gnat.com>
Mon, 3 Oct 2011 21:38:31 +0000 (21:38 +0000)
committerJoel Brobecker <brobecker@gnat.com>
Mon, 3 Oct 2011 21:38:31 +0000 (21:38 +0000)
This patch introduces a new GDB/MI command: -ada-tasks-info,
which is meant to be the MI equivalent of the CLI `info tasks'
command.

This new command returns an array, with each row corresponding
to one task.  For now, the columns of the array corresponds to
the columns displayed in the CLI output.

gdb/ChangeLog:

        * ada-lang.h (struct inferior): Declare.
        (print_ada_task_info): Add declaration.
        * ada-tasks.c (print_ada_task_info): Make non-static.
        * mi/mi-cmds.c (mi_cmds): Add "ada-task-info".
        * mi/mi-cmds.h (mi_cmd_ada_task_info): Add declaration.
        * mi/mi-main.c: #include "ada-lang.h".
        (mi_cmd_list_features): Add "ada-task-info" to the list
        of supported features.
        (mi_cmd_ada_task_info): New function.

gdb/ChangeLog
gdb/ada-lang.h
gdb/ada-tasks.c
gdb/mi/mi-cmds.c
gdb/mi/mi-cmds.h
gdb/mi/mi-main.c

index de4fdc824365f0c27b048b45aa94974f9725be1b..c17728b043ebf0a3623e169d58d58f88cbd034ae 100644 (file)
@@ -1,3 +1,15 @@
+2011-10-03  Joel Brobecker  <brobecker@adacore.com>
+
+       * ada-lang.h (struct inferior): Declare.
+       (print_ada_task_info): Add declaration.
+       * ada-tasks.c (print_ada_task_info): Make non-static.
+       * mi/mi-cmds.c (mi_cmds): Add "ada-task-info".
+       * mi/mi-cmds.h (mi_cmd_ada_task_info): Add declaration.
+       * mi/mi-main.c: #include "ada-lang.h".
+       (mi_cmd_list_features): Add "ada-task-info" to the list
+       of supported features.
+       (mi_cmd_ada_task_info): New function.
+
 2011-10-03  Joel Brobecker  <brobecker@adacore.com>
 
        * python/python.c (python_run_simple_file): New function.
index cea9804528035fd6248cec858ad81cf861f8fb0d..d887ef381c96098286540ed0dbdbb65e2f9799d9 100644 (file)
@@ -22,6 +22,7 @@
 #define ADA_LANG_H 1
 
 struct frame_info;
+struct inferior;
 
 #include "value.h"
 #include "gdbtypes.h"
@@ -385,4 +386,8 @@ extern void iterate_over_live_ada_tasks
 
 extern int ada_build_task_list (void);
 
+extern void print_ada_task_info (struct ui_out *uiout,
+                                char *taskno_str,
+                                struct inferior *inf);
+
 #endif
index 6e2f2f590c6bb7a9eb6f99f257710f58fe57d19d..7dff8f8ac176b87b29ac2ecde92c6ce866d46503 100644 (file)
@@ -929,7 +929,7 @@ ada_build_task_list (void)
    interpreted as a task number, and the table will be limited to
    that task only.  */
 
-static void
+void
 print_ada_task_info (struct ui_out *uiout,
                     char *arg_str,
                     struct inferior *inf)
index 0b32db0c9a3e8300087d86af4433cf32228353ac..960d2dc60f45232a6e798fbf85103264119f504a 100644 (file)
@@ -33,6 +33,7 @@ static void build_table (struct mi_cmd *commands);
 
 struct mi_cmd mi_cmds[] =
 {
+  { "ada-task-info", { NULL, 0 }, mi_cmd_ada_task_info },
   { "add-inferior", { NULL, 0 }, mi_cmd_add_inferior },
   { "break-after", { "ignore", 1 }, NULL },
   { "break-condition", { "cond", 1 }, NULL },
index 18b4ad7d3bb67230d1a8452b03bef93d86a22836..67aae5977c9fa6b6f3c50852412cd776a510f3dc 100644 (file)
@@ -36,6 +36,7 @@ extern const char mi_all_values[];
 typedef void (mi_cmd_argv_ftype) (char *command, char **argv, int argc);
 
 /* Function implementing each command */
+extern mi_cmd_argv_ftype mi_cmd_ada_task_info;
 extern mi_cmd_argv_ftype mi_cmd_add_inferior;
 extern mi_cmd_argv_ftype mi_cmd_break_insert;
 extern mi_cmd_argv_ftype mi_cmd_break_commands;
index 4ab2012950b40714c5e89c6d9ab066eeccb9d091..a9c7652b0c2acd06c76c14552ee22dc35633fd2a 100644 (file)
@@ -52,6 +52,7 @@
 #include "osdata.h"
 #include "splay-tree.h"
 #include "tracepoint.h"
+#include "ada-lang.h"
 
 #include <ctype.h>
 #include <sys/time.h>
@@ -1720,6 +1721,7 @@ mi_cmd_list_features (char *command, char **argv, int argc)
       ui_out_field_string (uiout, NULL, "thread-info");
       ui_out_field_string (uiout, NULL, "data-read-memory-bytes");
       ui_out_field_string (uiout, NULL, "breakpoint-notifications");
+      ui_out_field_string (uiout, NULL, "ada-task-info");
       
 #if HAVE_PYTHON
       ui_out_field_string (uiout, NULL, "python");
@@ -2503,3 +2505,14 @@ mi_cmd_trace_stop (char *command, char **argv, int argc)
   stop_tracing ();
   trace_status_mi (1);
 }
+
+/* Implement the "-ada-task-info" GDB/MI command.  */
+
+void
+mi_cmd_ada_task_info (char *command, char **argv, int argc)
+{
+  if (argc != 0 && argc != 1)
+    error (_("Invalid MI command"));
+
+  print_ada_task_info (current_uiout, argv[0], current_inferior ());
+}