mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-21 10:34:21 +08:00
* infrun.c (wait_for_inferior): Add treat_exec_as_sigtrap parameter
and use it. (proceed, start_remote): Update call to wait_for_inferior. * inferior.h (wait_for_inferior): Update declaration. * fork-child.c, infcmd.c, solib-irix.c, solib-osf.c, solib-sunos.c, solib-svr4.c, win32-nat.c: Update calls to wait_for_inferior. * inf-ttrace.c (inf_ttrace_wait): Report TTEVT_EXEC events as TARGET_WAITKIND_EXECD instead of TARGET_WAITKIND_STOPPED.
This commit is contained in:
@ -1,3 +1,14 @@
|
|||||||
|
2007-12-21 Joel Brobecker <brobecker@adacore.com>
|
||||||
|
|
||||||
|
* infrun.c (wait_for_inferior): Add treat_exec_as_sigtrap parameter
|
||||||
|
and use it.
|
||||||
|
(proceed, start_remote): Update call to wait_for_inferior.
|
||||||
|
* inferior.h (wait_for_inferior): Update declaration.
|
||||||
|
* fork-child.c, infcmd.c, solib-irix.c, solib-osf.c, solib-sunos.c,
|
||||||
|
solib-svr4.c, win32-nat.c: Update calls to wait_for_inferior.
|
||||||
|
* inf-ttrace.c (inf_ttrace_wait): Report TTEVT_EXEC events as
|
||||||
|
TARGET_WAITKIND_EXECD instead of TARGET_WAITKIND_STOPPED.
|
||||||
|
|
||||||
2008-01-29 Aleksandar Ristovski <aristovski@qnx.com>
|
2008-01-29 Aleksandar Ristovski <aristovski@qnx.com>
|
||||||
|
|
||||||
* varobj (adjust_value_for_child_access): Added checking for
|
* varobj (adjust_value_for_child_access): Added checking for
|
||||||
|
@ -410,7 +410,7 @@ startup_inferior (int ntraps)
|
|||||||
{
|
{
|
||||||
/* Make wait_for_inferior be quiet. */
|
/* Make wait_for_inferior be quiet. */
|
||||||
stop_soon = STOP_QUIETLY;
|
stop_soon = STOP_QUIETLY;
|
||||||
wait_for_inferior ();
|
wait_for_inferior (1);
|
||||||
if (stop_signal != TARGET_SIGNAL_TRAP)
|
if (stop_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.
|
||||||
|
@ -896,10 +896,6 @@ inf_ttrace_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
case TTEVT_EXEC:
|
case TTEVT_EXEC:
|
||||||
/* FIXME: kettenis/20051029: GDB doesn't really know how to deal
|
|
||||||
with TARGET_WAITKIND_EXECD events yet. So we make it look
|
|
||||||
like a SIGTRAP instead. */
|
|
||||||
#if 0
|
|
||||||
ourstatus->kind = TARGET_WAITKIND_EXECD;
|
ourstatus->kind = TARGET_WAITKIND_EXECD;
|
||||||
ourstatus->value.execd_pathname =
|
ourstatus->value.execd_pathname =
|
||||||
xmalloc (tts.tts_u.tts_exec.tts_pathlen + 1);
|
xmalloc (tts.tts_u.tts_exec.tts_pathlen + 1);
|
||||||
@ -908,10 +904,6 @@ inf_ttrace_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
|
|||||||
tts.tts_u.tts_exec.tts_pathlen, 0) == -1)
|
tts.tts_u.tts_exec.tts_pathlen, 0) == -1)
|
||||||
perror_with_name (("ttrace"));
|
perror_with_name (("ttrace"));
|
||||||
ourstatus->value.execd_pathname[tts.tts_u.tts_exec.tts_pathlen] = 0;
|
ourstatus->value.execd_pathname[tts.tts_u.tts_exec.tts_pathlen] = 0;
|
||||||
#else
|
|
||||||
ourstatus->kind = TARGET_WAITKIND_STOPPED;
|
|
||||||
ourstatus->value.sig = TARGET_SIGNAL_TRAP;
|
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TTEVT_EXIT:
|
case TTEVT_EXIT:
|
||||||
|
@ -1908,7 +1908,7 @@ attach_command (char *args, int from_tty)
|
|||||||
way for handle_inferior_event to reset the stop_signal variable
|
way for handle_inferior_event to reset the stop_signal variable
|
||||||
after an attach, and this is what STOP_QUIETLY_NO_SIGSTOP is for. */
|
after an attach, and this is what STOP_QUIETLY_NO_SIGSTOP is for. */
|
||||||
stop_soon = STOP_QUIETLY_NO_SIGSTOP;
|
stop_soon = STOP_QUIETLY_NO_SIGSTOP;
|
||||||
wait_for_inferior ();
|
wait_for_inferior (0);
|
||||||
stop_soon = NO_STOP_QUIETLY;
|
stop_soon = NO_STOP_QUIETLY;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -166,7 +166,7 @@ extern CORE_ADDR signed_pointer_to_address (struct type *type,
|
|||||||
extern void address_to_signed_pointer (struct type *type, gdb_byte *buf,
|
extern void address_to_signed_pointer (struct type *type, gdb_byte *buf,
|
||||||
CORE_ADDR addr);
|
CORE_ADDR addr);
|
||||||
|
|
||||||
extern void wait_for_inferior (void);
|
extern void wait_for_inferior (int treat_exec_as_sigtrap);
|
||||||
|
|
||||||
extern void fetch_inferior_event (void *);
|
extern void fetch_inferior_event (void *);
|
||||||
|
|
||||||
|
23
gdb/infrun.c
23
gdb/infrun.c
@ -852,7 +852,7 @@ proceed (CORE_ADDR addr, enum target_signal siggnal, int step)
|
|||||||
does not support asynchronous execution. */
|
does not support asynchronous execution. */
|
||||||
if (!target_can_async_p ())
|
if (!target_can_async_p ())
|
||||||
{
|
{
|
||||||
wait_for_inferior ();
|
wait_for_inferior (0);
|
||||||
normal_stop ();
|
normal_stop ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -882,7 +882,7 @@ start_remote (int from_tty)
|
|||||||
target_open() return to the caller an indication that the target
|
target_open() return to the caller an indication that the target
|
||||||
is currently running and GDB state should be set to the same as
|
is currently running and GDB state should be set to the same as
|
||||||
for an async run. */
|
for an async run. */
|
||||||
wait_for_inferior ();
|
wait_for_inferior (0);
|
||||||
|
|
||||||
/* Now that the inferior has stopped, do any bookkeeping like
|
/* Now that the inferior has stopped, do any bookkeeping like
|
||||||
loading shared libraries. We want to do this before normal_stop,
|
loading shared libraries. We want to do this before normal_stop,
|
||||||
@ -989,20 +989,28 @@ static void print_stop_reason (enum inferior_stop_reason stop_reason,
|
|||||||
int stop_info);
|
int stop_info);
|
||||||
|
|
||||||
/* Wait for control to return from inferior to debugger.
|
/* Wait for control to return from inferior to debugger.
|
||||||
|
|
||||||
|
If TREAT_EXEC_AS_SIGTRAP is non-zero, then handle EXEC signals
|
||||||
|
as if they were SIGTRAP signals. This can be useful during
|
||||||
|
the startup sequence on some targets such as HP/UX, where
|
||||||
|
we receive an EXEC event instead of the expected SIGTRAP.
|
||||||
|
|
||||||
If inferior gets a signal, we may decide to start it up again
|
If inferior gets a signal, we may decide to start it up again
|
||||||
instead of returning. That is why there is a loop in this function.
|
instead of returning. That is why there is a loop in this function.
|
||||||
When this function actually returns it means the inferior
|
When this function actually returns it means the inferior
|
||||||
should be left stopped and GDB should read more commands. */
|
should be left stopped and GDB should read more commands. */
|
||||||
|
|
||||||
void
|
void
|
||||||
wait_for_inferior (void)
|
wait_for_inferior (int treat_exec_as_sigtrap)
|
||||||
{
|
{
|
||||||
struct cleanup *old_cleanups;
|
struct cleanup *old_cleanups;
|
||||||
struct execution_control_state ecss;
|
struct execution_control_state ecss;
|
||||||
struct execution_control_state *ecs;
|
struct execution_control_state *ecs;
|
||||||
|
|
||||||
if (debug_infrun)
|
if (debug_infrun)
|
||||||
fprintf_unfiltered (gdb_stdlog, "infrun: wait_for_inferior\n");
|
fprintf_unfiltered
|
||||||
|
(gdb_stdlog, "infrun: wait_for_inferior (treat_exec_as_sigtrap=%d)\n",
|
||||||
|
treat_exec_as_sigtrap);
|
||||||
|
|
||||||
old_cleanups = make_cleanup (delete_step_resume_breakpoint,
|
old_cleanups = make_cleanup (delete_step_resume_breakpoint,
|
||||||
&step_resume_breakpoint);
|
&step_resume_breakpoint);
|
||||||
@ -1034,6 +1042,13 @@ wait_for_inferior (void)
|
|||||||
else
|
else
|
||||||
ecs->ptid = target_wait (ecs->waiton_ptid, ecs->wp);
|
ecs->ptid = target_wait (ecs->waiton_ptid, ecs->wp);
|
||||||
|
|
||||||
|
if (treat_exec_as_sigtrap && ecs->ws.kind == TARGET_WAITKIND_EXECD)
|
||||||
|
{
|
||||||
|
xfree (ecs->ws.value.execd_pathname);
|
||||||
|
ecs->ws.kind = TARGET_WAITKIND_STOPPED;
|
||||||
|
ecs->ws.value.sig = TARGET_SIGNAL_TRAP;
|
||||||
|
}
|
||||||
|
|
||||||
/* Now figure out what to do with the result of the result. */
|
/* Now figure out what to do with the result of the result. */
|
||||||
handle_inferior_event (ecs);
|
handle_inferior_event (ecs);
|
||||||
|
|
||||||
|
@ -438,7 +438,7 @@ irix_solib_create_inferior_hook (void)
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
target_resume (pid_to_ptid (-1), 0, stop_signal);
|
target_resume (pid_to_ptid (-1), 0, stop_signal);
|
||||||
wait_for_inferior ();
|
wait_for_inferior (0);
|
||||||
}
|
}
|
||||||
while (stop_signal != TARGET_SIGNAL_TRAP);
|
while (stop_signal != TARGET_SIGNAL_TRAP);
|
||||||
|
|
||||||
|
@ -324,7 +324,7 @@ osf_solib_create_inferior_hook (void)
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
target_resume (minus_one_ptid, 0, stop_signal);
|
target_resume (minus_one_ptid, 0, stop_signal);
|
||||||
wait_for_inferior ();
|
wait_for_inferior (0);
|
||||||
}
|
}
|
||||||
while (stop_signal != TARGET_SIGNAL_TRAP);
|
while (stop_signal != TARGET_SIGNAL_TRAP);
|
||||||
|
|
||||||
|
@ -765,7 +765,7 @@ sunos_solib_create_inferior_hook (void)
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
target_resume (pid_to_ptid (-1), 0, stop_signal);
|
target_resume (pid_to_ptid (-1), 0, stop_signal);
|
||||||
wait_for_inferior ();
|
wait_for_inferior (0);
|
||||||
}
|
}
|
||||||
while (stop_signal != TARGET_SIGNAL_TRAP);
|
while (stop_signal != TARGET_SIGNAL_TRAP);
|
||||||
stop_soon = NO_STOP_QUIETLY;
|
stop_soon = NO_STOP_QUIETLY;
|
||||||
|
@ -1364,7 +1364,7 @@ svr4_solib_create_inferior_hook (void)
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
target_resume (pid_to_ptid (-1), 0, stop_signal);
|
target_resume (pid_to_ptid (-1), 0, stop_signal);
|
||||||
wait_for_inferior ();
|
wait_for_inferior (0);
|
||||||
}
|
}
|
||||||
while (stop_signal != TARGET_SIGNAL_TRAP);
|
while (stop_signal != TARGET_SIGNAL_TRAP);
|
||||||
stop_soon = NO_STOP_QUIETLY;
|
stop_soon = NO_STOP_QUIETLY;
|
||||||
|
@ -1507,7 +1507,7 @@ do_initial_win32_stuff (DWORD pid)
|
|||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
stop_after_trap = 1;
|
stop_after_trap = 1;
|
||||||
wait_for_inferior ();
|
wait_for_inferior (0);
|
||||||
if (stop_signal != TARGET_SIGNAL_TRAP)
|
if (stop_signal != TARGET_SIGNAL_TRAP)
|
||||||
resume (0, stop_signal);
|
resume (0, stop_signal);
|
||||||
else
|
else
|
||||||
|
@ -1507,7 +1507,7 @@ do_initial_win32_stuff (DWORD pid)
|
|||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
stop_after_trap = 1;
|
stop_after_trap = 1;
|
||||||
wait_for_inferior ();
|
wait_for_inferior (0);
|
||||||
if (stop_signal != TARGET_SIGNAL_TRAP)
|
if (stop_signal != TARGET_SIGNAL_TRAP)
|
||||||
resume (0, stop_signal);
|
resume (0, stop_signal);
|
||||||
else
|
else
|
||||||
|
Reference in New Issue
Block a user