[04/12] gdb: add inferior_pre_detach observable
Commit Message
Add an observable notified in target_detach just before calling the
detach method on the inferior's target stack. This allows observer to
do some work on the inferior while it's still ptrace-attached, in the
case of a native Linux inferior. Specifically, the amd-dbgapi target
will need it in order to call amd_dbgapi_process_detach before the
process gets ptrace-detached.
Change-Id: I28b6065e251012a4c2db8a600fe13ba31671e3c9
---
gdb/observable.c | 1 +
gdb/observable.h | 3 +++
gdb/target.c | 2 ++
3 files changed, 6 insertions(+)
Comments
Simon Marchi via Gdb-patches <gdb-patches@sourceware.org> writes:
> Add an observable notified in target_detach just before calling the
> detach method on the inferior's target stack. This allows observer to
> do some work on the inferior while it's still ptrace-attached, in the
> case of a native Linux inferior. Specifically, the amd-dbgapi target
> will need it in order to call amd_dbgapi_process_detach before the
> process gets ptrace-detached.
LGTM.
Thanks,
Andrew
>
> Change-Id: I28b6065e251012a4c2db8a600fe13ba31671e3c9
> ---
> gdb/observable.c | 1 +
> gdb/observable.h | 3 +++
> gdb/target.c | 2 ++
> 3 files changed, 6 insertions(+)
>
> diff --git a/gdb/observable.c b/gdb/observable.c
> index 0bc8697f137..7b23e038b25 100644
> --- a/gdb/observable.c
> +++ b/gdb/observable.c
> @@ -62,6 +62,7 @@ DEFINE_OBSERVABLE (architecture_changed);
> DEFINE_OBSERVABLE (thread_ptid_changed);
> DEFINE_OBSERVABLE (inferior_added);
> DEFINE_OBSERVABLE (inferior_appeared);
> +DEFINE_OBSERVABLE (inferior_pre_detach);
> DEFINE_OBSERVABLE (inferior_exit);
> DEFINE_OBSERVABLE (inferior_removed);
> DEFINE_OBSERVABLE (memory_changed);
> diff --git a/gdb/observable.h b/gdb/observable.h
> index 1103c5c98a6..e8cc2d28a86 100644
> --- a/gdb/observable.h
> +++ b/gdb/observable.h
> @@ -181,6 +181,9 @@ extern observable<struct inferior */* inf */> inferior_added;
> process. */
> extern observable<struct inferior */* inf */> inferior_appeared;
>
> +/* Inferior INF is about to be detached. */
> +extern observable<struct inferior */* inf */> inferior_pre_detach;
> +
> /* Either the inferior associated with INF has been detached from
> the process, or the process has exited. */
> extern observable<struct inferior */* inf */> inferior_exit;
> diff --git a/gdb/target.c b/gdb/target.c
> index 1dd0f42af7d..04a4e1fd877 100644
> --- a/gdb/target.c
> +++ b/gdb/target.c
> @@ -2561,6 +2561,8 @@ target_detach (inferior *inf, int from_tty)
>
> prepare_for_detach ();
>
> + gdb::observers::inferior_pre_detach.notify (inf);
> +
> /* Hold a strong reference because detaching may unpush the
> target. */
> auto proc_target_ref = target_ops_ref::new_reference (inf->process_target ());
> --
> 2.38.1
@@ -62,6 +62,7 @@ DEFINE_OBSERVABLE (architecture_changed);
DEFINE_OBSERVABLE (thread_ptid_changed);
DEFINE_OBSERVABLE (inferior_added);
DEFINE_OBSERVABLE (inferior_appeared);
+DEFINE_OBSERVABLE (inferior_pre_detach);
DEFINE_OBSERVABLE (inferior_exit);
DEFINE_OBSERVABLE (inferior_removed);
DEFINE_OBSERVABLE (memory_changed);
@@ -181,6 +181,9 @@ extern observable<struct inferior */* inf */> inferior_added;
process. */
extern observable<struct inferior */* inf */> inferior_appeared;
+/* Inferior INF is about to be detached. */
+extern observable<struct inferior */* inf */> inferior_pre_detach;
+
/* Either the inferior associated with INF has been detached from
the process, or the process has exited. */
extern observable<struct inferior */* inf */> inferior_exit;
@@ -2561,6 +2561,8 @@ target_detach (inferior *inf, int from_tty)
prepare_for_detach ();
+ gdb::observers::inferior_pre_detach.notify (inf);
+
/* Hold a strong reference because detaching may unpush the
target. */
auto proc_target_ref = target_ops_ref::new_reference (inf->process_target ());