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>
|
2011-12-19 Doug Evans <dje@google.com>
|
||||||
|
|
||||||
* python/py-auto-load.c (info_auto_load_scripts): Pass address of
|
* python/py-auto-load.c (info_auto_load_scripts): Pass address of
|
||||||
|
|
|
@ -343,6 +343,9 @@ amd64_linux_dr_get_status (void)
|
||||||
static int
|
static int
|
||||||
update_debug_registers_callback (struct lwp_info *lwp, void *arg)
|
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
|
/* The actual update is done later just before resuming the lwp, we
|
||||||
just mark that the registers need updating. */
|
just mark that the registers need updating. */
|
||||||
lwp->arch_private->debug_registers_changed = 1;
|
lwp->arch_private->debug_registers_changed = 1;
|
||||||
|
@ -386,6 +389,12 @@ amd64_linux_prepare_to_resume (struct lwp_info *lwp)
|
||||||
{
|
{
|
||||||
int clear_status = 0;
|
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)
|
if (lwp->arch_private->debug_registers_changed)
|
||||||
{
|
{
|
||||||
struct i386_debug_reg_state *state = i386_debug_reg_state ();
|
struct i386_debug_reg_state *state = i386_debug_reg_state ();
|
||||||
|
|
|
@ -715,6 +715,9 @@ i386_linux_dr_get_status (void)
|
||||||
static int
|
static int
|
||||||
update_debug_registers_callback (struct lwp_info *lwp, void *arg)
|
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
|
/* The actual update is done later just before resuming the lwp, we
|
||||||
just mark that the registers need updating. */
|
just mark that the registers need updating. */
|
||||||
lwp->arch_private->debug_registers_changed = 1;
|
lwp->arch_private->debug_registers_changed = 1;
|
||||||
|
@ -758,6 +761,12 @@ i386_linux_prepare_to_resume (struct lwp_info *lwp)
|
||||||
{
|
{
|
||||||
int clear_status = 0;
|
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)
|
if (lwp->arch_private->debug_registers_changed)
|
||||||
{
|
{
|
||||||
struct i386_debug_reg_state *state = i386_debug_reg_state ();
|
struct i386_debug_reg_state *state = i386_debug_reg_state ();
|
||||||
|
|
|
@ -1151,7 +1151,15 @@ add_lwp (ptid_t ptid)
|
||||||
lp->next = lwp_list;
|
lp->next = lwp_list;
|
||||||
lwp_list = lp;
|
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);
|
linux_nat_new_thread (lp);
|
||||||
|
|
||||||
return lp;
|
return lp;
|
||||||
|
|
Loading…
Reference in New Issue