+
+ * continuations.h (continuation_ftype): Add `err' parameter.
+ Document parameters.
+ (do_all_continuations, do_all_continuations_thread)
+ (do_all_intermediate_continuations)
+ (do_all_intermediate_continuations_thread)
+ (do_all_inferior_continuations): Add `err' parameter.
+ * continuations.c (do_my_continuations_1, do_my_continuations)
+ (do_all_inferior_continuations, do_all_continuations_ptid)
+ (do_all_continuations_thread_callback)
+ (do_all_continuations_thread, do_all_continuations)
+ (do_all_intermediate_continuations_thread_callback)
+ (do_all_intermediate_continuations_thread)
+ (do_all_intermediate_continuations): Add `err' parameter, and pass
+ it down all the way to the continuations proper.
+ * inf-loop.c (inferior_event_handler): If fetching an inferior
+ event throws an error, don't pop the target, and still call the
+ continuations, but with `err' set. Adjust all other continuation
+ calls.
+ * breakpoint.c (until_break_command_continuation): Add `err'
+ parameter.
+ * infcmd.c (step_1_continuation): Add `err' parameter. Don't
+ issue another step if `err' is set.
+ (struct until_next_continuation_args): New.
+ (until_next_continuation): Add `err' parameter. Adjust.
+ (until_next_command): Adjust.
+ (struct finish_command_continuation_args): Add `thread' field.
+ (finish_command_continuation): Add `err' parameter. Handle it.
+ (finish_forward): Adjust.
+ (attach_command_continuation): Add `err' parameter. Handle it.
+ * infrun.c (infrun_thread_stop_requested_callback): Adjust to
+ cancel the continuations.
+ * interps.c (interp_set): Adjust to cancel the continuations.
+ * thread.c (clear_thread_inferior_resources): Adjust to cancel the
+ continuations rather than discarding.
+ (free_thread): Don't clear thread inferior resources here.
+ (delete_thread_1): Do it here instead. And do it before removing
+ the thread from the threads list. Tag the thread as exited before
+ clearing thread inferior resources.
+
+
+ * infcall.c (call_function_by_hand): Rephrase error message.
+
+
+ * defs.h (struct thread_info, struct inferior): Delete forward
+ declarations.
+ * breakpoint.h (struct thread_info): New forward declaration.
+ * observer.sh (struct inferior): New forward declaration.
+ * python/python-internal.h (struct inferior): New forward
+ declaration.
+
+
+ * defs.h (struct continuation, continuation_ftype)
+ (continuation_free_arg_ftype, add_continuation)
+ (do_all_continuations, do_all_continuations_thread)
+ (discard_all_continuations, discard_all_continuations_thread)
+ (add_intermediate_continuation, do_all_intermediate_continuations)
+ (do_all_intermediate_continuations_thread)
+ (discard_all_intermediate_continuations)
+ (discard_all_intermediate_continuations_thread)
+ (add_inferior_continuation, do_all_inferior_continuations)
+ (discard_all_inferior_continuations): Move to ...
+ * continuations.h: ... this new file.
+ * breakpoint.c, continuations.c, event-top.c, inf-loop.c,
+ infcmd.c, inferior.c, infrun.c, interps.c: Include
+ continuations.h.
+
+
+ Fix PR 10970, PR 12702.
+ * linux-nat.c (linux_lwp_is_zombie): New function.
+ (wait_lwp): Initialize status. New variable prev_mask. Block signals.
+ Check for linux_lwp_is_zombie. Use WNOHANG and sigsuspend.
+
+
+ * defs.h (continuation_ftype, continuation_free_arg_ftype): New
+ typedefs.
+ (add_continuation, add_intermediate_continuation)
+ (add_inferior_continuation): Use them.
+ * continuations.c (struct continuation): Use them.
+ (make_continuation_ftype): Delete.
+ (make_continuation, add_inferior_continuation, add_continuation)
+ (add_intermediate_continuation): Use continuation_ftype and
+ continuation_free_arg_ftype. Rename parameters to shorter names.
+
+
+ * continuations.c (make_continuation): Make it return void.
+ (do_my_continuations): Rename to ...
+ (do_my_continuations_1): ... this. Remove old_chain parameter and
+ adjust.
+ (do_my_continuations): New.
+ (discard_my_continuations): Rename to ...
+ (discard_my_continuations_1): ... this. Remove old_chain
+ parameter and adjust.
+ (discard_my_continuations): New.
+ (add_inferior_continuation): Simplify.
+ (do_all_inferior_continuations): Reimplement on top
+ do_my_continuations.
+ (discard_all_inferior_continuations): Simplify.
+ (add_continuation): Simplify.
+ (do_all_continuations_ptid): Simplify.
+ (discard_all_continuations_thread_callback): Simplify.
+ (add_intermediate_continuation): Simplify.
+ (discard_all_intermediate_continuations_thread_callback):
+ Simplify.
+
+
+ * utils.c (struct continuation, add_continuation)
+ (add_inferior_continuation)
+ (do_all_inferior_continuations, discard_all_inferior_continuations)
+ (restore_thread_cleanup, do_all_continuations_ptid)
+ (do_all_continuations_thread_callback)
+ (do_all_continuations_thread, do_all_continuations)
+ (discard_all_continuations_thread_callback)
+ (discard_all_continuations_thread, discard_all_continuations)
+ (add_intermediate_continuation)
+ (do_all_intermediate_continuations_thread_callback)
+ (do_all_intermediate_continuations_thread)
+ (do_all_intermediate_continuations)
+ (discard_all_intermediate_continuations_thread_callback)
+ (discard_all_intermediate_continuations_thread)
+ (discard_all_intermediate_continuations): Move to ...
+ * continuations.c: ... this new file, and adjust to no longer
+ implement continuations on top of cleanups.
+ * Makefile.in (SFILES): Add continuations.c.
+ (COMMON_OBS): Add continuations.o.
+
+
+ * inferior.h (enum exec_direction_kind): Delete EXEC_ERROR.
+ * infrun.c (show_exec_direction_func): Don't handle EXEC_ERROR.
+ Internal error on invalid values.
+ * reverse.c: Don't handle EXEC_ERROR.
+ * mi/mi-main.c: Don't handle EXEC_ERROR.
+
+
+ * record.c: Include event-loop.h, inf-loop.h.
+ (record_beneath_to_async): New global.
+ (tmp_to_async): New global.
+ (record_async_inferior_event_token): New global.
+ (record_open_1): Don't error out if async is enabled.
+ (record_open): Handle to_async. Create an async event source in
+ the event loop.
+ (record_close): Delete the async event source.
+ (record_resumed): New global.
+ (record_execution_dir): New global.
+ (record_resume, record_core_resume): Set them. Register the
+ target on the event loop.
+ (record_wait): Rename to ...
+ (record_wait_1): ... this. Add more debug output. Handle
+ TARGET_WNOHANG, and the target beneath returning
+ TARGET_WAITKIND_IGNORE.
+ (record_wait): Reimplement on top of record_wait_1.
+ (record_async_mask_value): New global.
+ (record_async, record_async_mask, record_can_async_p)
+ (record_is_async_p, record_execution_direction): New functions.
+ (init_record_ops, init_record_core_ops): Install new methods.
+ * infrun.c (fetch_inferior_event): Temporarily switch the global
+ execution direction to the direction the target was going.
+ (execution_direction): Change type to int.
+ * target.c (default_execution_direction): New function.
+ (update_current_target): Inherit and de_fault
+ to_execution_direction.
+ * target.h (struct target_ops) <to_execution_direction>: New
+ field.
+ (target_execution_direction): New macro.
+ * inferior.h (execution_direction): Change type to int.
+
+
+ * infcall.c (call_function_by_hand): Don't allow calling functions
+ in reverse execution mode.
+
+
+ * infcmd.c (finish_command): Allow async finish in reverse.
+
+
+ * gdb_thread_db.h: Delete. Move to ...
+ * common/gdb_thread_db.h: ... here.
+
+
+ * infcmd.c (finish_backward): Set a step-resume breakpoint at the
+ function's entry point instead of a manually managed momentary
+ breakpoint, and only ever issue one proceed call.
+ * infrun.c (handle_inferior_event) <BPSTAT_WHAT_STEP_RESUME>: If
+ doing a reverse-finish, switch to stepi mode, to do another step.
+ (insert_step_resume_breakpoint_at_sal): Make public.
+ (normal_stop): No need to save function value return registers if
+ going reverse.
+ * inferior.h (insert_step_resume_breakpoint_at_sal): Declare.
+
+
+ * breakpoint.h (enum bptype) <bp_hp_step_resume>: New.
+ (enum bpstat_what_main_action): Move BPSTAT_WHAT_STEP_RESUME
+ before BPSTAT_WHAT_STOP_SILENT. Add BPSTAT_WHAT_HP_STEP_RESUME
+ at the end.
+ * breakpoint.c (update_breakpoints_after_exec): Also delete hp
+ step-resume breakpoints.
+ (print_it_typical): Handle bp_hp_step_resume.
+ (bpstat_what): Ditto.
+ (bptype_string): Ditto.
+ (print_one_breakpoint_location): Ditto.
+ (allocate_bp_location): Ditto.
+ (mention): Ditto.
+ (breakpoint_re_set_one): Ditto.
+ * infrun.c (handle_inferior_event): Adjust. Split
+ BPSTAT_WHAT_STEP_RESUME handling in BPSTAT_WHAT_STEP_RESUME and
+ BPSTAT_WHAT_HP_STEP_RESUME.
+ (insert_step_resume_breakpoint_at_sal): Rename to ...
+ (insert_step_resume_breakpoint_at_sal_1): ... this. Add bptype
+ parameter. Handle it.
+ (insert_step_resume_breakpoint_at_sal): Reimplement on top of
+ insert_step_resume_breakpoint_at_sal_1.
+ (insert_step_resume_breakpoint_at_frame): Rename to ...
+ (insert_hp_step_resume_breakpoint_at_frame): ... this. Adjust to
+ set a high-priority step-resume breakpoint.
+ (insert_step_resume_breakpoint_at_frame): Adjust comment.
+ (insert_step_resume_breakpoint_at_caller): Ditto.
+
+
+ * breakpoint.c (iterate_over_related_breakpoints): New.
+ (do_map_delete_breakpoint): New.
+ (delete_command): Pass do_map_delete_breakpoint to
+ map_breakpoint_numbers.
+ (do_disable_breakpoint): New.
+ (do_map_disable_breakpoint): Iterate over the breakpoint's related
+ breakpoints.
+ (do_enable_breakpoint): Rename to ...
+ (enable_breakpoint_disp): ... this.
+ (enable_breakpoint): Adjust.
+ (do_enable_breakpoint): New.
+ (enable_once_breakpoint): Delete.
+ (do_map_enable_breakpoint): New.
+ (do_map_enable_once_breakpoint): New.
+ (enable_once_command, enable_delete_command)
+ (delete_trace_command): Iterate over the breakpoint's related
+ breakpoints.
+
* alpha-tdep.c (alpha_cannot_fetch_register): Don't return true