* fork-child.c (startup_inferior): Only set threads not-executing
after getting all the pending execs. On TARGET_WAITKIND_IGNORE, keep waiting, don't resume. On all other cases but TARGET_WAITKIND_SIGNALLED and TARGET_WAITKIND_EXITED, switch to the event ptid.
This commit is contained in:
parent
b7c2dce4c2
commit
2e979b9404
2 changed files with 27 additions and 8 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
2008-10-24 Pedro Alves <pedro@codesourcery.com>
|
||||||
|
|
||||||
|
* fork-child.c (startup_inferior): Only set threads not-executing
|
||||||
|
after getting all the pending execs. On TARGET_WAITKIND_IGNORE,
|
||||||
|
keep waiting, don't resume. On all other cases but
|
||||||
|
TARGET_WAITKIND_SIGNALLED and TARGET_WAITKIND_EXITED, switch to
|
||||||
|
the event ptid.
|
||||||
|
|
||||||
2008-10-24 Pedro Alves <pedro@codesourcery.com>
|
2008-10-24 Pedro Alves <pedro@codesourcery.com>
|
||||||
|
|
||||||
Remote non-stop mode support.
|
Remote non-stop mode support.
|
||||||
|
|
|
@ -434,21 +434,18 @@ startup_inferior (int ntraps)
|
||||||
{
|
{
|
||||||
int resume_signal = TARGET_SIGNAL_0;
|
int resume_signal = TARGET_SIGNAL_0;
|
||||||
ptid_t resume_ptid;
|
ptid_t resume_ptid;
|
||||||
|
ptid_t event_ptid;
|
||||||
|
|
||||||
struct target_waitstatus ws;
|
struct target_waitstatus ws;
|
||||||
memset (&ws, 0, sizeof (ws));
|
memset (&ws, 0, sizeof (ws));
|
||||||
resume_ptid = target_wait (pid_to_ptid (-1), &ws);
|
event_ptid = target_wait (pid_to_ptid (-1), &ws);
|
||||||
|
|
||||||
/* Mark all threads non-executing. */
|
if (ws.kind == TARGET_WAITKIND_IGNORE)
|
||||||
set_executing (pid_to_ptid (-1), 0);
|
/* The inferior didn't really stop, keep waiting. */
|
||||||
|
continue;
|
||||||
/* In all-stop mode, resume all threads. */
|
|
||||||
if (!non_stop)
|
|
||||||
resume_ptid = pid_to_ptid (-1);
|
|
||||||
|
|
||||||
switch (ws.kind)
|
switch (ws.kind)
|
||||||
{
|
{
|
||||||
case TARGET_WAITKIND_IGNORE:
|
|
||||||
case TARGET_WAITKIND_SPURIOUS:
|
case TARGET_WAITKIND_SPURIOUS:
|
||||||
case TARGET_WAITKIND_LOADED:
|
case TARGET_WAITKIND_LOADED:
|
||||||
case TARGET_WAITKIND_FORKED:
|
case TARGET_WAITKIND_FORKED:
|
||||||
|
@ -456,6 +453,7 @@ startup_inferior (int ntraps)
|
||||||
case TARGET_WAITKIND_SYSCALL_ENTRY:
|
case TARGET_WAITKIND_SYSCALL_ENTRY:
|
||||||
case TARGET_WAITKIND_SYSCALL_RETURN:
|
case TARGET_WAITKIND_SYSCALL_RETURN:
|
||||||
/* Ignore gracefully during startup of the inferior. */
|
/* Ignore gracefully during startup of the inferior. */
|
||||||
|
switch_to_thread (event_ptid);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TARGET_WAITKIND_SIGNALLED:
|
case TARGET_WAITKIND_SIGNALLED:
|
||||||
|
@ -480,13 +478,21 @@ startup_inferior (int ntraps)
|
||||||
/* Handle EXEC signals as if they were SIGTRAP signals. */
|
/* Handle EXEC signals as if they were SIGTRAP signals. */
|
||||||
xfree (ws.value.execd_pathname);
|
xfree (ws.value.execd_pathname);
|
||||||
resume_signal = TARGET_SIGNAL_TRAP;
|
resume_signal = TARGET_SIGNAL_TRAP;
|
||||||
|
switch_to_thread (event_ptid);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TARGET_WAITKIND_STOPPED:
|
case TARGET_WAITKIND_STOPPED:
|
||||||
resume_signal = ws.value.sig;
|
resume_signal = ws.value.sig;
|
||||||
|
switch_to_thread (event_ptid);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* In all-stop mode, resume all threads. */
|
||||||
|
if (!non_stop)
|
||||||
|
resume_ptid = pid_to_ptid (-1);
|
||||||
|
else
|
||||||
|
resume_ptid = event_ptid;
|
||||||
|
|
||||||
if (resume_signal != TARGET_SIGNAL_TRAP)
|
if (resume_signal != TARGET_SIGNAL_TRAP)
|
||||||
{
|
{
|
||||||
/* Let shell child handle its own signals in its own way. */
|
/* Let shell child handle its own signals in its own way. */
|
||||||
|
@ -519,6 +525,11 @@ startup_inferior (int ntraps)
|
||||||
target_resume (resume_ptid, 0, TARGET_SIGNAL_0);
|
target_resume (resume_ptid, 0, TARGET_SIGNAL_0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Mark all threads non-executing. */
|
||||||
|
set_executing (pid_to_ptid (-1), 0);
|
||||||
|
|
||||||
|
stop_pc = read_pc ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Implement the "unset exec-wrapper" command. */
|
/* Implement the "unset exec-wrapper" command. */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue