From patchwork Tue Apr 16 14:07:26 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gustavo Romero X-Patchwork-Id: 789234 Delivered-To: patch@linaro.org Received: by 2002:a05:6000:dcf:b0:346:15ad:a2a with SMTP id dw15csp305035wrb; Tue, 16 Apr 2024 07:09:23 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCVCcxTobNGzBFUAUAdNZDL8kDwgGSAJHj5pJPdL42mNGV0gLVSQsnfRmOxNUFWl43hxYhguNM9yZ3I0BjaeBrAl X-Google-Smtp-Source: AGHT+IEwvA9RJn0kO6OUeIexPqjySM9ZsHhL66ATYMkgIro0nsyNX0oGbQRh6qFnOzUOQ0XTCoap X-Received: by 2002:a05:6870:b48e:b0:22e:7390:da7 with SMTP id y14-20020a056870b48e00b0022e73900da7mr16022019oap.21.1713276563406; Tue, 16 Apr 2024 07:09:23 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1713276563; cv=pass; d=google.com; s=arc-20160816; b=QVTsCsIggMZ1rP0gypNIWhnqw8spSOoI+l7SPbxvIPXHMSpnwoJ7o4WOyWBTvMUmfn oxJSbucfzYySESoaSNUyStZ9OP4q/lpclLX3SlyVcBgvTwnVJMeFSO6gklD44WqMbK2W FXCJjR/wab5UZPeraR/U0UyS+LeGOAea++EJcYZY1baIVB56vn68tikbS5EDyTipBqzM 5EygdvZkwjMbtE3ODoK7QWkSLfvFabKEOUXLO2XxW6PIsXy1RUrk74UVhykxF0Gx5+fd 0dKREdlHCwJK3HFRZfyNAtjQ2NcRo07x5tiLZv4Pj4SsIK+5B9hsvoFfSEQqtY20ZIoD qvGA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=IgkGCOXuapG92Mycu6x1TKV6pdZxvFEkfcXywD93fz4=; fh=PHP0XrDyWzrRvU96cs6sxWXpzsZ2PqUxQqbJpAaSNaA=; b=EZTIRYJOGtOwkgJHobG8i2mMT6VZ+7XSjhPFCkbqQ3cF5XO5JMcPDWbb0q9C5QYT95 yP3CLhQtdpLGOjVkNPjG8cCW/xAv00i1lU+57AeuAt5q2PSdBgIijhgZc4aJRufHLS1a UGnnOEgF4dqKKJqWSwTYEK1jXQ4DEFtwqxTMefcoQrAmGiqzDi8GRkhuow/a3ep8IYaC ke7mE+v5sJ+D/oa4NJ+uLAzlM7jKvvQ9I8+BHGWoV9wYymLGhp8Ygwy5GFGBswYEoC75 EopYW0kaNIOCOBIFHmiK5y+3qi9KH2ScB70Dj4RAKPEqfUzc67xoJb1B49wxkFa3U3Ae wNcg==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=riITQXr5; arc=pass (i=1); spf=pass (google.com: domain of gdb-patches-bounces+patch=linaro.org@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gdb-patches-bounces+patch=linaro.org@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id l16-20020ac87250000000b004364296082asi11632995qtp.420.2024.04.16.07.09.23 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Apr 2024 07:09:23 -0700 (PDT) Received-SPF: pass (google.com: domain of gdb-patches-bounces+patch=linaro.org@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=riITQXr5; arc=pass (i=1); spf=pass (google.com: domain of gdb-patches-bounces+patch=linaro.org@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gdb-patches-bounces+patch=linaro.org@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id A03393858C78 for ; Tue, 16 Apr 2024 14:09:22 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-pf1-x434.google.com (mail-pf1-x434.google.com [IPv6:2607:f8b0:4864:20::434]) by sourceware.org (Postfix) with ESMTPS id D5F793849AFA for ; Tue, 16 Apr 2024 14:07:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D5F793849AFA Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linaro.org ARC-Filter: OpenARC Filter v1.0.0 sourceware.org D5F793849AFA Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::434 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1713276487; cv=none; b=kIfjXYcuI2NxAwmArwTnHfc8IyaGD1Wh0Zg080YWUwFeu6uAK51+599+tlmd9jz8l2O4IdJWbNlqNQMmsBz+tc1wtWbbyWR37QjKLV5Io2NH5mF2TDP85GFG1otOw6HxnPpgNuaMyNz3dlThnls8fEtXo0HnEmm3bCtWl1leznE= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1713276487; c=relaxed/simple; bh=9dATnzdtLBuIf7cSORFIle5NqSWdcLdnfiAuPirjwGc=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=LiDT7/0iZO88RIIXPlyamV7Vte9CP2U2jVaECyLT5DZr4vnI5iTvfVGY8DwP7hDfrW7zh/r3GcdD2qbPz+3XZE5P3vdBlLVg6TniTsyb2csuUb1pVQIId9IfOfdDVRGv2kKLEnA+t1v74teA4hjIZIUjH2M5cPVliOI46Kaw/l4= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pf1-x434.google.com with SMTP id d2e1a72fcca58-6ed9fc77bbfso3439273b3a.1 for ; Tue, 16 Apr 2024 07:07:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1713276477; x=1713881277; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=IgkGCOXuapG92Mycu6x1TKV6pdZxvFEkfcXywD93fz4=; b=riITQXr5Zjk3HqNGE6a4QIJ9p6ioaeuxms4UqPCnsHki4r/y3r9zIxAXputp+W4b8M PSGGmsttyB+cHdhXXgHH2pnsAG5N5FNa6fiOGoNx7aEef4GvmMM+RpxL4LTZ2iQvO+fh CMLI3YoPWCEAVoQxrX0U0Ic7LvyshIWkFJIRQQCmGVJR4gAmzIk2PuDq5TQuFpcCOlUi bfSzsQsytXjwsjjiiys/JivCGHLyDvY1DP9Pc8zEOrBZnJNFg7GuHQPTDdqkHV8HtXJp gGrGAJ8jcxQa188PaN+/0rwELI3bi6hOMMAnwxXI2FQ/1Qyt2066VvIM+iDN6Fqm9Lkc 0lrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713276477; x=1713881277; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=IgkGCOXuapG92Mycu6x1TKV6pdZxvFEkfcXywD93fz4=; b=CHyJ+CSy/XxGNE/79XQeP6l8QEOIXlSyhIZ3ER1ezs4adAF8x1HyBOsiG3sdJk3FJ4 igUrt6IuwtOuayXL4fbJRN+WyOlmJztGpXp/aEC9QdGSH/lJUj36qRpwjSL6bGdUI/V4 Zu8SeWXcCfDn1v0WIRRvZzaXkL0rAtY4H40Lkpjnxp2dr6Vgwt7QHzoybj5ExNboe7Lp m0xW5sfDK6TqchRoPhPTm0PAlfeYpzhT8D8R28rk6lM5lwT7RfLq5wlQGdGYjlKG/jnA hEn+r0UYM/5nEfZU3zd4KBAeT8ajoLNRfOKPcOr2dzwJMK9tZxW+SUQ3P2Ls9WylYzkN 10IA== X-Gm-Message-State: AOJu0Yz3krF75fAw2NnSs/MA3SYxiXK2+gNMTE+9dhx7ydTLh2mZws6X 6KwZ6OKg25G8U2Z5cbO+i4U4GmcD9A+zD2+rL9EdYMQcAsL32R3iU++txAgCZ0hNjV47uUiTXZI LZVs= X-Received: by 2002:a05:6a00:845:b0:6e7:e6b:2ead with SMTP id q5-20020a056a00084500b006e70e6b2eadmr15250278pfk.28.1713276476327; Tue, 16 Apr 2024 07:07:56 -0700 (PDT) Received: from amd.. ([2804:7f0:b403:ad57:3e7c:3fff:fe7a:e83b]) by smtp.gmail.com with ESMTPSA id o3-20020a63e343000000b005f3d54c0a57sm8937473pgj.49.2024.04.16.07.07.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Apr 2024 07:07:56 -0700 (PDT) From: Gustavo Romero To: gdb-patches@sourceware.org Cc: luis.machado@arm.com, thiago.bauermann@linaro.org, eliz@gnu.org, tom@tromey.com, gustavo.romero@linaro.org Subject: [PATCH v4 6/8] gdb: Add qIsAddressTagged packet Date: Tue, 16 Apr 2024 14:07:26 +0000 Message-Id: <20240416140728.198163-7-gustavo.romero@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240416140728.198163-1-gustavo.romero@linaro.org> References: <20240416140728.198163-1-gustavo.romero@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-12.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, 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+patch=linaro.org@sourceware.org This commit adds a new packet, qIsAddressTagged, allowing GDB remote targets to use it to query the stub if a given address is tagged. Currently, the memory tagging address check is done via a read query, where the contents of /proc//smaps is read and the flags are inspected for memory tagging-related flags that indicate the address is in a memory tagged region. This is not ideal, for example, for QEMU stub and other cases, such as on bare-metal, where there is no notion of an OS file like 'smaps.' Hence, the introduction of qIsAddressTagged packet allows checking if an address is tagged in an agnostic way. The is_address_tagged target hook in remote.c attempts to use the qIsAddressTagged packet first for checking if an address is tagged and if the stub does not support such a packet (reply is empty) it falls back to using the current mechanism that reads the contents of /proc//smaps via vFile requests. Signed-off-by: Gustavo Romero --- gdb/remote.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/gdb/remote.c b/gdb/remote.c index 9717db55e27..63799ac5e3f 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -15534,6 +15534,40 @@ create_store_memtags_request (gdb::char_vector &packet, CORE_ADDR address, strcpy (packet.data (), request.c_str ()); } +static void +create_is_address_tagged_request (gdbarch *gdbarch, gdb::char_vector &packet, + CORE_ADDR address) +{ + int addr_size; + std::string request; + + addr_size = gdbarch_addr_bit (gdbarch) / 8; + request = string_printf ("qIsAddressTagged:%s", phex_nz (address, addr_size)); + + if (packet.size () < request.length () + 1) + error (_("Contents too big for packet qIsAddressTagged.")); + + strcpy (packet.data (), request.c_str ()); +} + +static bool +check_is_address_tagged_reply (gdb::char_vector &packet, bool *tagged) +{ + if (packet_check_result (packet).status () != PACKET_OK) + return false; + + gdb_byte reply; + /* Convert only 2 hex digits, i.e. 1 byte in hex format. */ + hex2bin (packet.data (), &reply, 1); + + if (reply == 0x00 || reply == 0x01) { + *tagged = !!reply; + return true; + } + + return false; +} + /* Implement the "fetch_memtags" target_ops method. */ bool @@ -15580,6 +15614,21 @@ remote_target::store_memtags (CORE_ADDR address, size_t len, bool remote_target::is_address_tagged (gdbarch *gdbarch, CORE_ADDR address) { + struct remote_state *rs = get_remote_state (); + bool is_addr_tagged; + + /* Firstly, attempt to check the address using the qIsAddressTagged + packet. */ + create_is_address_tagged_request (gdbarch, rs->buf, address); + + putpkt (rs->buf); + getpkt (&rs->buf); + + if (check_is_address_tagged_reply (rs->buf, &is_addr_tagged)) + return is_addr_tagged; + + /* Fallback to arch-specific method of checking whether an address is tagged + if qIsAddressTagged fails. */ return gdbarch_tagged_address_p (gdbarch, address); }