Add backlink from lwp_info to thread_info.
* gdbthread.h (add_thread): Change result type to struct thread_info *. * inferiors.c (add_thread): Change result type to struct thread_info *. All callers updated. (add_lwp): Call add_thread here instead of in callers. All callers updated. * linux-low.h (get_lwp_thread): Rewrite. (struct lwp_info): New member "thread". This speeds up gdbserver attach in non-stop mode because now get_lwp_thread doesn't do a linear search for the corresponding thread_info object.
This commit is contained in:
parent
b3312d8019
commit
f7667f0de6
@ -1,3 +1,13 @@
|
||||
2014-02-19 Doug Evans <dje@google.com>
|
||||
|
||||
* gdbthread.h (add_thread): Change result type to struct thread_info *.
|
||||
* inferiors.c (add_thread): Change result type to struct thread_info *.
|
||||
All callers updated.
|
||||
(add_lwp): Call add_thread here instead of in callers.
|
||||
All callers updated.
|
||||
* linux-low.h (get_lwp_thread): Rewrite.
|
||||
(struct lwp_info): New member "thread".
|
||||
|
||||
2014-02-19 Doug Evans <dje@google.com>
|
||||
|
||||
* linux-low.c (add_lwp): Change result to struct lwp_info *.
|
||||
|
@ -74,7 +74,7 @@ struct thread_info
|
||||
extern struct inferior_list all_threads;
|
||||
|
||||
void remove_thread (struct thread_info *thread);
|
||||
void add_thread (ptid_t ptid, void *target_data);
|
||||
struct thread_info *add_thread (ptid_t ptid, void *target_data);
|
||||
|
||||
struct thread_info *get_first_thread (void);
|
||||
|
||||
|
@ -104,7 +104,7 @@ remove_inferior (struct inferior_list *list,
|
||||
list->tail = *cur;
|
||||
}
|
||||
|
||||
void
|
||||
struct thread_info *
|
||||
add_thread (ptid_t thread_id, void *target_data)
|
||||
{
|
||||
struct thread_info *new_thread = xmalloc (sizeof (*new_thread));
|
||||
@ -121,6 +121,8 @@ add_thread (ptid_t thread_id, void *target_data)
|
||||
current_inferior = new_thread;
|
||||
|
||||
new_thread->target_data = target_data;
|
||||
|
||||
return new_thread;
|
||||
}
|
||||
|
||||
ptid_t
|
||||
|
@ -409,7 +409,6 @@ handle_extended_wait (struct lwp_info *event_child, int wstat)
|
||||
|
||||
ptid = ptid_build (pid_of (event_child), new_pid, 0);
|
||||
new_lwp = add_lwp (ptid);
|
||||
add_thread (ptid, new_lwp);
|
||||
|
||||
/* Either we're going to immediately resume the new thread
|
||||
or leave it stopped. linux_resume_one_lwp is a nop if it
|
||||
@ -539,6 +538,7 @@ add_lwp (ptid_t ptid)
|
||||
lwp->arch_private = the_low_target.new_thread ();
|
||||
|
||||
add_inferior_to_list (&all_lwps, &lwp->entry);
|
||||
lwp->thread = add_thread (ptid, lwp);
|
||||
|
||||
return lwp;
|
||||
}
|
||||
@ -632,7 +632,6 @@ linux_create_inferior (char *program, char **allargs)
|
||||
|
||||
ptid = ptid_build (pid, pid, 0);
|
||||
new_lwp = add_lwp (ptid);
|
||||
add_thread (ptid, new_lwp);
|
||||
new_lwp->must_set_ptrace_flags = 1;
|
||||
|
||||
return pid;
|
||||
@ -683,7 +682,6 @@ linux_attach_lwp_1 (unsigned long lwpid, int initial)
|
||||
}
|
||||
|
||||
new_lwp = add_lwp (ptid);
|
||||
add_thread (ptid, new_lwp);
|
||||
|
||||
/* We need to wait for SIGSTOP before being able to make the next
|
||||
ptrace call on this LWP. */
|
||||
|
@ -229,14 +229,17 @@ extern struct linux_target_ops the_low_target;
|
||||
|
||||
#define get_lwp(inf) ((struct lwp_info *)(inf))
|
||||
#define get_thread_lwp(thr) (get_lwp (inferior_target_data (thr)))
|
||||
#define get_lwp_thread(proc) ((struct thread_info *) \
|
||||
find_inferior_id (&all_threads, \
|
||||
get_lwp (proc)->entry.id))
|
||||
#define get_lwp_thread(lwp) ((lwp)->thread)
|
||||
|
||||
struct lwp_info
|
||||
{
|
||||
struct inferior_list_entry entry;
|
||||
|
||||
/* Backlink to the thread_info object.
|
||||
It is the "main" representation of the thread, we just contain
|
||||
linux-specific subordinate data. */
|
||||
struct thread_info *thread;
|
||||
|
||||
/* If this flag is set, the next SIGSTOP will be ignored (the
|
||||
process will be immediately resumed). This means that either we
|
||||
sent the SIGSTOP to it ourselves and got some other pending event
|
||||
|
Loading…
Reference in New Issue
Block a user