From patchwork Thu Oct 12 14:22:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Burgess X-Patchwork-Id: 77613 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id CFD203858039 for ; Thu, 12 Oct 2023 14:22:42 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 832553858C5E for ; Thu, 12 Oct 2023 14:22:27 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 832553858C5E Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1697120547; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=uOy9OfVLa63WysoRo/A+6Gj3KJ0qAPY7CeuldcCeQL0=; b=cX0TLBjwujx5x7rYVddV38CbIm87B6Q7ZlWwvbNWNOvFZoKPBMvcXiUcffF/+xPeWlnCkL nlUrqnCuCx0HgC+4xyzuML3OygfyEW43pPLADiKq3iWykgphi5cyiQd2qs3oECY4Nb/Apr /2IXQHfKud12To+ky2PsSqFVjihuT88= Received: from mail-ej1-f69.google.com (mail-ej1-f69.google.com [209.85.218.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-294-2I2gX-ZFNISQ7CMZ3lmDIA-1; Thu, 12 Oct 2023 10:22:26 -0400 X-MC-Unique: 2I2gX-ZFNISQ7CMZ3lmDIA-1 Received: by mail-ej1-f69.google.com with SMTP id a640c23a62f3a-993c2d9e496so69862066b.0 for ; Thu, 12 Oct 2023 07:22:25 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1697120544; x=1697725344; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=uOy9OfVLa63WysoRo/A+6Gj3KJ0qAPY7CeuldcCeQL0=; b=Jwg2IZzBCHskJhRbHlkzaDL6AKcHNoUmFUNpqrxPpzgtPYraCsRvVKBsbt7RS/wbfD vv9fPYgHoiN6vITGh38orNDlhwo+szVCCUPftXIFVGw75fw5y0RxXU3DfOaeaFTqcliL WbW/+AezXvDPehqtVbpxL7y2Jyp8sXpAtyI+FEzuHC69+bWpZW7f317lWNYvm10Yqobt u1wd/WySvftmX1X09/SISjIWfkh9uz2dN+bG0RxHA+66QwJlsimLK7nvYqHZ3rDVGx5o DzJVlh2Opojjahi5h2Cxbp7Sz3Y3zRTJUeJPo87ca9mwRnXeLSAea/rxN5b5ok8j7eJg Snjg== X-Gm-Message-State: AOJu0YwYVWm21mX5Q+ociUmagc8o1xAP3zqemDkqZUjEhryhLSJzPVsT G7WH6hqi42p49OwvE3DS6jdR93Qx/rfav+5BGoEFDpQLGVWf4stjvjfzGAvRhudk7Ai6nSVoGut mtcOSR3Ae8tUvPl4ZEY6u5cKRZy29UMuvqtcI38w3MOZnsJXs4S2CkAOf+ZpJNH7fnyMqPijow7 ND0TLwbg== X-Received: by 2002:a17:906:11e:b0:9bd:84af:e67a with SMTP id 30-20020a170906011e00b009bd84afe67amr3508602eje.54.1697120544540; Thu, 12 Oct 2023 07:22:24 -0700 (PDT) X-Google-Smtp-Source: AGHT+IF0zWs0qL1mcq9t+wlcTT4T/tMAUp8vjluUKnhIaTKqiAhDwSQIVtnaXw8smAYLouG1EzZY+A== X-Received: by 2002:a17:906:11e:b0:9bd:84af:e67a with SMTP id 30-20020a170906011e00b009bd84afe67amr3508568eje.54.1697120544022; Thu, 12 Oct 2023 07:22:24 -0700 (PDT) Received: from localhost ([31.111.84.209]) by smtp.gmail.com with ESMTPSA id o20-20020a170906289400b009930042510csm11070439ejd.222.2023.10.12.07.22.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Oct 2023 07:22:23 -0700 (PDT) From: Andrew Burgess To: gdb-patches@sourceware.org Cc: Andrew Burgess , Luis Machado Subject: [PATCH] gdb: replace architecture_changed with new_architecture observer Date: Thu, 12 Oct 2023 15:22:18 +0100 Message-Id: X-Mailer: git-send-email 2.25.4 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, 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 X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org This commit replaces the architecture_changed observer with a new_architecture observer. Currently the only user of the architecture_changed observer is the Python code, which uses this observer to register the Python unwinder with the architecture. The problem is that the architecture_changed observer is triggered from inferior::set_arch(), which only sees the inferior-wide gdbarch value. For targets that use thread-specific architectures, these never trigger the architecture_changed observer, and so never have the Python unwinder registered with them. When it comes to unwinding GDB makes use of the frame's gdbarch, which is based on the thread's regcache gdbarch, which is set in get_thread_regcache to the value returned from target_thread_architecture, which is not always the inferiors gdbarch value, it might be a thread-specific gdbarch which has not passed through inferior::set_arch(). The new_architecture observer will be triggered from gdbarch_find_by_info, whenever a new gdbarch is created and initialised. As GDB caches and reuses gdbarch values, we should expect to see each new architecture trigger the new_architecture observer just once. After this commit, targets that make use of thread-specific architectures should be able to make use of Python unwinders. As I don't have access to a machine that makes use of thread-specific architectures right now, I asked Luis to confirm that an AArch64 target that uses SVE/SME can't use the Python unwinders in threads that are using a thread-specific architectures, and he confirmed that this is indeed the case, see this discussion: https://inbox.sourceware.org/gdb/87wmvsat8i.fsf@redhat.com Reviewed-by: Luis Machado Tested-by: Luis Machado Tested-By: Lancelot Six --- gdb/arch-utils.c | 2 ++ gdb/inferior.c | 1 - gdb/observable.c | 2 +- gdb/observable.h | 7 +++---- gdb/python/py-unwind.c | 6 +++--- 5 files changed, 9 insertions(+), 9 deletions(-) base-commit: b8ead7d503a7b3719716d42164299c02abd658cf diff --git a/gdb/arch-utils.c b/gdb/arch-utils.c index 60a50ea5b2c..1c83bbe3a58 100644 --- a/gdb/arch-utils.c +++ b/gdb/arch-utils.c @@ -1476,6 +1476,8 @@ gdbarch_find_by_info (struct gdbarch_info info) verify_gdbarch (new_gdbarch); new_gdbarch->initialized_p = true; + gdb::observers::new_architecture.notify (new_gdbarch); + if (gdbarch_debug) gdbarch_dump (new_gdbarch, gdb_stdlog); diff --git a/gdb/inferior.c b/gdb/inferior.c index efe57cceae3..1778723863e 100644 --- a/gdb/inferior.c +++ b/gdb/inferior.c @@ -179,7 +179,6 @@ inferior::set_arch (gdbarch *arch) gdb_assert (arch != nullptr); gdb_assert (gdbarch_initialized_p (arch)); m_gdbarch = arch; - gdb::observers::architecture_changed.notify (this, arch); process_stratum_target *proc_target = this->process_target (); if (proc_target != nullptr) diff --git a/gdb/observable.c b/gdb/observable.c index 09613b2ddda..f2e65b11604 100644 --- a/gdb/observable.c +++ b/gdb/observable.c @@ -52,7 +52,7 @@ DEFINE_OBSERVABLE (about_to_proceed); DEFINE_OBSERVABLE (breakpoint_created); DEFINE_OBSERVABLE (breakpoint_deleted); DEFINE_OBSERVABLE (breakpoint_modified); -DEFINE_OBSERVABLE (architecture_changed); +DEFINE_OBSERVABLE (new_architecture); DEFINE_OBSERVABLE (thread_ptid_changed); DEFINE_OBSERVABLE (inferior_added); DEFINE_OBSERVABLE (inferior_appeared); diff --git a/gdb/observable.h b/gdb/observable.h index acb05e9b535..a535eedcd38 100644 --- a/gdb/observable.h +++ b/gdb/observable.h @@ -153,10 +153,9 @@ extern observable breakpoint_deleted; is the modified breakpoint. */ extern observable breakpoint_modified; -/* INF's architecture has changed. The argument NEWARCH is a - pointer to the new architecture. */ -extern observable - architecture_changed; +/* GDB has instantiated a new architecture, NEWARCH is a pointer to the new + architecture. */ +extern observable new_architecture; /* The thread's ptid has changed. The OLD_PTID parameter specifies the old value, and NEW_PTID specifies the new value. */ diff --git a/gdb/python/py-unwind.c b/gdb/python/py-unwind.c index f8b142dd52c..4de81c0a7eb 100644 --- a/gdb/python/py-unwind.c +++ b/gdb/python/py-unwind.c @@ -945,7 +945,7 @@ static const registry::key pyuw_gdbarch_data; intermediary. */ static void -pyuw_on_new_gdbarch (inferior *inf, gdbarch *newarch) +pyuw_on_new_gdbarch (gdbarch *newarch) { struct pyuw_gdbarch_data_type *data = pyuw_gdbarch_data.get (newarch); if (data == nullptr) @@ -974,8 +974,8 @@ pyuw_on_new_gdbarch (inferior *inf, gdbarch *newarch) static int CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION gdbpy_initialize_unwind (void) { - gdb::observers::architecture_changed.attach (pyuw_on_new_gdbarch, - "py-unwind"); + gdb::observers::new_architecture.attach (pyuw_on_new_gdbarch, + "py-unwind"); if (PyType_Ready (&pending_frame_object_type) < 0) return -1;