* infrun.c (handle_inferior_event): In the follow exec case,
context-switch before doing anything else.
This commit is contained in:
parent
54a012c9c7
commit
795e548fb8
2 changed files with 16 additions and 20 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
2008-09-22 Pedro Alves <pedro@codesourcery.com>
|
||||||
|
|
||||||
|
* infrun.c (handle_inferior_event): In the follow exec case,
|
||||||
|
context-switch before doing anything else.
|
||||||
|
|
||||||
2008-09-22 Pedro Alves <pedro@codesourcery.com>
|
2008-09-22 Pedro Alves <pedro@codesourcery.com>
|
||||||
|
|
||||||
* top.c (any_thread_of, kill_or_detach): New functions.
|
* top.c (any_thread_of, kill_or_detach): New functions.
|
||||||
|
|
31
gdb/infrun.c
31
gdb/infrun.c
|
@ -2089,32 +2089,23 @@ handle_inferior_event (struct execution_control_state *ecs)
|
||||||
savestring (ecs->ws.value.execd_pathname,
|
savestring (ecs->ws.value.execd_pathname,
|
||||||
strlen (ecs->ws.value.execd_pathname));
|
strlen (ecs->ws.value.execd_pathname));
|
||||||
|
|
||||||
/* This causes the eventpoints and symbol table to be reset. Must
|
|
||||||
do this now, before trying to determine whether to stop. */
|
|
||||||
follow_exec (inferior_ptid, pending_follow.execd_pathname);
|
|
||||||
xfree (pending_follow.execd_pathname);
|
|
||||||
|
|
||||||
stop_pc = regcache_read_pc (get_thread_regcache (ecs->ptid));
|
|
||||||
|
|
||||||
{
|
|
||||||
/* The breakpoints module may need to touch the inferior's
|
|
||||||
memory. Switch to the (stopped) event ptid
|
|
||||||
momentarily. */
|
|
||||||
ptid_t saved_inferior_ptid = inferior_ptid;
|
|
||||||
inferior_ptid = ecs->ptid;
|
|
||||||
|
|
||||||
ecs->event_thread->stop_bpstat = bpstat_stop_status (stop_pc, ecs->ptid);
|
|
||||||
|
|
||||||
ecs->random_signal = !bpstat_explains_signal (ecs->event_thread->stop_bpstat);
|
|
||||||
inferior_ptid = saved_inferior_ptid;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ptid_equal (ecs->ptid, inferior_ptid))
|
if (!ptid_equal (ecs->ptid, inferior_ptid))
|
||||||
{
|
{
|
||||||
context_switch (ecs->ptid);
|
context_switch (ecs->ptid);
|
||||||
reinit_frame_cache ();
|
reinit_frame_cache ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
stop_pc = read_pc ();
|
||||||
|
|
||||||
|
/* This causes the eventpoints and symbol table to be reset.
|
||||||
|
Must do this now, before trying to determine whether to
|
||||||
|
stop. */
|
||||||
|
follow_exec (inferior_ptid, pending_follow.execd_pathname);
|
||||||
|
xfree (pending_follow.execd_pathname);
|
||||||
|
|
||||||
|
ecs->event_thread->stop_bpstat = bpstat_stop_status (stop_pc, ecs->ptid);
|
||||||
|
ecs->random_signal = !bpstat_explains_signal (ecs->event_thread->stop_bpstat);
|
||||||
|
|
||||||
/* If no catchpoint triggered for this, then keep going. */
|
/* If no catchpoint triggered for this, then keep going. */
|
||||||
if (ecs->random_signal)
|
if (ecs->random_signal)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue