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:
Pedro Alves 2011-12-20 10:40:15 +00:00
parent 87c31f0622
commit 6e012a6c38
4 changed files with 41 additions and 1 deletions

View File

@ -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

View File

@ -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 ();

View File

@ -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 ();

View File

@ -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;