Rename and move inferior_thread_state and inferior_status.
	* gdbthread.h (struct thread_control_state): New struct, move fields
	step_range_start, step_range_end, step_frame_id, step_stack_frame_id,
	trap_expected, proceed_to_finish, in_infcall, step_over_calls,
	stop_step and stop_bpstat here from struct thread_info.
	(struct thread_suspend_state): New struct, move field stop_signal here
	from struct thread_info.
	(struct thread_info): Move the fields above from this struct.
	* inferior.h: Move the inferior_thread_state and inferior_status
	declarations comment to their definitions at infrun.c.
	(struct inferior_control_state): New struct, move field stop_soon from
	struct inferior here.
	(struct inferior_suspend_state): New empty struct.
	(struct inferior): New fields control and suspend.  Move out field
	stop_soon.
	* infrun.c (struct inferior_thread_state): Rename to ...
	(infcall_suspend_state): ... here.  Replace field stop_signal by
	fields thread_suspend and inferior_suspend.
	(save_inferior_thread_state): Rename to ...
	(save_infcall_suspend_state): ... here.  New variable inf.  Update the
	code for new fields.
	(restore_inferior_thread_state): Rename to ...
	(restore_infcall_suspend_state): ... here.  New variable inf.  Update
	the code for new fields.
	(do_restore_inferior_thread_state_cleanup): Rename to ...
	(do_restore_infcall_suspend_state_cleanup): ... here.
	(make_cleanup_restore_inferior_thread_state): Rename to ...
	(make_cleanup_restore_infcall_suspend_state): ... here.
	(discard_inferior_thread_state): Rename to ...
	(discard_infcall_suspend_state): ... here.
	(get_inferior_thread_state_regcache): Rename to ...
	(get_infcall_suspend_state_regcache): ... here.
	(struct inferior_status): Rename to ...
	(struct infcall_control_state): ... here.  Replace fields
	step_range_start, step_range_end, step_frame_id, step_stack_frame_id,
	trap_expected, proceed_to_finish, in_infcall, step_over_calls,
	stop_step, stop_bpstat and stop_soon by fields thread_control and
	inferior_control.
	(save_inferior_status): Rename to ...
	(save_infcall_control_state): ... here.  Update the code for new
	fields.
	(restore_inferior_status): Rename to ...
	(restore_infcall_control_state): ... here.  Update the code for new
	fields.
	(do_restore_inferior_status_cleanup): Rename to ...
	(do_restore_infcall_control_state_cleanup): ... here.
	(make_cleanup_restore_inferior_status): Rename to ...
	(make_cleanup_restore_infcall_control_state): ... here.
	(discard_inferior_status): Rename to ...
	(discard_infcall_control_state): ... here.
	* alpha-tdep.c, breakpoint.c, dummy-frame.c, dummy-frame.h,
	exceptions.c, fbsd-nat.c, gdbthread.h, infcall.c, infcmd.c,
	inferior.c, inferior.h, infrun.c, linux-nat.c, mi/mi-interp.c,
	mips-tdep.c, procfs.c, solib-irix.c, solib-osf.c, solib-spu.c,
	solib-sunos.c, solib-svr4.c, thread.c, windows-nat.c: Update all the
	references to the moved fields and renamed functions.
This commit is contained in:
Jan Kratochvil
2010-11-28 04:31:25 +00:00
parent f0df11bdc9
commit 16c381f058
24 changed files with 553 additions and 467 deletions

@ -1,3 +1,62 @@
2010-11-28 Jan Kratochvil <jan.kratochvil@redhat.com>
Rename and move inferior_thread_state and inferior_status.
* gdbthread.h (struct thread_control_state): New struct, move fields
step_range_start, step_range_end, step_frame_id, step_stack_frame_id,
trap_expected, proceed_to_finish, in_infcall, step_over_calls,
stop_step and stop_bpstat here from struct thread_info.
(struct thread_suspend_state): New struct, move field stop_signal here
from struct thread_info.
(struct thread_info): Move the fields above from this struct.
* inferior.h: Move the inferior_thread_state and inferior_status
declarations comment to their definitions at infrun.c.
(struct inferior_control_state): New struct, move field stop_soon from
struct inferior here.
(struct inferior_suspend_state): New empty struct.
(struct inferior): New fields control and suspend. Move out field
stop_soon.
* infrun.c (struct inferior_thread_state): Rename to ...
(infcall_suspend_state): ... here. Replace field stop_signal by
fields thread_suspend and inferior_suspend.
(save_inferior_thread_state): Rename to ...
(save_infcall_suspend_state): ... here. New variable inf. Update the
code for new fields.
(restore_inferior_thread_state): Rename to ...
(restore_infcall_suspend_state): ... here. New variable inf. Update
the code for new fields.
(do_restore_inferior_thread_state_cleanup): Rename to ...
(do_restore_infcall_suspend_state_cleanup): ... here.
(make_cleanup_restore_inferior_thread_state): Rename to ...
(make_cleanup_restore_infcall_suspend_state): ... here.
(discard_inferior_thread_state): Rename to ...
(discard_infcall_suspend_state): ... here.
(get_inferior_thread_state_regcache): Rename to ...
(get_infcall_suspend_state_regcache): ... here.
(struct inferior_status): Rename to ...
(struct infcall_control_state): ... here. Replace fields
step_range_start, step_range_end, step_frame_id, step_stack_frame_id,
trap_expected, proceed_to_finish, in_infcall, step_over_calls,
stop_step, stop_bpstat and stop_soon by fields thread_control and
inferior_control.
(save_inferior_status): Rename to ...
(save_infcall_control_state): ... here. Update the code for new
fields.
(restore_inferior_status): Rename to ...
(restore_infcall_control_state): ... here. Update the code for new
fields.
(do_restore_inferior_status_cleanup): Rename to ...
(do_restore_infcall_control_state_cleanup): ... here.
(make_cleanup_restore_inferior_status): Rename to ...
(make_cleanup_restore_infcall_control_state): ... here.
(discard_inferior_status): Rename to ...
(discard_infcall_control_state): ... here.
* alpha-tdep.c, breakpoint.c, dummy-frame.c, dummy-frame.h,
exceptions.c, fbsd-nat.c, gdbthread.h, infcall.c, infcmd.c,
inferior.c, inferior.h, infrun.c, linux-nat.c, mi/mi-interp.c,
mips-tdep.c, procfs.c, solib-irix.c, solib-osf.c, solib-spu.c,
solib-sunos.c, solib-svr4.c, thread.c, windows-nat.c: Update all the
references to the moved fields and renamed functions.
2010-11-26 Jan Kratochvil <jan.kratochvil@redhat.com> 2010-11-26 Jan Kratochvil <jan.kratochvil@redhat.com>
* infcall.c (struct inferior_thread_state) <siginfo_gdbarch>: Fix up * infcall.c (struct inferior_thread_state) <siginfo_gdbarch>: Fix up

@ -992,7 +992,7 @@ alpha_heuristic_proc_start (struct gdbarch *gdbarch, CORE_ADDR pc)
/* It's not clear to me why we reach this point when stopping quietly, /* It's not clear to me why we reach this point when stopping quietly,
but with this test, at least we don't print out warnings for every but with this test, at least we don't print out warnings for every
child forked (eg, on decstation). 22apr93 rich@cygnus.com. */ child forked (eg, on decstation). 22apr93 rich@cygnus.com. */
if (inf->stop_soon == NO_STOP_QUIETLY) if (inf->control.stop_soon == NO_STOP_QUIETLY)
{ {
static int blurb_printed = 0; static int blurb_printed = 0;

@ -3008,7 +3008,7 @@ breakpoint_about_to_proceed (void)
interrupt the command list. When the call finishes interrupt the command list. When the call finishes
successfully, the inferior will be standing at the same successfully, the inferior will be standing at the same
breakpoint as if nothing happened. */ breakpoint as if nothing happened. */
if (tp->in_infcall) if (tp->control.in_infcall)
return; return;
} }
@ -3127,7 +3127,7 @@ bpstat_do_actions (void)
and only return when it is stopped at the next breakpoint, we and only return when it is stopped at the next breakpoint, we
keep doing breakpoint actions until it returns false to keep doing breakpoint actions until it returns false to
indicate the inferior was not resumed. */ indicate the inferior was not resumed. */
if (!bpstat_do_actions_1 (&inferior_thread ()->stop_bpstat)) if (!bpstat_do_actions_1 (&inferior_thread ()->control.stop_bpstat))
break; break;
} }
@ -9680,7 +9680,7 @@ bpstat_remove_breakpoint_callback (struct thread_info *th, void *data)
{ {
struct breakpoint *bpt = data; struct breakpoint *bpt = data;
bpstat_remove_bp_location (th->stop_bpstat, bpt); bpstat_remove_bp_location (th->control.stop_bpstat, bpt);
return 0; return 0;
} }

@ -43,7 +43,7 @@ struct dummy_frame
gdbarch_dummy_id. */ gdbarch_dummy_id. */
struct frame_id id; struct frame_id id;
/* The caller's state prior to the call. */ /* The caller's state prior to the call. */
struct inferior_thread_state *caller_state; struct infcall_suspend_state *caller_state;
}; };
static struct dummy_frame *dummy_frame_stack = NULL; static struct dummy_frame *dummy_frame_stack = NULL;
@ -86,7 +86,7 @@ deprecated_pc_in_call_dummy (struct gdbarch *gdbarch, CORE_ADDR pc)
dummy-frame stack. */ dummy-frame stack. */
void void
dummy_frame_push (struct inferior_thread_state *caller_state, dummy_frame_push (struct infcall_suspend_state *caller_state,
const struct frame_id *dummy_id) const struct frame_id *dummy_id)
{ {
struct dummy_frame *dummy_frame; struct dummy_frame *dummy_frame;
@ -106,7 +106,7 @@ remove_dummy_frame (struct dummy_frame **dummy_ptr)
struct dummy_frame *dummy = *dummy_ptr; struct dummy_frame *dummy = *dummy_ptr;
*dummy_ptr = dummy->next; *dummy_ptr = dummy->next;
discard_inferior_thread_state (dummy->caller_state); discard_infcall_suspend_state (dummy->caller_state);
xfree (dummy); xfree (dummy);
} }
@ -118,9 +118,9 @@ pop_dummy_frame (struct dummy_frame **dummy_ptr)
{ {
struct dummy_frame *dummy; struct dummy_frame *dummy;
restore_inferior_thread_state ((*dummy_ptr)->caller_state); restore_infcall_suspend_state ((*dummy_ptr)->caller_state);
/* restore_inferior_status frees inf_state, /* restore_infcall_control_state frees inf_state,
all that remains is to pop *dummy_ptr */ all that remains is to pop *dummy_ptr */
dummy = *dummy_ptr; dummy = *dummy_ptr;
*dummy_ptr = dummy->next; *dummy_ptr = dummy->next;
@ -220,7 +220,8 @@ dummy_frame_sniffer (const struct frame_unwind *self,
struct dummy_frame_cache *cache; struct dummy_frame_cache *cache;
cache = FRAME_OBSTACK_ZALLOC (struct dummy_frame_cache); cache = FRAME_OBSTACK_ZALLOC (struct dummy_frame_cache);
cache->prev_regcache = get_inferior_thread_state_regcache (dummyframe->caller_state); cache->prev_regcache = get_infcall_suspend_state_regcache
(dummyframe->caller_state);
cache->this_id = this_id; cache->this_id = this_id;
(*this_prologue_cache) = cache; (*this_prologue_cache) = cache;
return 1; return 1;

@ -23,7 +23,7 @@
#include "frame.h" #include "frame.h"
struct inferior_thread_state; struct infcall_suspend_state;
struct frame_unwind; struct frame_unwind;
/* Push the information needed to identify, and unwind from, a dummy /* Push the information needed to identify, and unwind from, a dummy
@ -39,7 +39,7 @@ struct frame_unwind;
be expanded so that it knowns the lower/upper extent of the dummy be expanded so that it knowns the lower/upper extent of the dummy
frame's code. */ frame's code. */
extern void dummy_frame_push (struct inferior_thread_state *caller_state, extern void dummy_frame_push (struct infcall_suspend_state *caller_state,
const struct frame_id *dummy_id); const struct frame_id *dummy_id);
/* Pop the dummy frame DUMMY_ID, restoring program state to that before the /* Pop the dummy frame DUMMY_ID, restoring program state to that before the

@ -226,7 +226,10 @@ throw_exception (struct gdb_exception exception)
/* Perhaps it would be cleaner to do this via the cleanup chain (not sure /* Perhaps it would be cleaner to do this via the cleanup chain (not sure
I can think of a reason why that is vital, though). */ I can think of a reason why that is vital, though). */
if (tp != NULL) if (tp != NULL)
bpstat_clear_actions (tp->stop_bpstat); /* Clear queued breakpoint commands */ {
/* Clear queued breakpoint commands */
bpstat_clear_actions (tp->control.stop_bpstat);
}
disable_current_display (); disable_current_display ();
do_cleanups (ALL_CLEANUPS); do_cleanups (ALL_CLEANUPS);

@ -143,7 +143,7 @@ fbsd_find_memory_regions (find_memory_region_ftype func, void *obfd)
static int static int
find_signalled_thread (struct thread_info *info, void *data) find_signalled_thread (struct thread_info *info, void *data)
{ {
if (info->stop_signal != TARGET_SIGNAL_0 if (info->suspend.stop_signal != TARGET_SIGNAL_0
&& ptid_get_pid (info->ptid) == ptid_get_pid (inferior_ptid)) && ptid_get_pid (info->ptid) == ptid_get_pid (inferior_ptid))
return 1; return 1;
@ -157,7 +157,7 @@ find_stop_signal (void)
iterate_over_threads (find_signalled_thread, NULL); iterate_over_threads (find_signalled_thread, NULL);
if (info) if (info)
return info->stop_signal; return info->suspend.stop_signal;
else else
return TARGET_SIGNAL_0; return TARGET_SIGNAL_0;
} }

@ -29,6 +29,88 @@ struct symtab;
#include "ui-out.h" #include "ui-out.h"
#include "inferior.h" #include "inferior.h"
/* Inferior thread specific part of `struct infcall_control_state'.
Inferior process counterpart is `struct inferior_control_state'. */
struct thread_control_state
{
/* User/external stepping state. */
/* Range to single step within.
If this is nonzero, respond to a single-step signal by continuing
to step if the pc is in this range.
If step_range_start and step_range_end are both 1, it means to
step for a single instruction (FIXME: it might clean up
wait_for_inferior in a minor way if this were changed to the
address of the instruction and that address plus one. But maybe
not.). */
CORE_ADDR step_range_start; /* Inclusive */
CORE_ADDR step_range_end; /* Exclusive */
/* Stack frame address as of when stepping command was issued.
This is how we know when we step into a subroutine call, and how
to set the frame for the breakpoint used to step out. */
struct frame_id step_frame_id;
/* Similarly, the frame ID of the underlying stack frame (skipping
any inlined frames). */
struct frame_id step_stack_frame_id;
/* Nonzero if we are presently stepping over a breakpoint.
If we hit a breakpoint or watchpoint, and then continue, we need
to single step the current thread with breakpoints disabled, to
avoid hitting the same breakpoint or watchpoint again. And we
should step just a single thread and keep other threads stopped,
so that other threads don't miss breakpoints while they are
removed.
So, this variable simultaneously means that we need to single
step the current thread, keep other threads stopped, and that
breakpoints should be removed while we step.
This variable is set either:
- in proceed, when we resume inferior on user's explicit request
- in keep_going, if handle_inferior_event decides we need to
step over breakpoint.
The variable is cleared in normal_stop. The proceed calls
wait_for_inferior, which calls handle_inferior_event in a loop,
and until wait_for_inferior exits, this variable is changed only
by keep_going. */
int trap_expected;
/* Nonzero if the thread is being proceeded for a "finish" command
or a similar situation when stop_registers should be saved. */
int proceed_to_finish;
/* Nonzero if the thread is being proceeded for an inferior function
call. */
int in_infcall;
enum step_over_calls_kind step_over_calls;
/* Nonzero if stopped due to a step command. */
int stop_step;
/* Chain containing status of breakpoint(s) the thread stopped
at. */
bpstat stop_bpstat;
};
/* Inferior thread specific part of `struct infcall_suspend_state'.
Inferior process counterpart is `struct inferior_suspend_state'. */
struct thread_suspend_state
{
/* Last signal that the inferior received (why it stopped). */
enum target_signal stop_signal;
};
struct thread_info struct thread_info
{ {
struct thread_info *next; struct thread_info *next;
@ -61,33 +143,19 @@ struct thread_info
if we detect it exiting. */ if we detect it exiting. */
int refcount; int refcount;
/* State of GDB control of inferior thread execution.
See `struct thread_control_state'. */
struct thread_control_state control;
/* State of inferior thread to restore after GDB is done with an inferior
call. See `struct thread_suspend_state'. */
struct thread_suspend_state suspend;
/* User/external stepping state. */ /* User/external stepping state. */
/* Step-resume or longjmp-resume breakpoint. */ /* Step-resume or longjmp-resume breakpoint. */
struct breakpoint *step_resume_breakpoint; struct breakpoint *step_resume_breakpoint;
/* Range to single step within.
If this is nonzero, respond to a single-step signal by continuing
to step if the pc is in this range.
If step_range_start and step_range_end are both 1, it means to
step for a single instruction (FIXME: it might clean up
wait_for_inferior in a minor way if this were changed to the
address of the instruction and that address plus one. But maybe
not.). */
CORE_ADDR step_range_start; /* Inclusive */
CORE_ADDR step_range_end; /* Exclusive */
/* Stack frame address as of when stepping command was issued.
This is how we know when we step into a subroutine call, and how
to set the frame for the breakpoint used to step out. */
struct frame_id step_frame_id;
/* Similarly, the frame ID of the underlying stack frame (skipping
any inlined frames). */
struct frame_id step_stack_frame_id;
int current_line; int current_line;
struct symtab *current_symtab; struct symtab *current_symtab;
@ -99,30 +167,6 @@ struct thread_info
SIGTRAP from a breakpoint SIGTRAP. */ SIGTRAP from a breakpoint SIGTRAP. */
CORE_ADDR prev_pc; CORE_ADDR prev_pc;
/* Nonzero if we are presently stepping over a breakpoint.
If we hit a breakpoint or watchpoint, and then continue, we need
to single step the current thread with breakpoints disabled, to
avoid hitting the same breakpoint or watchpoint again. And we
should step just a single thread and keep other threads stopped,
so that other threads don't miss breakpoints while they are
removed.
So, this variable simultaneously means that we need to single
step the current thread, keep other threads stopped, and that
breakpoints should be removed while we step.
This variable is set either:
- in proceed, when we resume inferior on user's explicit request
- in keep_going, if handle_inferior_event decides we need to
step over breakpoint.
The variable is cleared in normal_stop. The proceed calls
wait_for_inferior, which calls handle_inferior_event in a loop,
and until wait_for_inferior exits, this variable is changed only
by keep_going. */
int trap_expected;
/* Should we step over breakpoint next time keep_going is called? */ /* Should we step over breakpoint next time keep_going is called? */
int stepping_over_breakpoint; int stepping_over_breakpoint;
@ -153,19 +197,6 @@ struct thread_info
command. */ command. */
struct continuation *intermediate_continuations; struct continuation *intermediate_continuations;
/* Nonzero if the thread is being proceeded for a "finish" command
or a similar situation when stop_registers should be saved. */
int proceed_to_finish;
/* Nonzero if the thread is being proceeded for an inferior function
call. */
int in_infcall;
enum step_over_calls_kind step_over_calls;
/* Nonzero if stopped due to a step command. */
int stop_step;
/* If stepping, nonzero means step count is > 1 so don't print frame /* If stepping, nonzero means step count is > 1 so don't print frame
next time inferior stops if it stops due to stepping. */ next time inferior stops if it stops due to stepping. */
int step_multi; int step_multi;
@ -175,13 +206,6 @@ struct thread_info
resume of the thread, and not immediately. */ resume of the thread, and not immediately. */
struct target_waitstatus pending_follow; struct target_waitstatus pending_follow;
/* Last signal that the inferior received (why it stopped). */
enum target_signal stop_signal;
/* Chain containing status of breakpoint(s) the thread stopped
at. */
bpstat stop_bpstat;
/* True if this thread has been explicitly requested to stop. */ /* True if this thread has been explicitly requested to stop. */
int stop_requested; int stop_requested;

@ -360,16 +360,18 @@ run_inferior_call (struct thread_info *call_thread, CORE_ADDR real_pc)
{ {
volatile struct gdb_exception e; volatile struct gdb_exception e;
int saved_async = 0; int saved_async = 0;
int saved_in_infcall = call_thread->in_infcall; int saved_in_infcall = call_thread->control.in_infcall;
ptid_t call_thread_ptid = call_thread->ptid; ptid_t call_thread_ptid = call_thread->ptid;
char *saved_target_shortname = xstrdup (target_shortname); char *saved_target_shortname = xstrdup (target_shortname);
call_thread->in_infcall = 1; call_thread->control.in_infcall = 1;
clear_proceed_status (); clear_proceed_status ();
disable_watchpoints_before_interactive_call_start (); disable_watchpoints_before_interactive_call_start ();
call_thread->proceed_to_finish = 1; /* We want stop_registers, please... */
/* We want stop_registers, please... */
call_thread->control.proceed_to_finish = 1;
if (target_can_async_p ()) if (target_can_async_p ())
saved_async = target_async_mask (0); saved_async = target_async_mask (0);
@ -397,11 +399,11 @@ run_inferior_call (struct thread_info *call_thread, CORE_ADDR real_pc)
if (e.reason < 0) if (e.reason < 0)
{ {
if (call_thread != NULL) if (call_thread != NULL)
breakpoint_auto_delete (call_thread->stop_bpstat); breakpoint_auto_delete (call_thread->control.stop_bpstat);
} }
if (call_thread != NULL) if (call_thread != NULL)
call_thread->in_infcall = saved_in_infcall; call_thread->control.in_infcall = saved_in_infcall;
xfree (saved_target_shortname); xfree (saved_target_shortname);
@ -440,9 +442,9 @@ call_function_by_hand (struct value *function, int nargs, struct value **args)
struct type *values_type, *target_values_type; struct type *values_type, *target_values_type;
unsigned char struct_return = 0, lang_struct_return = 0; unsigned char struct_return = 0, lang_struct_return = 0;
CORE_ADDR struct_addr = 0; CORE_ADDR struct_addr = 0;
struct inferior_status *inf_status; struct infcall_control_state *inf_status;
struct cleanup *inf_status_cleanup; struct cleanup *inf_status_cleanup;
struct inferior_thread_state *caller_state; struct infcall_suspend_state *caller_state;
CORE_ADDR funaddr; CORE_ADDR funaddr;
CORE_ADDR real_pc; CORE_ADDR real_pc;
struct type *ftype = check_typedef (value_type (function)); struct type *ftype = check_typedef (value_type (function));
@ -473,16 +475,17 @@ call_function_by_hand (struct value *function, int nargs, struct value **args)
/* A cleanup for the inferior status. /* A cleanup for the inferior status.
This is only needed while we're preparing the inferior function call. */ This is only needed while we're preparing the inferior function call. */
inf_status = save_inferior_status (); inf_status = save_infcall_control_state ();
inf_status_cleanup = make_cleanup_restore_inferior_status (inf_status); inf_status_cleanup
= make_cleanup_restore_infcall_control_state (inf_status);
/* Save the caller's registers and other state associated with the /* Save the caller's registers and other state associated with the
inferior itself so that they can be restored once the inferior itself so that they can be restored once the
callee returns. To allow nested calls the registers are (further callee returns. To allow nested calls the registers are (further
down) pushed onto a dummy frame stack. Include a cleanup (which down) pushed onto a dummy frame stack. Include a cleanup (which
is tossed once the regcache has been pushed). */ is tossed once the regcache has been pushed). */
caller_state = save_inferior_thread_state (); caller_state = save_infcall_suspend_state ();
make_cleanup_restore_inferior_thread_state (caller_state); make_cleanup_restore_infcall_suspend_state (caller_state);
/* Ensure that the initial SP is correctly aligned. */ /* Ensure that the initial SP is correctly aligned. */
{ {
@ -810,7 +813,7 @@ call_function_by_hand (struct value *function, int nargs, struct value **args)
const char *name = get_function_name (funaddr, const char *name = get_function_name (funaddr,
name_buf, sizeof (name_buf)); name_buf, sizeof (name_buf));
discard_inferior_status (inf_status); discard_infcall_control_state (inf_status);
/* We could discard the dummy frame here if the program exited, /* We could discard the dummy frame here if the program exited,
but it will get garbage collected the next time the program is but it will get garbage collected the next time the program is
@ -842,7 +845,7 @@ When the function is done executing, GDB will silently stop."),
/* If we try to restore the inferior status, /* If we try to restore the inferior status,
we'll crash as the inferior is no longer running. */ we'll crash as the inferior is no longer running. */
discard_inferior_status (inf_status); discard_infcall_control_state (inf_status);
/* We could discard the dummy frame here given that the program exited, /* We could discard the dummy frame here given that the program exited,
but it will get garbage collected the next time the program is but it will get garbage collected the next time the program is
@ -864,7 +867,7 @@ Evaluation of the expression containing the function\n\
signal or breakpoint while our thread was running. signal or breakpoint while our thread was running.
There's no point in restoring the inferior status, There's no point in restoring the inferior status,
we're in a different thread. */ we're in a different thread. */
discard_inferior_status (inf_status); discard_infcall_control_state (inf_status);
/* Keep the dummy frame record, if the user switches back to the /* Keep the dummy frame record, if the user switches back to the
thread with the hand-call, we'll need it. */ thread with the hand-call, we'll need it. */
if (stopped_by_random_signal) if (stopped_by_random_signal)
@ -905,7 +908,7 @@ When the function is done executing, GDB will silently stop."),
/* We also need to restore inferior status to that before the /* We also need to restore inferior status to that before the
dummy call. */ dummy call. */
restore_inferior_status (inf_status); restore_infcall_control_state (inf_status);
/* FIXME: Insert a bunch of wrap_here; name can be very /* FIXME: Insert a bunch of wrap_here; name can be very
long if it's a C++ name with arguments and stuff. */ long if it's a C++ name with arguments and stuff. */
@ -923,7 +926,7 @@ Evaluation of the expression containing the function\n\
(default). (default).
Discard inferior status, we're not at the same point Discard inferior status, we're not at the same point
we started at. */ we started at. */
discard_inferior_status (inf_status); discard_infcall_control_state (inf_status);
/* FIXME: Insert a bunch of wrap_here; name can be very /* FIXME: Insert a bunch of wrap_here; name can be very
long if it's a C++ name with arguments and stuff. */ long if it's a C++ name with arguments and stuff. */
@ -946,7 +949,7 @@ When the function is done executing, GDB will silently stop."),
/* We also need to restore inferior status to that before /* We also need to restore inferior status to that before
the dummy call. */ the dummy call. */
restore_inferior_status (inf_status); restore_infcall_control_state (inf_status);
error (_("\ error (_("\
The program being debugged entered a std::terminate call, most likely\n\ The program being debugged entered a std::terminate call, most likely\n\
@ -965,7 +968,7 @@ will be abandoned."),
Keep the dummy frame, the user may want to examine its state. Keep the dummy frame, the user may want to examine its state.
Discard inferior status, we're not at the same point Discard inferior status, we're not at the same point
we started at. */ we started at. */
discard_inferior_status (inf_status); discard_infcall_control_state (inf_status);
/* The following error message used to say "The expression /* The following error message used to say "The expression
which contained the function call has been discarded." which contained the function call has been discarded."
@ -1002,7 +1005,7 @@ When the function is done executing, GDB will silently stop."),
/* Inferior call is successful. Restore the inferior status. /* Inferior call is successful. Restore the inferior status.
At this stage, leave the RETBUF alone. */ At this stage, leave the RETBUF alone. */
restore_inferior_status (inf_status); restore_infcall_control_state (inf_status);
/* Figure out the value returned by the function. */ /* Figure out the value returned by the function. */

@ -753,7 +753,7 @@ Can't resume all threads and specify proceed count simultaneously."));
tp = find_thread_ptid (last_ptid); tp = find_thread_ptid (last_ptid);
} }
if (tp != NULL) if (tp != NULL)
bs = tp->stop_bpstat; bs = tp->control.stop_bpstat;
while ((stat = bpstat_num (&bs, &num)) != 0) while ((stat = bpstat_num (&bs, &num)) != 0)
if (stat > 0) if (stat > 0)
@ -885,7 +885,7 @@ step_1 (int skip_subroutines, int single_inst, char *count_string)
else else
tp = NULL; tp = NULL;
if (!tp || !tp->stop_step || !tp->step_multi) if (!tp || !tp->control.stop_step || !tp->step_multi)
{ {
/* If we stopped for some reason that is not stepping /* If we stopped for some reason that is not stepping
there are no further steps to make. */ there are no further steps to make. */
@ -935,7 +935,7 @@ step_1_continuation (void *args)
struct thread_info *tp; struct thread_info *tp;
tp = inferior_thread (); tp = inferior_thread ();
if (tp->step_multi && tp->stop_step) if (tp->step_multi && tp->control.stop_step)
{ {
/* There are more steps to make, and we did stop due to /* There are more steps to make, and we did stop due to
ending a stepping range. Do another step. */ ending a stepping range. Do another step. */
@ -993,18 +993,19 @@ step_once (int skip_subroutines, int single_inst, int count, int thread)
pc = get_frame_pc (frame); pc = get_frame_pc (frame);
find_pc_line_pc_range (pc, find_pc_line_pc_range (pc,
&tp->step_range_start, &tp->step_range_end); &tp->control.step_range_start,
&tp->control.step_range_end);
/* If we have no line info, switch to stepi mode. */ /* If we have no line info, switch to stepi mode. */
if (tp->step_range_end == 0 && step_stop_if_no_debug) if (tp->control.step_range_end == 0 && step_stop_if_no_debug)
tp->step_range_start = tp->step_range_end = 1; tp->control.step_range_start = tp->control.step_range_end = 1;
else if (tp->step_range_end == 0) else if (tp->control.step_range_end == 0)
{ {
char *name; char *name;
if (find_pc_partial_function (pc, &name, if (find_pc_partial_function (pc, &name,
&tp->step_range_start, &tp->control.step_range_start,
&tp->step_range_end) == 0) &tp->control.step_range_end) == 0)
error (_("Cannot find bounds of current function")); error (_("Cannot find bounds of current function"));
target_terminal_ours (); target_terminal_ours ();
@ -1016,16 +1017,16 @@ which has no line number information.\n"), name);
else else
{ {
/* Say we are stepping, but stop after one insn whatever it does. */ /* Say we are stepping, but stop after one insn whatever it does. */
tp->step_range_start = tp->step_range_end = 1; tp->control.step_range_start = tp->control.step_range_end = 1;
if (!skip_subroutines) if (!skip_subroutines)
/* It is stepi. /* It is stepi.
Don't step over function calls, not even to functions lacking Don't step over function calls, not even to functions lacking
line numbers. */ line numbers. */
tp->step_over_calls = STEP_OVER_NONE; tp->control.step_over_calls = STEP_OVER_NONE;
} }
if (skip_subroutines) if (skip_subroutines)
tp->step_over_calls = STEP_OVER_ALL; tp->control.step_over_calls = STEP_OVER_ALL;
tp->step_multi = (count > 1); tp->step_multi = (count > 1);
proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 1); proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 1);
@ -1255,18 +1256,18 @@ until_next_command (int from_tty)
if (msymbol == NULL) if (msymbol == NULL)
error (_("Execution is not within a known function.")); error (_("Execution is not within a known function."));
tp->step_range_start = SYMBOL_VALUE_ADDRESS (msymbol); tp->control.step_range_start = SYMBOL_VALUE_ADDRESS (msymbol);
tp->step_range_end = pc; tp->control.step_range_end = pc;
} }
else else
{ {
sal = find_pc_line (pc, 0); sal = find_pc_line (pc, 0);
tp->step_range_start = BLOCK_START (SYMBOL_BLOCK_VALUE (func)); tp->control.step_range_start = BLOCK_START (SYMBOL_BLOCK_VALUE (func));
tp->step_range_end = sal.end; tp->control.step_range_end = sal.end;
} }
tp->step_over_calls = STEP_OVER_ALL; tp->control.step_over_calls = STEP_OVER_ALL;
tp->step_multi = 0; /* Only one call to proceed */ tp->step_multi = 0; /* Only one call to proceed */
@ -1429,7 +1430,7 @@ finish_command_continuation (void *arg)
&& is_stopped (inferior_ptid)) && is_stopped (inferior_ptid))
{ {
tp = inferior_thread (); tp = inferior_thread ();
bs = tp->stop_bpstat; bs = tp->control.stop_bpstat;
} }
if (bpstat_find_breakpoint (bs, a->breakpoint) != NULL if (bpstat_find_breakpoint (bs, a->breakpoint) != NULL
@ -1460,7 +1461,7 @@ finish_command_continuation (void *arg)
/* We suppress normal call of normal_stop observer and do it here so /* We suppress normal call of normal_stop observer and do it here so
that the *stopped notification includes the return value. */ that the *stopped notification includes the return value. */
if (bs != NULL && tp->proceed_to_finish) if (bs != NULL && tp->control.proceed_to_finish)
observer_notify_normal_stop (bs, 1 /* print frame */); observer_notify_normal_stop (bs, 1 /* print frame */);
delete_breakpoint (a->breakpoint); delete_breakpoint (a->breakpoint);
} }
@ -1493,7 +1494,7 @@ finish_backward (struct symbol *function)
sal = find_pc_line (func_addr, 0); sal = find_pc_line (func_addr, 0);
/* We don't need a return value. */ /* We don't need a return value. */
tp->proceed_to_finish = 0; tp->control.proceed_to_finish = 0;
/* Special case: if we're sitting at the function entry point, /* Special case: if we're sitting at the function entry point,
then all we need to do is take a reverse singlestep. We then all we need to do is take a reverse singlestep. We
don't need to set a breakpoint, and indeed it would do us don't need to set a breakpoint, and indeed it would do us
@ -1519,7 +1520,8 @@ finish_backward (struct symbol *function)
old_chain = make_cleanup_delete_breakpoint (breakpoint); old_chain = make_cleanup_delete_breakpoint (breakpoint);
proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0); proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0);
/* We will be stopped when proceed returns. */ /* We will be stopped when proceed returns. */
back_up = bpstat_find_breakpoint (tp->stop_bpstat, breakpoint) != NULL; back_up = (bpstat_find_breakpoint (tp->control.stop_bpstat, breakpoint)
!= NULL);
do_cleanups (old_chain); do_cleanups (old_chain);
} }
else else
@ -1529,7 +1531,7 @@ finish_backward (struct symbol *function)
/* If in fact we hit the step-resume breakpoint (and not /* If in fact we hit the step-resume breakpoint (and not
some other breakpoint), then we're almost there -- some other breakpoint), then we're almost there --
we just need to back up by one more single-step. */ we just need to back up by one more single-step. */
tp->step_range_start = tp->step_range_end = 1; tp->control.step_range_start = tp->control.step_range_end = 1;
proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 1); proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 1);
} }
return; return;
@ -1556,7 +1558,8 @@ finish_forward (struct symbol *function, struct frame_info *frame)
old_chain = make_cleanup_delete_breakpoint (breakpoint); old_chain = make_cleanup_delete_breakpoint (breakpoint);
tp->proceed_to_finish = 1; /* We want stop_registers, please... */ /* We want stop_registers, please... */
tp->control.proceed_to_finish = 1;
cargs = xmalloc (sizeof (*cargs)); cargs = xmalloc (sizeof (*cargs));
cargs->breakpoint = breakpoint; cargs->breakpoint = breakpoint;
@ -1632,8 +1635,9 @@ finish_command (char *arg, int from_tty)
init_sal (&empty_sal); init_sal (&empty_sal);
set_step_info (frame, empty_sal); set_step_info (frame, empty_sal);
tp->step_range_start = tp->step_range_end = get_frame_pc (frame); tp->control.step_range_start = get_frame_pc (frame);
tp->step_over_calls = STEP_OVER_ALL; tp->control.step_range_end = tp->control.step_range_start;
tp->control.step_over_calls = STEP_OVER_ALL;
/* Print info on the selected frame, including level number but not /* Print info on the selected frame, including level number but not
source. */ source. */
@ -1699,13 +1703,13 @@ program_info (char *args, int from_tty)
error (_("Selected thread is running.")); error (_("Selected thread is running."));
tp = find_thread_ptid (ptid); tp = find_thread_ptid (ptid);
bs = tp->stop_bpstat; bs = tp->control.stop_bpstat;
stat = bpstat_num (&bs, &num); stat = bpstat_num (&bs, &num);
target_files_info (); target_files_info ();
printf_filtered (_("Program stopped at %s.\n"), printf_filtered (_("Program stopped at %s.\n"),
paddress (target_gdbarch, stop_pc)); paddress (target_gdbarch, stop_pc));
if (tp->stop_step) if (tp->control.stop_step)
printf_filtered (_("It stopped after being stepped.\n")); printf_filtered (_("It stopped after being stepped.\n"));
else if (stat != 0) else if (stat != 0)
{ {
@ -1723,11 +1727,11 @@ It stopped at a breakpoint that has since been deleted.\n"));
stat = bpstat_num (&bs, &num); stat = bpstat_num (&bs, &num);
} }
} }
else if (tp->stop_signal != TARGET_SIGNAL_0) else if (tp->suspend.stop_signal != TARGET_SIGNAL_0)
{ {
printf_filtered (_("It stopped with signal %s, %s.\n"), printf_filtered (_("It stopped with signal %s, %s.\n"),
target_signal_to_name (tp->stop_signal), target_signal_to_name (tp->suspend.stop_signal),
target_signal_to_string (tp->stop_signal)); target_signal_to_string (tp->suspend.stop_signal));
} }
if (!from_tty) if (!from_tty)
@ -2206,7 +2210,7 @@ proceed_after_attach_callback (struct thread_info *thread,
&& !is_exited (thread->ptid) && !is_exited (thread->ptid)
&& !is_executing (thread->ptid) && !is_executing (thread->ptid)
&& !thread->stop_requested && !thread->stop_requested
&& thread->stop_signal == TARGET_SIGNAL_0) && thread->suspend.stop_signal == TARGET_SIGNAL_0)
{ {
switch_to_thread (thread->ptid); switch_to_thread (thread->ptid);
clear_proceed_status (); clear_proceed_status ();
@ -2256,7 +2260,7 @@ attach_command_post_wait (char *args, int from_tty, int async_exec)
struct inferior *inferior; struct inferior *inferior;
inferior = current_inferior (); inferior = current_inferior ();
inferior->stop_soon = NO_STOP_QUIETLY; inferior->control.stop_soon = NO_STOP_QUIETLY;
/* If no exec file is yet known, try to determine it from the /* If no exec file is yet known, try to determine it from the
process itself. */ process itself. */
@ -2308,7 +2312,7 @@ attach_command_post_wait (char *args, int from_tty, int async_exec)
proceed_after_attach (inferior->pid); proceed_after_attach (inferior->pid);
else else
{ {
if (inferior_thread ()->stop_signal == TARGET_SIGNAL_0) if (inferior_thread ()->suspend.stop_signal == TARGET_SIGNAL_0)
{ {
clear_proceed_status (); clear_proceed_status ();
proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0); proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0);
@ -2447,7 +2451,7 @@ attach_command (char *args, int from_tty)
need a way for handle_inferior_event to reset the stop_signal need a way for handle_inferior_event to reset the stop_signal
variable after an attach, and this is what variable after an attach, and this is what
STOP_QUIETLY_NO_SIGSTOP is for. */ STOP_QUIETLY_NO_SIGSTOP is for. */
inferior->stop_soon = STOP_QUIETLY_NO_SIGSTOP; inferior->control.stop_soon = STOP_QUIETLY_NO_SIGSTOP;
if (target_can_async_p ()) if (target_can_async_p ())
{ {
@ -2510,7 +2514,7 @@ notice_new_inferior (ptid_t ptid, int leave_running, int from_tty)
that. */ that. */
target_stop (inferior_ptid); target_stop (inferior_ptid);
inferior->stop_soon = STOP_QUIETLY_REMOTE; inferior->control.stop_soon = STOP_QUIETLY_REMOTE;
/* Wait for stop before proceeding. */ /* Wait for stop before proceeding. */
if (target_can_async_p ()) if (target_can_async_p ())

@ -124,7 +124,7 @@ add_inferior_silent (int pid)
memset (inf, 0, sizeof (*inf)); memset (inf, 0, sizeof (*inf));
inf->pid = pid; inf->pid = pid;
inf->stop_soon = NO_STOP_QUIETLY; inf->control.stop_soon = NO_STOP_QUIETLY;
inf->num = ++highest_inferior_num; inf->num = ++highest_inferior_num;
inf->next = inferior_list; inf->next = inferior_list;

@ -43,37 +43,25 @@ struct terminal_info;
#include "progspace.h" #include "progspace.h"
/* Two structures are used to record inferior state. struct infcall_suspend_state;
struct infcall_control_state;
inferior_thread_state contains state about the program itself like its extern struct infcall_suspend_state *save_infcall_suspend_state (void);
registers and any signal it received when it last stopped. extern struct infcall_control_state *save_infcall_control_state (void);
This state must be restored regardless of how the inferior function call
ends (either successfully, or after it hits a breakpoint or signal)
if the program is to properly continue where it left off.
inferior_status contains state regarding gdb's control of the inferior extern void restore_infcall_suspend_state (struct infcall_suspend_state *);
itself like stepping control. It also contains session state like the extern void restore_infcall_control_state (struct infcall_control_state *);
user's currently selected frame.
Call these routines around hand called functions, including function calls extern struct cleanup *make_cleanup_restore_infcall_suspend_state
in conditional breakpoints for example. */ (struct infcall_suspend_state *);
extern struct cleanup *make_cleanup_restore_infcall_control_state
(struct infcall_control_state *);
struct inferior_thread_state; extern void discard_infcall_suspend_state (struct infcall_suspend_state *);
struct inferior_status; extern void discard_infcall_control_state (struct infcall_control_state *);
extern struct inferior_thread_state *save_inferior_thread_state (void); extern struct regcache *
extern struct inferior_status *save_inferior_status (void); get_infcall_suspend_state_regcache (struct infcall_suspend_state *);
extern void restore_inferior_thread_state (struct inferior_thread_state *);
extern void restore_inferior_status (struct inferior_status *);
extern struct cleanup *make_cleanup_restore_inferior_thread_state (struct inferior_thread_state *);
extern struct cleanup *make_cleanup_restore_inferior_status (struct inferior_status *);
extern void discard_inferior_thread_state (struct inferior_thread_state *);
extern void discard_inferior_status (struct inferior_status *);
extern struct regcache *get_inferior_thread_state_regcache (struct inferior_thread_state *);
/* The -1 ptid, often used to indicate either an error condition /* The -1 ptid, often used to indicate either an error condition
or a "don't care" condition, i.e, "run all threads." */ or a "don't care" condition, i.e, "run all threads." */
@ -405,6 +393,24 @@ void displaced_step_dump_bytes (struct ui_file *file,
struct private_inferior; struct private_inferior;
/* Inferior process specific part of `struct infcall_control_state'.
Inferior thread counterpart is `struct thread_control_state'. */
struct inferior_control_state
{
/* See the definition of stop_kind above. */
enum stop_kind stop_soon;
};
/* Inferior process specific part of `struct infcall_suspend_state'.
Inferior thread counterpart is `struct thread_suspend_state'. */
struct inferior_suspend_state
{
};
/* GDB represents the state of each program execution with an object /* GDB represents the state of each program execution with an object
called an inferior. An inferior typically corresponds to a process called an inferior. An inferior typically corresponds to a process
but is more general and applies also to targets that do not have a but is more general and applies also to targets that do not have a
@ -427,6 +433,14 @@ struct inferior
the ptid_t.pid member of threads of this inferior. */ the ptid_t.pid member of threads of this inferior. */
int pid; int pid;
/* State of GDB control of inferior process execution.
See `struct inferior_control_state'. */
struct inferior_control_state control;
/* State of inferior process to restore after GDB is done with an inferior
call. See `struct inferior_suspend_state'. */
struct inferior_suspend_state suspend;
/* True if this was an auto-created inferior, e.g. created from /* True if this was an auto-created inferior, e.g. created from
following a fork; false, if this inferior was manually added by following a fork; false, if this inferior was manually added by
the user, and we should not attempt to prune it the user, and we should not attempt to prune it
@ -458,9 +472,6 @@ struct inferior
in format described in environ.h. */ in format described in environ.h. */
struct gdb_environ *environment; struct gdb_environ *environment;
/* See the definition of stop_kind above. */
enum stop_kind stop_soon;
/* Nonzero if this child process was attached rather than /* Nonzero if this child process was attached rather than
forked. */ forked. */
int attach_flag; int attach_flag;

File diff suppressed because it is too large Load Diff

@ -1648,7 +1648,7 @@ get_pending_status (struct lwp_info *lp, int *status)
{ {
struct thread_info *tp = find_thread_ptid (lp->ptid); struct thread_info *tp = find_thread_ptid (lp->ptid);
signo = tp->stop_signal; signo = tp->suspend.stop_signal;
} }
else if (!non_stop) else if (!non_stop)
{ {
@ -1661,7 +1661,7 @@ get_pending_status (struct lwp_info *lp, int *status)
{ {
struct thread_info *tp = find_thread_ptid (lp->ptid); struct thread_info *tp = find_thread_ptid (lp->ptid);
signo = tp->stop_signal; signo = tp->suspend.stop_signal;
} }
} }
@ -1917,7 +1917,7 @@ linux_nat_resume (struct target_ops *ops,
/* Defer to common code if we're gaining control of the /* Defer to common code if we're gaining control of the
inferior. */ inferior. */
if (inf->stop_soon == NO_STOP_QUIETLY if (inf->control.stop_soon == NO_STOP_QUIETLY
&& signal_stop_state (saved_signo) == 0 && signal_stop_state (saved_signo) == 0
&& signal_print_state (saved_signo) == 0 && signal_print_state (saved_signo) == 0
&& signal_pass_state (saved_signo) == 1) && signal_pass_state (saved_signo) == 1)
@ -3580,7 +3580,7 @@ retry:
skip the signal handler, or, if we're gaining control of the skip the signal handler, or, if we're gaining control of the
inferior. */ inferior. */
if (!lp->step if (!lp->step
&& inf->stop_soon == NO_STOP_QUIETLY && inf->control.stop_soon == NO_STOP_QUIETLY
&& signal_stop_state (signo) == 0 && signal_stop_state (signo) == 0
&& signal_print_state (signo) == 0 && signal_print_state (signo) == 0
&& signal_pass_state (signo) == 1) && signal_pass_state (signo) == 1)
@ -4162,7 +4162,7 @@ linux_nat_find_memory_regions (find_memory_region_ftype func, void *obfd)
static int static int
find_signalled_thread (struct thread_info *info, void *data) find_signalled_thread (struct thread_info *info, void *data)
{ {
if (info->stop_signal != TARGET_SIGNAL_0 if (info->suspend.stop_signal != TARGET_SIGNAL_0
&& ptid_get_pid (info->ptid) == ptid_get_pid (inferior_ptid)) && ptid_get_pid (info->ptid) == ptid_get_pid (inferior_ptid))
return 1; return 1;
@ -4176,7 +4176,7 @@ find_stop_signal (void)
iterate_over_threads (find_signalled_thread, NULL); iterate_over_threads (find_signalled_thread, NULL);
if (info) if (info)
return info->stop_signal; return info->suspend.stop_signal;
else else
return TARGET_SIGNAL_0; return TARGET_SIGNAL_0;
} }

@ -434,7 +434,7 @@ mi_about_to_proceed (void)
{ {
struct thread_info *tp = inferior_thread (); struct thread_info *tp = inferior_thread ();
if (tp->in_infcall) if (tp->control.in_infcall)
return; return;
} }
@ -477,7 +477,7 @@ mi_on_resume (ptid_t ptid)
tp = find_thread_ptid (ptid); tp = find_thread_ptid (ptid);
/* Suppress output while calling an inferior function. */ /* Suppress output while calling an inferior function. */
if (tp->in_infcall) if (tp->control.in_infcall)
return; return;
/* To cater for older frontends, emit ^running, but do it only once /* To cater for older frontends, emit ^running, but do it only once

@ -2558,7 +2558,7 @@ heuristic_proc_start (struct gdbarch *gdbarch, CORE_ADDR pc)
stop_soon, but with this test, at least we stop_soon, but with this test, at least we
don't print out warnings for every child forked (eg, on don't print out warnings for every child forked (eg, on
decstation). 22apr93 rich@cygnus.com. */ decstation). 22apr93 rich@cygnus.com. */
if (inf->stop_soon == NO_STOP_QUIETLY) if (inf->control.stop_soon == NO_STOP_QUIETLY)
{ {
static int blurb_printed = 0; static int blurb_printed = 0;

@ -5690,7 +5690,7 @@ procfs_corefile_thread_callback (procinfo *pi, procinfo *thread, void *data)
static int static int
find_signalled_thread (struct thread_info *info, void *data) find_signalled_thread (struct thread_info *info, void *data)
{ {
if (info->stop_signal != TARGET_SIGNAL_0 if (info->suspend.stop_signal != TARGET_SIGNAL_0
&& ptid_get_pid (info->ptid) == ptid_get_pid (inferior_ptid)) && ptid_get_pid (info->ptid) == ptid_get_pid (inferior_ptid))
return 1; return 1;
@ -5704,7 +5704,7 @@ find_stop_signal (void)
iterate_over_threads (find_signalled_thread, NULL); iterate_over_threads (find_signalled_thread, NULL);
if (info) if (info)
return info->stop_signal; return info->suspend.stop_signal;
else else
return TARGET_SIGNAL_0; return TARGET_SIGNAL_0;
} }

@ -469,15 +469,15 @@ irix_solib_create_inferior_hook (int from_tty)
clear_proceed_status (); clear_proceed_status ();
inf->stop_soon = STOP_QUIETLY; inf->control.stop_soon = STOP_QUIETLY;
tp->stop_signal = TARGET_SIGNAL_0; tp->suspend.stop_signal = TARGET_SIGNAL_0;
do do
{ {
target_resume (pid_to_ptid (-1), 0, tp->stop_signal); target_resume (pid_to_ptid (-1), 0, tp->suspend.stop_signal);
wait_for_inferior (0); wait_for_inferior (0);
} }
while (tp->stop_signal != TARGET_SIGNAL_TRAP); while (tp->suspend.stop_signal != TARGET_SIGNAL_TRAP);
/* We are now either at the "mapping complete" breakpoint (or somewhere /* We are now either at the "mapping complete" breakpoint (or somewhere
else, a condition we aren't prepared to deal with anyway), so adjust else, a condition we aren't prepared to deal with anyway), so adjust
@ -496,7 +496,7 @@ irix_solib_create_inferior_hook (int from_tty)
Delaying the resetting of stop_soon until after symbol loading Delaying the resetting of stop_soon until after symbol loading
suppresses the warning. */ suppresses the warning. */
solib_add ((char *) 0, 0, (struct target_ops *) 0, auto_solib_add); solib_add ((char *) 0, 0, (struct target_ops *) 0, auto_solib_add);
inf->stop_soon = NO_STOP_QUIETLY; inf->control.stop_soon = NO_STOP_QUIETLY;
} }
/* LOCAL FUNCTION /* LOCAL FUNCTION

@ -340,14 +340,14 @@ osf_solib_create_inferior_hook (int from_tty)
tp = inferior_thread (); tp = inferior_thread ();
clear_proceed_status (); clear_proceed_status ();
inf->stop_soon = STOP_QUIETLY; inf->control.stop_soon = STOP_QUIETLY;
tp->stop_signal = TARGET_SIGNAL_0; tp->suspend.stop_signal = TARGET_SIGNAL_0;
do do
{ {
target_resume (minus_one_ptid, 0, tp->stop_signal); target_resume (minus_one_ptid, 0, tp->suspend.stop_signal);
wait_for_inferior (0); wait_for_inferior (0);
} }
while (tp->stop_signal != TARGET_SIGNAL_TRAP); while (tp->suspend.stop_signal != TARGET_SIGNAL_TRAP);
/* solib_add will call reinit_frame_cache. /* solib_add will call reinit_frame_cache.
But we are stopped in the runtime loader and we do not have symbols But we are stopped in the runtime loader and we do not have symbols
@ -356,7 +356,7 @@ osf_solib_create_inferior_hook (int from_tty)
Delaying the resetting of stop_soon until after symbol loading Delaying the resetting of stop_soon until after symbol loading
suppresses the warning. */ suppresses the warning. */
solib_add ((char *) 0, 0, (struct target_ops *) 0, auto_solib_add); solib_add ((char *) 0, 0, (struct target_ops *) 0, auto_solib_add);
inf->stop_soon = NO_STOP_QUIETLY; inf->control.stop_soon = NO_STOP_QUIETLY;
} }
/* target_so_ops callback. Do additional symbol handling, lookup, etc. after /* target_so_ops callback. Do additional symbol handling, lookup, etc. after

@ -85,13 +85,13 @@ spu_skip_standalone_loader (void)
this will step past the first instruction of the stand-alone SPE this will step past the first instruction of the stand-alone SPE
executable loader, but we don't care about that. */ executable loader, but we don't care about that. */
inferior_thread ()->in_infcall = 1; /* Suppress MI messages. */ inferior_thread ()->control.in_infcall = 1; /* Suppress MI messages. */
target_resume (inferior_ptid, 1, TARGET_SIGNAL_0); target_resume (inferior_ptid, 1, TARGET_SIGNAL_0);
target_wait (minus_one_ptid, &ws, 0); target_wait (minus_one_ptid, &ws, 0);
set_executing (minus_one_ptid, 0); set_executing (minus_one_ptid, 0);
inferior_thread ()->in_infcall = 0; inferior_thread ()->control.in_infcall = 0;
} }
} }

@ -772,15 +772,15 @@ sunos_solib_create_inferior_hook (int from_tty)
clear_proceed_status (); clear_proceed_status ();
inf->stop_soon = STOP_QUIETLY; inf->control.stop_soon = STOP_QUIETLY;
tp->stop_signal = TARGET_SIGNAL_0; tp->suspend.stop_signal = TARGET_SIGNAL_0;
do do
{ {
target_resume (pid_to_ptid (-1), 0, tp->stop_signal); target_resume (pid_to_ptid (-1), 0, tp->suspend.stop_signal);
wait_for_inferior (0); wait_for_inferior (0);
} }
while (tp->stop_signal != TARGET_SIGNAL_TRAP); while (tp->suspend.stop_signal != TARGET_SIGNAL_TRAP);
inf->stop_soon = NO_STOP_QUIETLY; inf->control.stop_soon = NO_STOP_QUIETLY;
/* We are now either at the "mapping complete" breakpoint (or somewhere /* We are now either at the "mapping complete" breakpoint (or somewhere
else, a condition we aren't prepared to deal with anyway), so adjust else, a condition we aren't prepared to deal with anyway), so adjust

@ -2188,15 +2188,15 @@ svr4_solib_create_inferior_hook (int from_tty)
tp = inferior_thread (); tp = inferior_thread ();
clear_proceed_status (); clear_proceed_status ();
inf->stop_soon = STOP_QUIETLY; inf->control.stop_soon = STOP_QUIETLY;
tp->stop_signal = TARGET_SIGNAL_0; tp->suspend.stop_signal = TARGET_SIGNAL_0;
do do
{ {
target_resume (pid_to_ptid (-1), 0, tp->stop_signal); target_resume (pid_to_ptid (-1), 0, tp->suspend.stop_signal);
wait_for_inferior (0); wait_for_inferior (0);
} }
while (tp->stop_signal != TARGET_SIGNAL_TRAP); while (tp->suspend.stop_signal != TARGET_SIGNAL_TRAP);
inf->stop_soon = NO_STOP_QUIETLY; inf->control.stop_soon = NO_STOP_QUIETLY;
#endif /* defined(_SCO_DS) */ #endif /* defined(_SCO_DS) */
} }

@ -103,7 +103,7 @@ clear_thread_inferior_resources (struct thread_info *tp)
tp->step_resume_breakpoint = NULL; tp->step_resume_breakpoint = NULL;
} }
bpstat_clear (&tp->stop_bpstat); bpstat_clear (&tp->control.stop_bpstat);
discard_all_intermediate_continuations_thread (tp); discard_all_intermediate_continuations_thread (tp);
discard_all_continuations_thread (tp); discard_all_continuations_thread (tp);

@ -1704,20 +1704,20 @@ do_initial_windows_stuff (struct target_ops *ops, DWORD pid, int attaching)
target_terminal_inferior (); target_terminal_inferior ();
windows_initialization_done = 0; windows_initialization_done = 0;
inf->stop_soon = STOP_QUIETLY; inf->control.stop_soon = STOP_QUIETLY;
while (1) while (1)
{ {
stop_after_trap = 1; stop_after_trap = 1;
wait_for_inferior (0); wait_for_inferior (0);
tp = inferior_thread (); tp = inferior_thread ();
if (tp->stop_signal != TARGET_SIGNAL_TRAP) if (tp->suspend.stop_signal != TARGET_SIGNAL_TRAP)
resume (0, tp->stop_signal); resume (0, tp->suspend.stop_signal);
else else
break; break;
} }
windows_initialization_done = 1; windows_initialization_done = 1;
inf->stop_soon = NO_STOP_QUIETLY; inf->control.stop_soon = NO_STOP_QUIETLY;
stop_after_trap = 0; stop_after_trap = 0;
return; return;
} }