aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Brobecker <brobecker@gnat.com>2011-09-16 19:09:26 +0000
committerJoel Brobecker <brobecker@gnat.com>2011-09-16 19:09:26 +0000
commit79779fa90bec17308d0d0c4eee27365dc012a0f9 (patch)
tree86891f62cb08f81852a4adc53ae6c166f98429e8
parente225eb91c10da9c51e56ed9869321e7e854fec30 (diff)
downloadgdb-79779fa90bec17308d0d0c4eee27365dc012a0f9.zip
gdb-79779fa90bec17308d0d0c4eee27365dc012a0f9.tar.gz
gdb-79779fa90bec17308d0d0c4eee27365dc012a0f9.tar.bz2
[Ada] Adjust ada-tasks.c:ada_build_task_list
Originally, this function had a parameter called `warn_if_null' which would trigger a message to be printed on stdout if the program was found to not use Ada tasking. It used one of the printf_ functions for that, which is wrong when considering the context of GDB/MI interpreters. So, this patch changes this function to stop printing the message, and leaves that part to the callers instead. It also changes the semantics slightly to return the number of tasks found, rather than a yes/no answer. Not strictly needed, but simple enough to do, and potentially useful later. gdb/ChangeLog: * ada-lang.h (ada_build_task_list): Remove parameter `warn_if_null'. * ada-tasks.c (ada_build_task_list): Remove parameter `warn_if_null'. Adjust implementation and documentation. (valid_task_id, ada_get_environment_task) iterate_over_live_ada_tasks): Adjust call to ada_build_task_list. (info_tasks_command): Adjust implementation. (task_command): Likewise. * ravenscar-thread.c (ravenscar_find_new_threads): Fix call to ada_build_task_list.
-rw-r--r--gdb/ChangeLog13
-rw-r--r--gdb/ada-lang.h2
-rw-r--r--gdb/ada-tasks.c41
-rw-r--r--gdb/ravenscar-thread.c2
4 files changed, 36 insertions, 22 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index aea3e17..fa48c01 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,18 @@
2011-09-16 Joel Brobecker <brobecker@adacore.com>
+ * ada-lang.h (ada_build_task_list): Remove parameter
+ `warn_if_null'.
+ * ada-tasks.c (ada_build_task_list): Remove parameter
+ `warn_if_null'. Adjust implementation and documentation.
+ (valid_task_id, ada_get_environment_task)
+ iterate_over_live_ada_tasks): Adjust call to ada_build_task_list.
+ (info_tasks_command): Adjust implementation.
+ (task_command): Likewise.
+ * ravenscar-thread.c (ravenscar_find_new_threads): Fix call
+ to ada_build_task_list.
+
+2011-09-16 Joel Brobecker <brobecker@adacore.com>
+
* ada-tasks.c (ada_tasks_check_symbol_table, task_list): Delete.
(enum ada_known_tasks_kind, struct ada_tasks_inferior_data): New.
(ada_tasks_inferior_data_handle): New static global.
diff --git a/gdb/ada-lang.h b/gdb/ada-lang.h
index c363059..cea9804 100644
--- a/gdb/ada-lang.h
+++ b/gdb/ada-lang.h
@@ -383,6 +383,6 @@ typedef void (ada_task_list_iterator_ftype) (struct ada_task_info *task);
extern void iterate_over_live_ada_tasks
(ada_task_list_iterator_ftype *iterator);
-extern int ada_build_task_list (int warn_if_null);
+extern int ada_build_task_list (void);
#endif
diff --git a/gdb/ada-tasks.c b/gdb/ada-tasks.c
index 80509ec..575080a 100644
--- a/gdb/ada-tasks.c
+++ b/gdb/ada-tasks.c
@@ -330,7 +330,7 @@ valid_task_id (int task_num)
{
struct ada_tasks_inferior_data *data;
- ada_build_task_list (0);
+ ada_build_task_list ();
data = get_ada_tasks_inferior_data (current_inferior ());
return (task_num > 0
&& task_num <= VEC_length (ada_task_info_s, data->task_list));
@@ -355,7 +355,7 @@ iterate_over_live_ada_tasks (ada_task_list_iterator_ftype *iterator)
struct ada_task_info *task;
struct ada_tasks_inferior_data *data;
- ada_build_task_list (0);
+ ada_build_task_list ();
data = get_ada_tasks_inferior_data (current_inferior ());
nb_tasks = VEC_length (ada_task_info_s, data->task_list);
@@ -905,12 +905,12 @@ read_known_tasks (void)
return 1;
}
-/* Builds the task_list by reading the Known_Tasks array from
- the inferior. Prints an appropriate message and returns non-zero
- if it failed to build this list. */
+/* Build the task_list by reading the Known_Tasks array from
+ the inferior, and return the number of tasks in that list
+ (zero means that the program is not using tasking at all). */
int
-ada_build_task_list (int warn_if_null)
+ada_build_task_list (void)
{
struct ada_tasks_inferior_data *data;
@@ -921,14 +921,7 @@ ada_build_task_list (int warn_if_null)
if (!data->task_list_valid_p)
read_known_tasks ();
- if (data->task_list == NULL)
- {
- if (warn_if_null)
- printf_filtered (_("Your application does not use any Ada tasks.\n"));
- return 0;
- }
-
- return 1;
+ return VEC_length (ada_task_info_s, data->task_list);
}
/* Print a one-line description of the task running in inferior INF
@@ -1091,10 +1084,14 @@ info_task (char *taskno_str, int from_tty, struct inferior *inf)
static void
info_tasks_command (char *arg, int from_tty)
{
- const int task_list_built = ada_build_task_list (1);
+ struct ui_out *uiout = current_uiout;
- if (!task_list_built)
- return;
+ if (ada_build_task_list () == 0)
+ {
+ ui_out_message (uiout, 0,
+ _("Your application does not use any Ada tasks.\n"));
+ return;
+ }
if (arg == NULL || *arg == '\0')
info_tasks (from_tty, current_inferior ());
@@ -1170,10 +1167,14 @@ task_command_1 (char *taskno_str, int from_tty, struct inferior *inf)
static void
task_command (char *taskno_str, int from_tty)
{
- const int task_list_built = ada_build_task_list (1);
+ struct ui_out *uiout = current_uiout;
- if (!task_list_built)
- return;
+ if (ada_build_task_list () == 0)
+ {
+ ui_out_message (uiout, 0,
+ _("Your application does not use any Ada tasks.\n"));
+ return;
+ }
if (taskno_str == NULL || taskno_str[0] == '\0')
display_current_task_id ();
diff --git a/gdb/ravenscar-thread.c b/gdb/ravenscar-thread.c
index b324fe7..696e08a8 100644
--- a/gdb/ravenscar-thread.c
+++ b/gdb/ravenscar-thread.c
@@ -222,7 +222,7 @@ ravenscar_add_thread (struct ada_task_info *task)
static void
ravenscar_find_new_threads (struct target_ops *ops)
{
- ada_build_task_list (0);
+ ada_build_task_list ();
/* Do not clear the thread list before adding the Ada task, to keep
the thread that the process stratum has included into it