* fork-child.c (startup_inferior): Use target_wait and target_resume

directly instead of calling wait_for_inferior / resume.

	* infcmd.c (kill_if_already_running): Do not call no_shared_libraries
	or init_wait_for_inferior.
	(run_command_1): Call init_wait_for_inferior.
This commit is contained in:
Ulrich Weigand 2008-09-11 16:09:33 +00:00
parent 180b9a0ebe
commit 3c35e65b00
3 changed files with 70 additions and 18 deletions

View File

@ -1,3 +1,12 @@
2008-09-11 Ulrich Weigand <uweigand@de.ibm.com>
* fork-child.c (startup_inferior): Use target_wait and target_resume
directly instead of calling wait_for_inferior / resume.
* infcmd.c (kill_if_already_running): Do not call no_shared_libraries
or init_wait_for_inferior.
(run_command_1): Call init_wait_for_inferior.
2008-09-11 Ulrich Weigand <uweigand@de.ibm.com>
* gdbtypes.h (builtin_type_void_data_ptr, builtin_type_void_func_ptr,

View File

@ -428,24 +428,67 @@ startup_inferior (int ntraps)
if (exec_wrapper)
pending_execs++;
clear_proceed_status ();
init_wait_for_inferior ();
while (1)
{
struct thread_info *tp;
int resume_signal = TARGET_SIGNAL_0;
ptid_t resume_ptid;
/* Make wait_for_inferior be quiet. */
stop_soon = STOP_QUIETLY;
wait_for_inferior (1);
tp = inferior_thread ();
if (tp->stop_signal != TARGET_SIGNAL_TRAP)
struct target_waitstatus ws;
memset (&ws, 0, sizeof (ws));
resume_ptid = target_wait (pid_to_ptid (-1), &ws);
/* Mark all threads non-executing. */
set_executing (pid_to_ptid (-1), 0);
/* In all-stop mode, resume all threads. */
if (!non_stop)
resume_ptid = pid_to_ptid (-1);
switch (ws.kind)
{
/* Let shell child handle its own signals in its own way.
FIXME: what if child has exited? Must exit loop
somehow. */
resume (0, tp->stop_signal);
case TARGET_WAITKIND_IGNORE:
case TARGET_WAITKIND_SPURIOUS:
case TARGET_WAITKIND_LOADED:
case TARGET_WAITKIND_FORKED:
case TARGET_WAITKIND_VFORKED:
case TARGET_WAITKIND_SYSCALL_ENTRY:
case TARGET_WAITKIND_SYSCALL_RETURN:
/* Ignore gracefully during startup of the inferior. */
break;
case TARGET_WAITKIND_SIGNALLED:
target_terminal_ours ();
target_mourn_inferior ();
error (_("During startup program terminated with signal %s, %s."),
target_signal_to_name (ws.value.sig),
target_signal_to_string (ws.value.sig));
return;
case TARGET_WAITKIND_EXITED:
target_terminal_ours ();
target_mourn_inferior ();
if (ws.value.integer)
error (_("During startup program exited with code %d."),
ws.value.integer);
else
error (_("During startup program exited normally."));
return;
case TARGET_WAITKIND_EXECD:
/* Handle EXEC signals as if they were SIGTRAP signals. */
xfree (ws.value.execd_pathname);
resume_signal = TARGET_SIGNAL_TRAP;
break;
case TARGET_WAITKIND_STOPPED:
resume_signal = ws.value.sig;
break;
}
if (resume_signal != TARGET_SIGNAL_TRAP)
{
/* Let shell child handle its own signals in its own way. */
target_resume (resume_ptid, 0, resume_signal);
}
else
{
@ -470,10 +513,10 @@ startup_inferior (int ntraps)
if (--pending_execs == 0)
break;
resume (0, TARGET_SIGNAL_0); /* Just make it go on. */
/* Just make it go on. */
target_resume (resume_ptid, 0, TARGET_SIGNAL_0);
}
}
stop_soon = NO_STOP_QUIETLY;
}
/* Implement the "unset exec-wrapper" command. */

View File

@ -431,8 +431,6 @@ kill_if_already_running (int from_tty)
Start it from the beginning? "))
error (_("Program not restarted."));
target_kill ();
no_shared_libraries (NULL, from_tty);
init_wait_for_inferior ();
}
}
@ -448,6 +446,8 @@ run_command_1 (char *args, int from_tty, int tbreak_at_main)
dont_repeat ();
kill_if_already_running (from_tty);
init_wait_for_inferior ();
clear_breakpoint_hit_counts ();
/* Clean up any leftovers from other runs. Some other things from