From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id 4U0/Bqkf9mgpGgAAWB0awg (envelope-from ) for ; Mon, 20 Oct 2025 07:40:25 -0400 Authentication-Results: simark.ca; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=avEvHX74; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 14E0D1E0BC; Mon, 20 Oct 2025 07:40:25 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED autolearn=ham autolearn_force=no version=4.0.1 Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 647E21E04C for ; Mon, 20 Oct 2025 07:40:24 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E50D53858C36 for ; Mon, 20 Oct 2025 11:40:23 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E50D53858C36 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=avEvHX74 Received: from mail-lj1-x22a.google.com (mail-lj1-x22a.google.com [IPv6:2a00:1450:4864:20::22a]) by sourceware.org (Postfix) with ESMTPS id 442FD3858C54 for ; Mon, 20 Oct 2025 11:39:50 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 442FD3858C54 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 442FD3858C54 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::22a ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1760960390; cv=none; b=kzZU4GKKraF56gVdreqQngtUYyJm+LBSnnpTLD+ushiEBnxhVw+uGN8K7L776b2s3As6mq4mBLkRTrdEs8ABUJlubmF81ph3XmiJigAmexyKN5UwNAsIf9YLOBOLT5XYX//uqzR0QwTEEcv0BArQkGqs/7x1XKvXIo6v8cNi2Dk= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1760960390; c=relaxed/simple; bh=ddDf76Df/et1zeke/xn1FW0Gne69pVC9RmmVBZqMp9c=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=nPzf6VGmzc0U1GnxOyqVYfj9tp3Iv3uApO13S4mil0RMIJ7Av/Wq2nB1h/x9dttrIWk+KPRN6dJ5TolaydgO7qX1R7Y3o8FyJ+pCCkn7GBHAPq7G3fOJQyKddTnR+0llw47nHgAZboXYFXS69wWZZIyj3Vbd3DX6BgE6fUWd3OY= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 442FD3858C54 Received: by mail-lj1-x22a.google.com with SMTP id 38308e7fff4ca-375eff817a3so46702451fa.1 for ; Mon, 20 Oct 2025 04:39:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760960389; x=1761565189; darn=sourceware.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=I3P42i57MtzkwCZMDbcG5XvegtqJvMu9oTTNzQloWIw=; b=avEvHX74zgkg+eqwLFoeQCllJcqiNfhH7I+oogbTOcSZJaNxTUdUAZy8WSWuZL7DyS qDDJbjZ8qtlXD/vkkGFnhfXnfHg8gSOiMTZnyeMNzwTQhMi3LJC0MxSb9/6o3SawL+Dw wDsDMdiEpH/zlNRCI3z1EUwUvMbAIXP2yId7mdv9EMRKeJEqkvj2gY/qTgu08+v/kqF1 IVXXN919XOFZX3jHAwPzpKEWt/In9A2cF5X9zSUcADM6I2AVds+u3tbYLGtJfo7Dissu OfCH/SRE9PguWVSe33EqMz48OWbYUffUVaDXPZsUEMgyv9o2j8OHXVug6vzs7UaGqYiN y9cg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760960389; x=1761565189; 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=I3P42i57MtzkwCZMDbcG5XvegtqJvMu9oTTNzQloWIw=; b=BYe3q2pPUm+ovaOEEfTFAZcpoovxtS+ryq0w9DvTdiTzhTEPYi16x6rsCPAhKwFxR3 3uTYMETJDJS+Ww/tzyiR++iEENdXqE/rpxYnmgxWm9/TvGcScYdLZuNlV7sz2eqOBiBj MNuosrL9Lk6bJdiCQdhWphLe0+UbseWC8qK81pOFvHRDSnin1p3qmx2AmsMRTFO7F6e3 +DiTKXxtOTWycclpAtW2SSg2y+FLEVaxy5uDd7eH6Xa84uwxsyeON+rT2X2wds3J41IV leEFGrgSksIgMWACMGGE8qMPOVglJmJkg2K6vVEESRHQkGxXoA0T3Sp//O4E6strVhw5 z9Hg== X-Forwarded-Encrypted: i=1; AJvYcCWhPgXCBTtPKFDS6xKqzJVML6T89WeKuFvAxEy27T+15q6uaK1Bt5G/mL9IgAWMs/7N/ogsBEIkyLpAuA==@sourceware.org X-Gm-Message-State: AOJu0YysDoFVnZXzeN80xJgvVAgw2VKp57HlYFdydYv8jZTehQjPQC2f YIOkDVNEMX/IURmNWvG80FDf7R6VrRNVp+MmiZr0dkwrF8w5G/g2sfZl X-Gm-Gg: ASbGncv9Io0adnssRftgLSvuYTqGsrgSqL6/1vJBsXM73i9wdvkX4PszEyOp5BBC/Sd //ZoU3vC48mPdhtaik1d7qUO42JM/1kxhQGBTbuMFrtylXC+kg5SThPdqpWChBhpkofiTdnurX3 FcG0vZNMrUe1nCHQeGpTkTys3G6pkyIym+9z4dJWfQI3bhTRlDG1/FhI5jzcjF6XWjVNMkNJqLc zHaLzkRT1rqgd+njIfw3jfnDsJM//LUlKV6zEpXT7Xo7CNAvoAzSZ8VyxBgtqTpa4t7/IrZ5XHl CGmh99JNM6PjDBD+pM03gJKsjXHxZCR/+7+IjNaZWvGNCxNzb8wNH1HidwRQWAA1lfdLJY1ceIv qv2qyAALc/rvu/4DIkVYuussCywh3icG4e4it+TSDYPmTOlsV6+NWRdUrxdh4EIgL2f3bwTlm54 zEp5PIkh6fIOld58GJwbN23xJP5MM3+46CcbCMDrYtHjaFJSpB+0N8ty3/KPJAGV/jLTbinsukx Ons5tPGAlQIClSQI0y2bbdl65x5IQ== X-Google-Smtp-Source: AGHT+IGPeAfhLh2xFn6Jg245waKs5LmdigyT5OObZh8Oo1X6NTS1gfIv8yYZGtxXZuZhbs7L1HEr3g== X-Received: by 2002:a2e:9fc8:0:b0:338:1286:bc77 with SMTP id 38308e7fff4ca-37797a850a7mr35293451fa.42.1760960388380; Mon, 20 Oct 2025 04:39:48 -0700 (PDT) Received: from timur-HP-ProBook-440-14-inch-G9-Notebook-PC.corp.yadro.com (mm-217-163-124-178.static.mgts.by. [178.124.163.217]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-377a950635csm20036441fa.30.2025.10.20.04.39.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Oct 2025 04:39:48 -0700 (PDT) From: timurgol007 To: aburgess@redhat.com, gdb-patches@sourceware.org Cc: timurgol007 Subject: [PING][PATCH v2] gdb/record: Support fense.tso, zicond, bitmanip, sinval and zihintntl in riscv Date: Mon, 20 Oct 2025 14:39:44 +0300 Message-Id: <20251020113944.29912-1-timurgol007@gmail.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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~public-inbox=simark.ca@sourceware.org Added record-full support for these extensions. As some opcodes were missed in riscv-opc.h, added them there using riscv-opcodes repo. Hi! Polite ping. I'm specifying Andrew Burgess as the recipient because it seems like he's the only one who can approve this from RISC-V side. --- gdb/riscv-tdep.c | 85 ++++++++++++++++++++++++++++++++++++-- include/opcode/riscv-opc.h | 43 +++++++++++++++++++ 2 files changed, 125 insertions(+), 3 deletions(-) diff --git a/gdb/riscv-tdep.c b/gdb/riscv-tdep.c index 697071bf69e..46eb4bf94f8 100644 --- a/gdb/riscv-tdep.c +++ b/gdb/riscv-tdep.c @@ -5076,7 +5076,15 @@ class riscv_recorded_insn final || is_bge_insn (ival) || is_bltu_insn (ival) || is_bgeu_insn (ival) || is_fence_insn (ival) || is_pause_insn (ival) || is_fence_i_insn (ival) || is_wfi_insn (ival) - || is_sfence_vma_insn (ival)); + || is_sfence_vma_insn (ival) || is_fence_tso_insn (ival) + /* svinval */ + || is_sfence_inval_ir_insn (ival) || is_sfence_w_inval_insn (ival) + || is_sinval_vma_insn (ival) || is_hinval_gvma_insn (ival) + || is_hinval_vvma_insn (ival) || is_hfence_gvma_insn (ival) + || is_hfence_vvma_insn (ival) + /* zihintntl */ + || is_ntl_p1_insn (ival) || is_ntl_pall_insn (ival) + || is_ntl_s1_insn (ival) || is_ntl_all_insn (ival)); } /* Returns true if instruction is classified. */ @@ -5090,7 +5098,7 @@ class riscv_recorded_insn final } /* Returns true if instruction needs only saving pc and rd. */ - static bool + bool need_save_pc_rd (ULONGEST ival) noexcept { return (is_lui_insn (ival) || is_auipc_insn (ival) || is_jal_insn (ival) @@ -5123,7 +5131,47 @@ class riscv_recorded_insn final || is_flt_d_insn (ival) || is_fle_d_insn (ival) || is_fclass_d_insn (ival) || is_fcvt_w_d_insn (ival) || is_fcvt_wu_d_insn (ival) || is_fcvt_l_d_insn (ival) - || is_fcvt_lu_d_insn (ival) || is_fmv_x_d_insn (ival)); + || is_fcvt_lu_d_insn (ival) || is_fmv_x_d_insn (ival) + /* zicond */ + || is_czero_eqz_insn (ival) || is_czero_nez_insn (ival) + /* bitmanip */ + || (m_xlen == 8 && is_add_uw_insn (ival)) || is_andn_insn (ival) + || is_bclr_insn (ival) || (m_xlen == 8 && is_bclri_insn (ival)) + || (m_xlen == 4 && is_bclri_rv32_insn (ival)) || is_bext_insn (ival) + || (m_xlen == 8 && is_bexti_insn (ival)) + || (m_xlen == 4 && is_bexti_rv32_insn (ival)) || is_binv_insn (ival) + || (m_xlen == 8 && is_binvi_insn (ival)) + || (m_xlen == 4 && is_binvi_rv32_insn (ival)) + || is_brev8_insn (ival) || is_bset_insn (ival) + || (m_xlen == 8 && is_bseti_insn (ival)) + || (m_xlen == 4 && is_bseti_rv32_insn (ival)) + || is_clmul_insn (ival) || is_clmulh_insn (ival) + || is_clmulr_insn (ival) || is_clz_insn (ival) + || (m_xlen == 8 && is_clzw_insn (ival)) || is_cpop_insn (ival) + || (m_xlen == 8 && is_cpopw_insn (ival)) || is_ctz_insn (ival) + || (m_xlen == 8 && is_ctzw_insn (ival)) || is_max_insn (ival) + || is_maxu_insn (ival) || is_min_insn (ival) || is_minu_insn (ival) + || is_orc_b_insn (ival) || is_orn_insn (ival) || is_pack_insn (ival) + || is_packh_insn (ival) || (m_xlen == 8 && is_packw_insn (ival)) + || (m_xlen == 8 && is_rev8_insn (ival)) + || (m_xlen == 4 && is_rev8_rv32_insn (ival)) || is_rol_insn (ival) + || (m_xlen == 8 && is_rolw_insn (ival)) || is_ror_insn (ival) + || (m_xlen == 8 && is_rori_insn (ival)) + || (m_xlen == 4 && is_rori_rv32_insn (ival)) + || (m_xlen == 8 && is_roriw_insn (ival)) + || (m_xlen == 8 && is_rorw_insn (ival)) || is_sext_b_insn (ival) + || is_sext_h_insn (ival) || is_sh1add_insn (ival) + || (m_xlen == 8 && is_sh1add_uw_insn (ival)) + || is_sh2add_insn (ival) + || (m_xlen == 8 && is_sh2add_uw_insn (ival)) + || is_sh3add_insn (ival) + || (m_xlen == 8 && is_sh3add_uw_insn (ival)) + || (m_xlen == 8 && is_slli_uw_insn (ival)) + || (m_xlen == 4 && is_unzip_insn (ival)) || is_xnor_insn (ival) + || is_xperm4_insn (ival) || is_xperm8_insn (ival) + || is_zext_h_insn (ival) + || (m_xlen == 4 && is_zext_h_rv32_insn (ival)) + || (m_xlen == 4 && is_zip_insn (ival))); } /* Returns true if instruction is classified. This function can set @@ -5416,6 +5464,37 @@ class riscv_recorded_insn final || !save_mem (addr + offset, 4) || set_ordinary_record_type ()); } + /* c.zihintntl */ + if (is_c_ntl_p1_insn (ival) || is_c_ntl_pall_insn (ival) + || is_c_ntl_s1_insn (ival) || is_c_ntl_all_insn (ival)) + return set_ordinary_record_type (); + + /* c.bitmanip */ + if (is_c_lbu_insn (ival) || is_c_lhu_insn (ival) || is_c_lh_insn (ival)) + return (!save_reg (decode_crs2_short (ival)) + || set_ordinary_record_type ()); + + if (is_c_sb_insn (ival)) + { + ULONGEST offset = ULONGEST{EXTRACT_ZCB_BYTE_UIMM (ival)}; + return (!read_reg (regcache, decode_crs1_short (ival), addr) + || !save_mem (addr + offset, 1) || set_ordinary_record_type ()); + } + + if (is_c_sh_insn (ival)) + { + ULONGEST offset = ULONGEST{EXTRACT_ZCB_HALFWORD_UIMM (ival)}; + return (!read_reg (regcache, decode_crs1_short (ival), addr) + || !save_mem (addr + offset, 2) || set_ordinary_record_type ()); + } + + if (is_c_zext_b_insn (ival) || is_c_sext_b_insn (ival) + || is_c_zext_h_insn (ival) || is_c_sext_h_insn (ival) + || is_c_not_insn (ival) || is_c_mul_insn (ival) + || (m_xlen == 8 && is_c_zext_w_insn (ival))) + return (!save_reg (decode_crs1_short (ival)) + || set_ordinary_record_type ()); + warning (_("Currently this instruction with len 2(%s) is unsupported"), hex_string (ival)); return false; diff --git a/include/opcode/riscv-opc.h b/include/opcode/riscv-opc.h index 1c649628390..6a5d54b1615 100644 --- a/include/opcode/riscv-opc.h +++ b/include/opcode/riscv-opc.h @@ -579,6 +579,32 @@ #define MASK_RORW 0xfe00707f #define MATCH_RORIW 0x6000501b #define MASK_RORIW 0xfe00707f +#define MATCH_BCLRI_RV32 0x48001013 +#define MASK_BCLRI_RV32 0xfe00707f +#define MATCH_BEXTI_RV32 0x48005013 +#define MASK_BEXTI_RV32 0xfe00707f +#define MATCH_BINVI_RV32 0x68001013 +#define MASK_BINVI_RV32 0xfe00707f +#define MATCH_BREV8 0x68705013 +#define MASK_BREV8 0xfff0707f +#define MATCH_BSETI_RV32 0x28001013 +#define MASK_BSETI_RV32 0xfe00707f +#define MATCH_ORC_B 0x28705013 +#define MASK_ORC_B 0xfff0707f +#define MATCH_REV8 0x6b805013 +#define MASK_REV8 0xfff0707f +#define MATCH_REV8_RV32 0x69805013 +#define MASK_REV8_RV32 0xfff0707f +#define MATCH_RORI_RV32 0x60005013 +#define MASK_RORI_RV32 0xfe00707f +#define MATCH_UNZIP 0x8f05013 +#define MASK_UNZIP 0xfff0707f +#define MATCH_ZEXT_H 0x800403b +#define MASK_ZEXT_H 0xfff0707f +#define MATCH_ZEXT_H_RV32 0x8004033 +#define MASK_ZEXT_H_RV32 0xfff0707f +#define MATCH_ZIP 0x8f01013 +#define MASK_ZIP 0xfff0707f #define MATCH_SH1ADD 0x20002033 #define MASK_SH1ADD 0xfe00707f #define MATCH_SH2ADD 0x20004033 @@ -2269,6 +2295,8 @@ #define MASK_C_SEXT_H 0xfc7f #define MATCH_C_ZEXT_W 0x9c71 #define MASK_C_ZEXT_W 0xfc7f +#define MATCH_C_SEXT_W 0x2001 +#define MASK_C_SEXT_W 0xf07f #define MATCH_C_NOT 0x9c75 #define MASK_C_NOT 0xfc7f #define MATCH_C_MUL 0x9c41 @@ -4370,6 +4398,7 @@ DECLARE_INSN(sd, MATCH_SD, MASK_SD) DECLARE_INSN(pause, MATCH_PAUSE, MASK_PAUSE) DECLARE_INSN(fence, MATCH_FENCE, MASK_FENCE) DECLARE_INSN(fence_i, MATCH_FENCE_I, MASK_FENCE_I) +DECLARE_INSN(fence_tso, MATCH_FENCE_TSO, MASK_FENCE_TSO) DECLARE_INSN(mul, MATCH_MUL, MASK_MUL) DECLARE_INSN(mulh, MATCH_MULH, MASK_MULH) DECLARE_INSN(mulhsu, MATCH_MULHSU, MASK_MULHSU) @@ -4570,6 +4599,19 @@ DECLARE_INSN(cpopw, MATCH_CPOPW, MASK_CPOPW) DECLARE_INSN(rolw, MATCH_ROLW, MASK_ROLW) DECLARE_INSN(rorw, MATCH_RORW, MASK_RORW) DECLARE_INSN(roriw, MATCH_RORIW, MASK_RORIW) +DECLARE_INSN(bclri_rv32, MATCH_BCLRI_RV32, MASK_BCLRI_RV32) +DECLARE_INSN(bexti_rv32, MATCH_BEXTI_RV32, MASK_BEXTI_RV32) +DECLARE_INSN(binvi_rv32, MATCH_BINVI_RV32, MASK_BINVI_RV32) +DECLARE_INSN(brev8, MATCH_BREV8, MASK_BREV8) +DECLARE_INSN(bseti_rv32, MATCH_BSETI_RV32, MASK_BSETI_RV32) +DECLARE_INSN(orc_b, MATCH_ORC_B, MASK_ORC_B) +DECLARE_INSN(rev8, MATCH_REV8, MASK_REV8) +DECLARE_INSN(rev8_rv32, MATCH_REV8_RV32, MASK_REV8_RV32) +DECLARE_INSN(rori_rv32, MATCH_RORI_RV32, MASK_RORI_RV32) +DECLARE_INSN(unzip, MATCH_UNZIP, MASK_UNZIP) +DECLARE_INSN(zext_h, MATCH_ZEXT_H, MASK_ZEXT_H) +DECLARE_INSN(zext_h_rv32, MATCH_ZEXT_H_RV32, MASK_ZEXT_H_RV32) +DECLARE_INSN(zip, MATCH_ZIP, MASK_ZIP) DECLARE_INSN(sh1add, MATCH_SH1ADD, MASK_SH1ADD) DECLARE_INSN(sh2add, MATCH_SH2ADD, MASK_SH2ADD) DECLARE_INSN(sh3add, MATCH_SH3ADD, MASK_SH3ADD) @@ -4803,6 +4845,7 @@ DECLARE_INSN(vsm3me_vv, MATCH_VSM3ME_VV, MASK_VSM3ME_VV) /* Zcb instructions. */ DECLARE_INSN(c_sext_b, MATCH_C_SEXT_B, MASK_C_SEXT_B) DECLARE_INSN(c_sext_h, MATCH_C_SEXT_H, MASK_C_SEXT_H) +DECLARE_INSN(c_sext_w, MATCH_C_SEXT_W, MASK_C_SEXT_W) DECLARE_INSN(c_zext_b, MATCH_C_ZEXT_B, MASK_C_ZEXT_B) DECLARE_INSN(c_zext_h, MATCH_C_ZEXT_H, MASK_C_ZEXT_H) DECLARE_INSN(c_zext_w, MATCH_C_ZEXT_W, MASK_C_ZEXT_W) -- 2.34.1