mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-08-03 04:01:22 +08:00
Implement core awareness.
* bcache.c (compare_ints): Remove (print_percentage): Use compare_positive_ints. * defs.h (compare_positive_ints): Declare. * linux-nat.h (struct lin_lwp): New field core. (linux_nat_core_of_thread_1): Declare. * linux-nat.c (add_lwp): Init the 'core' field. (linux_nat_wait_1): Record the core. (linux_nat_core_of_thread_1, linux_nat_core_of_thread): New. (linux_nat_add_target): Register the above. * linux-thread-db.c (update_thread_core): New. (thread_db_find_new_threads): Update core information for every thread. * remote.c (struct private_thread_info): New. (free_private_thread_info, demand_private_info): New. (PACKET_qXfer_threads, use_osdata_threads): New. (struct thread_item, threads_parsing_context (start_thread, end_thread, thread_attributes) (thread_children, threads_children, threads_elements): New. (remote_threads_info): Try qXfer:threads before anything else. (remote_protocol_packets): Register qXfer:threads. (remote_open_1): Init use_osdata_threads. (struct stop_reply): New field 'core'. (remote_parse_stop_reply): Parse core number. (process_stop_reply): Record core number. (remote_xfer_partial): Handle qXfer:threads. (remote_core_of_thread): New. (init_remote_ops): Register remote_core_of_thread. (_initialize_remote): Register qXfer:read. * target.c (target_core_of_thread): New * target.h (enum target_object): New value TARGET_OBJECT_THREADS. (struct target_ops): New field to_core_of_threads. (target_core_of_thread): Declare. * gdbthread.h (struct thread_info): New field private_dtor. * thread.c (print_thread_info): Report the core. * ui-out.c (MAX_UI_OUT_LEVELS): Increase. * utils.c (compare_positive_ints): New. * features/threads.dtd: New. * mi/mi-interp.c (mi_on_normal_stop): Report the core. * mi/mi-main.c (struct collect_cores_data, collect_cores) (do_nothing, free_vector_of_osdata_items) (splay_tree_int_comparator, free_splay_tree): New. (print_one_inferior_data): Implemented printing of selected inferiors. Collect and print cores. (output_cores): New. (mi_cmd_list_thread_groups): Support --recurse. Permit specifying thread groups together with --available.
This commit is contained in:
30
gdb/thread.c
30
gdb/thread.c
@ -114,10 +114,13 @@ free_thread (struct thread_info *tp)
|
||||
{
|
||||
clear_thread_inferior_resources (tp);
|
||||
|
||||
/* FIXME: do I ever need to call the back-end to give it a
|
||||
chance at this private data before deleting the thread? */
|
||||
if (tp->private)
|
||||
xfree (tp->private);
|
||||
{
|
||||
if (tp->private_dtor)
|
||||
tp->private_dtor (tp->private);
|
||||
else
|
||||
xfree (tp->private);
|
||||
}
|
||||
|
||||
xfree (tp);
|
||||
}
|
||||
@ -468,8 +471,7 @@ do_captured_list_thread_ids (struct ui_out *uiout, void *arg)
|
||||
struct cleanup *cleanup_chain;
|
||||
int current_thread = -1;
|
||||
|
||||
prune_threads ();
|
||||
target_find_new_threads ();
|
||||
update_thread_list ();
|
||||
|
||||
cleanup_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "thread-ids");
|
||||
|
||||
@ -748,8 +750,7 @@ print_thread_info (struct ui_out *uiout, int requested_thread, int pid)
|
||||
char *extra_info;
|
||||
int current_thread = -1;
|
||||
|
||||
prune_threads ();
|
||||
target_find_new_threads ();
|
||||
update_thread_list ();
|
||||
current_ptid = inferior_ptid;
|
||||
|
||||
/* We'll be switching threads temporarily. */
|
||||
@ -759,6 +760,7 @@ print_thread_info (struct ui_out *uiout, int requested_thread, int pid)
|
||||
for (tp = thread_list; tp; tp = tp->next)
|
||||
{
|
||||
struct cleanup *chain2;
|
||||
int core;
|
||||
|
||||
if (requested_thread != -1 && tp->num != requested_thread)
|
||||
continue;
|
||||
@ -817,6 +819,10 @@ print_thread_info (struct ui_out *uiout, int requested_thread, int pid)
|
||||
ui_out_field_string (uiout, "state", state);
|
||||
}
|
||||
|
||||
core = target_core_of_thread (tp->ptid);
|
||||
if (ui_out_is_mi_like_p (uiout) && core != -1)
|
||||
ui_out_field_int (uiout, "core", core);
|
||||
|
||||
do_cleanups (chain2);
|
||||
}
|
||||
|
||||
@ -1058,8 +1064,7 @@ thread_apply_all_command (char *cmd, int from_tty)
|
||||
if (cmd == NULL || *cmd == '\000')
|
||||
error (_("Please specify a command following the thread ID list"));
|
||||
|
||||
prune_threads ();
|
||||
target_find_new_threads ();
|
||||
update_thread_list ();
|
||||
|
||||
old_chain = make_cleanup_restore_current_thread ();
|
||||
|
||||
@ -1245,6 +1250,13 @@ gdb_thread_select (struct ui_out *uiout, char *tidstr, char **error_message)
|
||||
return GDB_RC_OK;
|
||||
}
|
||||
|
||||
void
|
||||
update_thread_list (void)
|
||||
{
|
||||
prune_threads ();
|
||||
target_find_new_threads ();
|
||||
}
|
||||
|
||||
/* Commands with a prefix of `thread'. */
|
||||
struct cmd_list_element *thread_cmd_list = NULL;
|
||||
|
||||
|
Reference in New Issue
Block a user