From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by sourceware.org (Postfix) with ESMTPS id 087003858D38 for ; Tue, 20 Jun 2023 08:35:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 087003858D38 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1687250136; x=1718786136; h=from:to:subject:date:message-id:mime-version: content-transfer-encoding; bh=PAyu+9/GbLO2oozddc7/T4XbkRBHlboXll+UZ83dDGg=; b=me31QKXE29sX2PqEwnX1gSOjKWv9yTIZY8y711hr/7HvCpEYf/OnCjs6 kid7SUzqvbKzflproyPlMaTnOP4WUNLuiALBgOPKByvlJgR/WRa5iHnEA zOfw52ouRMlWv+O3m29xmR3J04MUo22BrhDZ/oFq2Sz4FKGDpEPQB56xs pr/iyLJXTdRqccPOS4qyTVILZ7WIP8rnaNENhaMKe8Rmkdy5eX9QudIDE 6Z+8kLwcYbDU8/fl88HYfSspS+TCfnZsREKT40O27k3CP7jvC0AEXiTkM HA7QiFl8HF+7XHB7/xLuPp7u5zsb+h7gslTL3itTf0asD7hGG6ODOAoc6 A==; X-IronPort-AV: E=McAfee;i="6600,9927,10746"; a="349532122" X-IronPort-AV: E=Sophos;i="6.00,256,1681196400"; d="scan'208";a="349532122" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Jun 2023 01:35:33 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10746"; a="888173613" X-IronPort-AV: E=Sophos;i="6.00,256,1681196400"; d="scan'208";a="888173613" Received: from ultl2604.iul.intel.com (HELO localhost) ([172.28.48.47]) by orsmga005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Jun 2023 01:35:31 -0700 From: Tankut Baris Aktemur To: gdb-patches@sourceware.org Subject: [PATCH] gdbserver: try selecting a thread first to access memory Date: Tue, 20 Jun 2023 10:35:19 +0200 Message-Id: <20230620083519.1295801-1-tankut.baris.aktemur@intel.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-9.1 required=5.0 tests=AC_FROM_MANY_DOTS,BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE 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: Since commit commit 7f8acedeebe295fc8cc1d11ed971cbfc1942618c Author: Pedro Alves Date: Tue Apr 5 13:57:11 2022 +0100 gdbserver: track current process as well as current thread gdbserver switches to a process, rather than a thread, before processing a memory access request coming from the GDB side. This switch sets current_thread to null. Some memory accesses on certain targets, however, may require having a thread context. Therefore, try switching to the selected thread first. If this fails for a reason (e.g. the thread has exited), switch to the process. Regression-tested on X86_64 Linux using the unix, native-gdbserver, and native-extended-gdbserver board files. --- gdbserver/server.cc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/gdbserver/server.cc b/gdbserver/server.cc index c57270175b4..0344fba32a7 100644 --- a/gdbserver/server.cc +++ b/gdbserver/server.cc @@ -1072,7 +1072,10 @@ gdb_read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len) /* (assume no half-trace half-real blocks for now) */ } - if (set_desired_process ()) + /* Some memory accesses may require having a thread context. + Attempt switching to the selected thread first, with a fall-back + option to a process. */ + if (set_desired_thread () || set_desired_process ()) res = read_inferior_memory (memaddr, myaddr, len); else res = 1; @@ -1093,7 +1096,10 @@ gdb_write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, int len) { int ret; - if (set_desired_process ()) + /* Some memory accesses may require having a thread context. + Attempt switching to the selected thread first, with a + fall-back option to a process. */ + if (set_desired_thread () || set_desired_process ()) ret = target_write_memory (memaddr, myaddr, len); else ret = EIO; -- 2.25.1 Intel Deutschland GmbH Registered Address: Am Campeon 10, 85579 Neubiberg, Germany Tel: +49 89 99 8853-0, www.intel.de Managing Directors: Christin Eisenschmid, Sharon Heck, Tiffany Doon Silva Chairperson of the Supervisory Board: Nicole Lau Registered Office: Munich Commercial Register: Amtsgericht Muenchen HRB 186928