Skip to content

Commit 98814c6

Browse files
committed
Minor Ada task cleanups
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-19 Tom Tromey <[email protected]> * 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) <task_list_valid_p>: 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.
1 parent 6f2117b commit 98814c6

File tree

4 files changed

+42
-32
lines changed

4 files changed

+42
-32
lines changed

gdb/ChangeLog

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,18 @@
1+
2019-02-19 Tom Tromey <[email protected]>
2+
3+
* ravenscar-thread.c
4+
(ravenscar_thread_target::update_thread_list): Don't call
5+
ada_build_task_list.
6+
* ada-lang.h (ada_build_task_list): Don't declare.
7+
* ada-tasks.c (struct ada_tasks_inferior_data)
8+
<task_list_valid_p>: Now bool.
9+
(read_known_tasks, ada_task_list_changed)
10+
(ada_tasks_invalidate_inferior_data): Update.
11+
(read_known_tasks_array): Return bool.
12+
(read_known_tasks_list): Likewise.
13+
(read_known_tasks): Return void.
14+
(ada_build_task_list): Now static.
15+
116
2019-02-18 Andrew Burgess <[email protected]>
217

318
* gdbtypes.c (type_align): Allow alignment of TYPE_CODE_METHODPTR

gdb/ada-lang.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -411,8 +411,6 @@ extern void iterate_over_live_ada_tasks
411411

412412
extern const char *ada_get_tcb_types_info (void);
413413

414-
extern int ada_build_task_list (void);
415-
416414
extern void print_ada_task_info (struct ui_out *uiout,
417415
char *taskno_str,
418416
struct inferior *inf);

gdb/ada-tasks.c

Lines changed: 27 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
#include "progspace.h"
2727
#include "objfiles.h"
2828

29+
static int ada_build_task_list ();
30+
2931
/* The name of the array in the GNAT runtime where the Ada Task Control
3032
Block of each task is stored. */
3133
#define KNOWN_TASKS_NAME "system__tasking__debug__known_tasks"
@@ -230,7 +232,7 @@ struct ada_tasks_inferior_data
230232
/* When nonzero, this flag indicates that the task_list field
231233
below is up to date. When set to zero, the list has either
232234
not been initialized, or has potentially become stale. */
233-
int task_list_valid_p = 0;
235+
bool task_list_valid_p = false;
234236

235237
/* The list of Ada tasks.
236238
@@ -803,9 +805,9 @@ add_ada_task (CORE_ADDR task_id, struct inferior *inf)
803805
}
804806

805807
/* Read the Known_Tasks array from the inferior memory, and store
806-
it in the current inferior's TASK_LIST. Return non-zero upon success. */
808+
it in the current inferior's TASK_LIST. Return true upon success. */
807809

808-
static int
810+
static bool
809811
read_known_tasks_array (struct ada_tasks_inferior_data *data)
810812
{
811813
const int target_ptr_byte = TYPE_LENGTH (data->known_tasks_element);
@@ -826,13 +828,13 @@ read_known_tasks_array (struct ada_tasks_inferior_data *data)
826828
add_ada_task (task_id, current_inferior ());
827829
}
828830

829-
return 1;
831+
return true;
830832
}
831833

832834
/* Read the known tasks from the inferior memory, and store it in
833-
the current inferior's TASK_LIST. Return non-zero upon success. */
835+
the current inferior's TASK_LIST. Return true upon success. */
834836

835-
static int
837+
static bool
836838
read_known_tasks_list (struct ada_tasks_inferior_data *data)
837839
{
838840
const int target_ptr_byte = TYPE_LENGTH (data->known_tasks_element);
@@ -843,7 +845,7 @@ read_known_tasks_list (struct ada_tasks_inferior_data *data)
843845

844846
/* Sanity check. */
845847
if (pspace_data->atcb_fieldno.activation_link < 0)
846-
return 0;
848+
return false;
847849

848850
/* Build a new list by reading the ATCBs. Read head of the list. */
849851
read_memory (data->known_tasks_addr, known_tasks, target_ptr_byte);
@@ -864,7 +866,7 @@ read_known_tasks_list (struct ada_tasks_inferior_data *data)
864866
pspace_data->atcb_fieldno.activation_link));
865867
}
866868

867-
return 1;
869+
return true;
868870
}
869871

870872
/* Set all fields of the current inferior ada-tasks data pointed by DATA.
@@ -962,11 +964,10 @@ ada_tasks_inferior_data_sniffer (struct ada_tasks_inferior_data *data)
962964
}
963965

964966
/* Read the known tasks from the current inferior's memory, and store it
965-
in the current inferior's data TASK_LIST.
966-
Return non-zero upon success. */
967+
in the current inferior's data TASK_LIST. */
967968

968-
static int
969-
read_known_tasks (void)
969+
static void
970+
read_known_tasks ()
970971
{
971972
struct ada_tasks_inferior_data *data =
972973
get_ada_tasks_inferior_data (current_inferior ());
@@ -983,29 +984,27 @@ read_known_tasks (void)
983984
ada_tasks_inferior_data_sniffer (data);
984985
gdb_assert (data->known_tasks_kind != ADA_TASKS_UNKNOWN);
985986

987+
/* Step 3: Set task_list_valid_p, to avoid re-reading the Known_Tasks
988+
array unless needed. */
986989
switch (data->known_tasks_kind)
987990
{
988-
case ADA_TASKS_NOT_FOUND: /* Tasking not in use in inferior. */
989-
return 0;
990-
case ADA_TASKS_ARRAY:
991-
return read_known_tasks_array (data);
992-
case ADA_TASKS_LIST:
993-
return read_known_tasks_list (data);
991+
case ADA_TASKS_NOT_FOUND: /* Tasking not in use in inferior. */
992+
break;
993+
case ADA_TASKS_ARRAY:
994+
data->task_list_valid_p = read_known_tasks_array (data);
995+
break;
996+
case ADA_TASKS_LIST:
997+
data->task_list_valid_p = read_known_tasks_list (data);
998+
break;
994999
}
995-
996-
/* Step 3: Set task_list_valid_p, to avoid re-reading the Known_Tasks
997-
array unless needed. Then report a success. */
998-
data->task_list_valid_p = 1;
999-
1000-
return 1;
10011000
}
10021001

10031002
/* Build the task_list by reading the Known_Tasks array from
10041003
the inferior, and return the number of tasks in that list
10051004
(zero means that the program is not using tasking at all). */
10061005

1007-
int
1008-
ada_build_task_list (void)
1006+
static int
1007+
ada_build_task_list ()
10091008
{
10101009
struct ada_tasks_inferior_data *data;
10111010

@@ -1361,7 +1360,7 @@ ada_task_list_changed (struct inferior *inf)
13611360
{
13621361
struct ada_tasks_inferior_data *data = get_ada_tasks_inferior_data (inf);
13631362

1364-
data->task_list_valid_p = 0;
1363+
data->task_list_valid_p = false;
13651364
}
13661365

13671366
/* Invalidate the per-program-space data. */
@@ -1380,7 +1379,7 @@ ada_tasks_invalidate_inferior_data (struct inferior *inf)
13801379
struct ada_tasks_inferior_data *data = get_ada_tasks_inferior_data (inf);
13811380

13821381
data->known_tasks_kind = ADA_TASKS_UNKNOWN;
1383-
data->task_list_valid_p = 0;
1382+
data->task_list_valid_p = false;
13841383
}
13851384

13861385
/* The 'normal_stop' observer notification callback. */

gdb/ravenscar-thread.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -374,8 +374,6 @@ ravenscar_add_thread (struct ada_task_info *task)
374374
void
375375
ravenscar_thread_target::update_thread_list ()
376376
{
377-
ada_build_task_list ();
378-
379377
/* Do not clear the thread list before adding the Ada task, to keep
380378
the thread that the process stratum has included into it
381379
(m_base_ptid) and the running thread, that may not have been included

0 commit comments

Comments
 (0)