* infrun.c (handle_inferior_event): In the follow exec case,

context-switch before doing anything else.
This commit is contained in:
Pedro Alves 2008-09-22 15:25:54 +00:00
parent 54a012c9c7
commit 795e548fb8
2 changed files with 16 additions and 20 deletions

View file

@ -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>
* top.c (any_thread_of, kill_or_detach): New functions.

View file

@ -2089,32 +2089,23 @@ handle_inferior_event (struct execution_control_state *ecs)
savestring (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))
{
context_switch (ecs->ptid);
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 (ecs->random_signal)
{