From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11012 invoked by alias); 16 Sep 2011 20:46:11 -0000 Received: (qmail 10982 invoked by uid 22791); 16 Sep 2011 20:46:10 -0000 X-SWARE-Spam-Status: No, hits=-2.3 required=5.0 tests=AWL,BAYES_00,RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from rock.gnat.com (HELO rock.gnat.com) (205.232.38.15) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 16 Sep 2011 20:45:47 +0000 Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id 820492BB4A4; Fri, 16 Sep 2011 16:45:46 -0400 (EDT) Received: from rock.gnat.com ([127.0.0.1]) by localhost (rock.gnat.com [127.0.0.1]) (amavisd-new, port 10024) with LMTP id dkMs96NW1jiu; Fri, 16 Sep 2011 16:45:46 -0400 (EDT) Received: from joel.gnat.com (localhost.localdomain [127.0.0.1]) by rock.gnat.com (Postfix) with ESMTP id 52AFD2BB306; Fri, 16 Sep 2011 16:45:46 -0400 (EDT) Received: by joel.gnat.com (Postfix, from userid 1000) id 494C4145615; Fri, 16 Sep 2011 16:45:37 -0400 (EDT) From: Joel Brobecker To: gdb-patches@sourceware.org Cc: vladimir@codesourcery.com, Joel Brobecker Subject: [PATCH 2/3] [Ada] Add field "thread-id" in -ada-task-info output Date: Fri, 16 Sep 2011 22:44:00 -0000 Message-Id: <1316205921-18702-3-git-send-email-brobecker@adacore.com> In-Reply-To: <1316205921-18702-1-git-send-email-brobecker@adacore.com> References: <1316205921-18702-1-git-send-email-brobecker@adacore.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: 2011-09/txt/msg00328.txt.bz2 This patch enhances the -ada-task-info command, adding a new field called "thread-id" in the command output. This field provides the ID of the task's corresponding thread (if that information could not be determined, the field is omitted). This field is useful in the context of GDB/MI users, because it allows a quick translation from Ada task to thread, and thus easy use of all the commands that take a --thread argument. gdb/ChangeLog: * ada-tasks.c (print_ada_task_info): Add "thread-id" field in output of -ada-task-info GDB/MI command. Tested on x86_64-linux. Thanks, -- Joel --- gdb/ada-tasks.c | 33 +++++++++++++++++++++++++++++++-- 1 files changed, 31 insertions(+), 2 deletions(-) diff --git a/gdb/ada-tasks.c b/gdb/ada-tasks.c index 7dff8f8..2673fed 100644 --- a/gdb/ada-tasks.c +++ b/gdb/ada-tasks.c @@ -938,6 +938,7 @@ print_ada_task_info (struct ui_out *uiout, int taskno, nb_tasks; int taskno_arg = 0; struct cleanup *old_chain; + int nb_columns; if (ada_build_task_list () == 0) { @@ -949,14 +950,29 @@ print_ada_task_info (struct ui_out *uiout, if (arg_str != NULL && arg_str[0] != '\0') taskno_arg = value_as_long (parse_and_eval (arg_str)); + if (ui_out_is_mi_like_p (uiout)) + /* In GDB/MI mode, we want to provide the thread ID corresponding + to each task. This allows clients to quickly find the thread + associated to any task, which is helpful for commands that + take a --thread argument. However, in order to be able to + provide that thread ID, the thread list must be up to date + first. */ + target_find_new_threads (); + data = get_ada_tasks_inferior_data (inf); nb_tasks = VEC_length (ada_task_info_s, data->task_list); - old_chain = make_cleanup_ui_out_table_begin_end (uiout, 7, nb_tasks, - "tasks"); + nb_columns = ui_out_is_mi_like_p (uiout) ? 8 : 7; + old_chain = make_cleanup_ui_out_table_begin_end (uiout, nb_columns, + nb_tasks, "tasks"); ui_out_table_header (uiout, 1, ui_left, "current", ""); ui_out_table_header (uiout, 3, ui_right, "id", "ID"); ui_out_table_header (uiout, 9, ui_right, "task-id", "TID"); + /* The following column is provided in GDB/MI mode only because + it is only really useful in that mode, and also because it + allows us to keep the CLI output shorter and more compact. */ + if (ui_out_is_mi_like_p (uiout)) + ui_out_table_header (uiout, 4, ui_right, "thread-id", ""); ui_out_table_header (uiout, 4, ui_right, "parent-id", "P-ID"); ui_out_table_header (uiout, 3, ui_right, "priority", "Pri"); ui_out_table_header (uiout, 22, ui_left, "state", "State"); @@ -996,6 +1012,19 @@ print_ada_task_info (struct ui_out *uiout, /* Print the Task ID. */ ui_out_field_fmt (uiout, "task-id", "%9lx", (long) task_info->task_id); + /* Print the associated Thread ID. */ + if (ui_out_is_mi_like_p (uiout)) + { + const int thread_id = pid_to_thread_id (task_info->ptid); + + if (thread_id != 0) + ui_out_field_int (uiout, "thread-id", thread_id); + else + /* This should never happen unless there is a bug somewhere, + but be resilient when that happens. */ + ui_out_field_skip (uiout, "thread-id"); + } + /* Print the ID of the parent task. */ parent_id = get_task_number_from_id (task_info->parent, inf); if (parent_id) -- 1.7.1