Native targets: Add inf-child.c:inf_child_mourn_inferior and use it.

Most ports do the same thing in the tail of their mourn routine - call
generic_mourn_inferior+inf_child_maybe_unpush_target.

This factors that out to a convenience function.  More could be done,
but this converts only the really obvious ones.

Tested by building GDB on x86_64 Fedora 20, mingw32 and djgpp.  The
rest is untested, but I think a patch can't get more obvious.

gdb/
2014-05-21  Pedro Alves  <palves@redhat.com>

	* inf-child.c (inf_child_mourn_inferior): New function.
	* inf-child.h (inf_child_mourn_inferior): New declaration.
	* darwin-nat.c (darwin_mourn_inferior): Use
	inf_child_mourn_inferior.
	* gnu-nat.c (gnu_mourn_inferior): Likewise.
	* inf-ptrace.c (inf_ptrace_mourn_inferior): Likewise.
	* inf-ttrace.c (inf_ttrace_mourn_inferior): Likewise.
	* nto-procfs.c (procfs_mourn_inferior): Likewise.
	* windows-nat.c (windows_mourn_inferior): Likewise.
This commit is contained in:
Pedro Alves 2014-05-21 22:28:23 +01:00
parent ff604a6747
commit c1ee2fb3cb
9 changed files with 29 additions and 13 deletions

View file

@ -1,3 +1,15 @@
2014-05-21 Pedro Alves <palves@redhat.com>
* inf-child.c (inf_child_mourn_inferior): New function.
* inf-child.h (inf_child_mourn_inferior): New declaration.
* darwin-nat.c (darwin_mourn_inferior): Use
inf_child_mourn_inferior.
* gnu-nat.c (gnu_mourn_inferior): Likewise.
* inf-ptrace.c (inf_ptrace_mourn_inferior): Likewise.
* inf-ttrace.c (inf_ttrace_mourn_inferior): Likewise.
* nto-procfs.c (procfs_mourn_inferior): Likewise.
* windows-nat.c (windows_mourn_inferior): Likewise.
2014-05-21 Doug Evans <xdje42@gmail.com>
* scm-breakpoint.c (breakpoint_functions): Fix typo.

View file

@ -1268,8 +1268,7 @@ darwin_mourn_inferior (struct target_ops *ops)
xfree (inf->private);
inf->private = NULL;
generic_mourn_inferior ();
inf_child_maybe_unpush_target (ops);
inf_child_mourn_inferior (ops);
}
static void

View file

@ -2080,8 +2080,7 @@ gnu_mourn_inferior (struct target_ops *ops)
{
inf_debug (gnu_current_inf, "rip");
inf_detach (gnu_current_inf);
generic_mourn_inferior ();
inf_child_maybe_unpush_target (ops);
inf_child_mourn_inferior (ops);
}

View file

@ -159,6 +159,13 @@ inf_child_close (struct target_ops *target)
inf_child_explicitly_opened = 0;
}
void
inf_child_mourn_inferior (struct target_ops *ops)
{
generic_mourn_inferior ();
inf_child_maybe_unpush_target (ops);
}
/* See inf-child.h. */
void

View file

@ -36,6 +36,10 @@ extern void store_waitstatus (struct target_waitstatus *, int);
extern void inf_child_open_target (struct target_ops *target,
char *arg, int from_tty);
/* To be called by the native target's to_mourn_inferior routine. */
extern void inf_child_mourn_inferior (struct target_ops *ops);
/* Unpush the target if it wasn't explicitly open with "target native"
and there are no live inferiors left. Note: if calling this as a
result of a mourn or detach, the current inferior shall already

View file

@ -174,9 +174,7 @@ inf_ptrace_mourn_inferior (struct target_ops *ops)
only report its exit status to its original parent. */
waitpid (ptid_get_pid (inferior_ptid), &status, 0);
generic_mourn_inferior ();
inf_child_maybe_unpush_target (ops);
inf_child_mourn_inferior (ops);
}
/* Attach to the process specified by ARGS. If FROM_TTY is non-zero,

View file

@ -696,8 +696,7 @@ inf_ttrace_mourn_inferior (struct target_ops *ops)
}
inf_ttrace_page_dict.count = 0;
generic_mourn_inferior ();
inf_child_maybe_unpush_target (ops);
inf_child_mourn_inferior (ops);
}
/* Assuming we just attached the debugger to a new inferior, create

View file

@ -1027,8 +1027,7 @@ procfs_mourn_inferior (struct target_ops *ops)
}
inferior_ptid = null_ptid;
init_thread_list ();
generic_mourn_inferior ();
inf_child_maybe_unpush_target (ops);
inf_child_mourn_inferior (ops);
}
/* This function breaks up an argument string into an argument

View file

@ -2368,8 +2368,7 @@ windows_mourn_inferior (struct target_ops *ops)
CHECK (CloseHandle (current_process_handle));
open_process_used = 0;
}
generic_mourn_inferior ();
inf_child_maybe_unpush_target (ops);
inf_child_mourn_inferior (ops);
}
/* Send a SIGINT to the process group. This acts just like the user typed a