From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca (simark.ca [158.69.221.121]) by sourceware.org (Postfix) with ESMTPS id 4B1623858C5F for ; Mon, 3 Apr 2023 18:52:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4B1623858C5F Authentication-Results: sourceware.org; dmarc=fail (p=none dis=none) header.from=efficios.com Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=efficios.com Received: from localhost.localdomain (unknown [217.28.27.60]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPSA id AD3471E15D; Mon, 3 Apr 2023 14:52:19 -0400 (EDT) From: Simon Marchi To: gdb-patches@sourceware.org Cc: Simon Marchi , Pedro Alves Subject: [PATCH 2/7] gdb: add inferior_forked observable Date: Mon, 3 Apr 2023 14:52:03 -0400 Message-Id: <20230403185208.197965-3-simon.marchi@efficios.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230403185208.197965-1-simon.marchi@efficios.com> References: <20230403185208.197965-1-simon.marchi@efficios.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-1173.2 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_DMARC_NONE,KAM_DMARC_STATUS,SPF_HELO_PASS,SPF_SOFTFAIL,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: In the upcoming patch to support fork in the amd-dbgapi target, the amd-dbgapi target will need to be notified of fork events through an observer, to attach itself (attach in the amd-dbgapi sense, not ptrace sense) to the new inferior / process. The reason that this can't be done through target_ops::follow_fork is that the amd-dbgapi target isn't pushed on the inferior's target stack right away. It attaches itself to the process and only pushes itself on its target stack if and when the inferior initializes the ROCm runtime. If an inferior that is not using the ROCm runtime forks, we want to be notified of it, so we can attach to the child, and catch if the child starts using the ROCm runtime. So, add a new observable and notify it in follow_fork_inferior. It will be used later in this series. Change-Id: I67fced5a9cba6d5da72b9c7ea1c8397644ca1d54 Reviewed-By: Pedro Alves --- gdb/infrun.c | 2 ++ gdb/observable.c | 1 + gdb/observable.h | 9 +++++++++ 3 files changed, 12 insertions(+) diff --git a/gdb/infrun.c b/gdb/infrun.c index c95a8e7ee1da..11a788467a8a 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -624,6 +624,8 @@ holding the child stopped. Try \"set detach-on-fork\" or \ target_follow_fork (child_inf, child_ptid, fork_kind, follow_child, detach_fork); + gdb::observers::inferior_forked.notify (parent_inf, child_inf, fork_kind); + /* target_follow_fork must leave the parent as the current inferior. If we want to follow the child, we make it the current one below. */ gdb_assert (current_inferior () == parent_inf); diff --git a/gdb/observable.c b/gdb/observable.c index 28249a5ad015..49de89c25e04 100644 --- a/gdb/observable.c +++ b/gdb/observable.c @@ -44,6 +44,7 @@ DEFINE_OBSERVABLE (target_changed); DEFINE_OBSERVABLE (executable_changed); DEFINE_OBSERVABLE (inferior_created); DEFINE_OBSERVABLE (inferior_execd); +DEFINE_OBSERVABLE (inferior_forked); DEFINE_OBSERVABLE (record_changed); DEFINE_OBSERVABLE (solib_loaded); DEFINE_OBSERVABLE (solib_unloaded); diff --git a/gdb/observable.h b/gdb/observable.h index 00955cbc876b..3066cf68f314 100644 --- a/gdb/observable.h +++ b/gdb/observable.h @@ -21,6 +21,7 @@ #define OBSERVABLE_H #include "gdbsupport/observable.h" +#include "target/waitstatus.h" struct bpstat; struct so_list; @@ -97,6 +98,14 @@ extern observable inferior_created; extern observable inferior_execd; +/* The inferior PARENT_INF has forked. If we are setting up an inferior for + the child (because we follow only the child or we follow both), CHILD_INF + is the child inferior. Otherwise, CHILD_INF is nullptr. + + FORK_KIND is TARGET_WAITKIND_FORKED or TARGET_WAITKIND_VFORKED. */ +extern observable inferior_forked; + /* The status of process record for inferior inferior in gdb has changed. The process record is started if STARTED is true, and the process record is stopped if STARTED is false. -- 2.40.0