From patchwork Fri Feb 15 21:22:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 31489 Received: (qmail 40285 invoked by alias); 15 Feb 2019 21:23:13 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 36426 invoked by uid 89); 15 Feb 2019 21:23:09 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: rock.gnat.com Received: from rock.gnat.com (HELO rock.gnat.com) (205.232.38.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 15 Feb 2019 21:23:07 +0000 Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id F0DDB56009; Fri, 15 Feb 2019 16:23:05 -0500 (EST) 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 cO6leEF6gnL5; Fri, 15 Feb 2019 16:23:05 -0500 (EST) Received: from murgatroyd.Home (75-166-72-210.hlrn.qwest.net [75.166.72.210]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by rock.gnat.com (Postfix) with ESMTPSA id 9C1F3117DE4; Fri, 15 Feb 2019 16:23:05 -0500 (EST) From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH] Minor Ada task cleanups Date: Fri, 15 Feb 2019 14:22:53 -0700 Message-Id: <20190215212253.25409-1-tromey@adacore.com> MIME-Version: 1.0 While working on the Ada task code, I noticed a few things that could be cleaned up: * task_list_valid_p was not set in all cases in ada_build_task_list. This causes many needless re-fetches of the task list. * task_list_valid_p can be bool, and various functions can also return bool. * Nothing checks the return value of read_known_tasks, so it can be changed to return void. * The call to ada_build_task_list in ravenscar_thread_target::update_thread_list is redundant, because this is the first thing done by iterate_over_live_ada_tasks. Tested using the internal AdaCore test suite against a ravenscar target. gdb/ChangeLog 2019-02-15 Tom Tromey * ravenscar-thread.c (ravenscar_thread_target::update_thread_list): Don't call ada_build_task_list. * ada-lang.h (ada_build_task_list): Don't declare. * ada-tasks.c (struct ada_tasks_inferior_data) : Now bool. (read_known_tasks, ada_task_list_changed) (ada_tasks_invalidate_inferior_data): Update. (read_known_tasks_array): Return bool. (read_known_tasks_list): Likewise. (read_known_tasks): Return void. (ada_build_task_list): Now static. --- gdb/ChangeLog | 15 +++++++++++ gdb/ada-lang.h | 2 -- gdb/ada-tasks.c | 58 ++++++++++++++++++++++-------------------- gdb/ravenscar-thread.c | 2 -- 4 files changed, 45 insertions(+), 32 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 3ef09fd733b..b1f69402a26 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,18 @@ +2019-02-15 Tom Tromey + + * ravenscar-thread.c + (ravenscar_thread_target::update_thread_list): Don't call + ada_build_task_list. + * ada-lang.h (ada_build_task_list): Don't declare. + * ada-tasks.c (struct ada_tasks_inferior_data) + : Now bool. + (read_known_tasks, ada_task_list_changed) + (ada_tasks_invalidate_inferior_data): Update. + (read_known_tasks_array): Return bool. + (read_known_tasks_list): Likewise. + (read_known_tasks): Return void. + (ada_build_task_list): Now static. + 2019-02-15 Tom Tromey * ravenscar-thread.c (ravenscar_thread_target::resume) diff --git a/gdb/ada-lang.h b/gdb/ada-lang.h index 14470d5d434..ee03dbd2aad 100644 --- a/gdb/ada-lang.h +++ b/gdb/ada-lang.h @@ -411,8 +411,6 @@ extern void iterate_over_live_ada_tasks extern const char *ada_get_tcb_types_info (void); -extern int ada_build_task_list (void); - extern void print_ada_task_info (struct ui_out *uiout, char *taskno_str, struct inferior *inf); diff --git a/gdb/ada-tasks.c b/gdb/ada-tasks.c index e994147a669..beef575c669 100644 --- a/gdb/ada-tasks.c +++ b/gdb/ada-tasks.c @@ -26,6 +26,8 @@ #include "progspace.h" #include "objfiles.h" +static int ada_build_task_list (); + /* The name of the array in the GNAT runtime where the Ada Task Control Block of each task is stored. */ #define KNOWN_TASKS_NAME "system__tasking__debug__known_tasks" @@ -221,7 +223,7 @@ struct ada_tasks_inferior_data /* When nonzero, this flag indicates that the task_list field below is up to date. When set to zero, the list has either not been initialized, or has potentially become stale. */ - int task_list_valid_p = 0; + bool task_list_valid_p = false; /* The list of Ada tasks. @@ -785,9 +787,9 @@ add_ada_task (CORE_ADDR task_id, struct inferior *inf) } /* Read the Known_Tasks array from the inferior memory, and store - it in the current inferior's TASK_LIST. Return non-zero upon success. */ + it in the current inferior's TASK_LIST. Return true upon success. */ -static int +static bool read_known_tasks_array (struct ada_tasks_inferior_data *data) { const int target_ptr_byte = TYPE_LENGTH (data->known_tasks_element); @@ -808,13 +810,13 @@ read_known_tasks_array (struct ada_tasks_inferior_data *data) add_ada_task (task_id, current_inferior ()); } - return 1; + return true; } /* Read the known tasks from the inferior memory, and store it in - the current inferior's TASK_LIST. Return non-zero upon success. */ + the current inferior's TASK_LIST. Return true upon success. */ -static int +static bool read_known_tasks_list (struct ada_tasks_inferior_data *data) { const int target_ptr_byte = TYPE_LENGTH (data->known_tasks_element); @@ -825,7 +827,7 @@ read_known_tasks_list (struct ada_tasks_inferior_data *data) /* Sanity check. */ if (pspace_data->atcb_fieldno.activation_link < 0) - return 0; + return false; /* Build a new list by reading the ATCBs. Read head of the list. */ read_memory (data->known_tasks_addr, known_tasks, target_ptr_byte); @@ -846,7 +848,7 @@ read_known_tasks_list (struct ada_tasks_inferior_data *data) pspace_data->atcb_fieldno.activation_link)); } - return 1; + return true; } /* Set all fields of the current inferior ada-tasks data pointed by DATA. @@ -944,11 +946,10 @@ ada_tasks_inferior_data_sniffer (struct ada_tasks_inferior_data *data) } /* Read the known tasks from the current inferior's memory, and store it - in the current inferior's data TASK_LIST. - Return non-zero upon success. */ + in the current inferior's data TASK_LIST. */ -static int -read_known_tasks (void) +static void +read_known_tasks () { struct ada_tasks_inferior_data *data = get_ada_tasks_inferior_data (current_inferior ()); @@ -965,29 +966,30 @@ read_known_tasks (void) ada_tasks_inferior_data_sniffer (data); gdb_assert (data->known_tasks_kind != ADA_TASKS_UNKNOWN); + /* Step 3: Set task_list_valid_p, to avoid re-reading the Known_Tasks + array unless needed. */ switch (data->known_tasks_kind) { - case ADA_TASKS_NOT_FOUND: /* Tasking not in use in inferior. */ - return 0; - case ADA_TASKS_ARRAY: - return read_known_tasks_array (data); - case ADA_TASKS_LIST: - return read_known_tasks_list (data); + case ADA_TASKS_NOT_FOUND: /* Tasking not in use in inferior. */ + break; + case ADA_TASKS_ARRAY: + data->task_list_valid_p = read_known_tasks_array (data); + break; + case ADA_TASKS_LIST: + data->task_list_valid_p = read_known_tasks_list (data); + break; + case ADA_TASKS_UNKNOWN: + data->task_list_valid_p = true; + break; } - - /* Step 3: Set task_list_valid_p, to avoid re-reading the Known_Tasks - array unless needed. Then report a success. */ - data->task_list_valid_p = 1; - - return 1; } /* 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 (void) +static int +ada_build_task_list () { struct ada_tasks_inferior_data *data; @@ -1343,7 +1345,7 @@ ada_task_list_changed (struct inferior *inf) { struct ada_tasks_inferior_data *data = get_ada_tasks_inferior_data (inf); - data->task_list_valid_p = 0; + data->task_list_valid_p = false; } /* Invalidate the per-program-space data. */ @@ -1362,7 +1364,7 @@ ada_tasks_invalidate_inferior_data (struct inferior *inf) struct ada_tasks_inferior_data *data = get_ada_tasks_inferior_data (inf); data->known_tasks_kind = ADA_TASKS_UNKNOWN; - data->task_list_valid_p = 0; + data->task_list_valid_p = false; } /* The 'normal_stop' observer notification callback. */ diff --git a/gdb/ravenscar-thread.c b/gdb/ravenscar-thread.c index 05a83200a1e..cb4f26a3472 100644 --- a/gdb/ravenscar-thread.c +++ b/gdb/ravenscar-thread.c @@ -374,8 +374,6 @@ ravenscar_add_thread (struct ada_task_info *task) void ravenscar_thread_target::update_thread_list () { - 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 (m_base_ptid) and the running thread, that may not have been included