From patchwork Tue Nov 14 13:35:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Bouhaouel, Mohamed" X-Patchwork-Id: 79830 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 5291C385697B for ; Tue, 14 Nov 2023 13:36:26 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.43]) by sourceware.org (Postfix) with ESMTPS id 7549D3856961 for ; Tue, 14 Nov 2023 13:36:11 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 7549D3856961 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=intel.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 7549D3856961 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=192.55.52.43 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699968973; cv=none; b=XU4/HDR6L+0keD2TGkYmEq63OSExX6uqT4mJf0yT921zXTKtIrDYAEktqmz1CVLIBh6s4Bwc9azVitkoJY3WEHZ99yyuDTfzxW/2EaxfOBrNVCKH5wbEvvRs6uqd6FVfg0r5b291kNaYd6MFAUmnQwU3qr6okMuERmTk/Pf/FEo= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699968973; c=relaxed/simple; bh=wvymrP0CAQW0oViu9AdKgmqSYbFalVb/U4BUT63Gu+w=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=xKbGZ0G3JPk9DDAubm/doVz1VukZUIxqdoHypp44xMQp9yOQbfa9a6uSBcuYu3Bv9YxW+RMIzrAAw7/yP2gL6QV5SGD4wRajf++XfinOHWqNL4/wX69Z1NqHGMKvxcSRemIIzhoi9y57B05URar/JFfsI8BXDrSr1mEvCvn1kn8= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1699968971; x=1731504971; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=wvymrP0CAQW0oViu9AdKgmqSYbFalVb/U4BUT63Gu+w=; b=JQgY5Tp/T91c0pLtIdCPllJQsgVQZrEo4CUcXFYrmVREXJQM5RN4Uktn 8UTnAHG85jJOYC/geqbzbA0QRqF1Xjnfbe8+BpoiTNZG2CN3OV2ZkEbAF tFJ4jiWoK567wjvKpbsizD+myHb55K6w+Vf0PxW72UzPXpLzn9B0Zd+Dn tGn3XgLNqbf0ey/Vz6nXOlZqPFg1rQqidvw5z+x8GitRPzaLdwpMh/1Z0 d9PhkoV7qfWlj191tJP7fcb20H+F8HpVSo0PNHtPly06nJM36qV0lUQfj S0pru0bImFFunkCeBzPstcm2Tlcej/e9H/0Y1+jCSnQ2ipixorry6J/L/ g==; X-IronPort-AV: E=McAfee;i="6600,9927,10894"; a="476866390" X-IronPort-AV: E=Sophos;i="6.03,302,1694761200"; d="scan'208";a="476866390" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Nov 2023 05:36:09 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10894"; a="714570577" X-IronPort-AV: E=Sophos;i="6.03,302,1694761200"; d="scan'208";a="714570577" Received: from mbouhaou-mobl1.ger.corp.intel.com (HELO localhost) ([10.252.56.16]) by orsmga003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Nov 2023 05:36:06 -0800 From: Mohamed Bouhaouel To: gdb-patches@sourceware.org Cc: blarsen@redhat.com, mohamed.bouhaouel@intel.com, eliz@gnu.org Subject: [PATCH v3 1/3] gdb, gdbserver, zpoint: report z_point support Date: Tue, 14 Nov 2023 14:35:30 +0100 Message-Id: <20231114133532.3877-2-mohamed.bouhaouel@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231114133532.3877-1-mohamed.bouhaouel@intel.com> References: <20231114133532.3877-1-mohamed.bouhaouel@intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-10.8 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, 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 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 Make gdbserver report which types of breakpoints and watchpoints are supported when exchanging features. This is done by replying with Z+ (Supported) or Z- (unsupported) Reviewed-By: Eli Zaretskii --- gdb/NEWS | 4 ++++ gdb/doc/gdb.texinfo | 32 ++++++++++++++++++++++++++++++++ gdb/remote.c | 16 ++++++++++++++++ gdbserver/mem-break.cc | 2 +- gdbserver/mem-break.h | 4 ++++ gdbserver/server.cc | 7 +++++++ 6 files changed, 64 insertions(+), 1 deletion(-) diff --git a/gdb/NEWS b/gdb/NEWS index 96aba256dbb..6e9f679dd56 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -75,6 +75,10 @@ QThreadOptions in qSupported QThreadOptions packet, and the qSupported response can contain the set of thread options the remote stub supports. +qSupported + Gdbserver now reports which types of breakpoints and watchpoints + are supported when exchanging features using Z+, Z-. + *** Changes in GDB 14 * GDB now supports the AArch64 Scalable Matrix Extension 2 (SME2), which diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index e4c00143fd1..ccc513df0cc 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -44631,6 +44631,31 @@ These are the currently defined stub features and their properties: @tab @samp{-} @tab No +@item @samp{Z0} +@tab No +@tab @samp{-} +@tab No + +@item @samp{Z1} +@tab No +@tab @samp{-} +@tab No + +@item @samp{Z2} +@tab No +@tab @samp{-} +@tab No + +@item @samp{Z3} +@tab No +@tab @samp{-} +@tab No + +@item @samp{Z4} +@tab No +@tab @samp{-} +@tab No + @end multitable These are the currently defined stub features, in more detail: @@ -44858,6 +44883,13 @@ The remote stub supports and implements the required memory tagging functionality and understands the @samp{qMemTags} (@pxref{qMemTags}) and @samp{QMemTags} (@pxref{QMemTags}) packets. +@item Z@var{type} +The remote stub reports which types of breakpoints and watchpoints are +supported. This is done using flags, @samp{Z@var{type}+} for supported +and @samp{Z@var{type}-} for unsupported, where @var{type} is one of +@samp{0}, @samp{1}, @samp{2}, @samp{3}, @samp{4} +(@pxref{insert breakpoint or watchpoint packet}). + For AArch64 GNU/Linux systems, this feature also requires access to the @file{/proc/@var{pid}/smaps} file so memory mapping page flags can be inspected. This is done via the @samp{vFile} requests. diff --git a/gdb/remote.c b/gdb/remote.c index ce5addade6f..7aa380a5989 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -808,6 +808,10 @@ class remote_target : public process_stratum_target int insert_watchpoint (CORE_ADDR, int, enum target_hw_bp_type, struct expression *) override; + /* Returns true if GDB Z breakpoint type TYPE is supported, + false otherwise. */ + bool supports_z_point_type (int type); + int remove_watchpoint (CORE_ADDR, int, enum target_hw_bp_type, struct expression *) override; @@ -5717,6 +5721,11 @@ static const struct protocol_feature remote_protocol_features[] = { { "no-resumed", PACKET_DISABLE, remote_supported_packet, PACKET_no_resumed }, { "memory-tagging", PACKET_DISABLE, remote_supported_packet, PACKET_memory_tagging_feature }, + { "Z0", PACKET_SUPPORT_UNKNOWN, remote_supported_packet, PACKET_Z0 }, + { "Z1", PACKET_SUPPORT_UNKNOWN, remote_supported_packet, PACKET_Z1 }, + { "Z2", PACKET_SUPPORT_UNKNOWN, remote_supported_packet, PACKET_Z2 }, + { "Z3", PACKET_SUPPORT_UNKNOWN, remote_supported_packet, PACKET_Z3 }, + { "Z4", PACKET_SUPPORT_UNKNOWN, remote_supported_packet, PACKET_Z4 }, }; static char *remote_support_xml; @@ -10991,6 +11000,13 @@ watchpoint_to_Z_packet (int type) } } +bool +remote_target::supports_z_point_type (int type) +{ + Z_packet_type packet = watchpoint_to_Z_packet (type); + return (m_features.packet_support (PACKET_Z0 + packet) != PACKET_DISABLE); +} + int remote_target::insert_watchpoint (CORE_ADDR addr, int len, enum target_hw_bp_type type, struct expression *cond) diff --git a/gdbserver/mem-break.cc b/gdbserver/mem-break.cc index 3bee8bc8990..7c3a1d1d47e 100644 --- a/gdbserver/mem-break.cc +++ b/gdbserver/mem-break.cc @@ -998,7 +998,7 @@ find_gdb_breakpoint (char z_type, CORE_ADDR addr, int kind) return NULL; } -static int +int z_type_supported (char z_type) { return (z_type >= '0' && z_type <= '4' diff --git a/gdbserver/mem-break.h b/gdbserver/mem-break.h index 9bf7aa84932..b27f0a23ac2 100644 --- a/gdbserver/mem-break.h +++ b/gdbserver/mem-break.h @@ -276,4 +276,8 @@ int remove_memory_breakpoint (struct raw_breakpoint *bp); void clone_all_breakpoints (struct thread_info *child_thread, const struct thread_info *parent_thread); + +/* Returns true if Z_TYPE is supported by the target. */ + +int z_type_supported (char z_type); #endif /* GDBSERVER_MEM_BREAK_H */ diff --git a/gdbserver/server.cc b/gdbserver/server.cc index a8e23561dcb..e727973ad45 100644 --- a/gdbserver/server.cc +++ b/gdbserver/server.cc @@ -2613,6 +2613,13 @@ handle_query (char *own_buf, int packet_len, int *new_packet_len_p) if (target_supports_memory_tagging ()) strcat (own_buf, ";memory-tagging+"); + /* Z points support. */ + strcat (own_buf, z_type_supported ('0') ? ";Z0+" : ";Z0-"); + strcat (own_buf, z_type_supported ('1') ? ";Z1+" : ";Z1-"); + strcat (own_buf, z_type_supported ('2') ? ";Z2+" : ";Z2-"); + strcat (own_buf, z_type_supported ('3') ? ";Z3+" : ";Z3-"); + strcat (own_buf, z_type_supported ('4') ? ";Z4+" : ";Z4-"); + /* Reinitialize components as needed for the new connection. */ hostio_handle_new_gdb_connection (); target_handle_new_gdb_connection (); From patchwork Tue Nov 14 13:35:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Bouhaouel, Mohamed" X-Patchwork-Id: 79831 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 C6159385783F for ; Tue, 14 Nov 2023 13:36:44 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.7]) by sourceware.org (Postfix) with ESMTPS id 8E56D3854143 for ; Tue, 14 Nov 2023 13:36:22 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8E56D3854143 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=intel.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 8E56D3854143 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=192.198.163.7 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699968984; cv=none; b=RUKSRdltHJWLpLbyYWlupqGi+S/9TuIFhR5TaWTPTG1vJ/sjYvfUdLzX9H2mj9Em+OJU6ywpl5tXh5nZkOv9GaHl2GEEBRJaMEZGMoPNHRSXrAKxmQLPhgxHeygNPTSWgib1Hr1kYWXGCKPXHSRNewazrGWTNvdJnnSIi/KpRfs= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699968984; c=relaxed/simple; bh=54GEUR0ATG4HyH0gWLVfdgaRlJAsJGhelSpnz/4bCw8=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=FeVwt9XVL+Q2qfA+3DbYhW8Pojrjkiheowp1Wbn75OJrMzLBb8rzZs1/Z2DS743jbckouOqhK+6vpkX0GFd8xb5KKcvGPBlCUqXMoGX2P79C80c2Sxm0b18VAc+294x9RqIhq7nGQLICSgsCzItDmehxhdhb/DeCJHSlu1bCM3Y= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1699968983; x=1731504983; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=54GEUR0ATG4HyH0gWLVfdgaRlJAsJGhelSpnz/4bCw8=; b=DkI7aNAGTmRNPzFileMxOM9To/CpJm/dLov/1+ZKHYoaWJlwFNtkfkGV lbvnm7GKLW4bS8im/q90T1RAI2xvWI21HlLOIqCBzGuHPUWv+JXyRD4jR M83YDSvP/Fre2exXC8eY/rWzqpOJ8IuM+LYrX2OtKTdVgdruAQ3YfISeq AXt3ng+kDhVVtUWFPVsWUjiXqMZtK9+T4BQ5Hb+BYggLQvRuRFBLOs2zG mkWEd+EG0f092qwntGEB0FvQ2FTXvUwKLcOslvnWxrs8sRaLYQVBwVY7e KJ6I024rxGxIWIJiz7441eCwCWvHAh+20yTCF0kPldjXUW5KF4kyHJhWb w==; X-IronPort-AV: E=McAfee;i="6600,9927,10894"; a="12199812" X-IronPort-AV: E=Sophos;i="6.03,302,1694761200"; d="scan'208";a="12199812" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by fmvoesa101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Nov 2023 05:36:22 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.03,302,1694761200"; d="scan'208";a="5808077" Received: from mbouhaou-mobl1.ger.corp.intel.com (HELO localhost) ([10.252.56.16]) by orviesa002-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Nov 2023 05:36:20 -0800 From: Mohamed Bouhaouel To: gdb-patches@sourceware.org Cc: blarsen@redhat.com, mohamed.bouhaouel@intel.com, eliz@gnu.org Subject: [PATCH v3 2/3] gdb, breakpoint: add a breakpoint type converter Date: Tue, 14 Nov 2023 14:35:31 +0100 Message-Id: <20231114133532.3877-3-mohamed.bouhaouel@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231114133532.3877-1-mohamed.bouhaouel@intel.com> References: <20231114133532.3877-1-mohamed.bouhaouel@intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-11.1 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, 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 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 Add a new function 'bptype_to_target_hw_bp_type' to perform the translation from 'bptype' to 'target_hw_bp_type'. Reviewed-By: Guinevere Larsen --- gdb/breakpoint.c | 20 ++++++++++++++++++++ gdb/breakpoint.h | 3 +++ 2 files changed, 23 insertions(+) diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index fe09dbcbeee..13eaff79789 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -9827,6 +9827,26 @@ watchpoint::~watchpoint () bpt->related_breakpoint = this->related_breakpoint; } +/* See breakpoint.h. */ + +target_hw_bp_type +bptype_to_target_hw_bp_type (bptype type) +{ + switch (type) + { + case bp_hardware_watchpoint: + return hw_write; + case bp_read_watchpoint: + return hw_read; + case bp_access_watchpoint: + return hw_access; + case bp_hardware_breakpoint: + return hw_execute; + default: + error (_ ("Bad breakpoint type: bptype %d."), type); + } +} + /* Return non-zero if EXP is verified as constant. Returned zero means EXP is variable. Also the constant detection may fail for some constant expressions and in such case still falsely return diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h index e75efc90495..cc9a1ebc184 100644 --- a/gdb/breakpoint.h +++ b/gdb/breakpoint.h @@ -2029,4 +2029,7 @@ extern void enable_disable_bp_location (bp_location *loc, bool enable); extern void notify_breakpoint_modified (breakpoint *b); +/* Translate BPTYPE to TARGET_HW_BP_TYPE. */ + +extern target_hw_bp_type bptype_to_target_hw_bp_type (bptype type); #endif /* !defined (BREAKPOINT_H) */ From patchwork Tue Nov 14 13:35:32 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Bouhaouel, Mohamed" X-Patchwork-Id: 79832 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 05F363858020 for ; Tue, 14 Nov 2023 13:36:59 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.7]) by sourceware.org (Postfix) with ESMTPS id AC7923857B98 for ; Tue, 14 Nov 2023 13:36:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org AC7923857B98 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=intel.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org AC7923857B98 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=192.198.163.7 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699968996; cv=none; b=aV5z4xJIs3Uey5rlO0jSHRjKZnA4fQbxjuSDWS2LBfe0KFN/bvzPqAYGkVIqnpuGi0lit8E1jxgJAqnXlZyjYL4d0/Ya0onBVqZAJsPm2J35sncCYQEoZQ6fvnykrhigD4Hv3rhfvtgoE4g5Sys1U25ytmkZgOCFFN2B7QF3hqQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699968996; c=relaxed/simple; bh=cvoeDiYwVwkyARZ64tafor0uLgLDSP5e6L/7ssE5aiI=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=fFx/uMGPs0iftfqllsseUXnBMOsvZ9kj5M8PFb+QwhAWsmY5JlGQf+Q1Lv3GPlaP/aCPJGYDY8UroGCN/ikBxskqdjbVVhjWP2Lvjch/Inq4+9ZxRSijXY6CTJGjMzCVj/wL7dKPNjM0A0MzvgThXu5Hlz2J3KjEJG2ZcrcdCGE= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1699968995; x=1731504995; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=cvoeDiYwVwkyARZ64tafor0uLgLDSP5e6L/7ssE5aiI=; b=n0mY6KiHZyJ4QaOAgo3mCF5HtigJ3kE2JHw2DDmfXlIs9Zh+qvYS1XyV QlcG/c3dfxZDkrBXb3cwBz5EECJUUdPJoitsYJUr3swjHyhMVNvhAFhbZ nFuRw9og2FudBwyAsaSiLEbUfpU32lz9cITseEPLr6qkNGsrg00Hwi0tX k6NmDKc+sSy2NCNVox6aAVpSHmE2uOgz4pVFxKA7GdxZK42tEmzGy/FSt VYuNqakMvKS7Hz3vvdP4k1wlY12REWefo2EFc8Lm+A8BpWL/b98sYQMCw g8Cqh97zl1oeo2eO+zsPOCHREjYEp2vYRXjrzRySFXXEP3GhHEW/DwkeH A==; X-IronPort-AV: E=McAfee;i="6600,9927,10894"; a="12199837" X-IronPort-AV: E=Sophos;i="6.03,302,1694761200"; d="scan'208";a="12199837" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by fmvoesa101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Nov 2023 05:36:34 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.03,302,1694761200"; d="scan'208";a="5808087" Received: from mbouhaou-mobl1.ger.corp.intel.com (HELO localhost) ([10.252.56.16]) by orviesa002-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Nov 2023 05:36:32 -0800 From: Mohamed Bouhaouel To: gdb-patches@sourceware.org Cc: blarsen@redhat.com, mohamed.bouhaouel@intel.com, eliz@gnu.org Subject: [PATCH v3 3/3] gdb, zpoint: check for target hardware breakpoint support Date: Tue, 14 Nov 2023 14:35:32 +0100 Message-Id: <20231114133532.3877-4-mohamed.bouhaouel@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231114133532.3877-1-mohamed.bouhaouel@intel.com> References: <20231114133532.3877-1-mohamed.bouhaouel@intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-11.2 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, 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 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 In 'can_use_hw_breakpoint', check if the target supports hardware-assisted breakpoints. This will prevent GDB from trying to insert the hardware breakpoint in case it is not supported. Reviewed-By: Guinevere Larsen --- gdb/remote.c | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/gdb/remote.c b/gdb/remote.c index 7aa380a5989..10504696a57 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -10982,7 +10982,7 @@ remote_target::remove_breakpoint (struct gdbarch *gdbarch, } static enum Z_packet_type -watchpoint_to_Z_packet (int type) +hw_bp_to_Z_packet (int type) { switch (type) { @@ -10995,6 +10995,9 @@ watchpoint_to_Z_packet (int type) case hw_access: return Z_PACKET_ACCESS_WP; break; + case hw_execute: + return Z_PACKET_HARDWARE_BP; + break; default: internal_error (_("hw_bp_to_z: bad watchpoint type %d"), type); } @@ -11003,7 +11006,7 @@ watchpoint_to_Z_packet (int type) bool remote_target::supports_z_point_type (int type) { - Z_packet_type packet = watchpoint_to_Z_packet (type); + Z_packet_type packet = hw_bp_to_Z_packet (type); return (m_features.packet_support (PACKET_Z0 + packet) != PACKET_DISABLE); } @@ -11014,7 +11017,7 @@ remote_target::insert_watchpoint (CORE_ADDR addr, int len, struct remote_state *rs = get_remote_state (); char *endbuf = rs->buf.data () + get_remote_packet_size (); char *p; - enum Z_packet_type packet = watchpoint_to_Z_packet (type); + enum Z_packet_type packet = hw_bp_to_Z_packet (type); if (m_features.packet_support ((to_underlying (PACKET_Z0) + to_underlying (packet))) == PACKET_DISABLE) @@ -11064,7 +11067,7 @@ remote_target::remove_watchpoint (CORE_ADDR addr, int len, struct remote_state *rs = get_remote_state (); char *endbuf = rs->buf.data () + get_remote_packet_size (); char *p; - enum Z_packet_type packet = watchpoint_to_Z_packet (type); + enum Z_packet_type packet = hw_bp_to_Z_packet (type); if (m_features.packet_support ((to_underlying (PACKET_Z0) + to_underlying (packet))) == PACKET_DISABLE) @@ -11118,6 +11121,11 @@ remote_target::can_use_hw_breakpoint (enum bptype type, int cnt, int ot) { if (type == bp_hardware_breakpoint) { + /* Check if the target supports hardware-assisted breakpoints. + Return 0 if not. */ + if (!supports_z_point_type (bptype_to_target_hw_bp_type (type))) + return 0; + if (remote_hw_breakpoint_limit == 0) return 0; else if (remote_hw_breakpoint_limit < 0) @@ -11127,6 +11135,18 @@ remote_target::can_use_hw_breakpoint (enum bptype type, int cnt, int ot) } else { + /* Check if the target supports the hardware watchpoint type. + Return 0 if not. */ + if (!supports_z_point_type (bptype_to_target_hw_bp_type (type))) + { + /* If hw read watchpoints are not supported while hw access are, + GDB will try to insert the watchpoint as hw access. */ + bool access_support = supports_z_point_type ( + bptype_to_target_hw_bp_type (bp_access_watchpoint)); + if (!(type == bp_read_watchpoint && access_support)) + return 0; + } + if (remote_hw_watchpoint_limit == 0) return 0; else if (remote_hw_watchpoint_limit < 0)