PR gdb/11327, PR gdb/11328, PR breakpoints/11368:

* infrun.c (handle_inferior_event): Change initialization of
	stop_stack_dummy.
	(handle_inferior_event): Change assignment to stop_stack_dummy.
	(normal_stop): Update use of stop_stack_dummy.
	(struct inferior_status) <stop_stack_dummy>: Change type.
	* inferior.h (stop_stack_dummy): Update.
	* infcmd.c (stop_stack_dummy): Change type.
	* infcall.c (cleanup_delete_std_terminate_breakpoint): New
	function.
	(call_function_by_hand): Call set_std_terminate_breakpoint.
	Rewrite std::terminate handling.
	* breakpoint.h (enum bptype) <bp_std_terminate,
	bp_std_terminate_master>: New.
	(enum stop_stack_kind): New.
	(struct bpstat_what) <call_dummy>: Change type.
	(set_std_terminate_breakpoint, delete_std_terminate_breakpoint):
	Declare.
	* breakpoint.c (create_std_terminate_master_breakpoint): New
	function.
	(update_breakpoints_after_exec): Handle bp_std_terminate_master.
	Call create_std_terminate_master_breakpoint.
	(print_it_typical): Handle new breakpoint kinds.
	(bpstat_stop_status): Handle bp_std_terminate_master.
	(bpstat_what): Correctly set call_dummy field.  Handle
	bp_std_terminate_master and bp_std_terminate.
	(print_one_breakpoint_location): Update.
	(allocate_bp_location): Update.
	(set_std_terminate_breakpoint): New function.
	(delete_std_terminate_breakpoint): Likewise.
	(create_thread_event_breakpoint): Update.
	(delete_command): Update.
	(breakpoint_re_set_one): Update.
	(breakpoint_re_set): Call create_std_terminate_master_breakpoint.
This commit is contained in:
Tom Tromey
2010-03-25 20:48:53 +00:00
parent 82ccf5a577
commit aa7d318d60
7 changed files with 191 additions and 52 deletions

View File

@ -2904,7 +2904,7 @@ handle_inferior_event (struct execution_control_state *ecs)
target_last_waitstatus = ecs->ws;
/* Always clear state belonging to the previous time we stopped. */
stop_stack_dummy = 0;
stop_stack_dummy = STOP_NONE;
/* If it's a new process, add it to the thread database */
@ -3970,7 +3970,7 @@ process_event_stop_test:
if (what.call_dummy)
{
stop_stack_dummy = 1;
stop_stack_dummy = what.call_dummy;
}
switch (what.main_action)
@ -5460,7 +5460,7 @@ Further execution is probably impossible.\n"));
stop_registers = regcache_dup (get_current_regcache ());
}
if (stop_stack_dummy)
if (stop_stack_dummy == STOP_STACK_DUMMY)
{
/* Pop the empty frame that contains the stack dummy.
This also restores inferior state prior to the call
@ -6038,7 +6038,7 @@ struct inferior_status
{
bpstat stop_bpstat;
int stop_step;
int stop_stack_dummy;
enum stop_stack_kind stop_stack_dummy;
int stopped_by_random_signal;
int stepping_over_breakpoint;
CORE_ADDR step_range_start;