This changes exec_close so it doesn't close inferiors from other
targets.
2014-07-29 Tom Tromey <tromey@redhat.com>
* target.h (target_stack_decref_cleanup): Declare.
* exec.c (exec_xclose_1): Skip program spaces from other targets.
* target.c (target_stack_decref_cleanup): New function.
{
struct program_space *ss;
struct cleanup *old_chain;
+ struct target_stack *tstack = target_stack_incref ();
+
+ old_chain = make_cleanup (target_stack_decref_cleanup, tstack);
+ save_current_program_space ();
- old_chain = save_current_program_space ();
ALL_PSPACES (ss)
{
+ /* Skip program spaces that are associated with some other
+ target. */
+ if (ss->target_stack != tstack)
+ continue;
+
set_current_program_space (ss);
clear_section_table (current_target_sections);
exec_close ();
/* See target.h. */
+void
+target_stack_decref_cleanup (void *arg)
+{
+ target_stack_decref (arg);
+}
+
+/* See target.h. */
+
void
target_stack_set_current (struct target_stack *tstack)
{
extern void target_stack_decref (struct target_stack *);
+/* A wrapper for target_stack_decref suitable for use as a cleanup. */
+
+extern void target_stack_decref_cleanup (void *arg);
+
/* Set target_stack and current_target from TSTACK. */
extern void target_stack_set_current (struct target_stack *tstack);