From nobody Mon Nov 10 17:35:57 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1558131343; cv=none; d=zoho.com; s=zohoarc; b=lDdjS5Q2lO32NR/m7rI1CKUHXTkbLRC3/qvZEd5HGugxxXZ9KNRDzMH4WUaS040ySLS47WzeZHIag1HmbnveLWy9EnuofR4G5ma24YFflYzFeGEi1pVnTmiXrk5dq4tQoWO8zBtdc+sMmID2nTL3hf+oL5RrWuk19hav3PQYLkg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558131343; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=KvuhrySpeb2Eavr68cqF8hfldtdGZn4QPq1qI2AcMG4=; b=mc1+voBY6gXgTDKmqk8RwfXiI/+MYI2WlMowtcdEb4YYluyl85BXSshcxBZqdxuDQ6UUmtW8IjQFYA9lGmW/j4f727x7b4t+OM28Mz1iq5xrVH9n0Nf8aKrkis7aqxOi9tnyojbStDcWroaxLbV8ljdbzuZFGO6Fu+OtJWVei8I= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1558131343639123.35945825353997; Fri, 17 May 2019 15:15:43 -0700 (PDT) Received: from localhost ([127.0.0.1]:54323 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hRl81-0000cz-83 for importer@patchew.org; Fri, 17 May 2019 18:15:01 -0400 Received: from eggs.gnu.org ([209.51.188.92]:37034) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hRl5z-0007tX-LH for qemu-devel@nongnu.org; Fri, 17 May 2019 18:12:56 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hRl5w-0007IJ-NX for qemu-devel@nongnu.org; Fri, 17 May 2019 18:12:54 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:41010) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hRl5u-0007Ep-U8; Fri, 17 May 2019 18:12:51 -0400 Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 18 May 2019 06:12:46 +0800 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP; 17 May 2019 14:48:15 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.140]) by uls-op-cesaip01.wdc.com with ESMTP; 17 May 2019 15:12:45 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1558131171; x=1589667171; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=1P5qQVKzrpTrWYHCy5Y+UMpW1pxkR7dCHPH3WsXz+P8=; b=OvaFUob+wZt67Yv/mblaaxSjuUoe4miSuwRkVHHZCDKRlUPSW52TTuwr QKKwbLm6moWJyIfr4TbF2UY4eyvFfsBVTdyn4r7zXvX/J4CRMT3opdSCW VHGTiITNUk4qqh4BSrHP5/kH7FlspVRFcIED7GoZgVpi6tg+0RvIAhaa1 iiGtxy/d1i66/NoYEMRhM8rfLFcqegbM2rswBurHxcPUlxxKGlNHQeOUr vWdZXq/HKB2MN8JCL+QxPs5QJpDogKCNmgM0Wa5gWrUSUUTkEGkyr9yYg MaFYF2GY6P4XvCicBiZD/1IN95dQlB2SPNPXr1gKdKM/L+M+ZJsdbaCRP A==; X-IronPort-AV: E=Sophos;i="5.60,481,1549900800"; d="scan'208";a="110242474" IronPort-SDR: o3M2jrXjyaPSCri3UE3ELuMYg7Kqs5Iuh9xPGJFDy/WnMbQ4ZPakLSg3jTqLy8DIVcDvcukT/K E7+CH+q2oKRyxj8mfo6qChu0jX4UIrUEkYrWeUSiHUf3lmx6Rx+pnMeVjBUXaFHXoFsaFDvOPs kb5JTBWutv7LH2vLTpRa0+MhR21C8MLQjV+sxBBR8zbRmycmQoYEcKauMIcYQ/K5w34VxjGFlz ArJE7tX+M6znBeLRxa3rht/XC7Hz4i50YnLykG/Xy3rRZ7YDGUA22JUx1fvQtF6UtvEJ2VR+z1 UcYNyo/OXZah1Wb+GJJAhHJi IronPort-SDR: iO/Mcn4Z0aOYIqHXKCpsljROJ4JsxDQNKRw4JTLJAkeNoSdzWk7g7n/PITcgsHDFI24DBlX2Gz vMbJy4n+Efy3FRKEN71Xw0cQmz9Hh49SjrRJktPIDYuDqJN72iRsz36Axt66tuXHns6fXUpCvt ZVyAGoiyZaG1kPvAYZmFOKQu3jRaVAU1tlclhc5XTMRXw/4QVv62wiRvAEznIUG20K+FxudiZ0 JD7HGjD/Q4XpfC4f+Fgz5ClpvzZ9JGUUpVJH/qFO4RLItuwZzmhHzAcKltDlH1JUFpY9yzApuK 7WY= From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 17 May 2019 15:10:58 -0700 Message-Id: X-Mailer: git-send-email 2.21.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 216.71.154.45 Subject: [Qemu-devel] [PATCH v1 1/4] target/riscv: Fix PMP range boundary address bug X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" From: Dayeol Lee A wrong address is passed to `pmp_is_in_range` while checking if a memory access is within a PMP range. Since the ending address of the pmp range (i.e., pmp_state.addr[i].ea) is set to the last address in the range (i.e., pmp base + pmp size - 1), memory accesses containg the last address in the range will always fail. For example, assume that a PMP range is 4KB from 0x87654000 such that the last address within the range is 0x87654fff. 1-byte access to 0x87654fff should be considered to be fully inside the PMP range. However the access now fails and complains partial inclusion because pmp_is_in_range(env, i, addr + size) returns 0 whereas pmp_is_in_range(env, i, addr) returns 1. Signed-off-by: Dayeol Lee Reviewed-by: Alistair Francis Reviewed-by: Michael Clark Signed-off-by: Alistair Francis --- target/riscv/pmp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/riscv/pmp.c b/target/riscv/pmp.c index b11c4ae22f..a2fcc90d73 100644 --- a/target/riscv/pmp.c +++ b/target/riscv/pmp.c @@ -246,7 +246,7 @@ bool pmp_hart_has_privs(CPURISCVState *env, target_ulon= g addr, from low to high */ for (i =3D 0; i < MAX_RISCV_PMPS; i++) { s =3D pmp_is_in_range(env, i, addr); - e =3D pmp_is_in_range(env, i, addr + size); + e =3D pmp_is_in_range(env, i, addr + size - 1); =20 /* partially inside */ if ((s + e) =3D=3D 1) { --=20 2.21.0 From nobody Mon Nov 10 17:35:57 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1558131316; cv=none; d=zoho.com; s=zohoarc; b=TkOmN7Z7KB/+eFTdvUatGSiFIxeN6b8ikq2y4T1VSGsy0SS20+QsQDk8ZOoL/t05sm9MMgTvdKxio/WJkgf9VIh4efrHxZWU010dWga6yTQOduW05KnjtLpyfYIvO+IjeVZNb1qaHHvHCcWIeZilH3CNTZPZgJJehwUE2rvetUo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558131316; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=M0kqyFhcU8VHLAy3mUzZvCYIcJw+cHniRBZ9PiwYUr8=; b=CY3eabeVGYKo8yox1m6XmXA7AEikwoyaiWpWXhLUdxhnZANIqAtb3YDe4GVcAQc7rffX2QIEa94J9YR94MXgM4ktEmKB1sI2G6gqU/uoM5tls51nm/r6F0JWRN8wUBKyLIuYFdAy+VoubcvuTFFd5CiC8jMajFDiuZaqcyRYt+c= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1558131316718668.0666627862165; Fri, 17 May 2019 15:15:16 -0700 (PDT) Received: from localhost ([127.0.0.1]:54327 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hRl85-0000hA-GD for importer@patchew.org; Fri, 17 May 2019 18:15:05 -0400 Received: from eggs.gnu.org ([209.51.188.92]:37087) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hRl61-0007tu-G0 for qemu-devel@nongnu.org; Fri, 17 May 2019 18:13:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hRl5z-0007KV-Nc for qemu-devel@nongnu.org; Fri, 17 May 2019 18:12:57 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:41014) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hRl5y-0007GL-25; Fri, 17 May 2019 18:12:54 -0400 Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 18 May 2019 06:12:48 +0800 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP; 17 May 2019 14:48:17 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.140]) by uls-op-cesaip01.wdc.com with ESMTP; 17 May 2019 15:12:47 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1558131175; x=1589667175; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=RskmDp4j3KgbBIS2jyvrO4SZ54oGm0BoWelhuc13RH0=; b=YJK1BXPmIKdlutRMUUjD8WCcMn0mW34O8H+erFZ+HD15dDdGdYHuCrk1 FSPa5mvUQloL8Abz+yI83o8D3RjZ0FQ3vu/jl2Ibw1XWaT6cwQLagNdbb VUJBS8q5qXrTC8A2vZA4qzS24oB22NYV5oANcxCSnpcAZZa4Q/IC1wxem /avQ/H9xVBKGSmYiVRizqcH9yhbEv6xgdm6m215E8tTWC++ZgJoNvydSR msoSr83txTrLfs0QVgLtkoKLfH2X7rt2nS9s0kkuoIxbyUc5YSaFR6Ibc pdtSsYc3l+LA15R9azbsSb0NR2jsUmQJXY1sSGf1l2TvxNDGxdaRtOvJG Q==; X-IronPort-AV: E=Sophos;i="5.60,481,1549900800"; d="scan'208";a="110242476" IronPort-SDR: /bXG8hyLW+RrqeAataDe9A3bsxqsHkCaqR7AwUKObSk8LheqP0oWwzxZR7Zu+bVUoK4yNdumrK gmRWlCpyorVXiDJlRzGrX25LVVbm6tGAudr+IHVPAPYTSqZrBp/aY5JV6GQLlaKBeH4LwdRJsP HeUpZFFCWjwEeZcf5GFKUKdQdIHpVbu5bNqs0ASL0kblWFtnJKadRIzneyE2lgRLF2A4NLLjzs WbQgnStYJzNPfE0GxSNg93zOEbVQ5pFdBoMgKFfWUmYR/2J5nwNJ5ZlcTYXnUx4OyHtTEm6FOq 4WHwJaZFeMeIF/wwav3kxaIv IronPort-SDR: BR8YwXfSNi2NetMtB9HNZmssyDn1SwZoUxyOfj7JmEAyIWXhOizCVGzbsuakeOYNh3Ni/E8x3E mbN8bR1HYs2KzVAEP8kqy9dYKBPDlOnr4sBqOiyzR2pNRer2GUkPC0if4QoO5RZcefKwX7O+fq hCCPjde8C+OBgHcTgcpWc0imbxsi7X09aXeXWbY8MuMaKUF9+XO9hxCbV1P6KY8dg6/9OrJKn8 dEcSH5KM10RizvLvfEBC0WNNeaxkCzzqu5s2qaMi1OhYaRUzB8fw0QXCIvDoa5nLyhfxZDQeoP +wA= From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 17 May 2019 15:11:01 -0700 Message-Id: <4e552352bb35b1f4b086e260be369464df7c490e.1558131003.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 216.71.154.45 Subject: [Qemu-devel] [PATCH v1 2/4] disas/riscv: Disassemble reserved compressed encodings as illegal X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" From: Michael Clark Due to the design of the disassembler, the immediate is not known during decoding of the opcode; so to handle compressed encodings with reserved immediate values (non-zero), we need to add an additional check during decompression to match reserved encodings with zero immediates and translate them into the illegal instruction. The following compressed opcodes have reserved encodings with zero immediates: c.addi4spn, c.addi, c.lui, c.addi16sp, c.srli, c.srai, c.andi and c.slli Signed-off-by: Michael Clark Signed-off-by: Alistair Francis --- disas/riscv.c | 51 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 17 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index 59a9b0437a..3ab4586f0a 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -504,14 +504,19 @@ typedef struct { const rvc_constraint *constraints; } rv_comp_data; =20 +enum { + rvcd_imm_nz =3D 0x1 +}; + typedef struct { const char * const name; const rv_codec codec; const char * const format; const rv_comp_data *pseudo; - const int decomp_rv32; - const int decomp_rv64; - const int decomp_rv128; + const short decomp_rv32; + const short decomp_rv64; + const short decomp_rv128; + const short decomp_data; } rv_opcode_data; =20 /* register names */ @@ -1011,7 +1016,7 @@ const rv_opcode_data opcode_data[] =3D { { "fcvt.q.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, { "fmv.x.q", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, { "fmv.q.x", rv_codec_r, rv_fmt_frd_rs1, NULL, 0, 0, 0 }, - { "c.addi4spn", rv_codec_ciw_4spn, rv_fmt_rd_rs1_imm, NULL, rv_op_addi= , rv_op_addi, rv_op_addi }, + { "c.addi4spn", rv_codec_ciw_4spn, rv_fmt_rd_rs1_imm, NULL, rv_op_addi= , rv_op_addi, rv_op_addi, rvcd_imm_nz }, { "c.fld", rv_codec_cl_ld, rv_fmt_frd_offset_rs1, NULL, rv_op_fld, rv_= op_fld, 0 }, { "c.lw", rv_codec_cl_lw, rv_fmt_rd_offset_rs1, NULL, rv_op_lw, rv_op_= lw, rv_op_lw }, { "c.flw", rv_codec_cl_lw, rv_fmt_frd_offset_rs1, NULL, rv_op_flw, 0, = 0 }, @@ -1019,14 +1024,14 @@ const rv_opcode_data opcode_data[] =3D { { "c.sw", rv_codec_cs_sw, rv_fmt_rs2_offset_rs1, NULL, rv_op_sw, rv_op= _sw, rv_op_sw }, { "c.fsw", rv_codec_cs_sw, rv_fmt_frs2_offset_rs1, NULL, rv_op_fsw, 0,= 0 }, { "c.nop", rv_codec_ci_none, rv_fmt_none, NULL, rv_op_addi, rv_op_addi= , rv_op_addi }, - { "c.addi", rv_codec_ci, rv_fmt_rd_rs1_imm, NULL, rv_op_addi, rv_op_ad= di, rv_op_addi }, + { "c.addi", rv_codec_ci, rv_fmt_rd_rs1_imm, NULL, rv_op_addi, rv_op_ad= di, rv_op_addi, rvcd_imm_nz }, { "c.jal", rv_codec_cj_jal, rv_fmt_rd_offset, NULL, rv_op_jal, 0, 0 }, { "c.li", rv_codec_ci_li, rv_fmt_rd_rs1_imm, NULL, rv_op_addi, rv_op_a= ddi, rv_op_addi }, - { "c.addi16sp", rv_codec_ci_16sp, rv_fmt_rd_rs1_imm, NULL, rv_op_addi,= rv_op_addi, rv_op_addi }, - { "c.lui", rv_codec_ci_lui, rv_fmt_rd_imm, NULL, rv_op_lui, rv_op_lui,= rv_op_lui }, - { "c.srli", rv_codec_cb_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_srli, rv_o= p_srli, rv_op_srli }, - { "c.srai", rv_codec_cb_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_srai, rv_o= p_srai, rv_op_srai }, - { "c.andi", rv_codec_cb_imm, rv_fmt_rd_rs1_imm, NULL, rv_op_andi, rv_o= p_andi, rv_op_andi }, + { "c.addi16sp", rv_codec_ci_16sp, rv_fmt_rd_rs1_imm, NULL, rv_op_addi,= rv_op_addi, rv_op_addi, rvcd_imm_nz }, + { "c.lui", rv_codec_ci_lui, rv_fmt_rd_imm, NULL, rv_op_lui, rv_op_lui,= rv_op_lui, rvcd_imm_nz }, + { "c.srli", rv_codec_cb_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_srli, rv_o= p_srli, rv_op_srli, rvcd_imm_nz }, + { "c.srai", rv_codec_cb_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_srai, rv_o= p_srai, rv_op_srai, rvcd_imm_nz }, + { "c.andi", rv_codec_cb_imm, rv_fmt_rd_rs1_imm, NULL, rv_op_andi, rv_o= p_andi, rv_op_andi, rvcd_imm_nz }, { "c.sub", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_sub, rv_op_sub,= rv_op_sub }, { "c.xor", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_xor, rv_op_xor,= rv_op_xor }, { "c.or", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_or, rv_op_or, rv= _op_or }, @@ -1036,7 +1041,7 @@ const rv_opcode_data opcode_data[] =3D { { "c.j", rv_codec_cj, rv_fmt_rd_offset, NULL, rv_op_jal, rv_op_jal, rv= _op_jal }, { "c.beqz", rv_codec_cb, rv_fmt_rs1_rs2_offset, NULL, rv_op_beq, rv_op= _beq, rv_op_beq }, { "c.bnez", rv_codec_cb, rv_fmt_rs1_rs2_offset, NULL, rv_op_bne, rv_op= _bne, rv_op_bne }, - { "c.slli", rv_codec_ci_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_slli, rv_o= p_slli, rv_op_slli }, + { "c.slli", rv_codec_ci_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_slli, rv_o= p_slli, rv_op_slli, rvcd_imm_nz }, { "c.fldsp", rv_codec_ci_ldsp, rv_fmt_frd_offset_rs1, NULL, rv_op_fld,= rv_op_fld, rv_op_fld }, { "c.lwsp", rv_codec_ci_lwsp, rv_fmt_rd_offset_rs1, NULL, rv_op_lw, rv= _op_lw, rv_op_lw }, { "c.flwsp", rv_codec_ci_lwsp, rv_fmt_frd_offset_rs1, NULL, rv_op_flw,= 0, 0 }, @@ -2795,8 +2800,12 @@ static void decode_inst_decompress_rv32(rv_decode *d= ec) { int decomp_op =3D opcode_data[dec->op].decomp_rv32; if (decomp_op !=3D rv_op_illegal) { - dec->op =3D decomp_op; - dec->codec =3D opcode_data[decomp_op].codec; + if ((opcode_data[dec->op].decomp_data & rvcd_imm_nz) && dec->imm = =3D=3D 0) { + dec->op =3D rv_op_illegal; + } else { + dec->op =3D decomp_op; + dec->codec =3D opcode_data[decomp_op].codec; + } } } =20 @@ -2804,8 +2813,12 @@ static void decode_inst_decompress_rv64(rv_decode *d= ec) { int decomp_op =3D opcode_data[dec->op].decomp_rv64; if (decomp_op !=3D rv_op_illegal) { - dec->op =3D decomp_op; - dec->codec =3D opcode_data[decomp_op].codec; + if ((opcode_data[dec->op].decomp_data & rvcd_imm_nz) && dec->imm = =3D=3D 0) { + dec->op =3D rv_op_illegal; + } else { + dec->op =3D decomp_op; + dec->codec =3D opcode_data[decomp_op].codec; + } } } =20 @@ -2813,8 +2826,12 @@ static void decode_inst_decompress_rv128(rv_decode *= dec) { int decomp_op =3D opcode_data[dec->op].decomp_rv128; if (decomp_op !=3D rv_op_illegal) { - dec->op =3D decomp_op; - dec->codec =3D opcode_data[decomp_op].codec; + if ((opcode_data[dec->op].decomp_data & rvcd_imm_nz) && dec->imm = =3D=3D 0) { + dec->op =3D rv_op_illegal; + } else { + dec->op =3D decomp_op; + dec->codec =3D opcode_data[decomp_op].codec; + } } } =20 --=20 2.21.0 From nobody Mon Nov 10 17:35:57 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1558131315; cv=none; d=zoho.com; s=zohoarc; b=QSwl6YrSSCxJS+5CZX9oL1E+dQsqYwyty/2YVOoYLI+GE2A0GAcZQfdXWgMLNTy9W+Z9+p9whH8yZb5WVXTZqOjFc1WZ+SjVDoRjGNaYXrH4o0D3+cprlCNgqXXEhtpxMXt5v7yQLB9LYw5prQU1XooMlXCQtmB039kM/T68ZdE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558131315; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=TpExYQSmuJ5yPonBwcZXHxqjqFTb97YiLS7ZevuIGj4=; b=OVgajqRb1rYrL7t0gzRLKg43UMTv7zaq+i9L97ivU1puhXZK+P4grlkc39vVpCAvorPrqwPh2XJ8Xoammg2nZzr3iL0sbw/4WXbG/52kzdTx+JLY/dXn6fMbTQ9RbETh8gkbmy4oPaXNSWilm0158uSOlIrZXc/d+qOLNgRltKs= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1558131315445506.81241847327897; Fri, 17 May 2019 15:15:15 -0700 (PDT) Received: from localhost ([127.0.0.1]:54325 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hRl83-0000fF-9A for importer@patchew.org; Fri, 17 May 2019 18:15:03 -0400 Received: from eggs.gnu.org ([209.51.188.92]:37103) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hRl62-0007uo-9o for qemu-devel@nongnu.org; Fri, 17 May 2019 18:13:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hRl60-0007LI-Hs for qemu-devel@nongnu.org; Fri, 17 May 2019 18:12:58 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:41017) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hRl5z-0007HB-QD; Fri, 17 May 2019 18:12:56 -0400 Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 18 May 2019 06:12:51 +0800 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP; 17 May 2019 14:48:20 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.140]) by uls-op-cesaip01.wdc.com with ESMTP; 17 May 2019 15:12:50 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1558131176; x=1589667176; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=UraNYZa/rGlNA4WNmmKuAimGi9hHpUL2xBtVQ8qUMgY=; b=L0Ge630CQW22PLtD6YTpYzbW3bLaDahpxkEQ2Art+3CLjptvl8HW9xzz PpiJVRKr91bHjLUBcHx6f+AO3mMZB6ZHZNw42yf2+YoJovpziqiFqkvVC 8ghdwvRhfTrq/2GFqq/+tpyrncMb0FoHdUGEwWUZENWpAe3AcswKIdXfv YdVfQPoSUyY9NWLWG7qjj2qp4MgFTVR5AE1VzG4KdV5EHMZjHKV8vME94 HK4JaG7fF52tNzyTAIjqEz6MeYIkGQH6mZBmVQ1kvFnO8bPiMR8LavhHO /c3l02tqV6JIe4OdsFeJUhJLqzdZLSG4ioWcovSCY0l1yfJ2lgPaBUwAQ w==; X-IronPort-AV: E=Sophos;i="5.60,481,1549900800"; d="scan'208";a="110242478" IronPort-SDR: JW4A5iRfgafFbu+nAOoRyFuHUlCPXociE9hZsveRIHUsC+SPYezvk0K04MwRI6V9JJXCKlIwIM OubU5KKpZQHd2rJyEybxxceCo24Es/ZSE4UX80it9qF39IyWN0LRVGa9BEXh0MTKCdIqj2fp/1 Qr6PM7HpwidAfzUaFulIgrEfgIrNAK8e0NNYvPUj6KDOSFSJpYlVAcwKr8Mu075BhF96Ia7dio jQ4rFouSu0Z5qA5LbnM2iMBwDz7kEMo54dOcGsaznP17sfogAKIkLChnDN1047KFpytjAcRvkf Xl1MaizZUX5DJzZ0aGflHn2P IronPort-SDR: /V5Cj3wc7Oi2NbQNGTtqzdEot64q+ffX4//OW12VKXv0U6bGDgZefsMqn/KQztlFOGuwHQC8CS +4dEaaeof/TidoRtFSmLmfFta5rHQWZDfiKxbl+8teNxfEPTec+s4LxYNS2Ngs2965Zp4rh71C YtgQKJE27zKgUBcaZTtfF6yapeQB4L19NIGqEsnE1TO9TeOEwWj5WvcqgPXpFNWYPBGpPYdwIF EReYfgp0gxq14V1HVG8NBEyC5dpQqv5fIao6S/u0z3UB/gE/Y69jytBUtLyD4fj3IMEZy07sXy iEM= From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 17 May 2019 15:11:04 -0700 Message-Id: X-Mailer: git-send-email 2.21.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 216.71.154.45 Subject: [Qemu-devel] [PATCH v1 3/4] disas/riscv: Fix `rdinstreth` constraint X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" From: Michael Clark The constraint for `rdinstreth` was comparing the csr number to 0xc80, which is `cycleh` instead. Fix this. Author: Wladimir J. van der Laan Signed-off-by: Michael Clark Signed-off-by: Alistair Francis --- disas/riscv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/disas/riscv.c b/disas/riscv.c index 3ab4586f0a..c2578a3c4b 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -614,7 +614,7 @@ static const rvc_constraint rvcc_rdtime[] =3D { rvc_rs1= _eq_x0, rvc_csr_eq_0xc01, r static const rvc_constraint rvcc_rdinstret[] =3D { rvc_rs1_eq_x0, rvc_csr_= eq_0xc02, rvc_end }; static const rvc_constraint rvcc_rdcycleh[] =3D { rvc_rs1_eq_x0, rvc_csr_e= q_0xc80, rvc_end }; static const rvc_constraint rvcc_rdtimeh[] =3D { rvc_rs1_eq_x0, rvc_csr_eq= _0xc81, rvc_end }; -static const rvc_constraint rvcc_rdinstreth[] =3D { rvc_rs1_eq_x0, rvc_csr= _eq_0xc80, rvc_end }; +static const rvc_constraint rvcc_rdinstreth[] =3D { rvc_rs1_eq_x0, rvc_csr= _eq_0xc82, rvc_end }; static const rvc_constraint rvcc_frcsr[] =3D { rvc_rs1_eq_x0, rvc_csr_eq_0= x003, rvc_end }; static const rvc_constraint rvcc_frrm[] =3D { rvc_rs1_eq_x0, rvc_csr_eq_0x= 002, rvc_end }; static const rvc_constraint rvcc_frflags[] =3D { rvc_rs1_eq_x0, rvc_csr_eq= _0x001, rvc_end }; --=20 2.21.0 From nobody Mon Nov 10 17:35:57 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1558131450; cv=none; d=zoho.com; s=zohoarc; b=LXiiaQ/NengYpH/7t/XTg4AWyKjUbnFKVUXXqd0Bul+W8xGYEnGqps1RAivry1OcYt5rSYBc0meap1gZ6tLbNlGWYVYSKXsEmhj4L51LR58/p4MqMjI6dUU4IKesHZjvzdLRg3/kwXN10SBhSb31C7Auftn5Z3qOkxdGcIQMejY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558131450; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=h0j3ZYdKc1fHCvrGCB+6wIWFZAud/pLpXFq5WTc5crY=; b=EFSf3umQPE9t90zoxGhCBef9uDHzdxiosnHR/v8tjCmKe2HD1l9/nIWIaBGyt+kkXrzOL8s50d9HQNKW1hTq4h5LIva07tK32VYKVOK9iiAhk2sIf3ZG2hNM9iORuu0F8ZKggXhKgv1h9gi0FPlSw00nu1X5tt4tsihwkzV9MWc= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1558131450071371.85378905626976; Fri, 17 May 2019 15:17:30 -0700 (PDT) Received: from localhost ([127.0.0.1]:54392 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hRlAK-0002mZ-WB for importer@patchew.org; Fri, 17 May 2019 18:17:25 -0400 Received: from eggs.gnu.org ([209.51.188.92]:37100) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hRl62-0007um-9T for qemu-devel@nongnu.org; Fri, 17 May 2019 18:13:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hRl60-0007LB-H6 for qemu-devel@nongnu.org; Fri, 17 May 2019 18:12:58 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:41010) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hRl5y-0007Ep-Sr; Fri, 17 May 2019 18:12:55 -0400 Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 18 May 2019 06:12:54 +0800 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP; 17 May 2019 14:48:23 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.140]) by uls-op-cesaip01.wdc.com with ESMTP; 17 May 2019 15:12:53 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1558131175; x=1589667175; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=vv3ooix0VzFZWoLjoANO1jDgrm6n68GaIIt8y5+y+Mc=; b=BtLmtTNBmqqru9vysJeHU2CBq3jLXXu3Sx/l2w1R3T8WD2TEnfKbynEz GRF06gbvScq3zZ1ORtShRIZkpls/Ot1jtVjuKNViKbbxm/gCuMT//VrEq hZqjRxZ/3/LztC6CPfojHHv3Ffhukq9+GvxAZnOAuYhrFoW+xFpXZhJWS 1xw/Y9T1+ygmrWJLj3+f2h78ZTEqJIoIlNRvvWaMrX+3Hw/WqfNRcIwCU Yomhn2dAg4hvw3Eko+JaGFci0MEo0LDwkK+1gG1XWIjJUa4UTLJ8FcpC3 9NHCcOStBWTA1T5MRCOOqkHDdNgJTB3lsRRNbhcQD+ZzboURVsQrrIFvQ A==; X-IronPort-AV: E=Sophos;i="5.60,481,1549900800"; d="scan'208";a="110242479" IronPort-SDR: vH/6U/4IvdIE4ick20++OrPiFMIT4sJcWa5DP3gkcu4P0gPEnAUPz21HoZj6vLpmbf0DdXGJqw GHjIxbZOy9L3tPPnj7GyHgZz+vLuJ8f791K/oItB89BBryJMLdRRin0JSifH9+CPvexoM9EHhI d9F4SN/afdO0vT1Tnoi04VgKMyAsO+i3+NZTOllvdQOTkxhJtPYw2hbZ/bgE4cJwzTrbSQyBGS vOCLcT/zxsTW+V+4N5ExutZCGUWnzi9hqCnDu/rQVDm0ZjDurgWhdKuEvON3GsUz9wgTeWIqlf oQYJfV8foP7AFmnXatnO8L73 IronPort-SDR: iH/RJEhRyk0/GQs+jemQ0DfRKPSRCApmyHRz4ZNXzm4usHR5iJdBOx6SiXLzC754z4sT2aQErV SY/xHEoVSqa16+dVQ11UgjeIvwDkQjzLl8nHTgBlUXKxVlfp5zywtUl6S/rTEKrkeVW5llvhgD xYtRB4LfBIUsR9UBKNo0NKvzUhJkdUnC8SWySegp92iM6/1YP+2jioaaJIEGMMlI9sQPUGyVwD W5K8mVQrk/Q2RHLXGrdO3UNcoqmp5fn+htTrLONRzJ2Si+Lt3gke4buAarNDwvQiHGkslGbEVS ewc= From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Fri, 17 May 2019 15:11:06 -0700 Message-Id: <7e9b4a6cc07a931e62da9c18c40849690eef7150.1558131003.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 216.71.154.45 Subject: [Qemu-devel] [PATCH v1 4/4] target/riscv: Implement riscv_cpu_unassigned_access X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, palmer@sifive.com, alistair.francis@wdc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" From: Michael Clark This patch adds support for the riscv_cpu_unassigned_access call and will raise a load or store access fault. Signed-off-by: Michael Clark [Changes by AF: - Squash two patches and rewrite commit message - Set baddr to the access address ] Signed-off-by: Alistair Francis Reviewed-by: Palmer Dabbelt --- target/riscv/cpu.c | 1 + target/riscv/cpu.h | 2 ++ target/riscv/cpu_helper.c | 16 ++++++++++++++++ 3 files changed, 19 insertions(+) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index b7675707e0..bfe92235d3 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -356,6 +356,7 @@ static void riscv_cpu_class_init(ObjectClass *c, void *= data) cc->gdb_stop_before_watchpoint =3D true; cc->disas_set_info =3D riscv_cpu_disas_set_info; #ifndef CONFIG_USER_ONLY + cc->do_unassigned_access =3D riscv_cpu_unassigned_access; cc->do_unaligned_access =3D riscv_cpu_do_unaligned_access; cc->get_phys_page_debug =3D riscv_cpu_get_phys_page_debug; #endif diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index c17184f4e4..8250175811 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -264,6 +264,8 @@ void riscv_cpu_do_unaligned_access(CPUState *cs, vaddr= addr, bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, int size, MMUAccessType access_type, int mmu_idx, bool probe, uintptr_t retaddr); +void riscv_cpu_unassigned_access(CPUState *cpu, hwaddr addr, bool is_write, + bool is_exec, int unused, unsigned size); char *riscv_isa_string(RISCVCPU *cpu); void riscv_cpu_list(void); =20 diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 41d6db41c3..202b6f021d 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -356,6 +356,22 @@ hwaddr riscv_cpu_get_phys_page_debug(CPUState *cs, vad= dr addr) return phys_addr; } =20 +void riscv_cpu_unassigned_access(CPUState *cs, hwaddr addr, bool is_write, + bool is_exec, int unused, unsigned size) +{ + RISCVCPU *cpu =3D RISCV_CPU(cs); + CPURISCVState *env =3D &cpu->env; + + if (is_write) { + cs->exception_index =3D RISCV_EXCP_STORE_AMO_ACCESS_FAULT; + } else { + cs->exception_index =3D RISCV_EXCP_LOAD_ACCESS_FAULT; + } + + env->badaddr =3D addr; + riscv_raise_exception(&cpu->env, cs->exception_index, GETPC()); +} + void riscv_cpu_do_unaligned_access(CPUState *cs, vaddr addr, MMUAccessType access_type, int mmu_idx, uintptr_t retaddr) --=20 2.21.0