2011-12-20 Pedro Alves <alves.ped@gmail.com>
Jan Kratochvil <jan.kratochvil@redhat.com> * linux-nat.c (add_lwp): Don't call linux_nat_new_thread on the first LWP. * amd64-linux-nat.c (update_debug_registers_callback): Instantiate `lwp->arch_private' if NULL. (amd64_linux_prepare_to_resume): Do nothing if `lwp->arch_private' is NULL. * i386-linux-nat.c (update_debug_registers_callback): Instantiate `lwp->arch_private' if NULL. (i386_linux_prepare_to_resume): Do nothing if `lwp->arch_private' is NULL.
This commit is contained in:
parent
87c31f0622
commit
6e012a6c38
@ -1,3 +1,17 @@
|
||||
2011-12-20 Pedro Alves <alves.ped@gmail.com>
|
||||
Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* linux-nat.c (add_lwp): Don't call linux_nat_new_thread on the
|
||||
first LWP.
|
||||
* amd64-linux-nat.c (update_debug_registers_callback): Instantiate
|
||||
`lwp->arch_private' if NULL.
|
||||
(amd64_linux_prepare_to_resume): Do nothing if `lwp->arch_private'
|
||||
is NULL.
|
||||
* i386-linux-nat.c (update_debug_registers_callback): Instantiate
|
||||
`lwp->arch_private' if NULL.
|
||||
(i386_linux_prepare_to_resume): Do nothing if `lwp->arch_private'
|
||||
is NULL.
|
||||
|
||||
2011-12-19 Doug Evans <dje@google.com>
|
||||
|
||||
* python/py-auto-load.c (info_auto_load_scripts): Pass address of
|
||||
|
@ -343,6 +343,9 @@ amd64_linux_dr_get_status (void)
|
||||
static int
|
||||
update_debug_registers_callback (struct lwp_info *lwp, void *arg)
|
||||
{
|
||||
if (lwp->arch_private == NULL)
|
||||
lwp->arch_private = XCNEW (struct arch_lwp_info);
|
||||
|
||||
/* The actual update is done later just before resuming the lwp, we
|
||||
just mark that the registers need updating. */
|
||||
lwp->arch_private->debug_registers_changed = 1;
|
||||
@ -386,6 +389,12 @@ amd64_linux_prepare_to_resume (struct lwp_info *lwp)
|
||||
{
|
||||
int clear_status = 0;
|
||||
|
||||
/* NULL means this is the main thread still going through the shell,
|
||||
or, no watchpoint has been set yet. In that case, there's
|
||||
nothing to do. */
|
||||
if (lwp->arch_private == NULL)
|
||||
return;
|
||||
|
||||
if (lwp->arch_private->debug_registers_changed)
|
||||
{
|
||||
struct i386_debug_reg_state *state = i386_debug_reg_state ();
|
||||
|
@ -715,6 +715,9 @@ i386_linux_dr_get_status (void)
|
||||
static int
|
||||
update_debug_registers_callback (struct lwp_info *lwp, void *arg)
|
||||
{
|
||||
if (lwp->arch_private == NULL)
|
||||
lwp->arch_private = XCNEW (struct arch_lwp_info);
|
||||
|
||||
/* The actual update is done later just before resuming the lwp, we
|
||||
just mark that the registers need updating. */
|
||||
lwp->arch_private->debug_registers_changed = 1;
|
||||
@ -758,6 +761,12 @@ i386_linux_prepare_to_resume (struct lwp_info *lwp)
|
||||
{
|
||||
int clear_status = 0;
|
||||
|
||||
/* NULL means this is the main thread still going through the shell,
|
||||
or, no watchpoint has been set yet. In that case, there's
|
||||
nothing to do. */
|
||||
if (lwp->arch_private == NULL)
|
||||
return;
|
||||
|
||||
if (lwp->arch_private->debug_registers_changed)
|
||||
{
|
||||
struct i386_debug_reg_state *state = i386_debug_reg_state ();
|
||||
|
@ -1151,7 +1151,15 @@ add_lwp (ptid_t ptid)
|
||||
lp->next = lwp_list;
|
||||
lwp_list = lp;
|
||||
|
||||
if (linux_nat_new_thread != NULL)
|
||||
/* Let the arch specific bits know about this new thread. Current
|
||||
clients of this callback take the opportunity to install
|
||||
watchpoints in the new thread. Don't do this for the first
|
||||
thread though. If we're spawning a child ("run"), the thread
|
||||
executes the shell wrapper first, and we shouldn't touch it until
|
||||
it execs the program we want to debug. For "attach", it'd be
|
||||
okay to call the callback, but it's not necessary, because
|
||||
watchpoints can't yet have been inserted into the inferior. */
|
||||
if (num_lwps (GET_PID (ptid)) > 1 && linux_nat_new_thread != NULL)
|
||||
linux_nat_new_thread (lp);
|
||||
|
||||
return lp;
|
||||
|
Loading…
Reference in New Issue
Block a user