From nobody Sun May 5 06:28:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1660879686; cv=none; d=zohomail.com; s=zohoarc; b=m9ytAIIaUDok3bZZjimBszzV4CHX6yT8r7SJb1VTj5sVhgheMUXEKTKN1qCfWdWQUTKGYFwD1UXNMRtRvOyD1dkkgUmYxrIjQLxdNgxJCDMUukuPI/UahJiZkL0nk3R3tSayry/tIjIHh67Aj/rYaTwEVUfmsGrgJ2FQ2oYNX2U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1660879686; 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; bh=ztH2KdOZugDOiuPkZQawXgA4F56Gwh34Y3mDIuElS7Y=; b=IdNQyDBPuRNL8WlbYluoVtOw1juq/ikFzi3N1TnfUbFMgSna44finBIUbpZk8m+FMIFiK8xKvi5NdnNBzH3nZaA9btaZvQc74gFLZPvaxAgCTc28Xo+Uv7u07l8jMkCvCeIvD9DXiKZVYsWCEFXXzMSGBJJ3cFRLyuoHG8Dip9w= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1660879686454823.8785520161475; Thu, 18 Aug 2022 20:28:06 -0700 (PDT) Received: from localhost ([::1]:37552 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oOsg1-00047Y-1j for importer@patchew.org; Thu, 18 Aug 2022 23:28:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37342) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oOseL-0001RY-OB for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:21 -0400 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]:36788) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oOseK-0002iT-9A for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:21 -0400 Received: by mail-pl1-x631.google.com with SMTP id c2so3108230plo.3 for ; Thu, 18 Aug 2022 20:26:19 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:bbf3:9914:aa9c:3b4e]) by smtp.gmail.com with ESMTPSA id g184-20020a6252c1000000b00535d19c46d7sm2199904pfb.203.2022.08.18.20.26.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Aug 2022 20:26:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc; bh=ztH2KdOZugDOiuPkZQawXgA4F56Gwh34Y3mDIuElS7Y=; b=x1MCq2nI2WuzpIlYXbl/jpbHcEo+NJaZbvN7kEPMwYzB8tJ1oDNLN/vqkvC5E0Z3z+ 2k3Sex1yChUeKGmPU2qXopnIoLjXUdlcxKARRoprpH/8Z6nACdsoMHzKfssVSndhuA7z lmSvqU4Lnx5k+mmtkpEM2WY4hAFYZh4jr/8tNbbtl1xtozjxi0Rf//X6YU8LUlNhWeE4 ux67HkKsFZ0nqrtg2D5KpGAVlROdv8x+R/gjhmtXtRONjNe6sZh0o83vJzlSLBoonpQu po4WbtG/1KZTsfehSBqKeo3hGEByUWaue9domADT6zYUN5dueaqb8EjRs9Z9dFlhxDQB PHug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc; bh=ztH2KdOZugDOiuPkZQawXgA4F56Gwh34Y3mDIuElS7Y=; b=bQQD6+QL5KkoV9cHuscDyPB+vc3+7OMQJK3dx3jG/1Ena3Y60MIFQwFRsbnhQiNhTh 00LxiXdPpGJkSwftKGH7pP2hZzWr8oFhqABltmK4GgvJ9H2RnL3v9NatVWOnwvR8JBNx joEuINO8S0eWaVY2VXuiFfgL2krhpBMvc3SNGpJ13IQNFmsk/HKNvanfPbvMY1vG59TI gtaESQL+vrst4At1/OFei417uAMEqPpamMg8Ba2SslhUD56YSB89QwDbW/8LP0t9YL78 AWZ71izn/vtopidBMOBv30OjQ5Igse2U3QIE98YCVzADvfb2epSt6vfAuowu2V+QOket nBAg== X-Gm-Message-State: ACgBeo0XvF3AAKqgxTvgn2FwgUkYVAlkO//QGYpgAeZI9oX33oMzGJYW AgnLsI+KCxtfuykW7oxymV6gaLAT0xD5Lg== X-Google-Smtp-Source: AA6agR5SSVOZTCKWM/L/4/UjLnnprvfUncVl6UVSYO5XlcQE27VLofcm3WrSvQdEWJWSaLVm6fly7w== X-Received: by 2002:a17:90b:33c4:b0:1f5:8428:beb9 with SMTP id lk4-20020a17090b33c400b001f58428beb9mr11821825pjb.95.1660879578520; Thu, 18 Aug 2022 20:26:18 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, iii@linux.ibm.com, dramforever@live.com, alistair.francis@wdc.com, alex.bennee@linaro.org Subject: [PATCH v6 01/21] linux-user/arm: Mark the commpage executable Date: Thu, 18 Aug 2022 20:25:55 -0700 Message-Id: <20220819032615.884847-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220819032615.884847-1-richard.henderson@linaro.org> References: <20220819032615.884847-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::631; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x631.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1660879687975100003 Content-Type: text/plain; charset="utf-8" We're about to start validating PAGE_EXEC, which means that we've got to mark the commpage executable. We had been placing the commpage outside of reserved_va, which was incorrect and lead to an abort. Signed-off-by: Richard Henderson Tested-by: Vivian Wang --- linux-user/arm/target_cpu.h | 4 ++-- linux-user/elfload.c | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/linux-user/arm/target_cpu.h b/linux-user/arm/target_cpu.h index 709d19bc9e..89ba274cfc 100644 --- a/linux-user/arm/target_cpu.h +++ b/linux-user/arm/target_cpu.h @@ -34,9 +34,9 @@ static inline unsigned long arm_max_reserved_va(CPUState = *cs) } else { /* * We need to be able to map the commpage. - * See validate_guest_space in linux-user/elfload.c. + * See init_guest_commpage in linux-user/elfload.c. */ - return 0xffff0000ul; + return 0xfffffffful; } } #define MAX_RESERVED_VA arm_max_reserved_va diff --git a/linux-user/elfload.c b/linux-user/elfload.c index ce902dbd56..3e3dc02499 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -398,7 +398,8 @@ enum { =20 static bool init_guest_commpage(void) { - void *want =3D g2h_untagged(HI_COMMPAGE & -qemu_host_page_size); + abi_ptr commpage =3D HI_COMMPAGE & -qemu_host_page_size; + void *want =3D g2h_untagged(commpage); void *addr =3D mmap(want, qemu_host_page_size, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE | MAP_FIXED, -1, 0); =20 @@ -417,6 +418,9 @@ static bool init_guest_commpage(void) perror("Protecting guest commpage"); exit(EXIT_FAILURE); } + + page_set_flags(commpage, commpage + qemu_host_page_size, + PAGE_READ | PAGE_EXEC | PAGE_VALID); return true; } =20 --=20 2.34.1 From nobody Sun May 5 06:28:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1660879831; cv=none; d=zohomail.com; s=zohoarc; b=gEKmZ5+9BmhytSO54KwKbd8R1ijuAmA6xYlMfERkAfNdziNsJmndFJ9T8xqAMBPNxPYPst8axPvYjEqJu/ylNeA2KruxYzHBZsP9VTTgb7dD5+G9SIfl8waMP1cTm0XNN+ysb5hL3y5YjS6wzMHbA/G5PC1jIgapH8NyIoB7bjg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1660879831; 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; bh=aJaNQ6aSdE9rWibAJT4lh7LTRwz3SqqWw+/j8K8vQwg=; b=ddqtlCfhC2OWPm5slw3RjQRT/B06QyG0pcI3rfTsxvPOk+3fIU0sZB8KCODLfI33NaYawbCeZtkHkmHI8F3jjrgivYVKza7/MvlX12P3TkQJbiEFnyKP2r074O06RqgB93GFP0qHbMw1VtkEJownlhTjNR3MZsidhtztJQSPXUI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1660879831414883.8732116718601; Thu, 18 Aug 2022 20:30:31 -0700 (PDT) Received: from localhost ([::1]:51024 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oOsiM-0001Mi-DJ for importer@patchew.org; Thu, 18 Aug 2022 23:30:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37344) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oOseM-0001Ri-Ke for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:22 -0400 Received: from mail-pj1-x1032.google.com ([2607:f8b0:4864:20::1032]:34749) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oOseL-0002ix-02 for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:22 -0400 Received: by mail-pj1-x1032.google.com with SMTP id s4-20020a17090a5d0400b001fabc6bb0baso3838509pji.1 for ; Thu, 18 Aug 2022 20:26:20 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:bbf3:9914:aa9c:3b4e]) by smtp.gmail.com with ESMTPSA id g184-20020a6252c1000000b00535d19c46d7sm2199904pfb.203.2022.08.18.20.26.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Aug 2022 20:26:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc; bh=aJaNQ6aSdE9rWibAJT4lh7LTRwz3SqqWw+/j8K8vQwg=; b=o4lQHPJBXtb22E5FkdgLLo7CkVTU7JfliZoOqAg2fHD/9au1J89mUwSYBI58u4VWA9 977fWBTvQr6irVCEdHIwzaCz6YYTyyu3tN6OuUmQl2Qdw27DVjkBSniUpeHSnBirf2vK kt6wcI0fa1o8XXHj1hgJjxEHa7VbFVemXMPTh+fY+AvCsvA2FEIh55zvHTum63Irz0+d pJefjk+K27lTKCJP2Dfa04M5jQwHTLbVc9x7aLdVJYvWfPOW4vHcz6cllXD+JJ4Lw6c1 JXX0cKDTxdWioUl9mt+/NdNLS2SXyCyh90asdp0WHTaG3aDFhTubOVB8CfScwiYR2p19 vhuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc; bh=aJaNQ6aSdE9rWibAJT4lh7LTRwz3SqqWw+/j8K8vQwg=; b=RypkPBHabRSOczXJjjOR3fENb9c/buZXRVEUSLnEXSu3bgb+zCiWbUNZ9V6fd7HjlY Bu4GGNMUxLJk8W6WKWJZACa2agG1GAN4G6DxAjutQHEqQSg8j6AsDzDXY4nTkvkZ7FxG plyGLjJm4D+dHGsST2S5t08xEVJ/xB9AF92K6DorV1N5OWxZeGA5HU0nC8i9LxPC2Pay 7sZwZToOOrwzG3EZDXAAHvvzqIgGGTNGUMNRW1K4VQ0vyFci1uyICsuR1SiSQ2yUXZQz Z7/VcPAoH+fSsLtTfZMcYHdPW3wdjpTB4RhnuwXWVUOF3taSnkRe/eVCrblCSO504UX1 zqlw== X-Gm-Message-State: ACgBeo3ZSMILZwD5Hxd1QCHRQD6CCn9yQWgnkl5HP7XrbNJVpfJtP2PE 1gyakR1QNiKX2vGZmAHx8Aq7lU6hYn7Sog== X-Google-Smtp-Source: AA6agR4WtDRKFvxvymwx3w32LtluTTTFekewx8ZjMg/4PuLOIpgoAbs4XUA74nQSaRwvD+4SBNsRCQ== X-Received: by 2002:a17:903:2442:b0:16f:1319:d28c with SMTP id l2-20020a170903244200b0016f1319d28cmr5689522pls.95.1660879579602; Thu, 18 Aug 2022 20:26:19 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, iii@linux.ibm.com, dramforever@live.com, alistair.francis@wdc.com, alex.bennee@linaro.org Subject: [PATCH v6 02/21] linux-user/hppa: Allocate page zero as a commpage Date: Thu, 18 Aug 2022 20:25:56 -0700 Message-Id: <20220819032615.884847-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220819032615.884847-1-richard.henderson@linaro.org> References: <20220819032615.884847-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::1032; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1032.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1660879832559100001 Content-Type: text/plain; charset="utf-8" We're about to start validating PAGE_EXEC, which means that we've got to mark page zero executable. We had been special casing this entirely within translate. Signed-off-by: Richard Henderson Tested-by: Vivian Wang --- linux-user/elfload.c | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/linux-user/elfload.c b/linux-user/elfload.c index 3e3dc02499..29d910c4cc 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -1646,6 +1646,34 @@ static inline void init_thread(struct target_pt_regs= *regs, regs->gr[31] =3D infop->entry; } =20 +#define LO_COMMPAGE 0 + +static bool init_guest_commpage(void) +{ + void *want =3D g2h_untagged(LO_COMMPAGE); + void *addr =3D mmap(want, qemu_host_page_size, PROT_NONE, + MAP_ANONYMOUS | MAP_PRIVATE | MAP_FIXED, -1, 0); + + if (addr =3D=3D MAP_FAILED) { + perror("Allocating guest commpage"); + exit(EXIT_FAILURE); + } + if (addr !=3D want) { + return false; + } + + /* + * On Linux, page zero is normally marked execute only + gateway. + * Normal read or write is supposed to fail (thus PROT_NONE above), + * but specific offsets have kernel code mapped to raise permissions + * and implement syscalls. Here, simply mark the page executable. + * Special case the entry points during translation (see do_page_zero). + */ + page_set_flags(LO_COMMPAGE, LO_COMMPAGE + TARGET_PAGE_SIZE, + PAGE_EXEC | PAGE_VALID); + return true; +} + #endif /* TARGET_HPPA */ =20 #ifdef TARGET_XTENSA @@ -2326,12 +2354,12 @@ static abi_ulong create_elf_tables(abi_ulong p, int= argc, int envc, } =20 #if defined(HI_COMMPAGE) -#define LO_COMMPAGE 0 +#define LO_COMMPAGE -1 #elif defined(LO_COMMPAGE) #define HI_COMMPAGE 0 #else #define HI_COMMPAGE 0 -#define LO_COMMPAGE 0 +#define LO_COMMPAGE -1 #define init_guest_commpage() true #endif =20 @@ -2555,7 +2583,7 @@ static void pgb_static(const char *image_name, abi_ul= ong orig_loaddr, } else { offset =3D -(HI_COMMPAGE & -align); } - } else if (LO_COMMPAGE !=3D 0) { + } else if (LO_COMMPAGE !=3D -1) { loaddr =3D MIN(loaddr, LO_COMMPAGE & -align); } =20 --=20 2.34.1 From nobody Sun May 5 06:28:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1660879690; cv=none; d=zohomail.com; s=zohoarc; b=QE3r5spi6HXmBogBo6sshpbuOKae5dHDp7mZrMQY7gxTn9eagVRFtSDZt3BbBnqLBVn+X4bxe/NI/R06yJbnXCvWvHItksF2PtM8RA+1g/PXshtR3WiUM4pnNYJxVEg26WWKpqp6RJAsh6X54+Nt8KNH4uoY/xp0tneBkGU9wws= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1660879690; 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; bh=eHBGwaSHAS5zB0YpY3m3bpZJdiEeOQnCezVMbc66JAA=; b=Ec7DVLB02Vct4uCH0OvFIGk5ZP7fwFUKpgJPUZeWkGBW+bwQb1GrKTl8ustvlmGFCv5tcADH0EOf9R5pulS1uG+tuBA+9CysM4quLCICOo80YxHp85z7m58EmwpSj3hbpsOjIM7LnAJV683oSYNYARoTSungBp3Y73V5zr/QXmY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1660879690396997.9245063342843; Thu, 18 Aug 2022 20:28:10 -0700 (PDT) Received: from localhost ([::1]:37554 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oOsg3-0004Fu-Mp for importer@patchew.org; Thu, 18 Aug 2022 23:28:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37346) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oOseN-0001TE-NG for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:23 -0400 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]:44013) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oOseM-0002jH-2p for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:23 -0400 Received: by mail-pj1-x102a.google.com with SMTP id o5-20020a17090a3d4500b001ef76490983so3670316pjf.2 for ; Thu, 18 Aug 2022 20:26:21 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:bbf3:9914:aa9c:3b4e]) by smtp.gmail.com with ESMTPSA id g184-20020a6252c1000000b00535d19c46d7sm2199904pfb.203.2022.08.18.20.26.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Aug 2022 20:26:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc; bh=eHBGwaSHAS5zB0YpY3m3bpZJdiEeOQnCezVMbc66JAA=; b=RfN1c/T4F0ENX1O56rFHV5bXJxJYAvZ4QBb/qkUIYs+wOTXliGmBkn8ZzgIjjn/cAT oqNtF8moKmneoAWeslzjouQX87GDGgAm674XOv9uLPBTGwKxO7Efd1hWvuLjK51+M9jC CLU+Ruq+1EcGb8H3JnnENZ6eO13WEGyOFd9UDYsKO/B7HAn30NhksJ8u3DLW6kmdXGzY DWejtdt6gS2XKRoFQLhFWQaZpcCe0GbVjsKy6eopDbY/aiazYfOh+lvym13s6jLERhAk 5vZy+zfZWRnuyjC097htjzYtQuFu4Mx4pqG+74z3Fi92yxtXUIbQ//612X1B4ldGMV2G wFFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc; bh=eHBGwaSHAS5zB0YpY3m3bpZJdiEeOQnCezVMbc66JAA=; b=Q3sS68oAEVjg13Hg9qMjYTIuFleckGy6KuyGOPDGFYldXs1qW9jMf/g9k1QwFLh0TG XM0wFNVO7/Bz940CV4gsSXmJeVKue6lDH1fBgXwNbrpvBM+ubqsvf7sj+sGSH8Xj5Rem 9iNHMzrabH3S+RKDhzc4exoG2HEzALi/DI+YLxFIjTftIIniC5QfWnzb9N2tJ6EOpeAN gMYS7MUwHgNXoz1UTbqTwEAfjr7UsrbNQY/yGrGBi9YWRa9ubeSXSQaxdCWk2sr+t1JT uilYIhTKePh3KPxTt7HWgcJE12I+PKGMuqgVb6Rd3MMOjxdoQRS9N4BMAR8TygpSXznS fJbA== X-Gm-Message-State: ACgBeo1kxjqhDwNgpPJI7bjDQTaGq+HPgzCa6tpdf5VkWIxrAGANkglS yEMAiGZvaht50e7Dj04fhbT2YO+iu/h9kQ== X-Google-Smtp-Source: AA6agR4gVMIqXGQNDgQ5C+yoP1hIKNSleZwVLSdN2TvuqizGpWGFSuunUTWmFqVrTz+M3yBwEmCHXg== X-Received: by 2002:a17:902:e88d:b0:172:b898:5656 with SMTP id w13-20020a170902e88d00b00172b8985656mr4094417plg.63.1660879580760; Thu, 18 Aug 2022 20:26:20 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, iii@linux.ibm.com, dramforever@live.com, alistair.francis@wdc.com, alex.bennee@linaro.org Subject: [PATCH v6 03/21] linux-user/x86_64: Allocate vsyscall page as a commpage Date: Thu, 18 Aug 2022 20:25:57 -0700 Message-Id: <20220819032615.884847-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220819032615.884847-1-richard.henderson@linaro.org> References: <20220819032615.884847-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::102a; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1660879692113100001 Content-Type: text/plain; charset="utf-8" We're about to start validating PAGE_EXEC, which means that we've got to the vsyscall page executable. We had been special casing this entirely within translate. Signed-off-by: Richard Henderson Tested-by: Vivian Wang --- linux-user/elfload.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/linux-user/elfload.c b/linux-user/elfload.c index 29d910c4cc..b20d513929 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -195,6 +195,27 @@ static void elf_core_copy_regs(target_elf_gregset_t *r= egs, const CPUX86State *en (*regs)[26] =3D tswapreg(env->segs[R_GS].selector & 0xffff); } =20 +#if ULONG_MAX >=3D TARGET_VSYSCALL_PAGE +#define INIT_GUEST_COMMPAGE +static bool init_guest_commpage(void) +{ + /* + * The vsyscall page is at a high negative address aka kernel space, + * which means that we cannot actually allocate it with target_mmap. + * We still should be able to use page_set_flags, unless the user + * has specified -R reserved_va, which would trigger an assert(). + */ + if (reserved_va !=3D 0 && + TARGET_VSYSCALL_PAGE + TARGET_PAGE_SIZE >=3D reserved_va) { + error_report("Cannot allocate vsyscall page"); + exit(EXIT_FAILURE); + } + page_set_flags(TARGET_VSYSCALL_PAGE, + TARGET_VSYSCALL_PAGE + TARGET_PAGE_SIZE, + PAGE_EXEC | PAGE_VALID); + return true; +} +#endif #else =20 #define ELF_START_MMAP 0x80000000 @@ -2360,8 +2381,10 @@ static abi_ulong create_elf_tables(abi_ulong p, int = argc, int envc, #else #define HI_COMMPAGE 0 #define LO_COMMPAGE -1 +#ifndef INIT_GUEST_COMMPAGE #define init_guest_commpage() true #endif +#endif =20 static void pgb_fail_in_use(const char *image_name) { --=20 2.34.1 From nobody Sun May 5 06:28:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1660879831; cv=none; d=zohomail.com; s=zohoarc; b=bS85eMd3FQnpdQJhX5F6kW8SS0DXoylfSwiFgkHPQgRo0lmUgmGnDgPwHrtH9AGg/gLS1bn7BXWRNASi1V/n2yb/XRZoyF/ed359zDLAIAAImmFpieAwMLhVul87BCnvh9Z1qomaALZ7olFrHF8bzP4GGhaZePzIBE7uT+QQOYY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1660879831; 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; bh=2RHGm7LozmE44p/cezu4EoeuBcKQ/o8z7dbp9Itr8eo=; b=KYVVlguPF3nr4Lw77fjrmWSUNzaEdOnzhJlRe5QMkDLm/sZJy/Ujv/ZHJxFl2IUu9KkSnG3m+R+Dd/yPWSH2aHTzdZHUa+TfTraPUVmwkuA60j6T6dVR55DU6WkqW8kF+hVMYNXdJkwodX5Q5ephvuRIEw/JIFMHNfEA3Mj3534= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1660879831185586.8521656049576; Thu, 18 Aug 2022 20:30:31 -0700 (PDT) Received: from localhost ([::1]:51022 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oOsiM-0001M1-4I for importer@patchew.org; Thu, 18 Aug 2022 23:30:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37348) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oOseP-0001X0-4l for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:25 -0400 Received: from mail-pg1-x52d.google.com ([2607:f8b0:4864:20::52d]:44690) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oOseN-0002jU-Ac for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:24 -0400 Received: by mail-pg1-x52d.google.com with SMTP id c24so2753705pgg.11 for ; Thu, 18 Aug 2022 20:26:22 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:bbf3:9914:aa9c:3b4e]) by smtp.gmail.com with ESMTPSA id g184-20020a6252c1000000b00535d19c46d7sm2199904pfb.203.2022.08.18.20.26.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Aug 2022 20:26:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc; bh=2RHGm7LozmE44p/cezu4EoeuBcKQ/o8z7dbp9Itr8eo=; b=obw0taht7rQIILQ6eiZdR0FJa2kP3ahnUodJW1Q4cqKV1tlEjT+eFHixOBRaC77eyf 6wkS1+lhND21YSWSF1viBbW7KvLvEXJPPBNysekqfOYf0JfP9lrpuRXtaIzfAhpzuM1c oN+6V3uH3EMcS7Jp/0VVBdYukI/mLhef1cQ1QbxaJNaDZh7LE0WEXIUyyfBJ6GbhjAJC nJIuvDcITv8wyrYpM4oNFFgnMdTl6cZqjQJ1FaxL0f4mZtJdx1st1fv9oh0s/IzE2p+d JjvdQon2435mc55bWe3nE3Kbev2q/Kj8t4TByAqa9SIIO+olgzz2iRo9U86sWCOY4CRt Mvng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc; bh=2RHGm7LozmE44p/cezu4EoeuBcKQ/o8z7dbp9Itr8eo=; b=rfpPNvJZDnZu+KuXI0e8T+aTTEskq2xyoKbIpyI2UBvgVcoegmuZf/0jg/GH9aXZxH vQRimTuXLmmMdZglntWfUC6904ytz12t1uNJkoRcb6+mTetOxbkLMrj2q3ALMBWYIRjo aXlXhPl3IGRHafJtPBGr4z/viSwAASrKE/Wbhj2vXv/EQOoQK26pidlAmSPM8FPzCw2K wTruONvlZT8WRMsMKmovHNpynAbPvjJgDiyrCjK4ZdIvY7suCwry/N9Qm73Aj1eI+NlK Qsjga7wG8ei7/rcpdh2rZYNlswKR0v92k/W7WBQ4Z2/koZa1W3GWBEfQr1HYXpJOaaoS 8txw== X-Gm-Message-State: ACgBeo0Z0g8Xs3XPxuP7IEpLip5hR1vLq0yDAGMHCmP9OF9ekZuAButW 8oa6PmVFxGqnP/GGcEV8lt/op/Srs3qT2g== X-Google-Smtp-Source: AA6agR4UstW4zlrdIpEvteVKqBwWlKJAIR6kFhfoaqzdWBU0xG4lcg6YzqdA6fo5Fyf6Rb8+mm5QUg== X-Received: by 2002:a62:6347:0:b0:531:c5a7:b209 with SMTP id x68-20020a626347000000b00531c5a7b209mr5870535pfb.60.1660879581461; Thu, 18 Aug 2022 20:26:21 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, iii@linux.ibm.com, dramforever@live.com, alistair.francis@wdc.com, alex.bennee@linaro.org Subject: [PATCH v6 04/21] linux-user: Honor PT_GNU_STACK Date: Thu, 18 Aug 2022 20:25:58 -0700 Message-Id: <20220819032615.884847-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220819032615.884847-1-richard.henderson@linaro.org> References: <20220819032615.884847-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::52d; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1660879832567100002 Content-Type: text/plain; charset="utf-8" Map the stack executable if required by default or on demand. Signed-off-by: Richard Henderson Tested-by: Vivian Wang --- include/elf.h | 1 + linux-user/qemu.h | 1 + linux-user/elfload.c | 19 ++++++++++++++++++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/include/elf.h b/include/elf.h index 3a4bcb646a..3d6b9062c0 100644 --- a/include/elf.h +++ b/include/elf.h @@ -31,6 +31,7 @@ typedef int64_t Elf64_Sxword; #define PT_LOPROC 0x70000000 #define PT_HIPROC 0x7fffffff =20 +#define PT_GNU_STACK (PT_LOOS + 0x474e551) #define PT_GNU_PROPERTY (PT_LOOS + 0x474e553) =20 #define PT_MIPS_REGINFO 0x70000000 diff --git a/linux-user/qemu.h b/linux-user/qemu.h index 7d90de1b15..e2e93fbd1d 100644 --- a/linux-user/qemu.h +++ b/linux-user/qemu.h @@ -48,6 +48,7 @@ struct image_info { uint32_t elf_flags; int personality; abi_ulong alignment; + bool exec_stack; =20 /* Generic semihosting knows about these pointers. */ abi_ulong arg_strings; /* strings for argv */ diff --git a/linux-user/elfload.c b/linux-user/elfload.c index b20d513929..90375c6b74 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -232,6 +232,7 @@ static bool init_guest_commpage(void) #define ELF_ARCH EM_386 =20 #define ELF_PLATFORM get_elf_platform() +#define EXSTACK_DEFAULT true =20 static const char *get_elf_platform(void) { @@ -308,6 +309,7 @@ static void elf_core_copy_regs(target_elf_gregset_t *re= gs, const CPUX86State *en =20 #define ELF_ARCH EM_ARM #define ELF_CLASS ELFCLASS32 +#define EXSTACK_DEFAULT true =20 static inline void init_thread(struct target_pt_regs *regs, struct image_info *infop) @@ -776,6 +778,7 @@ static inline void init_thread(struct target_pt_regs *r= egs, #else =20 #define ELF_CLASS ELFCLASS32 +#define EXSTACK_DEFAULT true =20 #endif =20 @@ -973,6 +976,7 @@ static void elf_core_copy_regs(target_elf_gregset_t *re= gs, const CPUPPCState *en =20 #define ELF_CLASS ELFCLASS64 #define ELF_ARCH EM_LOONGARCH +#define EXSTACK_DEFAULT true =20 #define elf_check_arch(x) ((x) =3D=3D EM_LOONGARCH) =20 @@ -1068,6 +1072,7 @@ static uint32_t get_elf_hwcap(void) #define ELF_CLASS ELFCLASS32 #endif #define ELF_ARCH EM_MIPS +#define EXSTACK_DEFAULT true =20 #ifdef TARGET_ABI_MIPSN32 #define elf_check_abi(x) ((x) & EF_MIPS_ABI2) @@ -1806,6 +1811,10 @@ static inline void init_thread(struct target_pt_regs= *regs, #define bswaptls(ptr) bswap32s(ptr) #endif =20 +#ifndef EXSTACK_DEFAULT +#define EXSTACK_DEFAULT false +#endif + #include "elf.h" =20 /* We must delay the following stanzas until after "elf.h". */ @@ -2081,6 +2090,7 @@ static abi_ulong setup_arg_pages(struct linux_binprm = *bprm, struct image_info *info) { abi_ulong size, error, guard; + int prot; =20 size =3D guest_stack_size; if (size < STACK_LOWER_LIMIT) { @@ -2091,7 +2101,11 @@ static abi_ulong setup_arg_pages(struct linux_binprm= *bprm, guard =3D qemu_real_host_page_size(); } =20 - error =3D target_mmap(0, size + guard, PROT_READ | PROT_WRITE, + prot =3D PROT_READ | PROT_WRITE; + if (info->exec_stack) { + prot |=3D PROT_EXEC; + } + error =3D target_mmap(0, size + guard, prot, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); if (error =3D=3D -1) { perror("mmap stack"); @@ -2921,6 +2935,7 @@ static void load_elf_image(const char *image_name, in= t image_fd, */ loaddr =3D -1, hiaddr =3D 0; info->alignment =3D 0; + info->exec_stack =3D EXSTACK_DEFAULT; for (i =3D 0; i < ehdr->e_phnum; ++i) { struct elf_phdr *eppnt =3D phdr + i; if (eppnt->p_type =3D=3D PT_LOAD) { @@ -2963,6 +2978,8 @@ static void load_elf_image(const char *image_name, in= t image_fd, if (!parse_elf_properties(image_fd, info, eppnt, bprm_buf, &er= r)) { goto exit_errmsg; } + } else if (eppnt->p_type =3D=3D PT_GNU_STACK) { + info->exec_stack =3D eppnt->p_flags & PF_X; } } =20 --=20 2.34.1 From nobody Sun May 5 06:28:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1660879861; cv=none; d=zohomail.com; s=zohoarc; b=IlTg3Mrl0d8K3gouxu4kgHOpV/14T+bE+hkqXPLLhtYo4MRGXka7kJgnmDkSHa4fe4Tnc31fVKufWqbSXJVflh1OkCH/yfSUOY7bRc0rgu/0XpLd6kwCw1p9A2L/ZAIbPN5xqif0OIbCtPOk2IWroNox64c8QsIOE23M7XGWdSs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1660879861; 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; bh=mJbPfVNUzEC2twD2g02EAHj57nKEYqjpuPLLVGphZY4=; b=VJYepoO2iIgG3IG3lEHLipupLnChSiQZ20QpwDM/1HFKlw/fUSrHxb+ZHqMJckUMOTfETDdOjKgwkdpdvw64NquEtrgkPjHaBsJWvsADn7mQaIXZzbH1qY3/W+IDVCSDECkgzI64ViOyA1tA4CbcWI6xbud5T6B7LrP25SFK8gQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1660879861084281.7500498376056; Thu, 18 Aug 2022 20:31:01 -0700 (PDT) Received: from localhost ([::1]:39740 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oOsiN-0001W3-SQ for importer@patchew.org; Thu, 18 Aug 2022 23:30:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37350) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oOseP-0001Xg-EW for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:25 -0400 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]:45868) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oOseN-0002jh-Qx for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:25 -0400 Received: by mail-pl1-x629.google.com with SMTP id u22so3084602plq.12 for ; Thu, 18 Aug 2022 20:26:23 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:bbf3:9914:aa9c:3b4e]) by smtp.gmail.com with ESMTPSA id g184-20020a6252c1000000b00535d19c46d7sm2199904pfb.203.2022.08.18.20.26.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Aug 2022 20:26:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc; bh=mJbPfVNUzEC2twD2g02EAHj57nKEYqjpuPLLVGphZY4=; b=c973d6XruNtYWVB5ucoYu3DG4Detp9DtbvaiGadt3iX6dbC2aWAA143pmJw2LV7Qiq BEqHG4j7zyr+4YChBty1XJnQyyX1ZPg2yb5JsrvB7KjYXnfbaGMaBi6mjCS2gatL9pw5 wIzTfZUkTj1oO9AlZH7VwXwnXo1i0wfvT6cay5ZEkd8KhpktHRV3VUa0seexU/Tn7PNM XHjhe81Arz7/gnimk4ye7W+qWptc1ezVYKhmFA8wNHk/LmeRluRN4QIR0y9uQunHlHAJ 3PdYsPclGIIjUrNx7VqpK1miU5lSxeHmnXJtjS1t4LYyVUy568A6v7D1E7Z2C6BQY0dQ 7hIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc; bh=mJbPfVNUzEC2twD2g02EAHj57nKEYqjpuPLLVGphZY4=; b=Jf1QbTTnjEFcx1p0DXkdEZqlVZpbRQuXQWRi/Kr2MAyNbMXIR0rjIhhEvupfe/fEIU OTql10tZrQdtyh34zaMtwtAPzycKk6xd/xjz9uq2vqrEe6PwUMldPo/NIwXcSuAUymOh wWOxBgKjXqq8rPq1Oxt07EPy+TJjo9u/TXL4dvlhbAoasIVT6sDG4xgSp3RMGQU75wTb T914QiP91VjSYXAdGcImC3XAtp88HgikihkVCRsC5qIs9RWXcSAH5SFcMsRZIIt1mY8m OXXn7JNNZV5aPJt8UmAhs1tGxFc6beY7NzTzhuqj9LHtfs/QzGhQRskGmcS38JUz+i80 fnAw== X-Gm-Message-State: ACgBeo2pH54fPim56qzjj1ZzNvzaw6f0vw1RV2fL8ny+ILd42IBNfNKG Nv7A0JCk1/UOokN0KsXc2l8PJxKatTdiZw== X-Google-Smtp-Source: AA6agR4fTPtkXmpE2FvOZJz4Ug+3+hDb6knXZkFsynKVYW4QD2gwkazk/y1S2U4e+KfPcAY1YFAAzw== X-Received: by 2002:a17:902:c94c:b0:16e:ce7d:1fe with SMTP id i12-20020a170902c94c00b0016ece7d01femr5445567pla.168.1660879582545; Thu, 18 Aug 2022 20:26:22 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, iii@linux.ibm.com, dramforever@live.com, alistair.francis@wdc.com, alex.bennee@linaro.org Subject: [PATCH v6 05/21] linux-user: Clear translations and tb_jmp_cache on mprotect() Date: Thu, 18 Aug 2022 20:25:59 -0700 Message-Id: <20220819032615.884847-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220819032615.884847-1-richard.henderson@linaro.org> References: <20220819032615.884847-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::629; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x629.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1660879862739100001 Content-Type: text/plain; charset="utf-8" From: Ilya Leoshkevich Currently it's possible to execute pages that do not have PAGE_EXEC if there is an existing translation block. Fix by clearing tb_jmp_cache and invalidating TBs, which forces recheck of permission bits. Signed-off-by: Ilya Leoshkevich Message-Id: <20220817150506.592862-2-iii@linux.ibm.com> [rth: Invalidate is required -- e.g. riscv fallthrough cross test] Signed-off-by: Richard Henderson fixup mprotect Tested-by: Vivian Wang --- linux-user/mmap.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/linux-user/mmap.c b/linux-user/mmap.c index 048c4135af..e9dc8848be 100644 --- a/linux-user/mmap.c +++ b/linux-user/mmap.c @@ -115,6 +115,7 @@ int target_mprotect(abi_ulong start, abi_ulong len, int= target_prot) { abi_ulong end, host_start, host_end, addr; int prot1, ret, page_flags, host_prot; + CPUState *cpu; =20 trace_target_mprotect(start, len, target_prot); =20 @@ -177,7 +178,14 @@ int target_mprotect(abi_ulong start, abi_ulong len, in= t target_prot) goto error; } } + page_set_flags(start, start + len, page_flags); + tb_invalidate_phys_range(start, start + len); + + CPU_FOREACH(cpu) { + cpu_tb_jmp_cache_clear(cpu); + } + mmap_unlock(); return 0; error: --=20 2.34.1 From nobody Sun May 5 06:28:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1660880096; cv=none; d=zohomail.com; s=zohoarc; b=d7nlLpGJItjHsaa9RNNeAuEjeOnGPlmcD5jk8BfsK3OEsehRrUZ5/RjESK6LkMiIK1xe79Rg1w7aC6s97Tfi8WelpP5ktvmmoL5gKdnVJtsc6Pvv9LseHujt90tpAcGBd2YGjjxVYGo0172ipAkeA4fPzh3DjlJX6AYhP9nPjZU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1660880096; 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; bh=BW7Q1ag8Lfnxwk0WaGeudEHBVGgEoEo4+8WybCWhWKA=; b=FwOxTiKflOjplsppo+dPy0HrgEpHrypNaUsxDJeUmlYYE7ekSwRgLyU/UJh8HZOMsWdXR1h1eLlntmS+VpnIsWtCwUTrCAlGkKA8X6seoangdP3zYIJEYNAAd8L6JzXsLfLnKxEFDqVDg8BjCR4KU3zIooQQFKGx8qRB/HqcWUU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1660880096391277.19086808481086; Thu, 18 Aug 2022 20:34:56 -0700 (PDT) Received: from localhost ([::1]:55220 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oOsmc-0007Dr-7V for importer@patchew.org; Thu, 18 Aug 2022 23:34:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54096) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oOseQ-0001aU-FR for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:26 -0400 Received: from mail-pg1-x52c.google.com ([2607:f8b0:4864:20::52c]:39505) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oOseO-0002k1-US for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:26 -0400 Received: by mail-pg1-x52c.google.com with SMTP id q9so1838982pgq.6 for ; Thu, 18 Aug 2022 20:26:24 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:bbf3:9914:aa9c:3b4e]) by smtp.gmail.com with ESMTPSA id g184-20020a6252c1000000b00535d19c46d7sm2199904pfb.203.2022.08.18.20.26.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Aug 2022 20:26:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc; bh=BW7Q1ag8Lfnxwk0WaGeudEHBVGgEoEo4+8WybCWhWKA=; b=Qz0AvaMII2u1VwUrmDmaFnnuSeIfmPOsw0NaPD1JcPnc52hEYGNminBioRgz6ykiBW YjSxxsOnCfsyjDcBoOJlMF1roNlBs+DP4OhHyoa4jsPfOsiRw+ZPhgw8fsHwkjgZfAus C1r29aIlSBBrtJvlA76psUsNE1ua2yLvyXrgGWQqjDUKT7EvaggpC0ubuGlkrHV32G7U A2lLeYSNeav2AtVDySn+ZJj0fF5YVTS96jr3BJvFJNFfs9xxTFwXZbeJwfVUkmSAbWNb GFeGvDUtNBRYCNMPa/w8Ueg0NjWpMWtVDm/2mc6vaRNpUhwZBoBhjDdroZ+JvZjJd0+l sEag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc; bh=BW7Q1ag8Lfnxwk0WaGeudEHBVGgEoEo4+8WybCWhWKA=; b=8A89G0HVZIZ6rTaoVRY+kxjytnls7PLx9e2aLYwn+QQglF9GDZcTmO82JaROtj5rHc KM4QC0FC8PSMBK3okzt+8GgIeqAYfzRVcY8ZfTUBuuDadISt+lrqTiLpHKVHzPZ97VjR DrhnOzXyUEb1TXxG9Z5Ij3b+A5Gkg6ThKpjs+phT+kyyVOB7ux92RrUkzO6qw2B9jRnr 1mX/ufosqi4b/K9ylVcVDl9IN1weu/vrdXtj+nXMqM0R02IRFW+EO1jlLRcKjGNzSWbQ hUrH/6Ihf7UAZvgBiOGGqIbWMia9HrIaReZotaRQCE7ED0hzQVKVfGTmg88DK19B1QTt usWA== X-Gm-Message-State: ACgBeo16IHRAVkxgH+gKw11wRRtZ56bBRK/h98PpnfguFshfrsJH867L yojweo73dhVzOEOr2HiwO1fHU9LXcvumnQ== X-Google-Smtp-Source: AA6agR6t+H7PXOx+tJML3Umdz9kTuEm+iWMzvOm+CItZ9WoMaqzTNcztj3D29+XaAknCz1B1g7XUog== X-Received: by 2002:aa7:838a:0:b0:536:101a:9ccf with SMTP id u10-20020aa7838a000000b00536101a9ccfmr902314pfm.18.1660879583639; Thu, 18 Aug 2022 20:26:23 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, iii@linux.ibm.com, dramforever@live.com, alistair.francis@wdc.com, alex.bennee@linaro.org Subject: [PATCH v6 06/21] tests/tcg/i386: Move smc_code2 to an executable section Date: Thu, 18 Aug 2022 20:26:00 -0700 Message-Id: <20220819032615.884847-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220819032615.884847-1-richard.henderson@linaro.org> References: <20220819032615.884847-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::52c; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1660880097983100001 Content-Type: text/plain; charset="utf-8" We're about to start validating PAGE_EXEC, which means that we've got to put this code into a section that is both writable and executable. Note that this test did not run on hardware beforehand either. Signed-off-by: Richard Henderson Tested-by: Vivian Wang --- tests/tcg/i386/test-i386.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/tcg/i386/test-i386.c b/tests/tcg/i386/test-i386.c index ac8d5a3c1f..e6b308a2c0 100644 --- a/tests/tcg/i386/test-i386.c +++ b/tests/tcg/i386/test-i386.c @@ -1998,7 +1998,7 @@ uint8_t code[] =3D { 0xc3, /* ret */ }; =20 -asm(".section \".data\"\n" +asm(".section \".data_x\",\"awx\"\n" "smc_code2:\n" "movl 4(%esp), %eax\n" "movl %eax, smc_patch_addr2 + 1\n" --=20 2.34.1 From nobody Sun May 5 06:28:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1660879701; cv=none; d=zohomail.com; s=zohoarc; b=QMZIr1393Fu7/EUZlzS1MnQ+ivJ7U4G/5h2PnmUE1XsJz1VmPlnZ+ROfBacRq7REL40UV2N1GovuIzpkk8tlpHr7UuD3/W6ARDBNSocI3vT8uZmaFEU5aEL0B9l9bgads4zdGBnapuZd+9T9WBPvbPI3CRdlEqs74H+hAZ4r+Mk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1660879701; 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; bh=PnxOd469lmAdC/RQB8O6SvRIgXAOuOZ1V4tulDNdRcM=; b=VPHGdi/1dwGqW2VEotbQxTIfWJ+mzHlzT07FV2qlo6XcOMAPFTtrYfAxmr/av2wb2jm3mQGVYB7iVy1fb40q/RvWJQQAU8/U8KDa/iLRQjwoXa8hOo9XO2MBPQ1AD9Wwyh8yIfAfd4P9atXlDZUjOXPx0YzDEjyS99RKdb2I+ms= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1660879700993132.86875693219758; Thu, 18 Aug 2022 20:28:20 -0700 (PDT) Received: from localhost ([::1]:39256 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oOsgE-0004XF-TS for importer@patchew.org; Thu, 18 Aug 2022 23:28:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54100) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oOseV-0001me-DK for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:31 -0400 Received: from mail-pj1-x1033.google.com ([2607:f8b0:4864:20::1033]:39437) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oOseP-0002kA-Od for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:31 -0400 Received: by mail-pj1-x1033.google.com with SMTP id s36-20020a17090a69a700b001faad0a7a34so6404140pjj.4 for ; Thu, 18 Aug 2022 20:26:25 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:bbf3:9914:aa9c:3b4e]) by smtp.gmail.com with ESMTPSA id g184-20020a6252c1000000b00535d19c46d7sm2199904pfb.203.2022.08.18.20.26.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Aug 2022 20:26:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc; bh=PnxOd469lmAdC/RQB8O6SvRIgXAOuOZ1V4tulDNdRcM=; b=f4ODB/4axXqQSCyfaLKzSQnK/aQ63wY+Msg1h/Ov496F+uawNOrgmAZmhi5DJXe1BF qLCH4Wt/qqqEaENstN6EOomVxiawBt4OBVzw/KiykYnEeEgSHT8y4Myw50UD3NBR6F2U kNvsMExGgKyMOuxeHC8V/ozBDdd715LOlci0iCsk4U5pANutUwTIM05U8bu7SyONgkh+ t8DqQ3MGPxyCXMNOE8t8HksyPw8Hp31KENnp9MS+V382+ZvOgZJblwO3XY+LuRILpO8U SeVjF68FwJnLiLn4TCHBxBF8HVBRUfwB2cBga8nAlQIrn14ofT1FuZCBG8UrUA2vyM2S kQGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc; bh=PnxOd469lmAdC/RQB8O6SvRIgXAOuOZ1V4tulDNdRcM=; b=v4uYL7lCabBlgkWqG1bqN+OzU4qDaxUpfZJW1NavNP+d6U/2Lwpi8SDWKKjwIF7h9P wBLvjW7Huq0OxVaDr6gYPRRxEaKCYE6DzwK5fgiwn8zxgeVca/9fnjTgZVhHnUj8wY6M d0YuvQCyrabwevnwxaTdCcrs1TvTkfpW5TuYepccwzeafNAu3dhQmwSJ7nQauhSY/tsl YxEOXfUqY2PGYOs9/5NrdN+BJJld1FokGiBxLYMox09dth5x3Oezt/poUn/+0fKHOtvB Uxu/8AyEP8b1urhw70jRISPUv/EqfJ5+rJP397HD4+CNIfgCA4IzDOiSl0vBsgM/IcTm DNgA== X-Gm-Message-State: ACgBeo0kaVXjKtvBGzFIABeswdR+QPSLo2/Uu8KhOPNBGIkKQ88wh0E4 FaHH2o0cOqlUV5lmCr6WXitvIw1Nd1WCew== X-Google-Smtp-Source: AA6agR5/+hqrvoMCBmGT34hggxbg6txNwPB3O1oMhDki/ZAREtGSqeEFkYU+FNrCdedyRddo3Nl+JA== X-Received: by 2002:a17:90b:4b0d:b0:1fa:e712:dd53 with SMTP id lx13-20020a17090b4b0d00b001fae712dd53mr517008pjb.10.1660879584451; Thu, 18 Aug 2022 20:26:24 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, iii@linux.ibm.com, dramforever@live.com, alistair.francis@wdc.com, alex.bennee@linaro.org Subject: [PATCH v6 07/21] accel/tcg: Introduce is_same_page() Date: Thu, 18 Aug 2022 20:26:01 -0700 Message-Id: <20220819032615.884847-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220819032615.884847-1-richard.henderson@linaro.org> References: <20220819032615.884847-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::1033; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1033.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01, T_SPF_TEMPERROR=0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1660879702175100001 Content-Type: text/plain; charset="utf-8" From: Ilya Leoshkevich Introduce a function that checks whether a given address is on the same page as where disassembly started. Having it improves readability of the following patches. Signed-off-by: Ilya Leoshkevich Message-Id: <20220811095534.241224-3-iii@linux.ibm.com> Reviewed-by: Richard Henderson [rth: Make the DisasContextBase parameter const.] Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis Tested-by: Vivian Wang --- include/exec/translator.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/include/exec/translator.h b/include/exec/translator.h index 7db6845535..0d0bf3a31e 100644 --- a/include/exec/translator.h +++ b/include/exec/translator.h @@ -187,4 +187,14 @@ FOR_EACH_TRANSLATOR_LD(GEN_TRANSLATOR_LD) =20 #undef GEN_TRANSLATOR_LD =20 +/* + * Return whether addr is on the same page as where disassembly started. + * Translators can use this to enforce the rule that only single-insn + * translation blocks are allowed to cross page boundaries. + */ +static inline bool is_same_page(const DisasContextBase *db, target_ulong a= ddr) +{ + return ((addr ^ db->pc_first) & TARGET_PAGE_MASK) =3D=3D 0; +} + #endif /* EXEC__TRANSLATOR_H */ --=20 2.34.1 From nobody Sun May 5 06:28:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1660880475; cv=none; d=zohomail.com; s=zohoarc; b=bEI/03a0gpTFy0+nUWeUmmTQpkwrGLTobUHt5vSg1i8wJBMs4uNIz9BDhR8Nk0tRs5tq66n2/hlgduXTImhJh2GpeKecx0s8CbemMz8g+B8GK4KQSSHTl5xqIEomi3FMVfJtdCVw7ULWLFolu/6aT2kmXqK5aIcLgZowqYSDrUU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1660880475; 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; bh=5GSPfEvyPrLUpGcs/m51zVSigrM1xnBlAzjMxTS+rak=; b=YFhK/zjeZhrEPLd0KY/LbU3TgR0BmxNq4NdrtnhYNpxihI1zPsurC9n8qhUy0lARoM2gdM0YB6xUuPhx1/TumowyjNstI6AYgRHBdhenIFMFMe91N5w3m0lvgC5AWxV5sKay/4b6OkvRhIAFDZtFjnrR3pPDPgSAJSOIVOVqq9k= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1660880475659561.1428624002233; Thu, 18 Aug 2022 20:41:15 -0700 (PDT) Received: from localhost ([::1]:33480 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oOssj-0001zT-Dt for importer@patchew.org; Thu, 18 Aug 2022 23:41:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48806) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oOseg-0002KT-8a for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:42 -0400 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]:40902) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oOseQ-0002kW-RA for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:41 -0400 Received: by mail-pj1-x1029.google.com with SMTP id t11-20020a17090a510b00b001fac77e9d1fso3723707pjh.5 for ; Thu, 18 Aug 2022 20:26:26 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:bbf3:9914:aa9c:3b4e]) by smtp.gmail.com with ESMTPSA id g184-20020a6252c1000000b00535d19c46d7sm2199904pfb.203.2022.08.18.20.26.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Aug 2022 20:26:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc; bh=5GSPfEvyPrLUpGcs/m51zVSigrM1xnBlAzjMxTS+rak=; b=qvJFw+DepXhf//4bPRSI4BnaZbzkmsfdDancYmwaZFrFeNWe9V08zl0XslsDX0aurg Ha3jg3BfSR2KqfwEgsaKr4Mm+s0epCkScXqfDoVA2IKkCh/IttbbGCYKyeThfl0Lw2Gf QE2YN0vpTlpc9nzKiUkKyQk8JnL8SlqIdJ5bHMo5zj+UBR2LGAQEZewvpXlK3c7ujs5V NyMNjmJ6imt2DP8zJtdY+HXD1oDF6j4+vgwwNKemUb60Agyi7vMTYs/t/xpMpTjJjjzT LiazQGsVFL5b+vPEr6Ay0+dEuXYCZYxfOadxA7hsGc07V/TM0CzIiwJnXkMMuN1goP3X 90fw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc; bh=5GSPfEvyPrLUpGcs/m51zVSigrM1xnBlAzjMxTS+rak=; b=iwRw8gHWjAnQ+b1G53DV6+1HER9b8v4o9XT8pJDXaQkCs2u4kxPVg6bz+IyNtuUYe8 aQygFUPa/6u/4f5RCYG5ZbO/eoD8AvuaU9LT3+SyxDxkPYIMnlRO6YYeh9s+9dkI+hQV 4r8df6hyyy/7XF+Ufs4WlLhLl55UltjvyvBBeRv5JdYfPjxAVGbhH0bcPga10SZfs9x7 9nEYYRLlGvva0/rm/FXL3N9OX6P27S1zfq8sb2I/8eGo5YoMZnyEHEGR1WXXAewq6xuO qAO29Y5AojVvZOobyXTl3YQg7hzNnzApTOCxvEKIqJPgsNOfE4QSrl8JcsWYbWJHrOnE lf1A== X-Gm-Message-State: ACgBeo1uClWAiPL8kX31UhALjzCsTYhdZBPRh6Hxmb/gJsrhUGdTjZQd ujliJsriFrsjpr0EYCPeHGT5TzDhr/DmSg== X-Google-Smtp-Source: AA6agR4riB1Mogc+4e2+vc9mIClL1ftOF9F22Hi+YOG1zNHIriK0RmWYjL3AF9/e1bTBKt0m6TLrdQ== X-Received: by 2002:a17:90b:4c8d:b0:1f5:29ef:4a36 with SMTP id my13-20020a17090b4c8d00b001f529ef4a36mr6307631pjb.127.1660879585451; Thu, 18 Aug 2022 20:26:25 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, iii@linux.ibm.com, dramforever@live.com, alistair.francis@wdc.com, alex.bennee@linaro.org Subject: [PATCH v6 08/21] accel/tcg: Properly implement get_page_addr_code for user-only Date: Thu, 18 Aug 2022 20:26:02 -0700 Message-Id: <20220819032615.884847-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220819032615.884847-1-richard.henderson@linaro.org> References: <20220819032615.884847-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::1029; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1029.google.com X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, DKIM_INVALID=0.1, DKIM_SIGNED=0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1660880476495100003 Content-Type: text/plain; charset="utf-8" The current implementation is a no-op, simply returning addr. This is incorrect, because we ought to be checking the page permissions for execution. Make get_page_addr_code inline for both implementations. Signed-off-by: Richard Henderson Acked-by: Alistair Francis Tested-by: Vivian Wang --- include/exec/exec-all.h | 85 ++++++++++++++--------------------------- accel/tcg/cputlb.c | 5 --- accel/tcg/user-exec.c | 15 ++++++++ 3 files changed, 43 insertions(+), 62 deletions(-) diff --git a/include/exec/exec-all.h b/include/exec/exec-all.h index 311e5fb422..0475ec6007 100644 --- a/include/exec/exec-all.h +++ b/include/exec/exec-all.h @@ -598,43 +598,44 @@ struct MemoryRegionSection *iotlb_to_section(CPUState= *cpu, hwaddr index, MemTxAttrs attr= s); #endif =20 -#if defined(CONFIG_USER_ONLY) -void mmap_lock(void); -void mmap_unlock(void); -bool have_mmap_lock(void); - /** - * get_page_addr_code() - user-mode version + * get_page_addr_code_hostp() * @env: CPUArchState * @addr: guest virtual address of guest code * - * Returns @addr. + * See get_page_addr_code() (full-system version) for documentation on the + * return value. + * + * Sets *@hostp (when @hostp is non-NULL) as follows. + * If the return value is -1, sets *@hostp to NULL. Otherwise, sets *@hostp + * to the host address where @addr's content is kept. + * + * Note: this function can trigger an exception. + */ +tb_page_addr_t get_page_addr_code_hostp(CPUArchState *env, target_ulong ad= dr, + void **hostp); + +/** + * get_page_addr_code() + * @env: CPUArchState + * @addr: guest virtual address of guest code + * + * If we cannot translate and execute from the entire RAM page, or if + * the region is not backed by RAM, returns -1. Otherwise, returns the + * ram_addr_t corresponding to the guest code at @addr. + * + * Note: this function can trigger an exception. */ static inline tb_page_addr_t get_page_addr_code(CPUArchState *env, target_ulong addr) { - return addr; + return get_page_addr_code_hostp(env, addr, NULL); } =20 -/** - * get_page_addr_code_hostp() - user-mode version - * @env: CPUArchState - * @addr: guest virtual address of guest code - * - * Returns @addr. - * - * If @hostp is non-NULL, sets *@hostp to the host address where @addr's c= ontent - * is kept. - */ -static inline tb_page_addr_t get_page_addr_code_hostp(CPUArchState *env, - target_ulong addr, - void **hostp) -{ - if (hostp) { - *hostp =3D g2h_untagged(addr); - } - return addr; -} +#if defined(CONFIG_USER_ONLY) +void mmap_lock(void); +void mmap_unlock(void); +bool have_mmap_lock(void); =20 /** * adjust_signal_pc: @@ -691,36 +692,6 @@ G_NORETURN void cpu_loop_exit_sigbus(CPUState *cpu, ta= rget_ulong addr, static inline void mmap_lock(void) {} static inline void mmap_unlock(void) {} =20 -/** - * get_page_addr_code() - full-system version - * @env: CPUArchState - * @addr: guest virtual address of guest code - * - * If we cannot translate and execute from the entire RAM page, or if - * the region is not backed by RAM, returns -1. Otherwise, returns the - * ram_addr_t corresponding to the guest code at @addr. - * - * Note: this function can trigger an exception. - */ -tb_page_addr_t get_page_addr_code(CPUArchState *env, target_ulong addr); - -/** - * get_page_addr_code_hostp() - full-system version - * @env: CPUArchState - * @addr: guest virtual address of guest code - * - * See get_page_addr_code() (full-system version) for documentation on the - * return value. - * - * Sets *@hostp (when @hostp is non-NULL) as follows. - * If the return value is -1, sets *@hostp to NULL. Otherwise, sets *@hostp - * to the host address where @addr's content is kept. - * - * Note: this function can trigger an exception. - */ -tb_page_addr_t get_page_addr_code_hostp(CPUArchState *env, target_ulong ad= dr, - void **hostp); - void tlb_reset_dirty(CPUState *cpu, ram_addr_t start1, ram_addr_t length); void tlb_set_dirty(CPUState *cpu, target_ulong vaddr); =20 diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c index a46f3a654d..43bd65c973 100644 --- a/accel/tcg/cputlb.c +++ b/accel/tcg/cputlb.c @@ -1544,11 +1544,6 @@ tb_page_addr_t get_page_addr_code_hostp(CPUArchState= *env, target_ulong addr, return qemu_ram_addr_from_host_nofail(p); } =20 -tb_page_addr_t get_page_addr_code(CPUArchState *env, target_ulong addr) -{ - return get_page_addr_code_hostp(env, addr, NULL); -} - static void notdirty_write(CPUState *cpu, vaddr mem_vaddr, unsigned size, CPUIOTLBEntry *iotlbentry, uintptr_t retaddr) { diff --git a/accel/tcg/user-exec.c b/accel/tcg/user-exec.c index 20ada5472b..a20234fb02 100644 --- a/accel/tcg/user-exec.c +++ b/accel/tcg/user-exec.c @@ -199,6 +199,21 @@ void *probe_access(CPUArchState *env, target_ulong add= r, int size, return size ? g2h(env_cpu(env), addr) : NULL; } =20 +tb_page_addr_t get_page_addr_code_hostp(CPUArchState *env, target_ulong ad= dr, + void **hostp) +{ + int flags; + + flags =3D probe_access_internal(env, addr, 1, MMU_INST_FETCH, true, 0); + if (unlikely(flags)) { + return -1; + } + if (hostp) { + *hostp =3D g2h_untagged(addr); + } + return addr; +} + /* The softmmu versions of these helpers are in cputlb.c. */ =20 /* --=20 2.34.1 From nobody Sun May 5 06:28:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1660879910; cv=none; d=zohomail.com; s=zohoarc; b=Q7NyjHv7Kb6zvefyt4Tb/t/RbbPyk4z+k171K9p1kKjrUvi8CjKwEJsA30QE7cKOEjPm0afz2oPHlPG99dOkZU2lWBESKKUhHNo5QExSDnOZpD9SjraPchAJAy6SJsTQEux+qtBP8mH3XxVxFaymEIiNLdYUl4vAtaUzczg14jg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1660879910; 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; bh=BkKYzAS+5uJ73OkqVTsICJsmapNm4Yj8Jkt7Pin6sUU=; b=WOElI/phYHsd0uyP3yufJrpIUw1hl73KzWAgasdjKvnkxvL5uNQBdLG4OCBAarHwn6fhFmN5vf4aL+ca3LHA1dD0NtqXHIxDyi+DFN7wpGRGu0bPZT6SnZgGQ1ieok38kFyO3XXLjzvOn15oTK9OgSiuND91QS64g3aHCHprjMc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1660879910940801.4744789061987; Thu, 18 Aug 2022 20:31:50 -0700 (PDT) Received: from localhost ([::1]:47100 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oOsjc-0001tu-Jb for importer@patchew.org; Thu, 18 Aug 2022 23:31:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54102) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oOseV-0001my-GW for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:31 -0400 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]:44560) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oOseS-0002kl-Uj for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:31 -0400 Received: by mail-pl1-x62d.google.com with SMTP id d16so3082948pll.11 for ; Thu, 18 Aug 2022 20:26:28 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:bbf3:9914:aa9c:3b4e]) by smtp.gmail.com with ESMTPSA id g184-20020a6252c1000000b00535d19c46d7sm2199904pfb.203.2022.08.18.20.26.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Aug 2022 20:26:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc; bh=BkKYzAS+5uJ73OkqVTsICJsmapNm4Yj8Jkt7Pin6sUU=; b=C9rxDRGCvNgjEL+g59RVPET6/6xCk5/MAHGvriq99Tu9MnJ1ik+lTiOlMc2uUXefkq ufhhv/pESJjRq5w6OKi8o/mSCWw0eSw0B7xiaTOF62LFiuac4M3Le8QgB5dZlbYyFxwi 2/P1fMSyeoWU87e3dutUa2rjL2jFMsmOM6mcKVCkQyrXfmwdanqk+y9glGetZWuRkqxG 0C8jTTnTF4VXCH6tSTBe2IOPiyX1t2j0G+NcEK5ctNZNM5tHXpJXhVC8GDPvJr7OSk37 97619a9dIDMkltGivlLjdQgVEVdXYIZoWRTH5o8689fQDuBXYXGHbFEDffk/A7Oddz/Y BA0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc; bh=BkKYzAS+5uJ73OkqVTsICJsmapNm4Yj8Jkt7Pin6sUU=; b=KkWGYXB2mJIPHdy1uKUA28qIpIUdkXK72Vzw+0HK6tU/3EB+no/7iD6KONo9lwfQ0A Y39qoysoX3hOhP2GyyqU8DlxvVEQiMAKsAdW0cVWxrAufOVK5y60T9/8vb0IKa0lUasG NsDmuKFRAT7wvWhAkvtGjtZX8/wSrZsCZFQZXGLbVf05wwvPSZ+pm7sJhW339Ksl/ZdS yCSKcC2OcFRtbjX6LLpjXIK9Sd6Hat2NT3pCMCsHzrTxeOBKf57/QTFbDv1bZDRZLysI PwMdETuDev3pGPORzgpuEhZhq+NFnxpqh6Jx+MqYKau+iSHANl6iDUp/Y9R8S7T6O7Jk eI3g== X-Gm-Message-State: ACgBeo3C9NhIzElysiFDyDCozdwdPGGx1s+VwGjHgTWaUtCaKMwWaIiB fvO61RzC72YZOZbkLJet9gDD5PHUi6koQQ== X-Google-Smtp-Source: AA6agR7/FNcHkHUMOIJgOLxRdS1TTt17aZ8sDGz8SixPdKSPhQIajd2NlFohLgqTYfPLyiP8pkTwyQ== X-Received: by 2002:a17:90a:9a8a:b0:1fa:b4c1:c94 with SMTP id e10-20020a17090a9a8a00b001fab4c10c94mr11108205pjp.210.1660879587484; Thu, 18 Aug 2022 20:26:27 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, iii@linux.ibm.com, dramforever@live.com, alistair.francis@wdc.com, alex.bennee@linaro.org Subject: [PATCH v6 09/21] accel/tcg: Unlock mmap_lock after longjmp Date: Thu, 18 Aug 2022 20:26:03 -0700 Message-Id: <20220819032615.884847-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220819032615.884847-1-richard.henderson@linaro.org> References: <20220819032615.884847-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::62d; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1660879913010100001 Content-Type: text/plain; charset="utf-8" The mmap_lock is held around tb_gen_code. While the comment is correct that the lock is dropped when tb_gen_code runs out of memory, the lock is *not* dropped when an exception is raised reading code for translation. Signed-off-by: Richard Henderson Acked-by: Alistair Francis Tested-by: Vivian Wang --- accel/tcg/cpu-exec.c | 12 ++++++------ accel/tcg/user-exec.c | 3 --- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/accel/tcg/cpu-exec.c b/accel/tcg/cpu-exec.c index a565a3f8ec..d18081ca6f 100644 --- a/accel/tcg/cpu-exec.c +++ b/accel/tcg/cpu-exec.c @@ -462,13 +462,11 @@ void cpu_exec_step_atomic(CPUState *cpu) cpu_tb_exec(cpu, tb, &tb_exit); cpu_exec_exit(cpu); } else { - /* - * The mmap_lock is dropped by tb_gen_code if it runs out of - * memory. - */ #ifndef CONFIG_SOFTMMU clear_helper_retaddr(); - tcg_debug_assert(!have_mmap_lock()); + if (have_mmap_lock()) { + mmap_unlock(); + } #endif if (qemu_mutex_iothread_locked()) { qemu_mutex_unlock_iothread(); @@ -936,7 +934,9 @@ int cpu_exec(CPUState *cpu) =20 #ifndef CONFIG_SOFTMMU clear_helper_retaddr(); - tcg_debug_assert(!have_mmap_lock()); + if (have_mmap_lock()) { + mmap_unlock(); + } #endif if (qemu_mutex_iothread_locked()) { qemu_mutex_unlock_iothread(); diff --git a/accel/tcg/user-exec.c b/accel/tcg/user-exec.c index a20234fb02..58edd33896 100644 --- a/accel/tcg/user-exec.c +++ b/accel/tcg/user-exec.c @@ -80,10 +80,7 @@ MMUAccessType adjust_signal_pc(uintptr_t *pc, bool is_wr= ite) * (and if the translator doesn't handle page boundaries correctly * there's little we can do about that here). Therefore, do not * trigger the unwinder. - * - * Like tb_gen_code, release the memory lock before cpu_loop_exit. */ - mmap_unlock(); *pc =3D 0; return MMU_INST_FETCH; } --=20 2.34.1 From nobody Sun May 5 06:28:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1660880121; cv=none; d=zohomail.com; s=zohoarc; b=QEBPvULoyw/F+AFrXZnSVB5ysXelAL6mZ1L7oHOyUJM4QEgJE4at4TsHNI+DEOgk2vS6ezI5LA6019Yxd546qC+Urp1WCy3K83pjlQLZZXOGtfY4uK6up10+ltUOknvehYyrfmXZ59TkYEnz2GrSEO73YgycsiRLJJY6Dxae4hE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1660880121; 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; bh=FS3DP+0K3pFLIFDXu1c6Y1ALlRlgb0mXw4XbbUyM3LE=; b=i06WWfAn1ki9MVFKTwkt8HIvKo4oYMrjP/g90RPOZyKd4tCOP8O0JYHXGX8u2skSYYkXjLGm7EE1HfNNpG0xH/PdbXlaHMRZGsG8aMs+5lCEcs0WUK3NifMZayzM0f7O/Kh+zxD+Zijysc1xFUhcgbYGBEwSk3jbVLxYoNB0LD4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 16608801214857.213692888264973; Thu, 18 Aug 2022 20:35:21 -0700 (PDT) Received: from localhost ([::1]:44134 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oOsn2-0007iX-9A for importer@patchew.org; Thu, 18 Aug 2022 23:35:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54106) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oOseX-0001rn-Ng for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:33 -0400 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]:33343) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oOseU-0002kr-OZ for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:32 -0400 Received: by mail-pl1-x62d.google.com with SMTP id 2so3132024pll.0 for ; Thu, 18 Aug 2022 20:26:29 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:bbf3:9914:aa9c:3b4e]) by smtp.gmail.com with ESMTPSA id g184-20020a6252c1000000b00535d19c46d7sm2199904pfb.203.2022.08.18.20.26.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Aug 2022 20:26:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc; bh=FS3DP+0K3pFLIFDXu1c6Y1ALlRlgb0mXw4XbbUyM3LE=; b=JUFzpsOLp8qe/lcdQS06BMeRKrAnw5vIpIRhMOQgo3p1LNpR4UtYxlW+7SWieYZVnm moF4mGf7bYoXZHuiWQeHpP5NujO6Yz0/O8QBUyR8tfJc8oODJGu7CjlTTHVe6Q6Qjwrx RwCDhFlO6EGDxhqhbdAukg7yzanb3CpVVHQNV5iju7Ee6nJ3Whuu8P3G3/LSqN9pWYvw eiA1JRCUXbAN40RGI0mdXIUoqOkv/sSlm+FI2L2L8RwYggtxd/uogOI+qLfp/Yp8/rab V7C2V3mpqrTdXUoCkMPU6TiV3dlvB5TBRng87XSbzpnjBBStpr9hObdJ7L/ClU73nm6j q3bA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc; bh=FS3DP+0K3pFLIFDXu1c6Y1ALlRlgb0mXw4XbbUyM3LE=; b=rBAkRyyxvkAaelS1SRygX1kobHxemH1s5F+XEqXVUy/9orVnQQCI8050Uf8YpOjrjF nNFm9pBRvdoLdVlm+4VLVreQL1IuW1DFMSEaPHQsewhuocsdvQUe45ADmf6JZpq0Odzm 0B0sPFcK3bpjUTr9rMlgrUc5mqCSSBlrhj5fhQNRZv4pLwolKB+pmUCnvyPyABBGNJNO UtgDdIKhLE5Vc7ls21Rm09nkWy35jMXXFsURYh8Vy0JBZofO/e6vmTW6maSEblkNk7WF 1dP4qhxW7Ups3of8IPzVCm3p1VnpckCnwsPLwYRthNwo67SnslxF9GjWzxmIXGnY3KOl WArw== X-Gm-Message-State: ACgBeo3GqynQSkIundG4u8Zaq7cQxH3XZHhvF+a7yFAr2OJXzX4UUZ8R t9j19OqnLP6QMCyrjx61ZT4ZQT+89d7GNg== X-Google-Smtp-Source: AA6agR6T0JcZd2vDmXmBD19DAQfmxGysgrfPs8C6dA9qGtfvNt1fRzJqZKH+EwIDs+t+ldZpfp8IuQ== X-Received: by 2002:a17:90b:4c52:b0:1f6:3a26:9f08 with SMTP id np18-20020a17090b4c5200b001f63a269f08mr6291017pjb.206.1660879588526; Thu, 18 Aug 2022 20:26:28 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, iii@linux.ibm.com, dramforever@live.com, alistair.francis@wdc.com, alex.bennee@linaro.org Subject: [PATCH v6 10/21] accel/tcg: Make tb_htable_lookup static Date: Thu, 18 Aug 2022 20:26:04 -0700 Message-Id: <20220819032615.884847-11-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220819032615.884847-1-richard.henderson@linaro.org> References: <20220819032615.884847-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::62d; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1660880122083100001 Content-Type: text/plain; charset="utf-8" The function is not used outside of cpu-exec.c. Move it and its subroutines up in the file, before the first use. Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis Tested-by: Vivian Wang --- include/exec/exec-all.h | 3 - accel/tcg/cpu-exec.c | 122 ++++++++++++++++++++-------------------- 2 files changed, 61 insertions(+), 64 deletions(-) diff --git a/include/exec/exec-all.h b/include/exec/exec-all.h index 0475ec6007..9f35e3b7a9 100644 --- a/include/exec/exec-all.h +++ b/include/exec/exec-all.h @@ -552,9 +552,6 @@ void tb_invalidate_phys_addr(AddressSpace *as, hwaddr a= ddr, MemTxAttrs attrs); #endif void tb_flush(CPUState *cpu); void tb_phys_invalidate(TranslationBlock *tb, tb_page_addr_t page_addr); -TranslationBlock *tb_htable_lookup(CPUState *cpu, target_ulong pc, - target_ulong cs_base, uint32_t flags, - uint32_t cflags); void tb_set_jmp_target(TranslationBlock *tb, int n, uintptr_t addr); =20 /* GETPC is the true target of the return instruction that we'll execute. = */ diff --git a/accel/tcg/cpu-exec.c b/accel/tcg/cpu-exec.c index d18081ca6f..7887af6f45 100644 --- a/accel/tcg/cpu-exec.c +++ b/accel/tcg/cpu-exec.c @@ -170,6 +170,67 @@ uint32_t curr_cflags(CPUState *cpu) return cflags; } =20 +struct tb_desc { + target_ulong pc; + target_ulong cs_base; + CPUArchState *env; + tb_page_addr_t phys_page1; + uint32_t flags; + uint32_t cflags; + uint32_t trace_vcpu_dstate; +}; + +static bool tb_lookup_cmp(const void *p, const void *d) +{ + const TranslationBlock *tb =3D p; + const struct tb_desc *desc =3D d; + + if (tb->pc =3D=3D desc->pc && + tb->page_addr[0] =3D=3D desc->phys_page1 && + tb->cs_base =3D=3D desc->cs_base && + tb->flags =3D=3D desc->flags && + tb->trace_vcpu_dstate =3D=3D desc->trace_vcpu_dstate && + tb_cflags(tb) =3D=3D desc->cflags) { + /* check next page if needed */ + if (tb->page_addr[1] =3D=3D -1) { + return true; + } else { + tb_page_addr_t phys_page2; + target_ulong virt_page2; + + virt_page2 =3D (desc->pc & TARGET_PAGE_MASK) + TARGET_PAGE_SIZ= E; + phys_page2 =3D get_page_addr_code(desc->env, virt_page2); + if (tb->page_addr[1] =3D=3D phys_page2) { + return true; + } + } + } + return false; +} + +static TranslationBlock *tb_htable_lookup(CPUState *cpu, target_ulong pc, + target_ulong cs_base, uint32_t f= lags, + uint32_t cflags) +{ + tb_page_addr_t phys_pc; + struct tb_desc desc; + uint32_t h; + + desc.env =3D cpu->env_ptr; + desc.cs_base =3D cs_base; + desc.flags =3D flags; + desc.cflags =3D cflags; + desc.trace_vcpu_dstate =3D *cpu->trace_dstate; + desc.pc =3D pc; + phys_pc =3D get_page_addr_code(desc.env, pc); + if (phys_pc =3D=3D -1) { + return NULL; + } + desc.phys_page1 =3D phys_pc & TARGET_PAGE_MASK; + h =3D tb_hash_func(phys_pc, pc, flags, cflags, *cpu->trace_dstate); + return qht_lookup_custom(&tb_ctx.htable, &desc, h, tb_lookup_cmp); +} + /* Might cause an exception, so have a longjmp destination ready */ static inline TranslationBlock *tb_lookup(CPUState *cpu, target_ulong pc, target_ulong cs_base, @@ -485,67 +546,6 @@ void cpu_exec_step_atomic(CPUState *cpu) end_exclusive(); } =20 -struct tb_desc { - target_ulong pc; - target_ulong cs_base; - CPUArchState *env; - tb_page_addr_t phys_page1; - uint32_t flags; - uint32_t cflags; - uint32_t trace_vcpu_dstate; -}; - -static bool tb_lookup_cmp(const void *p, const void *d) -{ - const TranslationBlock *tb =3D p; - const struct tb_desc *desc =3D d; - - if (tb->pc =3D=3D desc->pc && - tb->page_addr[0] =3D=3D desc->phys_page1 && - tb->cs_base =3D=3D desc->cs_base && - tb->flags =3D=3D desc->flags && - tb->trace_vcpu_dstate =3D=3D desc->trace_vcpu_dstate && - tb_cflags(tb) =3D=3D desc->cflags) { - /* check next page if needed */ - if (tb->page_addr[1] =3D=3D -1) { - return true; - } else { - tb_page_addr_t phys_page2; - target_ulong virt_page2; - - virt_page2 =3D (desc->pc & TARGET_PAGE_MASK) + TARGET_PAGE_SIZ= E; - phys_page2 =3D get_page_addr_code(desc->env, virt_page2); - if (tb->page_addr[1] =3D=3D phys_page2) { - return true; - } - } - } - return false; -} - -TranslationBlock *tb_htable_lookup(CPUState *cpu, target_ulong pc, - target_ulong cs_base, uint32_t flags, - uint32_t cflags) -{ - tb_page_addr_t phys_pc; - struct tb_desc desc; - uint32_t h; - - desc.env =3D cpu->env_ptr; - desc.cs_base =3D cs_base; - desc.flags =3D flags; - desc.cflags =3D cflags; - desc.trace_vcpu_dstate =3D *cpu->trace_dstate; - desc.pc =3D pc; - phys_pc =3D get_page_addr_code(desc.env, pc); - if (phys_pc =3D=3D -1) { - return NULL; - } - desc.phys_page1 =3D phys_pc & TARGET_PAGE_MASK; - h =3D tb_hash_func(phys_pc, pc, flags, cflags, *cpu->trace_dstate); - return qht_lookup_custom(&tb_ctx.htable, &desc, h, tb_lookup_cmp); -} - void tb_set_jmp_target(TranslationBlock *tb, int n, uintptr_t addr) { if (TCG_TARGET_HAS_direct_jump) { --=20 2.34.1 From nobody Sun May 5 06:28:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1660880101; cv=none; d=zohomail.com; s=zohoarc; b=bASzsdl8TbxlZUfpEtUMIALO7v6l+LT1n/nhLcYSC5gYT5NP0J5z4flVTpI/dPFupx37U62TtHfF+n2Mn8jzR13u+nt0DUYC4BUEf+DOZaJKGZ7v4bhGhbSp1sVA1YOKeH5XH9lC6BsyiKsjvsmMnq4TC1e4UW0Iz0t+FCcTovo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1660880101; 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; bh=zDz/TIezAGhDTjjMc0+1pA+Hd7qL30qFYVrbSwswVFk=; b=QlgnEx5UkUq5K8JP5YtG4ICe5mvWGHWKIQTkjDmYCmdywfn6Z8+uzMIO1bqXN8j4Qt92lOZD8fvtC/yhl1/SYlHbyjTwg/Hg3npiAhEt0nn0v1PrCdfH7YljzKbfUdI9qTVdiRo01AfzKAiqgls6Y102a0gfOdU6WwI3zsdnolA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1660880101259208.29738226090808; Thu, 18 Aug 2022 20:35:01 -0700 (PDT) Received: from localhost ([::1]:53274 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oOsmi-0007Ix-0Z for importer@patchew.org; Thu, 18 Aug 2022 23:35:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54110) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oOseX-0001t2-E3 for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:33 -0400 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]:33344) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oOseV-0002ky-QO for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:33 -0400 Received: by mail-pl1-x62e.google.com with SMTP id 2so3132048pll.0 for ; Thu, 18 Aug 2022 20:26:31 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:bbf3:9914:aa9c:3b4e]) by smtp.gmail.com with ESMTPSA id g184-20020a6252c1000000b00535d19c46d7sm2199904pfb.203.2022.08.18.20.26.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Aug 2022 20:26:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc; bh=zDz/TIezAGhDTjjMc0+1pA+Hd7qL30qFYVrbSwswVFk=; b=U+2p8ax6lMUONdaDQ+mL3Ay/Rl4HuoGYrPdClY0w92nsEcMQW8QaqzBJOqrNpLy9/4 SDXxgdGy/+8T79dGElH4fBq9NsD4u7B8HAcqNzv+sg83eD+v+jrrCXK8Xwxk8CGmc4Lg ziWn1wuASavlZM8p2Nyh9nOhF4bA2n+bPJxK4V9/FTbry26J0kHGgm4FNjfPG36TWtyg k9aYpv3J/HYoWgiNvVbxRkusuIQuU4c6A0DYw++HHiPGnAhXDJippSoe11+IhdpbfYe1 qJ3oDVmoOfOy+pDTw/bsZpfv04f6qXd2pHGRAb/lHOWtvX2fXm4WQp4983HfHZrW9EHd rraQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc; bh=zDz/TIezAGhDTjjMc0+1pA+Hd7qL30qFYVrbSwswVFk=; b=dtwhg0vKWCPIvO1rf5MJcXcOc3UhwJsTwTIysDv66j6+tq1kP7tKZx7OpI4s9K+qMt 8Pw0WCO+ZxPl+w0UzMeCNwjJdWom4MeBUktbXD52snfv9tiLekqMtAA3LO9Gq2gr6Jpc rH09HowOeTLLcSI33WguyculT+HHZGy8SNolJ1hRcyuRYmatxHCnJQ4nCrE8upROkkVM IxNiHGEfvESWvVv5tOBuoH67vzxP3XexNvnWmm0lPpSeOHzydqL3Tz4q1BkYajMu43O9 E2qTj1YaLGwNRG5a6brHxBm14HQ7leiYP8tspLoTxVOVoSjIcRHPnE76MGYoTeO7GoN5 j3qg== X-Gm-Message-State: ACgBeo3zfrH1DHNdm+B3LomwmaFLaa9ZqWrkL12W4Jdszs5JfI/2FWJ1 ODQEJ9FBgd7BPgE6HqdLHBnb6sD7SNW4tA== X-Google-Smtp-Source: AA6agR79XBA+FjcAjF8THlzRYNMxNNQDxg8Ej38q0cFYabwKRRi/Q4MMhXuACYVENjYvs7nvD5nlXQ== X-Received: by 2002:a17:90b:4b05:b0:1f5:b540:de3a with SMTP id lx5-20020a17090b4b0500b001f5b540de3amr6201352pjb.43.1660879589480; Thu, 18 Aug 2022 20:26:29 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, iii@linux.ibm.com, dramforever@live.com, alistair.francis@wdc.com, alex.bennee@linaro.org Subject: [PATCH v6 11/21] accel/tcg: Move qemu_ram_addr_from_host_nofail to physmem.c Date: Thu, 18 Aug 2022 20:26:05 -0700 Message-Id: <20220819032615.884847-12-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220819032615.884847-1-richard.henderson@linaro.org> References: <20220819032615.884847-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::62e; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1660880101920100001 Content-Type: text/plain; charset="utf-8" The base qemu_ram_addr_from_host function is already in softmmu/physmem.c; move the nofail version to be adjacent. Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis Tested-by: Vivian Wang --- include/exec/cpu-common.h | 1 + accel/tcg/cputlb.c | 12 ------------ softmmu/physmem.c | 12 ++++++++++++ 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/include/exec/cpu-common.h b/include/exec/cpu-common.h index 2281be4e10..d909429427 100644 --- a/include/exec/cpu-common.h +++ b/include/exec/cpu-common.h @@ -72,6 +72,7 @@ typedef uintptr_t ram_addr_t; void qemu_ram_remap(ram_addr_t addr, ram_addr_t length); /* This should not be used by devices. */ ram_addr_t qemu_ram_addr_from_host(void *ptr); +ram_addr_t qemu_ram_addr_from_host_nofail(void *ptr); RAMBlock *qemu_ram_block_by_name(const char *name); RAMBlock *qemu_ram_block_from_host(void *ptr, bool round_offset, ram_addr_t *offset); diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c index 43bd65c973..80a3eb4f1c 100644 --- a/accel/tcg/cputlb.c +++ b/accel/tcg/cputlb.c @@ -1283,18 +1283,6 @@ void tlb_set_page(CPUState *cpu, target_ulong vaddr, prot, mmu_idx, size); } =20 -static inline ram_addr_t qemu_ram_addr_from_host_nofail(void *ptr) -{ - ram_addr_t ram_addr; - - ram_addr =3D qemu_ram_addr_from_host(ptr); - if (ram_addr =3D=3D RAM_ADDR_INVALID) { - error_report("Bad ram pointer %p", ptr); - abort(); - } - return ram_addr; -} - /* * Note: tlb_fill() can trigger a resize of the TLB. This means that all o= f the * caller's prior references to the TLB table (e.g. CPUTLBEntry pointers) = must diff --git a/softmmu/physmem.c b/softmmu/physmem.c index dc3c3e5f2e..d4c30e99ea 100644 --- a/softmmu/physmem.c +++ b/softmmu/physmem.c @@ -2460,6 +2460,18 @@ ram_addr_t qemu_ram_addr_from_host(void *ptr) return block->offset + offset; } =20 +ram_addr_t qemu_ram_addr_from_host_nofail(void *ptr) +{ + ram_addr_t ram_addr; + + ram_addr =3D qemu_ram_addr_from_host(ptr); + if (ram_addr =3D=3D RAM_ADDR_INVALID) { + error_report("Bad ram pointer %p", ptr); + abort(); + } + return ram_addr; +} + static MemTxResult flatview_read(FlatView *fv, hwaddr addr, MemTxAttrs attrs, void *buf, hwaddr len); static MemTxResult flatview_write(FlatView *fv, hwaddr addr, MemTxAttrs at= trs, --=20 2.34.1 From nobody Sun May 5 06:28:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1660880103; cv=none; d=zohomail.com; s=zohoarc; b=QBUQ+9ulUi8mbPkr/eZD55DJcBoQ6xcfVpqj+wBYA23CHKqqhqzc4xQXCiB2PPFl4OXVqITmPMtHc6lcLalKrwNKyGbSfiRKRoYqLuvYQnwg+wZMGUvWfBotGvlsTQi7xRTZWCJnfNHHsBPX4KSs3WW7B4/UOGB1Q9OxgH9VfzY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1660880103; 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; bh=xG7LkxSPgE8989MOfr7x1M7HWGz1uhuKkBsNsQ7qQC0=; b=MFNlY4Vv5hyrG3nFyueozv8JRHtuKa0TITlDSV2G9WOAm5XpU/gF+pRBLcwuYWT+KB9yBhnsSogO5TyVr1CbUWUIq62LM1yTeCv1l3LYH7adE2hSYyGD957ylUna5KQoBoR3EehLRrbZGRMKcE/oGAhJYO0wjmtI9Ftue6bywPE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1660880103120985.416911565103; Thu, 18 Aug 2022 20:35:03 -0700 (PDT) Received: from localhost ([::1]:53276 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oOsmk-0007SE-2o for importer@patchew.org; Thu, 18 Aug 2022 23:35:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54108) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oOseX-0001sb-6l for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:33 -0400 Received: from mail-pf1-x42b.google.com ([2607:f8b0:4864:20::42b]:41558) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oOseV-0002iF-FM for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:32 -0400 Received: by mail-pf1-x42b.google.com with SMTP id q19so3234355pfg.8 for ; Thu, 18 Aug 2022 20:26:31 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:bbf3:9914:aa9c:3b4e]) by smtp.gmail.com with ESMTPSA id g184-20020a6252c1000000b00535d19c46d7sm2199904pfb.203.2022.08.18.20.26.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Aug 2022 20:26:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc; bh=xG7LkxSPgE8989MOfr7x1M7HWGz1uhuKkBsNsQ7qQC0=; b=JcQCQhhh7IQ1ZxG2So/tlri576lcYHY1kkIK4JJyFLsQ0lqWi/W7Nilu4SoQ8sBk5b mGlbSteWt3zm2lVEB0cOrkX66gMQxhQoxE9PhWGU/fHG8VvAXgvr24VWMkkz7UNNE5+m K+pS6YZLfn3b6bV3LhK9jUebOKeCUMqCdyE+TiB77pRfaZDXLolm5vHmHdQjw04ZOmgq wp2RUzAwN3dniY/KSB7sUYQPen8c7G2+CywchHFFF0idANfU5QRJsG7TsDrCMUJzyWdK vhP5HL0EjjaksQPAcUjvaBkNpbCe6I/OILe95suWIj7djT4kkPVvrUEtkSwpTYhlSjFM PJ/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc; bh=xG7LkxSPgE8989MOfr7x1M7HWGz1uhuKkBsNsQ7qQC0=; b=CJdzxY5+bstvYzZnDc2kkn/6LhrqYuAnvCvT+vsOHmqEJCRoIuOOirF4svImeS670L lvq1gG/pkTdqlkpzoWQ2/2DkXYvibyjTFE3EuGM8j03E+wm3GVo19V3GWFK5/ITuM3gb bQDDxvbiygsqDrxmqj3M50idFYentR7tYh0UeC5ZtWYgqJovr6venT+ecVPz8RIW826T P+eOmmrDmUk+2R3oTZ1hMojxSd1iDBPzaBonwnh//Nv0vxUoBqLeS/wB1pBaudeZoUAr Gi6ZeSk7QXCLX6+n3pqtdEu3Zw+Nz4sD8YTUvaN+I9WvlL8CHTHdzX/f26Ns5Z91Qz4B 4EBw== X-Gm-Message-State: ACgBeo2oJJThmNh1r5sLzcERPeJ7TCVWh0YWvvKre1FxoGYRFUQJvmIf Kh+CYDjnBW0O/S0G5h3E8yIBZrCGxprqYA== X-Google-Smtp-Source: AA6agR6empT0iTrHJUeXcTMY6fXg0nnaXjF4PhdgZL2SCIKMSP+cFVT0/8929A8qNV3j/kHGkIECRQ== X-Received: by 2002:a63:b58:0:b0:429:c7fb:d60c with SMTP id a24-20020a630b58000000b00429c7fbd60cmr4800594pgl.210.1660879590668; Thu, 18 Aug 2022 20:26:30 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, iii@linux.ibm.com, dramforever@live.com, alistair.francis@wdc.com, alex.bennee@linaro.org Subject: [PATCH v6 12/21] accel/tcg: Use probe_access_internal for softmmu get_page_addr_code_hostp Date: Thu, 18 Aug 2022 20:26:06 -0700 Message-Id: <20220819032615.884847-13-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220819032615.884847-1-richard.henderson@linaro.org> References: <20220819032615.884847-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::42b; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1660880103924100003 Content-Type: text/plain; charset="utf-8" Simplify the implementation of get_page_addr_code_hostp by reusing the existing probe_access infrastructure. Signed-off-by: Richard Henderson Tested-by: Vivian Wang --- accel/tcg/cputlb.c | 76 ++++++++++++++++------------------------------ 1 file changed, 26 insertions(+), 50 deletions(-) diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c index 80a3eb4f1c..2dc2affa12 100644 --- a/accel/tcg/cputlb.c +++ b/accel/tcg/cputlb.c @@ -1482,56 +1482,6 @@ static bool victim_tlb_hit(CPUArchState *env, size_t= mmu_idx, size_t index, victim_tlb_hit(env, mmu_idx, index, offsetof(CPUTLBEntry, TY), \ (ADDR) & TARGET_PAGE_MASK) =20 -/* - * Return a ram_addr_t for the virtual address for execution. - * - * Return -1 if we can't translate and execute from an entire page - * of RAM. This will force us to execute by loading and translating - * one insn at a time, without caching. - * - * NOTE: This function will trigger an exception if the page is - * not executable. - */ -tb_page_addr_t get_page_addr_code_hostp(CPUArchState *env, target_ulong ad= dr, - void **hostp) -{ - uintptr_t mmu_idx =3D cpu_mmu_index(env, true); - uintptr_t index =3D tlb_index(env, mmu_idx, addr); - CPUTLBEntry *entry =3D tlb_entry(env, mmu_idx, addr); - void *p; - - if (unlikely(!tlb_hit(entry->addr_code, addr))) { - if (!VICTIM_TLB_HIT(addr_code, addr)) { - tlb_fill(env_cpu(env), addr, 0, MMU_INST_FETCH, mmu_idx, 0); - index =3D tlb_index(env, mmu_idx, addr); - entry =3D tlb_entry(env, mmu_idx, addr); - - if (unlikely(entry->addr_code & TLB_INVALID_MASK)) { - /* - * The MMU protection covers a smaller range than a target - * page, so we must redo the MMU check for every insn. - */ - return -1; - } - } - assert(tlb_hit(entry->addr_code, addr)); - } - - if (unlikely(entry->addr_code & TLB_MMIO)) { - /* The region is not backed by RAM. */ - if (hostp) { - *hostp =3D NULL; - } - return -1; - } - - p =3D (void *)((uintptr_t)addr + entry->addend); - if (hostp) { - *hostp =3D p; - } - return qemu_ram_addr_from_host_nofail(p); -} - static void notdirty_write(CPUState *cpu, vaddr mem_vaddr, unsigned size, CPUIOTLBEntry *iotlbentry, uintptr_t retaddr) { @@ -1687,6 +1637,32 @@ void *tlb_vaddr_to_host(CPUArchState *env, abi_ptr a= ddr, return flags ? NULL : host; } =20 +/* + * Return a ram_addr_t for the virtual address for execution. + * + * Return -1 if we can't translate and execute from an entire page + * of RAM. This will force us to execute by loading and translating + * one insn at a time, without caching. + * + * NOTE: This function will trigger an exception if the page is + * not executable. + */ +tb_page_addr_t get_page_addr_code_hostp(CPUArchState *env, target_ulong ad= dr, + void **hostp) +{ + void *p; + + (void)probe_access_internal(env, addr, 1, MMU_INST_FETCH, + cpu_mmu_index(env, true), true, &p, 0); + if (p =3D=3D NULL) { + return -1; + } + if (hostp) { + *hostp =3D p; + } + return qemu_ram_addr_from_host_nofail(p); +} + #ifdef CONFIG_PLUGIN /* * Perform a TLB lookup and populate the qemu_plugin_hwaddr structure. --=20 2.34.1 From nobody Sun May 5 06:28:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1660880264; cv=none; d=zohomail.com; s=zohoarc; b=dYT0r1JjSy1KnbSzJsG4rYlz+wncDm4m+/oPKejY/5XYAv0ounufucyfwdiyLWKrpyEfeHZcppwmWCVzyJRQj2jbRhF2H7j6I54igDGcxOK8lx6wFPzu7zKkC5Xip+Q4UzFWThDGMhhwyDcMY1JpkSiikrwgRXwlkKGbYL3aMh4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1660880264; 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; bh=f/BmtYXHXXDyvRAaPO8I+i1wpfPbVTFf5Oe//TMPEv0=; b=bhSrHrWp9y8DKq+4GloppmoV1EUDK1FBssoYKgKoqOFpeSFWrIbVd8FDvbA+2FiowZW8h6h2YlGe6c7Gjw9HdHUpXzWBd6/WCjI7N3rFd065vY8dGUtuJ4Mvta/eNlySLy5QO3yfQG8sEvn74lsALxOrFdcbEcAFLhEdoSlF0gg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1660880264280585.6781776974178; Thu, 18 Aug 2022 20:37:44 -0700 (PDT) Received: from localhost ([::1]:59084 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oOspL-0004bQ-6R for importer@patchew.org; Thu, 18 Aug 2022 23:37:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54114) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oOseZ-00020s-PP for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:35 -0400 Received: from mail-pg1-x531.google.com ([2607:f8b0:4864:20::531]:36796) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oOseY-0002ld-1v for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:35 -0400 Received: by mail-pg1-x531.google.com with SMTP id s206so2772724pgs.3 for ; Thu, 18 Aug 2022 20:26:32 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:bbf3:9914:aa9c:3b4e]) by smtp.gmail.com with ESMTPSA id g184-20020a6252c1000000b00535d19c46d7sm2199904pfb.203.2022.08.18.20.26.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Aug 2022 20:26:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc; bh=f/BmtYXHXXDyvRAaPO8I+i1wpfPbVTFf5Oe//TMPEv0=; b=EFbonJP8GXaTFymqq/dBXyPHBFsW3rdXW3JVGrYyGNQNOHaSd+mO7qFkCQEnFZtOsJ uNzaAVQrSQbAizPQDVID6/Htl1/9jVtmFJwxMVm+pwbwzkBLvvghBQIxuExoNfzJvg9I gelxhCvyF/XEH+Nuj+neG0yuFrNwcxVmVx6yLZFaPawoDwF/ZjDiiM7TGywRkJs10z6t /Qk7qEc8TV0Kme31IRuOPvM029TSADXle6N797ip7kFEyUhADxgOVbJLPCrOJR0yc2fx ggAvI2VbeBX+5MPfqh9PsrQqJX+JKhVE4zY+azOgYBTMW920LfQCsoT5jb8D+B2lpZIA nxOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc; bh=f/BmtYXHXXDyvRAaPO8I+i1wpfPbVTFf5Oe//TMPEv0=; b=Xy4tWGW+es1WdhRg0PGPLoKswn0HRoF0GoEtp5fQ3FEvWCknwUmGdT5gC3ggr2UiOx UNudgG0ykiTH3WK6138sH+JaIeE44dAKHmvcX2yc/uiEJIZkGZUSzqoumJNU6/gjVyWU JExqNOGXM+YWj+jZ1vu5AJpcaJ8+5Esj5BQB/xm8PbPblGuJNe0Q4laARjr2EIOCZKZE MT2bqnrxAowTgviaTcsVUP74XK2XaZ0hs/l/c4TFMyRwybof+IXWk2djK0PpuMExUZaG AG+0vClrAV9n9sNweVc7L4ChW+ukNmbGYcE2roAAS8AOoSXigwdpIw/eMycvPG9cPp6F n6Mg== X-Gm-Message-State: ACgBeo3iyZNlVFJ0VQwyMH/eRYF+q6aCG+FLXZIbvKZTnV0XuRguqBHZ 24oEWDrOEpc9KSEAg1uwelsQw5hPXyo6hg== X-Google-Smtp-Source: AA6agR7vnGS8AQmJL4yDaNuuODKE1ruC2iE5TJciEYaQvp0nEMcQozgCN34iWz3WWJk2WNQORaJ2cg== X-Received: by 2002:a63:2ac4:0:b0:41d:95d8:45b6 with SMTP id q187-20020a632ac4000000b0041d95d845b6mr4856264pgq.132.1660879591721; Thu, 18 Aug 2022 20:26:31 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, iii@linux.ibm.com, dramforever@live.com, alistair.francis@wdc.com, alex.bennee@linaro.org Subject: [PATCH v6 13/21] accel/tcg: Add nofault parameter to get_page_addr_code_hostp Date: Thu, 18 Aug 2022 20:26:07 -0700 Message-Id: <20220819032615.884847-14-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220819032615.884847-1-richard.henderson@linaro.org> References: <20220819032615.884847-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::531; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x531.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1660880265312100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis Tested-by: Vivian Wang --- include/exec/exec-all.h | 10 +++++----- accel/tcg/cputlb.c | 8 ++++---- accel/tcg/plugin-gen.c | 4 ++-- accel/tcg/user-exec.c | 4 ++-- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/include/exec/exec-all.h b/include/exec/exec-all.h index 9f35e3b7a9..7a6dc44d86 100644 --- a/include/exec/exec-all.h +++ b/include/exec/exec-all.h @@ -599,6 +599,8 @@ struct MemoryRegionSection *iotlb_to_section(CPUState *= cpu, * get_page_addr_code_hostp() * @env: CPUArchState * @addr: guest virtual address of guest code + * @nofault: do not raise an exception + * @hostp: output for host pointer * * See get_page_addr_code() (full-system version) for documentation on the * return value. @@ -607,10 +609,10 @@ struct MemoryRegionSection *iotlb_to_section(CPUState= *cpu, * If the return value is -1, sets *@hostp to NULL. Otherwise, sets *@hostp * to the host address where @addr's content is kept. * - * Note: this function can trigger an exception. + * Note: Unless @nofault, this function can trigger an exception. */ tb_page_addr_t get_page_addr_code_hostp(CPUArchState *env, target_ulong ad= dr, - void **hostp); + bool nofault, void **hostp); =20 /** * get_page_addr_code() @@ -620,13 +622,11 @@ tb_page_addr_t get_page_addr_code_hostp(CPUArchState = *env, target_ulong addr, * If we cannot translate and execute from the entire RAM page, or if * the region is not backed by RAM, returns -1. Otherwise, returns the * ram_addr_t corresponding to the guest code at @addr. - * - * Note: this function can trigger an exception. */ static inline tb_page_addr_t get_page_addr_code(CPUArchState *env, target_ulong addr) { - return get_page_addr_code_hostp(env, addr, NULL); + return get_page_addr_code_hostp(env, addr, true, NULL); } =20 #if defined(CONFIG_USER_ONLY) diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c index 2dc2affa12..ae7b40dd51 100644 --- a/accel/tcg/cputlb.c +++ b/accel/tcg/cputlb.c @@ -1644,16 +1644,16 @@ void *tlb_vaddr_to_host(CPUArchState *env, abi_ptr = addr, * of RAM. This will force us to execute by loading and translating * one insn at a time, without caching. * - * NOTE: This function will trigger an exception if the page is - * not executable. + * NOTE: Unless @nofault, this function will trigger an exception + * if the page is not executable. */ tb_page_addr_t get_page_addr_code_hostp(CPUArchState *env, target_ulong ad= dr, - void **hostp) + bool nofault, void **hostp) { void *p; =20 (void)probe_access_internal(env, addr, 1, MMU_INST_FETCH, - cpu_mmu_index(env, true), true, &p, 0); + cpu_mmu_index(env, true), nofault, &p, 0); if (p =3D=3D NULL) { return -1; } diff --git a/accel/tcg/plugin-gen.c b/accel/tcg/plugin-gen.c index 3d0b101e34..8377c15383 100644 --- a/accel/tcg/plugin-gen.c +++ b/accel/tcg/plugin-gen.c @@ -872,7 +872,7 @@ bool plugin_gen_tb_start(CPUState *cpu, const Translati= onBlock *tb, bool mem_onl =20 ptb->vaddr =3D tb->pc; ptb->vaddr2 =3D -1; - get_page_addr_code_hostp(cpu->env_ptr, tb->pc, &ptb->haddr1); + get_page_addr_code_hostp(cpu->env_ptr, tb->pc, true, &ptb->haddr1); ptb->haddr2 =3D NULL; ptb->mem_only =3D mem_only; =20 @@ -902,7 +902,7 @@ void plugin_gen_insn_start(CPUState *cpu, const DisasCo= ntextBase *db) unlikely((db->pc_next & TARGET_PAGE_MASK) !=3D (db->pc_first & TARGET_PAGE_MASK))) { get_page_addr_code_hostp(cpu->env_ptr, db->pc_next, - &ptb->haddr2); + true, &ptb->haddr2); ptb->vaddr2 =3D db->pc_next; } if (likely(ptb->vaddr2 =3D=3D -1)) { diff --git a/accel/tcg/user-exec.c b/accel/tcg/user-exec.c index 58edd33896..e7fec960c2 100644 --- a/accel/tcg/user-exec.c +++ b/accel/tcg/user-exec.c @@ -197,11 +197,11 @@ void *probe_access(CPUArchState *env, target_ulong ad= dr, int size, } =20 tb_page_addr_t get_page_addr_code_hostp(CPUArchState *env, target_ulong ad= dr, - void **hostp) + bool nofault, void **hostp) { int flags; =20 - flags =3D probe_access_internal(env, addr, 1, MMU_INST_FETCH, true, 0); + flags =3D probe_access_internal(env, addr, 1, MMU_INST_FETCH, nofault,= 0); if (unlikely(flags)) { return -1; } --=20 2.34.1 From nobody Sun May 5 06:28:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1660880473; cv=none; d=zohomail.com; s=zohoarc; b=BRLl3yYKqnKtb7RZOTz/8cqh7bHT3G9b5KWGYrLuQSbn8e6S93belajlF1VUbRtnvTaYNAa1/W+rUDhS9qw+ZQR6y6GbZoxgvTL3zhBu4rME6AZojgow1ETxiOo2OvfWZD/ywkPwo3JiiX8F8TfYFpD4dHGNsd2fXsxZVIoARHA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1660880473; 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; bh=1j65v4Vz+Z/8W42L91XnaCjj59+D2gtD2u2SeMTM3YY=; b=DdP9SDOwthYroyJ0086J2OGvaBnDDI8rq6n89YHiaF4k+FB4JebAIReGWKCOqdI+qvSvasA/3ySQQ/Dw7jJi7cnR8Pwnd2yFRFsDduKidlnIAADxyBUFrDJ+oFOSDZxr3a2iJcvv7Y1jI0W/GZOp/OLHaL8IDMaPcJwHXmQexbY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1660880473722914.2319793208777; Thu, 18 Aug 2022 20:41:13 -0700 (PDT) Received: from localhost ([::1]:33478 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oOssi-0001vn-Fr for importer@patchew.org; Thu, 18 Aug 2022 23:41:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48794) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oOsea-00021g-0O for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:36 -0400 Received: from mail-pf1-x432.google.com ([2607:f8b0:4864:20::432]:43706) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oOseY-0002lz-BH for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:35 -0400 Received: by mail-pf1-x432.google.com with SMTP id w138so627563pfc.10 for ; Thu, 18 Aug 2022 20:26:33 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:bbf3:9914:aa9c:3b4e]) by smtp.gmail.com with ESMTPSA id g184-20020a6252c1000000b00535d19c46d7sm2199904pfb.203.2022.08.18.20.26.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Aug 2022 20:26:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc; bh=1j65v4Vz+Z/8W42L91XnaCjj59+D2gtD2u2SeMTM3YY=; b=dBGYmKyHh3jZt5Ye8Yhs6jz6ivhi4x2lFj29m9BldJsvZevd0qAFzhm2FXY0je122Y DsboMbnCae63DDiLSTBaQsZ6mraAk2OG5+j9lbtz0LbWlWzAAY5kazwf8wkxhPrA5SwY sOcIuJVBuBKe2NXk2VRjfb5UIjAM+5GcHI/GcTV6sMsSs5fX4K5A8B9tI9zo6nUJIHXX V2u4zXoL1CoBOzjcARmvHIIsyMNiU+0qPrOIyEcxbbYQMgEKXxz6rjfdyXEkvvbII2Eh JA0nlWKsRztJP/3+cwUGm6gZHqGucCUj1olqTWdGVNyHY+wR49ueVPeW/9V2pNcpl2LZ cDvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc; bh=1j65v4Vz+Z/8W42L91XnaCjj59+D2gtD2u2SeMTM3YY=; b=JcFMHhNln1gewMIhyDe0PF+Vo9ZBA1YXkyESAHwy/2pWi5gVrOYji4i5cron3MxUDz 7K9qf0ieY9aQRIjZSLiYY5PiGNktUsQDrYCMNVYNbS5lK7hhBQjgGjXnJ4PvIJSZTU8I qBoJJJIQiVytbrzzQVtVxWZAIOemezqpFBBgEZjkyrr8WShLuCbO2d/PuwelDGwrX3hF WRtX4ZdFk+DUX+Kn4K5tPOJd6bSJ8KbgSOcJ8Ch34x6VgyU/bZNYOa/lazaP2mA1Z7nD kOzAJTjceo/ZSKwJKXXSC00uY3l6q+gUMc2JwT5s3Hy8AIRwGeA52Jj4XuHGgeJFq7eA gcZw== X-Gm-Message-State: ACgBeo37gJYc7v5T6U9dT8WOjt0dF786YVDAem2nrsdVwUFCPpkZIjwY GZrFk/D2a7fNmH1IW1ombZvGQdg7jfuumA== X-Google-Smtp-Source: AA6agR6EMNarzqc3PdWmfLBrGTf1nW6CGaYJdLJyJNMNJLnrPz/YzZS+KwB7DpNGvbC5+y13U2dYOQ== X-Received: by 2002:a63:ee49:0:b0:428:8e10:200a with SMTP id n9-20020a63ee49000000b004288e10200amr4723798pgk.453.1660879593082; Thu, 18 Aug 2022 20:26:33 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, iii@linux.ibm.com, dramforever@live.com, alistair.francis@wdc.com, alex.bennee@linaro.org Subject: [PATCH v6 14/21] accel/tcg: Raise PROT_EXEC exception early Date: Thu, 18 Aug 2022 20:26:08 -0700 Message-Id: <20220819032615.884847-15-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220819032615.884847-1-richard.henderson@linaro.org> References: <20220819032615.884847-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::432; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x432.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1660880474555100001 Content-Type: text/plain; charset="utf-8" We currently ignore PROT_EXEC on the initial lookup, and defer raising the exception until cpu_ld*_code(). It makes more sense to raise the exception early. Signed-off-by: Richard Henderson Acked-by: Alistair Francis Tested-by: Vivian Wang --- accel/tcg/cpu-exec.c | 2 +- accel/tcg/translate-all.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/accel/tcg/cpu-exec.c b/accel/tcg/cpu-exec.c index 7887af6f45..7b8977a0a4 100644 --- a/accel/tcg/cpu-exec.c +++ b/accel/tcg/cpu-exec.c @@ -222,7 +222,7 @@ static TranslationBlock *tb_htable_lookup(CPUState *cpu= , target_ulong pc, desc.cflags =3D cflags; desc.trace_vcpu_dstate =3D *cpu->trace_dstate; desc.pc =3D pc; - phys_pc =3D get_page_addr_code(desc.env, pc); + phys_pc =3D get_page_addr_code_hostp(desc.env, pc, false, NULL); if (phys_pc =3D=3D -1) { return NULL; } diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c index b83161a081..069ed67bac 100644 --- a/accel/tcg/translate-all.c +++ b/accel/tcg/translate-all.c @@ -1396,7 +1396,7 @@ TranslationBlock *tb_gen_code(CPUState *cpu, assert_memory_lock(); qemu_thread_jit_write(); =20 - phys_pc =3D get_page_addr_code(env, pc); + phys_pc =3D get_page_addr_code_hostp(env, pc, false, NULL); =20 if (phys_pc =3D=3D -1) { /* Generate a one-shot TB with 1 insn in it */ --=20 2.34.1 From nobody Sun May 5 06:28:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1660880264; cv=none; d=zohomail.com; s=zohoarc; b=J9+/JDmhpM/tHUw8IJkshaALOCCLpFrrTE7FbWJE2AL9iBFEKFDs9gYO8ts92mSfev6uwYw3YgrUCWdyzSuLsoZfpyBu9cFI7Sm6GxUeZVdAOKe5zlgxj4PG+6mttAdYLzbHyoxKmlNog2pF5gme0MhKo8u5awgFCNQe92TNa+8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1660880264; 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; bh=3ScK9gYYd7Yu/4MmJJp6WEZrowwZuhBtdiXOVA7xdaE=; b=ciyvx6Zikxujfm9HmQmwIfSNltAkL6BDMwDSrUZeho3MBjUqtWt8vPkyZvMDwLC28IPWiZD5NhyCohzLbKTWTmVzDp8C8M/kTSKlV81/sSxBn54b3gG5+scd+lR2ULk9Qpyfxxn9j5vghqToXWtXMEHgpBtLIxmkg025EGyRTSo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 166088026487085.10667362964728; Thu, 18 Aug 2022 20:37:44 -0700 (PDT) Received: from localhost ([::1]:59086 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oOspK-0004eR-OK for importer@patchew.org; Thu, 18 Aug 2022 23:37:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48798) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oOseb-000254-7x for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:37 -0400 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]:38438) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oOseZ-0002mF-Jo for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:36 -0400 Received: by mail-pj1-x1034.google.com with SMTP id s31-20020a17090a2f2200b001faaf9d92easo6400946pjd.3 for ; Thu, 18 Aug 2022 20:26:35 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:bbf3:9914:aa9c:3b4e]) by smtp.gmail.com with ESMTPSA id g184-20020a6252c1000000b00535d19c46d7sm2199904pfb.203.2022.08.18.20.26.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Aug 2022 20:26:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc; bh=3ScK9gYYd7Yu/4MmJJp6WEZrowwZuhBtdiXOVA7xdaE=; b=QUuAvuDfIo1lhfeSCjLJibqLY4hZ4JHe5xVS4cGpPIdkyMi/VffKf+Zr3YCP+bPDWf nxB67Wr96U6DlARhKO0e08yXn3GrVIqiNZrk3rhfCCNd3GoMOsYkQcyBcwQj3Kba+rA5 xEt/tHXSv9kOzyJGGikYN+D5HEhP/z2NBtfedKWBhS14kfE4xEVDHdakNtW0ZV7lJ4yV fgYetQRqChlhVs4hYwWDuLfmQ9swWWh83VDELrII+dkaq81l3t8kFxlEN60loA5J29dN leFNi84mmNEo9j3eB6j8YD2MtFfZL9XVjAt6DinyIAqnHy876B/WXVj1uhCxGU/kFpCG CNeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc; bh=3ScK9gYYd7Yu/4MmJJp6WEZrowwZuhBtdiXOVA7xdaE=; b=AQRINMvNxZcuyfdeU5UypfWfWVDQnihomOZIQsXjPS3VnBmS/fdCWWyTMyWdKwALQN C9LbB+pka8ll/gFIASLYYiZ8lv9W/SHQMxlk8GqoJZPZi50Zb+fQF08pdDUAcS45p3sz B0bgwfOZh6juK7tw6lgUjITz8moL8khnqtJbHFYqFavBKGUvfIeLJLdnmELZUgbMgJIK 3Z3ev/Q2SUHB5QuzFCT2V/7eCzKYc0UrRLbfjKLFd7FURt5G0CgXHmokF9IAUtKq5VYg 8N4ZLnaiKDEHbQQ13dlqg1L6quntXXYHS8hY/Jk0SSmdlZR2TzsgCEn+qfS/FRKhu4IA C6pg== X-Gm-Message-State: ACgBeo2Ny8LtqWMG6C1Xqa+OsU1dTse2ej40Xwd3Hm6ydPxqqcxEnOyk XKYQiH+zLNbWXVWkPWusYDuiItZ0qCQXGA== X-Google-Smtp-Source: AA6agR6NUVa1KIYZ0Xi2BNS6O0vdF6cSenZsKrx+FSGr+uHyKOMJFbex7K65tHqnVFX5ydq8CCwdgg== X-Received: by 2002:a17:90a:5b:b0:1fa:b78b:ad73 with SMTP id 27-20020a17090a005b00b001fab78bad73mr6270814pjb.107.1660879594243; Thu, 18 Aug 2022 20:26:34 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, iii@linux.ibm.com, dramforever@live.com, alistair.francis@wdc.com, alex.bennee@linaro.org Subject: [PATCH v6 15/21] accel/tcg: Remove translator_ldsw Date: Thu, 18 Aug 2022 20:26:09 -0700 Message-Id: <20220819032615.884847-16-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220819032615.884847-1-richard.henderson@linaro.org> References: <20220819032615.884847-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::1034; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1034.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1660880265329100002 Content-Type: text/plain; charset="utf-8" The only user can easily use translator_lduw and adjust the type to signed during the return. Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis Tested-by: Vivian Wang --- include/exec/translator.h | 1 - target/i386/tcg/translate.c | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/include/exec/translator.h b/include/exec/translator.h index 0d0bf3a31e..45b9268ca4 100644 --- a/include/exec/translator.h +++ b/include/exec/translator.h @@ -178,7 +178,6 @@ bool translator_use_goto_tb(DisasContextBase *db, targe= t_ulong dest); =20 #define FOR_EACH_TRANSLATOR_LD(F) \ F(translator_ldub, uint8_t, cpu_ldub_code, /* no swap */) \ - F(translator_ldsw, int16_t, cpu_ldsw_code, bswap16) \ F(translator_lduw, uint16_t, cpu_lduw_code, bswap16) \ F(translator_ldl, uint32_t, cpu_ldl_code, bswap32) \ F(translator_ldq, uint64_t, cpu_ldq_code, bswap64) diff --git a/target/i386/tcg/translate.c b/target/i386/tcg/translate.c index b7972f0ff5..a23417d058 100644 --- a/target/i386/tcg/translate.c +++ b/target/i386/tcg/translate.c @@ -2033,7 +2033,7 @@ static inline uint8_t x86_ldub_code(CPUX86State *env,= DisasContext *s) =20 static inline int16_t x86_ldsw_code(CPUX86State *env, DisasContext *s) { - return translator_ldsw(env, &s->base, advance_pc(env, s, 2)); + return translator_lduw(env, &s->base, advance_pc(env, s, 2)); } =20 static inline uint16_t x86_lduw_code(CPUX86State *env, DisasContext *s) --=20 2.34.1 From nobody Sun May 5 06:28:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1660880626; cv=none; d=zohomail.com; s=zohoarc; b=V7p5OuSfi5l8x0l9wy1CivLFKIg2/MrHj0Wchhospzwe17T18HSE1lQEtKd98r0XjYKYToKhco3aQYIkOmbcAW5W7yb15M6o3fZGTzR05CKEA45kBBsvh9U6r40LHu9/hO3f7E1DoZjDp86GlI4vxo+BcEAlV+Gb/5gEXjVaVdI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1660880626; 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; bh=fduAhb0XV0jEFKaISpIB9rWNXJpGkm1/aMVAdWGULuQ=; b=R+rLFvZ97IFKrClbHTFwzWUJOhVNHRCGRSpQfzGQthwcxNuCXUPtDP6B2OcQh6dBRlD/ccN0a8kwXgbzDLN2ZN/+O7ZfiJneW9wcywZi5m/DSviqj4mPLA0Myzm3z8wXBRXK9fqWdvIfq+JlN23JkBAPBu7VCkqeIOURrr+aALQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1660880626206612.6320657203987; Thu, 18 Aug 2022 20:43:46 -0700 (PDT) Received: from localhost ([::1]:47836 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oOsvA-0005ul-1L for importer@patchew.org; Thu, 18 Aug 2022 23:43:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48800) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oOsed-0002EI-NH for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:39 -0400 Received: from mail-pg1-x52f.google.com ([2607:f8b0:4864:20::52f]:41881) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oOsea-0002mZ-VQ for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:39 -0400 Received: by mail-pg1-x52f.google.com with SMTP id 202so2755474pgc.8 for ; Thu, 18 Aug 2022 20:26:36 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:bbf3:9914:aa9c:3b4e]) by smtp.gmail.com with ESMTPSA id g184-20020a6252c1000000b00535d19c46d7sm2199904pfb.203.2022.08.18.20.26.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Aug 2022 20:26:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc; bh=fduAhb0XV0jEFKaISpIB9rWNXJpGkm1/aMVAdWGULuQ=; b=Jhn+tl9WpI6Wbgdo5LDLZyVyUu3n94VkrJ8nBbRsncKA5mJ/sCnI7LekNJwtPyyO97 i7utioHnmwrk9chCLH5LcDCl9kthuFOi/+coKzJgfRoY7VAFYrjpW7ZJGicjHg1ji5oA ltYiq/cZENpFXvj3E04sHCq03X4XwCkaV0KPt2Lx+YpU6wLk62ZndqIIJOd2LWQzN3wf PeetDTr28YZqVTlhnSz9ONffi6Qgec7k5VOGUEJIcGhqeJFKNPrY5VzCKGHDG4gzy7J+ Y0mbOA51s5hvd6oC5mBRAJKtbhu+J1jilJW/RiU8srd6/s5AZDjgIU64P3kcYnq+0TAM d/2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc; bh=fduAhb0XV0jEFKaISpIB9rWNXJpGkm1/aMVAdWGULuQ=; b=QANxGWcz8xS1k2QlXK1coLwlSPCaA7lAoQzjo7aXugd7MlAo+iMCxWYRsXiuq+IfKU nFhdQJTvb9OApODpyi/K8vMThGjPGTPxIBOvNyvQYMsGJWr6wTDrl9kcwogkc6+zSzvo yFErCw/Fvuc9PHXwYsr8+3ScZ2r5uu/LyMPYUXjkq0IqPRz5U7itfS4DgdvUmipd9LSZ Le95ZRrjBD+Mf620/oNjUMzS7a/0joJpCVrYFKxWlOxt0vrzeSY6tcrCpwj79OYb+cIo F4oXmYuGN0smzqGc6WEBmFumn4G03c7gq4hX1vMt72MlNLAIEaPIGfBydScTydI7HXwf lawQ== X-Gm-Message-State: ACgBeo1qqzmJE/QCKhMkIyJUTf5M/U+cneTVU3QL4ihzLIDxz09XFquB Gk9fIUZUyzx4E+IAvRXi5GpOjnK8Ncm6ZA== X-Google-Smtp-Source: AA6agR6vBz+n0nribY9QncjBgvBtoZUEGmtmAzz14XmAj/mi+gW9MKhzuE5z1HiHm5FnsbQA/ZctAg== X-Received: by 2002:a63:5903:0:b0:41a:767:7adc with SMTP id n3-20020a635903000000b0041a07677adcmr4796980pgb.615.1660879595423; Thu, 18 Aug 2022 20:26:35 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, iii@linux.ibm.com, dramforever@live.com, alistair.francis@wdc.com, alex.bennee@linaro.org Subject: [PATCH v6 16/21] accel/tcg: Add pc and host_pc params to gen_intermediate_code Date: Thu, 18 Aug 2022 20:26:10 -0700 Message-Id: <20220819032615.884847-17-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220819032615.884847-1-richard.henderson@linaro.org> References: <20220819032615.884847-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::52f; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1660880627258100001 Content-Type: text/plain; charset="utf-8" Pass these along to translator_loop -- pc may be used instead of tb->pc, and host_pc is currently unused. Adjust all targets at one time. Signed-off-by: Richard Henderson Acked-by: Alistair Francis Tested-by: Vivian Wang --- include/exec/exec-all.h | 1 - include/exec/translator.h | 24 ++++++++++++++++++++---- accel/tcg/translate-all.c | 3 ++- accel/tcg/translator.c | 9 +++++---- target/alpha/translate.c | 5 +++-- target/arm/translate.c | 5 +++-- target/avr/translate.c | 5 +++-- target/cris/translate.c | 5 +++-- target/hexagon/translate.c | 6 ++++-- target/hppa/translate.c | 5 +++-- target/i386/tcg/translate.c | 5 +++-- target/loongarch/translate.c | 6 ++++-- target/m68k/translate.c | 5 +++-- target/microblaze/translate.c | 5 +++-- target/mips/tcg/translate.c | 5 +++-- target/nios2/translate.c | 5 +++-- target/openrisc/translate.c | 6 ++++-- target/ppc/translate.c | 5 +++-- target/riscv/translate.c | 5 +++-- target/rx/translate.c | 5 +++-- target/s390x/tcg/translate.c | 5 +++-- target/sh4/translate.c | 5 +++-- target/sparc/translate.c | 5 +++-- target/tricore/translate.c | 6 ++++-- target/xtensa/translate.c | 6 ++++-- 25 files changed, 95 insertions(+), 52 deletions(-) diff --git a/include/exec/exec-all.h b/include/exec/exec-all.h index 7a6dc44d86..4ad166966b 100644 --- a/include/exec/exec-all.h +++ b/include/exec/exec-all.h @@ -39,7 +39,6 @@ typedef ram_addr_t tb_page_addr_t; #define TB_PAGE_ADDR_FMT RAM_ADDR_FMT #endif =20 -void gen_intermediate_code(CPUState *cpu, TranslationBlock *tb, int max_in= sns); void restore_state_to_opc(CPUArchState *env, TranslationBlock *tb, target_ulong *data); =20 diff --git a/include/exec/translator.h b/include/exec/translator.h index 45b9268ca4..69db0f5c21 100644 --- a/include/exec/translator.h +++ b/include/exec/translator.h @@ -26,6 +26,19 @@ #include "exec/translate-all.h" #include "tcg/tcg.h" =20 +/** + * gen_intermediate_code + * @cpu: cpu context + * @tb: translation block + * @max_insns: max number of instructions to translate + * @pc: guest virtual program counter address + * @host_pc: host physical program counter address + * + * This function must be provided by the target, which should create + * the target-specific DisasContext, and then invoke translator_loop. + */ +void gen_intermediate_code(CPUState *cpu, TranslationBlock *tb, int max_in= sns, + target_ulong pc, void *host_pc); =20 /** * DisasJumpType: @@ -123,11 +136,13 @@ typedef struct TranslatorOps { =20 /** * translator_loop: - * @ops: Target-specific operations. - * @db: Disassembly context. * @cpu: Target vCPU. * @tb: Translation block. * @max_insns: Maximum number of insns to translate. + * @pc: guest virtual program counter address + * @host_pc: host physical program counter address + * @ops: Target-specific operations. + * @db: Disassembly context. * * Generic translator loop. * @@ -141,8 +156,9 @@ typedef struct TranslatorOps { * - When single-stepping is enabled (system-wide or on the current vCPU). * - When too many instructions have been translated. */ -void translator_loop(const TranslatorOps *ops, DisasContextBase *db, - CPUState *cpu, TranslationBlock *tb, int max_insns); +void translator_loop(CPUState *cpu, TranslationBlock *tb, int max_insns, + target_ulong pc, void *host_pc, + const TranslatorOps *ops, DisasContextBase *db); =20 void translator_loop_temp_check(DisasContextBase *db); =20 diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c index 069ed67bac..b224f856d0 100644 --- a/accel/tcg/translate-all.c +++ b/accel/tcg/translate-all.c @@ -46,6 +46,7 @@ =20 #include "exec/cputlb.h" #include "exec/translate-all.h" +#include "exec/translator.h" #include "qemu/bitmap.h" #include "qemu/qemu-print.h" #include "qemu/timer.h" @@ -1444,7 +1445,7 @@ TranslationBlock *tb_gen_code(CPUState *cpu, tcg_func_start(tcg_ctx); =20 tcg_ctx->cpu =3D env_cpu(env); - gen_intermediate_code(cpu, tb, max_insns); + gen_intermediate_code(cpu, tb, max_insns, pc, host_pc); assert(tb->size !=3D 0); tcg_ctx->cpu =3D NULL; max_insns =3D tb->icount; diff --git a/accel/tcg/translator.c b/accel/tcg/translator.c index fe7af9b943..3eef30d93a 100644 --- a/accel/tcg/translator.c +++ b/accel/tcg/translator.c @@ -51,16 +51,17 @@ static inline void translator_page_protect(DisasContext= Base *dcbase, #endif } =20 -void translator_loop(const TranslatorOps *ops, DisasContextBase *db, - CPUState *cpu, TranslationBlock *tb, int max_insns) +void translator_loop(CPUState *cpu, TranslationBlock *tb, int max_insns, + target_ulong pc, void *host_pc, + const TranslatorOps *ops, DisasContextBase *db) { uint32_t cflags =3D tb_cflags(tb); bool plugin_enabled; =20 /* Initialize DisasContext */ db->tb =3D tb; - db->pc_first =3D tb->pc; - db->pc_next =3D db->pc_first; + db->pc_first =3D pc; + db->pc_next =3D pc; db->is_jmp =3D DISAS_NEXT; db->num_insns =3D 0; db->max_insns =3D max_insns; diff --git a/target/alpha/translate.c b/target/alpha/translate.c index 9af1627079..6766350f56 100644 --- a/target/alpha/translate.c +++ b/target/alpha/translate.c @@ -3043,10 +3043,11 @@ static const TranslatorOps alpha_tr_ops =3D { .disas_log =3D alpha_tr_disas_log, }; =20 -void gen_intermediate_code(CPUState *cpu, TranslationBlock *tb, int max_in= sns) +void gen_intermediate_code(CPUState *cpu, TranslationBlock *tb, int max_in= sns, + target_ulong pc, void *host_pc) { DisasContext dc; - translator_loop(&alpha_tr_ops, &dc.base, cpu, tb, max_insns); + translator_loop(cpu, tb, max_insns, pc, host_pc, &alpha_tr_ops, &dc.ba= se); } =20 void restore_state_to_opc(CPUAlphaState *env, TranslationBlock *tb, diff --git a/target/arm/translate.c b/target/arm/translate.c index ad617b9948..9474e4b44b 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -9892,7 +9892,8 @@ static const TranslatorOps thumb_translator_ops =3D { }; =20 /* generate intermediate code for basic block 'tb'. */ -void gen_intermediate_code(CPUState *cpu, TranslationBlock *tb, int max_in= sns) +void gen_intermediate_code(CPUState *cpu, TranslationBlock *tb, int max_in= sns, + target_ulong pc, void *host_pc) { DisasContext dc =3D { }; const TranslatorOps *ops =3D &arm_translator_ops; @@ -9907,7 +9908,7 @@ void gen_intermediate_code(CPUState *cpu, Translation= Block *tb, int max_insns) } #endif =20 - translator_loop(ops, &dc.base, cpu, tb, max_insns); + translator_loop(cpu, tb, max_insns, pc, host_pc, ops, &dc.base); } =20 void restore_state_to_opc(CPUARMState *env, TranslationBlock *tb, diff --git a/target/avr/translate.c b/target/avr/translate.c index dc9c3d6bcc..1da34da103 100644 --- a/target/avr/translate.c +++ b/target/avr/translate.c @@ -3031,10 +3031,11 @@ static const TranslatorOps avr_tr_ops =3D { .disas_log =3D avr_tr_disas_log, }; =20 -void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns) +void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns, + target_ulong pc, void *host_pc) { DisasContext dc =3D { }; - translator_loop(&avr_tr_ops, &dc.base, cs, tb, max_insns); + translator_loop(cs, tb, max_insns, pc, host_pc, &avr_tr_ops, &dc.base); } =20 void restore_state_to_opc(CPUAVRState *env, TranslationBlock *tb, diff --git a/target/cris/translate.c b/target/cris/translate.c index ac101344a3..73385b0b3c 100644 --- a/target/cris/translate.c +++ b/target/cris/translate.c @@ -3286,10 +3286,11 @@ static const TranslatorOps cris_tr_ops =3D { .disas_log =3D cris_tr_disas_log, }; =20 -void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns) +void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns, + target_ulong pc, void *host_pc) { DisasContext dc; - translator_loop(&cris_tr_ops, &dc.base, cs, tb, max_insns); + translator_loop(cs, tb, max_insns, pc, host_pc, &cris_tr_ops, &dc.base= ); } =20 void cris_cpu_dump_state(CPUState *cs, FILE *f, int flags) diff --git a/target/hexagon/translate.c b/target/hexagon/translate.c index d4fc92f7e9..0e8a0772f7 100644 --- a/target/hexagon/translate.c +++ b/target/hexagon/translate.c @@ -850,11 +850,13 @@ static const TranslatorOps hexagon_tr_ops =3D { .disas_log =3D hexagon_tr_disas_log, }; =20 -void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns) +void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns, + target_ulong pc, void *host_pc) { DisasContext ctx; =20 - translator_loop(&hexagon_tr_ops, &ctx.base, cs, tb, max_insns); + translator_loop(cs, tb, max_insns, pc, host_pc, + &hexagon_tr_ops, &ctx.base); } =20 #define NAME_LEN 64 diff --git a/target/hppa/translate.c b/target/hppa/translate.c index b8dbfee5e9..8b861957e0 100644 --- a/target/hppa/translate.c +++ b/target/hppa/translate.c @@ -4340,10 +4340,11 @@ static const TranslatorOps hppa_tr_ops =3D { .disas_log =3D hppa_tr_disas_log, }; =20 -void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns) +void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns, + target_ulong pc, void *host_pc) { DisasContext ctx; - translator_loop(&hppa_tr_ops, &ctx.base, cs, tb, max_insns); + translator_loop(cs, tb, max_insns, pc, host_pc, &hppa_tr_ops, &ctx.bas= e); } =20 void restore_state_to_opc(CPUHPPAState *env, TranslationBlock *tb, diff --git a/target/i386/tcg/translate.c b/target/i386/tcg/translate.c index a23417d058..4836c889e0 100644 --- a/target/i386/tcg/translate.c +++ b/target/i386/tcg/translate.c @@ -8708,11 +8708,12 @@ static const TranslatorOps i386_tr_ops =3D { }; =20 /* generate intermediate code for basic block 'tb'. */ -void gen_intermediate_code(CPUState *cpu, TranslationBlock *tb, int max_in= sns) +void gen_intermediate_code(CPUState *cpu, TranslationBlock *tb, int max_in= sns, + target_ulong pc, void *host_pc) { DisasContext dc; =20 - translator_loop(&i386_tr_ops, &dc.base, cpu, tb, max_insns); + translator_loop(cpu, tb, max_insns, pc, host_pc, &i386_tr_ops, &dc.bas= e); } =20 void restore_state_to_opc(CPUX86State *env, TranslationBlock *tb, diff --git a/target/loongarch/translate.c b/target/loongarch/translate.c index 51ba291430..95b37ea180 100644 --- a/target/loongarch/translate.c +++ b/target/loongarch/translate.c @@ -241,11 +241,13 @@ static const TranslatorOps loongarch_tr_ops =3D { .disas_log =3D loongarch_tr_disas_log, }; =20 -void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns) +void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns, + target_ulong pc, void *host_pc) { DisasContext ctx; =20 - translator_loop(&loongarch_tr_ops, &ctx.base, cs, tb, max_insns); + translator_loop(cs, tb, max_insns, pc, host_pc, + &loongarch_tr_ops, &ctx.base); } =20 void loongarch_translate_init(void) diff --git a/target/m68k/translate.c b/target/m68k/translate.c index 8f3c298ad0..5098f7e570 100644 --- a/target/m68k/translate.c +++ b/target/m68k/translate.c @@ -6361,10 +6361,11 @@ static const TranslatorOps m68k_tr_ops =3D { .disas_log =3D m68k_tr_disas_log, }; =20 -void gen_intermediate_code(CPUState *cpu, TranslationBlock *tb, int max_in= sns) +void gen_intermediate_code(CPUState *cpu, TranslationBlock *tb, int max_in= sns, + target_ulong pc, void *host_pc) { DisasContext dc; - translator_loop(&m68k_tr_ops, &dc.base, cpu, tb, max_insns); + translator_loop(cpu, tb, max_insns, pc, host_pc, &m68k_tr_ops, &dc.bas= e); } =20 static double floatx80_to_double(CPUM68KState *env, uint16_t high, uint64_= t low) diff --git a/target/microblaze/translate.c b/target/microblaze/translate.c index bf01384d33..c5546f93aa 100644 --- a/target/microblaze/translate.c +++ b/target/microblaze/translate.c @@ -1849,10 +1849,11 @@ static const TranslatorOps mb_tr_ops =3D { .disas_log =3D mb_tr_disas_log, }; =20 -void gen_intermediate_code(CPUState *cpu, TranslationBlock *tb, int max_in= sns) +void gen_intermediate_code(CPUState *cpu, TranslationBlock *tb, int max_in= sns, + target_ulong pc, void *host_pc) { DisasContext dc; - translator_loop(&mb_tr_ops, &dc.base, cpu, tb, max_insns); + translator_loop(cpu, tb, max_insns, pc, host_pc, &mb_tr_ops, &dc.base); } =20 void mb_cpu_dump_state(CPUState *cs, FILE *f, int flags) diff --git a/target/mips/tcg/translate.c b/target/mips/tcg/translate.c index de1511baaf..0d936e2648 100644 --- a/target/mips/tcg/translate.c +++ b/target/mips/tcg/translate.c @@ -16155,11 +16155,12 @@ static const TranslatorOps mips_tr_ops =3D { .disas_log =3D mips_tr_disas_log, }; =20 -void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns) +void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns, + target_ulong pc, void *host_pc) { DisasContext ctx; =20 - translator_loop(&mips_tr_ops, &ctx.base, cs, tb, max_insns); + translator_loop(cs, tb, max_insns, pc, host_pc, &mips_tr_ops, &ctx.bas= e); } =20 void mips_tcg_init(void) diff --git a/target/nios2/translate.c b/target/nios2/translate.c index 3a037a68cc..c588e8e885 100644 --- a/target/nios2/translate.c +++ b/target/nios2/translate.c @@ -1038,10 +1038,11 @@ static const TranslatorOps nios2_tr_ops =3D { .disas_log =3D nios2_tr_disas_log, }; =20 -void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns) +void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns, + target_ulong pc, void *host_pc) { DisasContext dc; - translator_loop(&nios2_tr_ops, &dc.base, cs, tb, max_insns); + translator_loop(cs, tb, max_insns, pc, host_pc, &nios2_tr_ops, &dc.bas= e); } =20 void nios2_cpu_dump_state(CPUState *cs, FILE *f, int flags) diff --git a/target/openrisc/translate.c b/target/openrisc/translate.c index 7b8ad43d5f..8154f9d744 100644 --- a/target/openrisc/translate.c +++ b/target/openrisc/translate.c @@ -1705,11 +1705,13 @@ static const TranslatorOps openrisc_tr_ops =3D { .disas_log =3D openrisc_tr_disas_log, }; =20 -void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns) +void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns, + target_ulong pc, void *host_pc) { DisasContext ctx; =20 - translator_loop(&openrisc_tr_ops, &ctx.base, cs, tb, max_insns); + translator_loop(cs, tb, max_insns, pc, host_pc, + &openrisc_tr_ops, &ctx.base); } =20 void openrisc_cpu_dump_state(CPUState *cs, FILE *f, int flags) diff --git a/target/ppc/translate.c b/target/ppc/translate.c index 388337f81b..000b1e518d 100644 --- a/target/ppc/translate.c +++ b/target/ppc/translate.c @@ -7719,11 +7719,12 @@ static const TranslatorOps ppc_tr_ops =3D { .disas_log =3D ppc_tr_disas_log, }; =20 -void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns) +void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns, + target_ulong pc, void *host_pc) { DisasContext ctx; =20 - translator_loop(&ppc_tr_ops, &ctx.base, cs, tb, max_insns); + translator_loop(cs, tb, max_insns, pc, host_pc, &ppc_tr_ops, &ctx.base= ); } =20 void restore_state_to_opc(CPUPPCState *env, TranslationBlock *tb, diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 63b04e8a94..38666ddc91 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -1196,11 +1196,12 @@ static const TranslatorOps riscv_tr_ops =3D { .disas_log =3D riscv_tr_disas_log, }; =20 -void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns) +void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns, + target_ulong pc, void *host_pc) { DisasContext ctx; =20 - translator_loop(&riscv_tr_ops, &ctx.base, cs, tb, max_insns); + translator_loop(cs, tb, max_insns, pc, host_pc, &riscv_tr_ops, &ctx.ba= se); } =20 void riscv_translate_init(void) diff --git a/target/rx/translate.c b/target/rx/translate.c index 62aee66937..ea5653bc95 100644 --- a/target/rx/translate.c +++ b/target/rx/translate.c @@ -2363,11 +2363,12 @@ static const TranslatorOps rx_tr_ops =3D { .disas_log =3D rx_tr_disas_log, }; =20 -void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns) +void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns, + target_ulong pc, void *host_pc) { DisasContext dc; =20 - translator_loop(&rx_tr_ops, &dc.base, cs, tb, max_insns); + translator_loop(cs, tb, max_insns, pc, host_pc, &rx_tr_ops, &dc.base); } =20 void restore_state_to_opc(CPURXState *env, TranslationBlock *tb, diff --git a/target/s390x/tcg/translate.c b/target/s390x/tcg/translate.c index e2ee005671..d4c0b9b3a2 100644 --- a/target/s390x/tcg/translate.c +++ b/target/s390x/tcg/translate.c @@ -6676,11 +6676,12 @@ static const TranslatorOps s390x_tr_ops =3D { .disas_log =3D s390x_tr_disas_log, }; =20 -void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns) +void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns, + target_ulong pc, void *host_pc) { DisasContext dc; =20 - translator_loop(&s390x_tr_ops, &dc.base, cs, tb, max_insns); + translator_loop(cs, tb, max_insns, pc, host_pc, &s390x_tr_ops, &dc.bas= e); } =20 void restore_state_to_opc(CPUS390XState *env, TranslationBlock *tb, diff --git a/target/sh4/translate.c b/target/sh4/translate.c index f1b190e7cf..01056571c3 100644 --- a/target/sh4/translate.c +++ b/target/sh4/translate.c @@ -2368,11 +2368,12 @@ static const TranslatorOps sh4_tr_ops =3D { .disas_log =3D sh4_tr_disas_log, }; =20 -void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns) +void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns, + target_ulong pc, void *host_pc) { DisasContext ctx; =20 - translator_loop(&sh4_tr_ops, &ctx.base, cs, tb, max_insns); + translator_loop(cs, tb, max_insns, pc, host_pc, &sh4_tr_ops, &ctx.base= ); } =20 void restore_state_to_opc(CPUSH4State *env, TranslationBlock *tb, diff --git a/target/sparc/translate.c b/target/sparc/translate.c index 2e28222d31..2cbbe2396a 100644 --- a/target/sparc/translate.c +++ b/target/sparc/translate.c @@ -5917,11 +5917,12 @@ static const TranslatorOps sparc_tr_ops =3D { .disas_log =3D sparc_tr_disas_log, }; =20 -void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns) +void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns, + target_ulong pc, void *host_pc) { DisasContext dc =3D {}; =20 - translator_loop(&sparc_tr_ops, &dc.base, cs, tb, max_insns); + translator_loop(cs, tb, max_insns, pc, host_pc, &sparc_tr_ops, &dc.bas= e); } =20 void sparc_tcg_init(void) diff --git a/target/tricore/translate.c b/target/tricore/translate.c index d170500fa5..a0558ead71 100644 --- a/target/tricore/translate.c +++ b/target/tricore/translate.c @@ -8878,10 +8878,12 @@ static const TranslatorOps tricore_tr_ops =3D { }; =20 =20 -void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns) +void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns, + target_ulong pc, void *host_pc) { DisasContext ctx; - translator_loop(&tricore_tr_ops, &ctx.base, cs, tb, max_insns); + translator_loop(cs, tb, max_insns, pc, host_pc, + &tricore_tr_ops, &ctx.base); } =20 void diff --git a/target/xtensa/translate.c b/target/xtensa/translate.c index 70e11eeb45..8b864ef925 100644 --- a/target/xtensa/translate.c +++ b/target/xtensa/translate.c @@ -1279,10 +1279,12 @@ static const TranslatorOps xtensa_translator_ops = =3D { .disas_log =3D xtensa_tr_disas_log, }; =20 -void gen_intermediate_code(CPUState *cpu, TranslationBlock *tb, int max_in= sns) +void gen_intermediate_code(CPUState *cpu, TranslationBlock *tb, int max_in= sns, + target_ulong pc, void *host_pc) { DisasContext dc =3D {}; - translator_loop(&xtensa_translator_ops, &dc.base, cpu, tb, max_insns); + translator_loop(cpu, tb, max_insns, pc, host_pc, + &xtensa_translator_ops, &dc.base); } =20 void xtensa_cpu_dump_state(CPUState *cs, FILE *f, int flags) --=20 2.34.1 From nobody Sun May 5 06:28:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1660880747; cv=none; d=zohomail.com; s=zohoarc; b=k57SPirhxEYo/2ivFfAyVeMHDAYbfww9ERRAFmPaRXglNRxuJDXNbOmN8nBBzsqhMUMEE96OSz5NfDuJ/poK4GvBXkZeRbIjU58wqgduh69SatXCy1iV0TUnYGn6vwXfyWyhVzbdulzHUB86rSk6ruk9TrRyXgafmEMvOYtxuOk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1660880747; 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; bh=xKPEna6JHoN7lvSRBd2vPRf2g30G6hvq8CEgOyIzahg=; b=HDV7OFvWeiz49HXGQRn5+sAzeF170enlhHUgfayjhQEw5v3vCfIfDCksZbHCqCJ2VCyxRAPVzkRXihAEBvhdE7ChPfygWb2TpMhL+YgLUZYO2qGufHu4XQCoZ3fbR3YcGZrqhsyA5OPj7kT2+X92AyJ1xIt4Yzxs2E5gUKo2MAo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1660880747167185.55778499296184; Thu, 18 Aug 2022 20:45:47 -0700 (PDT) Received: from localhost ([::1]:53170 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oOsx8-0000Pr-4Q for importer@patchew.org; Thu, 18 Aug 2022 23:45:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48802) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oOsee-0002I8-MP for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:41 -0400 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]:44641) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oOsec-0002n5-HG for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:40 -0400 Received: by mail-pj1-x102b.google.com with SMTP id r15-20020a17090a1bcf00b001fabf42a11cso3662916pjr.3 for ; Thu, 18 Aug 2022 20:26:38 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:bbf3:9914:aa9c:3b4e]) by smtp.gmail.com with ESMTPSA id g184-20020a6252c1000000b00535d19c46d7sm2199904pfb.203.2022.08.18.20.26.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Aug 2022 20:26:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc; bh=xKPEna6JHoN7lvSRBd2vPRf2g30G6hvq8CEgOyIzahg=; b=WlzIm1iea0lM/bOaztREvMIn1AuLLZkPV+j2EqLhbdO+4PHwf1UPNiW0FAIjsJnbio pwxOO/jgM2tXkRSk8KOaZ0jzDm5NyhZ7xCKcXakWpJtV/pOKmcMDryHNFQUdsv2N2ryN j6dJ5/FV2ZQpRqB8qfbOnxnp5X2Rwv/3QTiEiZYYc3XwdRw9YwPA65PT4ETiZw08dOtl /Q0dht/TVAjND41rA+NefuMJzi/DaWf9aIZqP/F75A/+Mhl+CkhZzsMN15VlCN/7l55P X9wZEVB+uBzifGPTHCUUeySgvX1qdOmbdSEB8XFDgnFZXLSQwNsw3PCCCH8Ia6tYHNuM aczw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc; bh=xKPEna6JHoN7lvSRBd2vPRf2g30G6hvq8CEgOyIzahg=; b=bXYKuB3C/PUJaxP294Ew1r7x0UZk95DMhxb09ibhFawTlzyXWFjsThvYHX9Yu92ON6 7e0fzMgrNWpVfnOuWg8AvdWvNKOpQR6JuqrGI6HAZlsjvFUawWmgnTYe/ki6ekLIeVJs DaqylIVHtqEYyubIRSh56s5I4UXKv+nNoUPxVDgP5rVL33pTleT3rlke++wqZpvhfUot ukZEleYjBZ/LidGaPbnSk4BjEnIsXoGf8R9S2W9kaZ60nhBNb1qM/UdjeUDEOo9aqtrH l2Rwik9TO8DROwAwYpaOBDZoH4BzqVfdP7QZqARtQ3vuEBN9S7svlkY9ne0KY/D3cOQB JkaA== X-Gm-Message-State: ACgBeo3rha01phG53GV2p4xkMs6bVcHAcSYxAahiIk5sx10xwiG4cBOD hkOG0rVldYPfr6I/6iYEN19f2MzYzRu1fw== X-Google-Smtp-Source: AA6agR5poyYOfXlZYauLP1O+zjtqYB4zhc9I7BUif+rttEXCgNNDjbzPIUR1tDiwDX+xTL+ZTXVHpA== X-Received: by 2002:a17:902:c401:b0:16f:b59:85a7 with SMTP id k1-20020a170902c40100b0016f0b5985a7mr5379551plk.115.1660879597109; Thu, 18 Aug 2022 20:26:37 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, iii@linux.ibm.com, dramforever@live.com, alistair.francis@wdc.com, alex.bennee@linaro.org Subject: [PATCH v6 17/21] accel/tcg: Add fast path for translator_ld* Date: Thu, 18 Aug 2022 20:26:11 -0700 Message-Id: <20220819032615.884847-18-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220819032615.884847-1-richard.henderson@linaro.org> References: <20220819032615.884847-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::102b; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1660880747957100001 Content-Type: text/plain; charset="utf-8" Cache the translation from guest to host address, so we may use direct loads when we hit on the primary translation page. Look up the second translation page only once, during translation. This obviates another lookup of the second page within tb_gen_code after translation. Fixes a bug in that plugin_insn_append should be passed the bytes in the original memory order, not bswapped by pieces. Signed-off-by: Richard Henderson Acked-by: Ilya Leoshkevich Tested-by: Ilya Leoshkevich Tested-by: Vivian Wang --- include/exec/translator.h | 63 +++++++++++-------- accel/tcg/translate-all.c | 26 +++----- accel/tcg/translator.c | 127 +++++++++++++++++++++++++++++--------- 3 files changed, 144 insertions(+), 72 deletions(-) diff --git a/include/exec/translator.h b/include/exec/translator.h index 69db0f5c21..329a42fe46 100644 --- a/include/exec/translator.h +++ b/include/exec/translator.h @@ -81,24 +81,14 @@ typedef enum DisasJumpType { * Architecture-agnostic disassembly context. */ typedef struct DisasContextBase { - const TranslationBlock *tb; + TranslationBlock *tb; target_ulong pc_first; target_ulong pc_next; DisasJumpType is_jmp; int num_insns; int max_insns; bool singlestep_enabled; -#ifdef CONFIG_USER_ONLY - /* - * Guest address of the last byte of the last protected page. - * - * Pages containing the translated instructions are made non-writable = in - * order to achieve consistency in case another thread is modifying the - * code while translate_insn() fetches the instruction bytes piecemeal. - * Such writer threads are blocked on mmap_lock() in page_unprotect(). - */ - target_ulong page_protect_end; -#endif + void *host_addr[2]; } DisasContextBase; =20 /** @@ -183,24 +173,43 @@ bool translator_use_goto_tb(DisasContextBase *db, tar= get_ulong dest); * the relevant information at translation time. */ =20 -#define GEN_TRANSLATOR_LD(fullname, type, load_fn, swap_fn) \ - type fullname ## _swap(CPUArchState *env, DisasContextBase *dcbase, \ - abi_ptr pc, bool do_swap); \ - static inline type fullname(CPUArchState *env, \ - DisasContextBase *dcbase, abi_ptr pc) \ - { \ - return fullname ## _swap(env, dcbase, pc, false); \ +uint8_t translator_ldub(CPUArchState *env, DisasContextBase *db, abi_ptr p= c); +uint16_t translator_lduw(CPUArchState *env, DisasContextBase *db, abi_ptr = pc); +uint32_t translator_ldl(CPUArchState *env, DisasContextBase *db, abi_ptr p= c); +uint64_t translator_ldq(CPUArchState *env, DisasContextBase *db, abi_ptr p= c); + +static inline uint16_t +translator_lduw_swap(CPUArchState *env, DisasContextBase *db, + abi_ptr pc, bool do_swap) +{ + uint16_t ret =3D translator_lduw(env, db, pc); + if (do_swap) { + ret =3D bswap16(ret); } + return ret; +} =20 -#define FOR_EACH_TRANSLATOR_LD(F) \ - F(translator_ldub, uint8_t, cpu_ldub_code, /* no swap */) \ - F(translator_lduw, uint16_t, cpu_lduw_code, bswap16) \ - F(translator_ldl, uint32_t, cpu_ldl_code, bswap32) \ - F(translator_ldq, uint64_t, cpu_ldq_code, bswap64) +static inline uint32_t +translator_ldl_swap(CPUArchState *env, DisasContextBase *db, + abi_ptr pc, bool do_swap) +{ + uint32_t ret =3D translator_ldl(env, db, pc); + if (do_swap) { + ret =3D bswap32(ret); + } + return ret; +} =20 -FOR_EACH_TRANSLATOR_LD(GEN_TRANSLATOR_LD) - -#undef GEN_TRANSLATOR_LD +static inline uint64_t +translator_ldq_swap(CPUArchState *env, DisasContextBase *db, + abi_ptr pc, bool do_swap) +{ + uint64_t ret =3D translator_ldq_swap(env, db, pc, false); + if (do_swap) { + ret =3D bswap64(ret); + } + return ret; +} =20 /* * Return whether addr is on the same page as where disassembly started. diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c index b224f856d0..e44f40b234 100644 --- a/accel/tcg/translate-all.c +++ b/accel/tcg/translate-all.c @@ -1385,10 +1385,10 @@ TranslationBlock *tb_gen_code(CPUState *cpu, { CPUArchState *env =3D cpu->env_ptr; TranslationBlock *tb, *existing_tb; - tb_page_addr_t phys_pc, phys_page2; - target_ulong virt_page2; + tb_page_addr_t phys_pc; tcg_insn_unit *gen_code_buf; int gen_code_size, search_size, max_insns; + void *host_pc; #ifdef CONFIG_PROFILER TCGProfile *prof =3D &tcg_ctx->prof; int64_t ti; @@ -1397,7 +1397,7 @@ TranslationBlock *tb_gen_code(CPUState *cpu, assert_memory_lock(); qemu_thread_jit_write(); =20 - phys_pc =3D get_page_addr_code_hostp(env, pc, false, NULL); + phys_pc =3D get_page_addr_code_hostp(env, pc, false, &host_pc); =20 if (phys_pc =3D=3D -1) { /* Generate a one-shot TB with 1 insn in it */ @@ -1428,6 +1428,8 @@ TranslationBlock *tb_gen_code(CPUState *cpu, tb->flags =3D flags; tb->cflags =3D cflags; tb->trace_vcpu_dstate =3D *cpu->trace_dstate; + tb->page_addr[0] =3D phys_pc; + tb->page_addr[1] =3D -1; tcg_ctx->tb_cflags =3D cflags; tb_overflow: =20 @@ -1621,13 +1623,11 @@ TranslationBlock *tb_gen_code(CPUState *cpu, } =20 /* - * If the TB is not associated with a physical RAM page then - * it must be a temporary one-insn TB, and we have nothing to do - * except fill in the page_addr[] fields. Return early before - * attempting to link to other TBs or add to the lookup table. + * If the TB is not associated with a physical RAM page then it must be + * a temporary one-insn TB, and we have nothing left to do. Return ear= ly + * before attempting to link to other TBs or add to the lookup table. */ - if (phys_pc =3D=3D -1) { - tb->page_addr[0] =3D tb->page_addr[1] =3D -1; + if (tb->page_addr[0] =3D=3D -1) { return tb; } =20 @@ -1638,17 +1638,11 @@ TranslationBlock *tb_gen_code(CPUState *cpu, */ tcg_tb_insert(tb); =20 - /* check next page if needed */ - virt_page2 =3D (pc + tb->size - 1) & TARGET_PAGE_MASK; - phys_page2 =3D -1; - if ((pc & TARGET_PAGE_MASK) !=3D virt_page2) { - phys_page2 =3D get_page_addr_code(env, virt_page2); - } /* * No explicit memory barrier is required -- tb_link_page() makes the * TB visible in a consistent state. */ - existing_tb =3D tb_link_page(tb, phys_pc, phys_page2); + existing_tb =3D tb_link_page(tb, tb->page_addr[0], tb->page_addr[1]); /* if the TB already exists, discard what we just translated */ if (unlikely(existing_tb !=3D tb)) { uintptr_t orig_aligned =3D (uintptr_t)gen_code_buf; diff --git a/accel/tcg/translator.c b/accel/tcg/translator.c index 3eef30d93a..c8e9523e52 100644 --- a/accel/tcg/translator.c +++ b/accel/tcg/translator.c @@ -42,15 +42,6 @@ bool translator_use_goto_tb(DisasContextBase *db, target= _ulong dest) return ((db->pc_first ^ dest) & TARGET_PAGE_MASK) =3D=3D 0; } =20 -static inline void translator_page_protect(DisasContextBase *dcbase, - target_ulong pc) -{ -#ifdef CONFIG_USER_ONLY - dcbase->page_protect_end =3D pc | ~TARGET_PAGE_MASK; - page_protect(pc); -#endif -} - void translator_loop(CPUState *cpu, TranslationBlock *tb, int max_insns, target_ulong pc, void *host_pc, const TranslatorOps *ops, DisasContextBase *db) @@ -66,7 +57,12 @@ void translator_loop(CPUState *cpu, TranslationBlock *tb= , int max_insns, db->num_insns =3D 0; db->max_insns =3D max_insns; db->singlestep_enabled =3D cflags & CF_SINGLE_STEP; - translator_page_protect(db, db->pc_next); + db->host_addr[0] =3D host_pc; + db->host_addr[1] =3D NULL; + +#ifdef CONFIG_USER_ONLY + page_protect(pc); +#endif =20 ops->init_disas_context(db, cpu); tcg_debug_assert(db->is_jmp =3D=3D DISAS_NEXT); /* no early exit */ @@ -151,31 +147,104 @@ void translator_loop(CPUState *cpu, TranslationBlock= *tb, int max_insns, #endif } =20 -static inline void translator_maybe_page_protect(DisasContextBase *dcbase, - target_ulong pc, size_t l= en) +static void *translator_access(CPUArchState *env, DisasContextBase *db, + target_ulong pc, size_t len) { -#ifdef CONFIG_USER_ONLY - target_ulong end =3D pc + len - 1; + void *host; + target_ulong base, end; + TranslationBlock *tb; =20 - if (end > dcbase->page_protect_end) { - translator_page_protect(dcbase, end); + tb =3D db->tb; + + /* Use slow path if first page is MMIO. */ + if (unlikely(tb->page_addr[0] =3D=3D -1)) { + return NULL; } + + end =3D pc + len - 1; + if (likely(is_same_page(db, end))) { + host =3D db->host_addr[0]; + base =3D db->pc_first; + } else { + host =3D db->host_addr[1]; + base =3D TARGET_PAGE_ALIGN(db->pc_first); + if (host =3D=3D NULL) { + tb->page_addr[1] =3D + get_page_addr_code_hostp(env, base, false, + &db->host_addr[1]); +#ifdef CONFIG_USER_ONLY + page_protect(end); #endif + /* We cannot handle MMIO as second page. */ + assert(tb->page_addr[1] !=3D -1); + host =3D db->host_addr[1]; + } + + /* Use slow path when crossing pages. */ + if (is_same_page(db, pc)) { + return NULL; + } + } + + tcg_debug_assert(pc >=3D base); + return host + (pc - base); } =20 -#define GEN_TRANSLATOR_LD(fullname, type, load_fn, swap_fn) \ - type fullname ## _swap(CPUArchState *env, DisasContextBase *dcbase, \ - abi_ptr pc, bool do_swap) \ - { \ - translator_maybe_page_protect(dcbase, pc, sizeof(type)); \ - type ret =3D load_fn(env, pc); \ - if (do_swap) { \ - ret =3D swap_fn(ret); \ - } \ - plugin_insn_append(pc, &ret, sizeof(ret)); \ - return ret; \ +uint8_t translator_ldub(CPUArchState *env, DisasContextBase *db, abi_ptr p= c) +{ + uint8_t ret; + void *p =3D translator_access(env, db, pc, sizeof(ret)); + + if (p) { + plugin_insn_append(pc, p, sizeof(ret)); + return ldub_p(p); } + ret =3D cpu_ldub_code(env, pc); + plugin_insn_append(pc, &ret, sizeof(ret)); + return ret; +} =20 -FOR_EACH_TRANSLATOR_LD(GEN_TRANSLATOR_LD) +uint16_t translator_lduw(CPUArchState *env, DisasContextBase *db, abi_ptr = pc) +{ + uint16_t ret, plug; + void *p =3D translator_access(env, db, pc, sizeof(ret)); =20 -#undef GEN_TRANSLATOR_LD + if (p) { + plugin_insn_append(pc, p, sizeof(ret)); + return lduw_p(p); + } + ret =3D cpu_lduw_code(env, pc); + plug =3D tswap16(ret); + plugin_insn_append(pc, &plug, sizeof(ret)); + return ret; +} + +uint32_t translator_ldl(CPUArchState *env, DisasContextBase *db, abi_ptr p= c) +{ + uint32_t ret, plug; + void *p =3D translator_access(env, db, pc, sizeof(ret)); + + if (p) { + plugin_insn_append(pc, p, sizeof(ret)); + return ldl_p(p); + } + ret =3D cpu_ldl_code(env, pc); + plug =3D tswap32(ret); + plugin_insn_append(pc, &plug, sizeof(ret)); + return ret; +} + +uint64_t translator_ldq(CPUArchState *env, DisasContextBase *db, abi_ptr p= c) +{ + uint64_t ret, plug; + void *p =3D translator_access(env, db, pc, sizeof(ret)); + + if (p) { + plugin_insn_append(pc, p, sizeof(ret)); + return ldq_p(p); + } + ret =3D cpu_ldq_code(env, pc); + plug =3D tswap64(ret); + plugin_insn_append(pc, &plug, sizeof(ret)); + return ret; +} --=20 2.34.1 From nobody Sun May 5 06:28:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1660880371; cv=none; d=zohomail.com; s=zohoarc; b=cH/Flqcs6XfGE3fdUMF+H1gobRkLlXxS3xDqetgYvYJF1DwBpex0gvYUAiWbwlXZcTW8B8BueH76TTWYMXueEDIc66MxhQ8UQYzj3DxQXPzlGQqdMtg1pTLWL5edj1Wowbx/M/UITWXh26tT9Nztla1eIbNzl+GyPssBAj0IBGw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1660880371; 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; bh=mURG2vBrWZacEvbYDJpzvZJamsy4ggpvc9ZY1tnq9aU=; b=Iub6Gf4MImPNmcp3/Caa4g1WCkwKg5V9BX1pYZtpz+6Kk4o102osDsTyBpHRFENck3SgG6thh8zYXiBc4pKPhsvpwed7Y+CQtl0Ip5u/HmhkfFNAKhaolYu21jFzhZPpfotia6YWnXi4tRmOlhzlEBb/o6rtwzaa57FGojnnh7s= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1660880371554111.0006377551581; Thu, 18 Aug 2022 20:39:31 -0700 (PDT) Received: from localhost ([::1]:42708 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oOsr4-0006vd-GJ for importer@patchew.org; Thu, 18 Aug 2022 23:39:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48804) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oOsef-0002IC-J0 for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:41 -0400 Received: from mail-pf1-x42f.google.com ([2607:f8b0:4864:20::42f]:33417) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oOsed-0002n9-6P for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:40 -0400 Received: by mail-pf1-x42f.google.com with SMTP id k14so3282421pfh.0 for ; Thu, 18 Aug 2022 20:26:38 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:bbf3:9914:aa9c:3b4e]) by smtp.gmail.com with ESMTPSA id g184-20020a6252c1000000b00535d19c46d7sm2199904pfb.203.2022.08.18.20.26.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Aug 2022 20:26:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc; bh=mURG2vBrWZacEvbYDJpzvZJamsy4ggpvc9ZY1tnq9aU=; b=EHvqjn/JJ0YEfd8B4Ta76eyFn/g4hq76thzioHsLMSsX/cxLDcjUXxeMAckvJ99fuV ZNFg21ZWon+Pvqc4UMT0bCQKuoryDa7KDm6GhDcs/+sq59hGJtt9TmmpnJZ2/4VkqEyg 7gfqUr3bQXccfDErFpAHe/aY597ewbfEGW43BAo/9XeICZ1EEKsyFwSu82JxPl9jxRIi 4Sgl/zaIed1m7n3HUiLqZ+SFJQTKgJgbZfeOdH0BIWt2d3BSppnINOfvbInOmwZHWCAY /TcVEXmLR0jRoaMym4BaKnG72cAOkeBF4TTTK9tFYLWCYUZXkaUIHliYBoSdB+YUEj04 GqzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc; bh=mURG2vBrWZacEvbYDJpzvZJamsy4ggpvc9ZY1tnq9aU=; b=QPL1ZdDYAJJYGfyIcvGuBk3ovUjlFCIwZcxXJsPF3TWeNmz/pUPKHszIHK2FGtX51w xijiE9wHEt9jD81JTsooiVpkGNzRsoXsISt0if/Ghwj/rjnmNil82vmKE6JqypLBH6R9 wl/kuDtyvM2+AtXYYD+jNyXug/LRNRoind0+PJxP0QWrpF/YgB8Rzr2preYFHBOllpcb 54p4EU6o9DTRGrP2H7Fk4Eh0lKKaszqBUsomqSH/hHlZtt7f4z8T3/a0Kivw8Oe4PCwo /BOkeYYVQ/2LYnt2lZUMbwBZ1CtM56BUa2c9SSRA/eKXkqK6smCPj3dZHIHmnUgJSVyS EPEg== X-Gm-Message-State: ACgBeo0LMJ9Eytja9k5I8S806/I8CIAL49Q2DL7P7w+hnUqZur2+tWZ1 9IwRjzkG8DduLvRPEn6HYq06RaI1OSRwKA== X-Google-Smtp-Source: AA6agR5i79dHGVm0UeB8nP3WAHlZWwahGu3NmrwCsCarfPf/EhOT4YW5OikQWYsq9WMrm2lkoI7/VA== X-Received: by 2002:a05:6a00:1496:b0:52f:734f:9122 with SMTP id v22-20020a056a00149600b0052f734f9122mr5864679pfu.85.1660879597840; Thu, 18 Aug 2022 20:26:37 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, iii@linux.ibm.com, dramforever@live.com, alistair.francis@wdc.com, alex.bennee@linaro.org Subject: [PATCH v6 18/21] target/s390x: Make translator stop before the end of a page Date: Thu, 18 Aug 2022 20:26:12 -0700 Message-Id: <20220819032615.884847-19-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220819032615.884847-1-richard.henderson@linaro.org> References: <20220819032615.884847-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::42f; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1660880371963100003 Content-Type: text/plain; charset="utf-8" From: Ilya Leoshkevich Right now translator stops right *after* the end of a page, which breaks reporting of fault locations when the last instruction of a multi-insn translation block crosses a page boundary. Signed-off-by: Ilya Leoshkevich Reviewed-by: Richard Henderson Message-Id: <20220817150506.592862-3-iii@linux.ibm.com> Signed-off-by: Richard Henderson Tested-by: Vivian Wang --- target/s390x/tcg/translate.c | 15 +++- tests/tcg/s390x/noexec.c | 106 +++++++++++++++++++++++ tests/tcg/multiarch/noexec.c.inc | 141 +++++++++++++++++++++++++++++++ tests/tcg/s390x/Makefile.target | 1 + 4 files changed, 259 insertions(+), 4 deletions(-) create mode 100644 tests/tcg/s390x/noexec.c create mode 100644 tests/tcg/multiarch/noexec.c.inc diff --git a/target/s390x/tcg/translate.c b/target/s390x/tcg/translate.c index d4c0b9b3a2..1d2dddab1c 100644 --- a/target/s390x/tcg/translate.c +++ b/target/s390x/tcg/translate.c @@ -6609,6 +6609,14 @@ static void s390x_tr_insn_start(DisasContextBase *dc= base, CPUState *cs) dc->insn_start =3D tcg_last_op(); } =20 +static target_ulong get_next_pc(CPUS390XState *env, DisasContext *s, + uint64_t pc) +{ + uint64_t insn =3D ld_code2(env, s, pc); + + return pc + get_ilen((insn >> 8) & 0xff); +} + static void s390x_tr_translate_insn(DisasContextBase *dcbase, CPUState *cs) { CPUS390XState *env =3D cs->env_ptr; @@ -6616,10 +6624,9 @@ static void s390x_tr_translate_insn(DisasContextBase= *dcbase, CPUState *cs) =20 dc->base.is_jmp =3D translate_one(env, dc); if (dc->base.is_jmp =3D=3D DISAS_NEXT) { - uint64_t page_start; - - page_start =3D dc->base.pc_first & TARGET_PAGE_MASK; - if (dc->base.pc_next - page_start >=3D TARGET_PAGE_SIZE || dc->ex_= value) { + if (!is_same_page(dcbase, dc->base.pc_next) || + !is_same_page(dcbase, get_next_pc(env, dc, dc->base.pc_next)) = || + dc->ex_value) { dc->base.is_jmp =3D DISAS_TOO_MANY; } } diff --git a/tests/tcg/s390x/noexec.c b/tests/tcg/s390x/noexec.c new file mode 100644 index 0000000000..15d007d07f --- /dev/null +++ b/tests/tcg/s390x/noexec.c @@ -0,0 +1,106 @@ +#include "../multiarch/noexec.c.inc" + +static void *arch_mcontext_pc(const mcontext_t *ctx) +{ + return (void *)ctx->psw.addr; +} + +static int arch_mcontext_arg(const mcontext_t *ctx) +{ + return ctx->gregs[2]; +} + +static void arch_flush(void *p, int len) +{ +} + +extern char noexec_1[]; +extern char noexec_2[]; +extern char noexec_end[]; + +asm("noexec_1:\n" + " lgfi %r2,1\n" /* %r2 is 0 on entry, set 1. */ + "noexec_2:\n" + " lgfi %r2,2\n" /* %r2 is 0/1; set 2. */ + " br %r14\n" /* return */ + "noexec_end:"); + +extern char exrl_1[]; +extern char exrl_2[]; +extern char exrl_end[]; + +asm("exrl_1:\n" + " exrl %r0, exrl_2\n" + " br %r14\n" + "exrl_2:\n" + " lgfi %r2,2\n" + "exrl_end:"); + +int main(void) +{ + struct noexec_test noexec_tests[] =3D { + { + .name =3D "fallthrough", + .test_code =3D noexec_1, + .test_len =3D noexec_end - noexec_1, + .page_ofs =3D noexec_1 - noexec_2, + .entry_ofs =3D noexec_1 - noexec_2, + .expected_si_ofs =3D 0, + .expected_pc_ofs =3D 0, + .expected_arg =3D 1, + }, + { + .name =3D "jump", + .test_code =3D noexec_1, + .test_len =3D noexec_end - noexec_1, + .page_ofs =3D noexec_1 - noexec_2, + .entry_ofs =3D 0, + .expected_si_ofs =3D 0, + .expected_pc_ofs =3D 0, + .expected_arg =3D 0, + }, + { + .name =3D "exrl", + .test_code =3D exrl_1, + .test_len =3D exrl_end - exrl_1, + .page_ofs =3D exrl_1 - exrl_2, + .entry_ofs =3D exrl_1 - exrl_2, + .expected_si_ofs =3D 0, + .expected_pc_ofs =3D exrl_1 - exrl_2, + .expected_arg =3D 0, + }, + { + .name =3D "fallthrough [cross]", + .test_code =3D noexec_1, + .test_len =3D noexec_end - noexec_1, + .page_ofs =3D noexec_1 - noexec_2 - 2, + .entry_ofs =3D noexec_1 - noexec_2 - 2, + .expected_si_ofs =3D 0, + .expected_pc_ofs =3D -2, + .expected_arg =3D 1, + }, + { + .name =3D "jump [cross]", + .test_code =3D noexec_1, + .test_len =3D noexec_end - noexec_1, + .page_ofs =3D noexec_1 - noexec_2 - 2, + .entry_ofs =3D -2, + .expected_si_ofs =3D 0, + .expected_pc_ofs =3D -2, + .expected_arg =3D 0, + }, + { + .name =3D "exrl [cross]", + .test_code =3D exrl_1, + .test_len =3D exrl_end - exrl_1, + .page_ofs =3D exrl_1 - exrl_2 - 2, + .entry_ofs =3D exrl_1 - exrl_2 - 2, + .expected_si_ofs =3D 0, + .expected_pc_ofs =3D exrl_1 - exrl_2 - 2, + .expected_arg =3D 0, + }, + }; + + return test_noexec(noexec_tests, + sizeof(noexec_tests) / sizeof(noexec_tests[0])); +} diff --git a/tests/tcg/multiarch/noexec.c.inc b/tests/tcg/multiarch/noexec.= c.inc new file mode 100644 index 0000000000..bed1186f05 --- /dev/null +++ b/tests/tcg/multiarch/noexec.c.inc @@ -0,0 +1,141 @@ +/* + * Common code for arch-specific MMU_INST_FETCH fault testing. + * + * Declare struct arch_noexec_test before including this file and define + * arch_check_mcontext() after that. + */ + +#define _GNU_SOURCE + +#include +#include +#include +#include +#include +#include +#include +#include + +/* Forward declarations. */ + +static void *arch_mcontext_pc(const mcontext_t *ctx); +static int arch_mcontext_arg(const mcontext_t *ctx); +static void arch_flush(void *p, int len); + +/* Testing infrastructure. */ + +struct noexec_test { + const char *name; + const char *test_code; + int test_len; + int page_ofs; + int entry_ofs; + int expected_si_ofs; + int expected_pc_ofs; + int expected_arg; +}; + +static void *page_base; +static int page_size; +static const struct noexec_test *current_noexec_test; + +static void handle_err(const char *syscall) +{ + printf("[ FAILED ] %s: %s\n", syscall, strerror(errno)); + exit(EXIT_FAILURE); +} + +static void handle_segv(int sig, siginfo_t *info, void *ucontext) +{ + const struct noexec_test *test =3D current_noexec_test; + const mcontext_t *mc =3D &((ucontext_t *)ucontext)->uc_mcontext; + void *expected_si; + void *expected_pc; + void *pc; + int arg; + + if (test =3D=3D NULL) { + printf("[ FAILED ] unexpected SEGV\n"); + exit(EXIT_FAILURE); + } + current_noexec_test =3D NULL; + + expected_si =3D page_base + test->expected_si_ofs; + if (info->si_addr !=3D expected_si) { + printf("[ FAILED ] wrong si_addr (%p !=3D %p)\n", + info->si_addr, expected_si); + exit(EXIT_FAILURE); + } + + pc =3D arch_mcontext_pc(mc); + expected_pc =3D page_base + test->expected_pc_ofs; + if (pc !=3D expected_pc) { + printf("[ FAILED ] wrong pc (%p !=3D %p)\n", pc, expected_pc); + exit(EXIT_FAILURE); + } + + arg =3D arch_mcontext_arg(mc); + if (arg !=3D test->expected_arg) { + printf("[ FAILED ] wrong arg (%d !=3D %d)\n", arg, test->expecte= d_arg); + exit(EXIT_FAILURE); + } + + if (mprotect(page_base, page_size, + PROT_READ | PROT_WRITE | PROT_EXEC) < 0) { + handle_err("mprotect"); + } +} + +static void test_noexec_1(const struct noexec_test *test) +{ + void *start =3D page_base + test->page_ofs; + void (*fn)(int arg) =3D page_base + test->entry_ofs; + + memcpy(start, test->test_code, test->test_len); + arch_flush(start, test->test_len); + + /* Trigger TB creation in order to test invalidation. */ + fn(0); + + if (mprotect(page_base, page_size, PROT_NONE) < 0) { + handle_err("mprotect"); + } + + /* Trigger SEGV and check that handle_segv() ran. */ + current_noexec_test =3D test; + fn(0); + assert(current_noexec_test =3D=3D NULL); +} + +static int test_noexec(struct noexec_test *tests, size_t n_tests) +{ + struct sigaction act; + size_t i; + + memset(&act, 0, sizeof(act)); + act.sa_sigaction =3D handle_segv; + act.sa_flags =3D SA_SIGINFO; + if (sigaction(SIGSEGV, &act, NULL) < 0) { + handle_err("sigaction"); + } + + page_size =3D getpagesize(); + page_base =3D mmap(NULL, 2 * page_size, + PROT_READ | PROT_WRITE | PROT_EXEC, + MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); + if (page_base =3D=3D MAP_FAILED) { + handle_err("mmap"); + } + page_base +=3D page_size; + + for (i =3D 0; i < n_tests; i++) { + struct noexec_test *test =3D &tests[i]; + + printf("[ RUN ] %s\n", test->name); + test_noexec_1(test); + printf("[ OK ]\n"); + } + + printf("[ PASSED ]\n"); + return EXIT_SUCCESS; +} diff --git a/tests/tcg/s390x/Makefile.target b/tests/tcg/s390x/Makefile.tar= get index 1a7a4a2f59..5e13a41c3f 100644 --- a/tests/tcg/s390x/Makefile.target +++ b/tests/tcg/s390x/Makefile.target @@ -16,6 +16,7 @@ TESTS+=3Dshift TESTS+=3Dtrap TESTS+=3Dsignals-s390x TESTS+=3Dbranch-relative-long +TESTS+=3Dnoexec =20 Z14_TESTS=3Dvfminmax vfminmax: LDFLAGS+=3D-lm --=20 2.34.1 From nobody Sun May 5 06:28:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1660880300; cv=none; d=zohomail.com; s=zohoarc; b=n8dQD8nG3XZiJRjcVA7I50cUq/UL5eR8LGLg3Cvk8qPjsv4OIfNXDRlkI9si0Mvr47GrZ5VO4NBCgPOGjreyYE8KBgVcghq+CR2LHk+DVOYSKYzIN5fnX3gofOGti9z2P8YHP/43iaa6d7rfkRLa4aIA0xEnAc7BZa1n55tWb3w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1660880300; 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; bh=A3R616HEUPjAdmBY4skqrduHuUSNazsgMP2LVWfq+cc=; b=g2iUk3p4ebiYiaPvjpR7zyhMwDxrslFZcfkUw4uusCUJmbIJ3iAhYxDcQFnwSuZ3Wv42nGgUnmM5CpUT6CVM4Q6n0lP12480vAEnzGZqCPfmthRcqXv5iIR+q9I9wGmxbBMyxfmH2KR9elghVVwXcl5fqs/gvMQdbFhJEAnVIMQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1660880300247768.8013825286196; Thu, 18 Aug 2022 20:38:20 -0700 (PDT) Received: from localhost ([::1]:51658 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oOspv-00057W-1H for importer@patchew.org; Thu, 18 Aug 2022 23:38:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48808) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oOseg-0002Kk-FI for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:42 -0400 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]:46892) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oOsee-0002nJ-8m for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:42 -0400 Received: by mail-pj1-x1031.google.com with SMTP id o14-20020a17090a0a0e00b001fabfd3369cso3654104pjo.5 for ; Thu, 18 Aug 2022 20:26:39 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:bbf3:9914:aa9c:3b4e]) by smtp.gmail.com with ESMTPSA id g184-20020a6252c1000000b00535d19c46d7sm2199904pfb.203.2022.08.18.20.26.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Aug 2022 20:26:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc; bh=A3R616HEUPjAdmBY4skqrduHuUSNazsgMP2LVWfq+cc=; b=daStevni2DBAot3mTUtpg2nAHpsr9yzjd6iDtdKxxp1e6sQirvZ7dtKAvXCqcADMx9 48axhIEHiXfbEH49B6GlKKfnU1asKqy1WmR3Wp1q4W97FPxz+ILL8XeYqZW0NLKtNk7a STNraO0jS+rWj+uqyiAhORr4180TpIJ5U9Afu8X1p66/udOi5S34is8TUO5xNNoo5iv2 KDJPqicH7XN07iDrCJiLj/LZMqg0ppi14OZOXVQBghydxBaeKsd1HaP2FwpowDOzC7la 5jRXA4p+mMI508JOKp2TLF/P5PcJ7Bg1iVtqkNzXICTUlUCEzHHrfjUXrzJHnkAB39v0 kyHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc; bh=A3R616HEUPjAdmBY4skqrduHuUSNazsgMP2LVWfq+cc=; b=Z5aUr/aJyOSYfEZb0UwXr2/qPQkh1IAvkDQjw8OXbpVNMmKVl+xFtSrLZGDhqI2Tj8 +qM8Z4jCOxwjDahqZQ9zgW6zGkTDg6zQo3X8+iUNbTx0Xhsn04PLIB1haTDJDF/W3NNL LCxofYHI9FTFz8WiwB/qNr20RE8qdssFgJ6etojk+nUU9u7nfFHvmWok2zzSlfmqfxam bgoiQ/rpesMDhs1OuTfIs/H03bsmJ5v8xmoDPUiN9VERqBrYvuD354+Kc815ksooHEMQ K5bwh7VAC454Ik2B6G62zuIHRYIxyMmjQfl65FpsYeZfEyBS8D4wsElpreTe8+SeExQi 66YQ== X-Gm-Message-State: ACgBeo19YpmMnOkZW4rf9JRPm+nITo/cM1d7VcdAVoTvqbtg61imkxLc XhQdMoYQ6cp6RUiJXHzC5o48IxCS0OubjA== X-Google-Smtp-Source: AA6agR7LJ38CHqWD4Xe9gv4mIbit6X/EiCuDHnkEv46hFMSijYg94MGevOtd0jzJap5p17ukq9aIsg== X-Received: by 2002:a17:902:e550:b0:172:9c63:8198 with SMTP id n16-20020a170902e55000b001729c638198mr5395881plf.90.1660879598928; Thu, 18 Aug 2022 20:26:38 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, iii@linux.ibm.com, dramforever@live.com, alistair.francis@wdc.com, alex.bennee@linaro.org Subject: [PATCH v6 19/21] target/i386: Make translator stop before the end of a page Date: Thu, 18 Aug 2022 20:26:13 -0700 Message-Id: <20220819032615.884847-20-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220819032615.884847-1-richard.henderson@linaro.org> References: <20220819032615.884847-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::1031; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1031.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1660880301532100001 Content-Type: text/plain; charset="utf-8" From: Ilya Leoshkevich Right now translator stops right *after* the end of a page, which breaks reporting of fault locations when the last instruction of a multi-insn translation block crosses a page boundary. An implementation, like the one arm and s390x have, would require an i386 length disassembler, which is burdensome to maintain. Another alternative would be to single-step at the end of a guest page, but this may come with a performance impact. Fix by snapshotting disassembly state and restoring it after we figure out we crossed a page boundary. This includes rolling back cc_op updates and emitted ops. Signed-off-by: Ilya Leoshkevich Reviewed-by: Richard Henderson Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1143 Message-Id: <20220817150506.592862-4-iii@linux.ibm.com> Signed-off-by: Richard Henderson Tested-by: Vivian Wang --- target/i386/tcg/translate.c | 25 ++++++++++- tests/tcg/x86_64/noexec.c | 75 ++++++++++++++++++++++++++++++++ tests/tcg/x86_64/Makefile.target | 3 +- 3 files changed, 101 insertions(+), 2 deletions(-) create mode 100644 tests/tcg/x86_64/noexec.c diff --git a/target/i386/tcg/translate.c b/target/i386/tcg/translate.c index 4836c889e0..6481ae5c24 100644 --- a/target/i386/tcg/translate.c +++ b/target/i386/tcg/translate.c @@ -130,6 +130,7 @@ typedef struct DisasContext { TCGv_i64 tmp1_i64; =20 sigjmp_buf jmpbuf; + TCGOp *prev_insn_end; } DisasContext; =20 /* The environment in which user-only runs is constrained. */ @@ -2008,6 +2009,12 @@ static uint64_t advance_pc(CPUX86State *env, DisasCo= ntext *s, int num_bytes) { uint64_t pc =3D s->pc; =20 + /* This is a subsequent insn that crosses a page boundary. */ + if (s->base.num_insns > 1 && + !is_same_page(&s->base, s->pc + num_bytes - 1)) { + siglongjmp(s->jmpbuf, 2); + } + s->pc +=3D num_bytes; if (unlikely(s->pc - s->pc_start > X86_MAX_INSN_LENGTH)) { /* If the instruction's 16th byte is on a different page than the = 1st, a @@ -4556,6 +4563,8 @@ static target_ulong disas_insn(DisasContext *s, CPUSt= ate *cpu) int modrm, reg, rm, mod, op, opreg, val; target_ulong next_eip, tval; target_ulong pc_start =3D s->base.pc_next; + bool orig_cc_op_dirty =3D s->cc_op_dirty; + CCOp orig_cc_op =3D s->cc_op; =20 s->pc_start =3D s->pc =3D pc_start; s->override =3D -1; @@ -4568,9 +4577,22 @@ static target_ulong disas_insn(DisasContext *s, CPUS= tate *cpu) s->rip_offset =3D 0; /* for relative ip address */ s->vex_l =3D 0; s->vex_v =3D 0; - if (sigsetjmp(s->jmpbuf, 0) !=3D 0) { + switch (sigsetjmp(s->jmpbuf, 0)) { + case 0: + break; + case 1: gen_exception_gpf(s); return s->pc; + case 2: + /* Restore state that may affect the next instruction. */ + s->cc_op_dirty =3D orig_cc_op_dirty; + s->cc_op =3D orig_cc_op; + s->base.num_insns--; + tcg_remove_ops_after(s->prev_insn_end); + s->base.is_jmp =3D DISAS_TOO_MANY; + return pc_start; + default: + g_assert_not_reached(); } =20 prefixes =3D 0; @@ -8632,6 +8654,7 @@ static void i386_tr_insn_start(DisasContextBase *dcba= se, CPUState *cpu) { DisasContext *dc =3D container_of(dcbase, DisasContext, base); =20 + dc->prev_insn_end =3D tcg_last_op(); tcg_gen_insn_start(dc->base.pc_next, dc->cc_op); } =20 diff --git a/tests/tcg/x86_64/noexec.c b/tests/tcg/x86_64/noexec.c new file mode 100644 index 0000000000..9b124901be --- /dev/null +++ b/tests/tcg/x86_64/noexec.c @@ -0,0 +1,75 @@ +#include "../multiarch/noexec.c.inc" + +static void *arch_mcontext_pc(const mcontext_t *ctx) +{ + return (void *)ctx->gregs[REG_RIP]; +} + +int arch_mcontext_arg(const mcontext_t *ctx) +{ + return ctx->gregs[REG_RDI]; +} + +static void arch_flush(void *p, int len) +{ +} + +extern char noexec_1[]; +extern char noexec_2[]; +extern char noexec_end[]; + +asm("noexec_1:\n" + " movq $1,%rdi\n" /* %rdi is 0 on entry, set 1. */ + "noexec_2:\n" + " movq $2,%rdi\n" /* %rdi is 0/1; set 2. */ + " ret\n" + "noexec_end:"); + +int main(void) +{ + struct noexec_test noexec_tests[] =3D { + { + .name =3D "fallthrough", + .test_code =3D noexec_1, + .test_len =3D noexec_end - noexec_1, + .page_ofs =3D noexec_1 - noexec_2, + .entry_ofs =3D noexec_1 - noexec_2, + .expected_si_ofs =3D 0, + .expected_pc_ofs =3D 0, + .expected_arg =3D 1, + }, + { + .name =3D "jump", + .test_code =3D noexec_1, + .test_len =3D noexec_end - noexec_1, + .page_ofs =3D noexec_1 - noexec_2, + .entry_ofs =3D 0, + .expected_si_ofs =3D 0, + .expected_pc_ofs =3D 0, + .expected_arg =3D 0, + }, + { + .name =3D "fallthrough [cross]", + .test_code =3D noexec_1, + .test_len =3D noexec_end - noexec_1, + .page_ofs =3D noexec_1 - noexec_2 - 2, + .entry_ofs =3D noexec_1 - noexec_2 - 2, + .expected_si_ofs =3D 0, + .expected_pc_ofs =3D -2, + .expected_arg =3D 1, + }, + { + .name =3D "jump [cross]", + .test_code =3D noexec_1, + .test_len =3D noexec_end - noexec_1, + .page_ofs =3D noexec_1 - noexec_2 - 2, + .entry_ofs =3D -2, + .expected_si_ofs =3D 0, + .expected_pc_ofs =3D -2, + .expected_arg =3D 0, + }, + }; + + return test_noexec(noexec_tests, + sizeof(noexec_tests) / sizeof(noexec_tests[0])); +} diff --git a/tests/tcg/x86_64/Makefile.target b/tests/tcg/x86_64/Makefile.t= arget index b71a6bcd5e..c0e7e5b005 100644 --- a/tests/tcg/x86_64/Makefile.target +++ b/tests/tcg/x86_64/Makefile.target @@ -10,6 +10,7 @@ include $(SRC_PATH)/tests/tcg/i386/Makefile.target =20 ifeq ($(filter %-linux-user, $(TARGET)),$(TARGET)) X86_64_TESTS +=3D vsyscall +X86_64_TESTS +=3D noexec TESTS=3D$(MULTIARCH_TESTS) $(X86_64_TESTS) test-x86_64 else TESTS=3D$(MULTIARCH_TESTS) @@ -20,5 +21,5 @@ test-x86_64: LDFLAGS+=3D-lm -lc test-x86_64: test-i386.c test-i386.h test-i386-shift.h test-i386-muldiv.h $(CC) $(CFLAGS) $< -o $@ $(LDFLAGS) =20 -vsyscall: $(SRC_PATH)/tests/tcg/x86_64/vsyscall.c +%: $(SRC_PATH)/tests/tcg/x86_64/%.c $(CC) $(CFLAGS) $< -o $@ $(LDFLAGS) --=20 2.34.1 From nobody Sun May 5 06:28:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1660880622; cv=none; d=zohomail.com; s=zohoarc; b=BMyUmbf4MApxRuZeqbm/Xk+KnQYtNvM1JiCIviB2RvIScXw9L2vKcJtHcoYlbr4RfL3g6GiLgJ/M57Yodc9/ixQnMGTFDO+RNBBba+AaDuhHVxRK+CrBy2b47weiSxfzQRxh1FWiFuoFJKCW4ePFAEcToTn9B39wrQr9XCC6VBY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1660880622; 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; bh=x19w7YfjB2h5oqwKEQEJIlPdiLtoIpQZ8bzoyerjNiU=; b=DahdizwVCoN8fFwFkLSK486Sj7xCPp7tykoa+OTKqQeHCwz/bCO55/JvfhFrK7uZDhw5QKcJw5FPfHJM3fepCGBMnJr76BekeoFSf1Vm2lWenq5CjaJyVH4Lv9uSNYjwZs4EGYziQkoBKO39F4fnpAL2G50lN4PTTrFhN3PhwUM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1660880622478736.6060475388828; Thu, 18 Aug 2022 20:43:42 -0700 (PDT) Received: from localhost ([::1]:47834 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oOsv7-0005rE-Dn for importer@patchew.org; Thu, 18 Aug 2022 23:43:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48810) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oOseg-0002M8-QA for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:42 -0400 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]:38438) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oOsee-0002mF-Oc for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:42 -0400 Received: by mail-pj1-x1034.google.com with SMTP id s31-20020a17090a2f2200b001faaf9d92easo6401076pjd.3 for ; Thu, 18 Aug 2022 20:26:40 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:bbf3:9914:aa9c:3b4e]) by smtp.gmail.com with ESMTPSA id g184-20020a6252c1000000b00535d19c46d7sm2199904pfb.203.2022.08.18.20.26.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Aug 2022 20:26:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc; bh=x19w7YfjB2h5oqwKEQEJIlPdiLtoIpQZ8bzoyerjNiU=; b=x3AnRLgh42tz7kLYNwNWqMXuPeqOytRLrrz7c193IvW/VsNoMwYZd/ftwSPHA84Mlr agTuSj3JCR8n7Ilpov8gsJumCK8jLiMqltflCXru6142c8dyBUZVGUfyyO/s0jSujlko ZmO2gh1VRTiwEx88BLaGp0f274BWjIEyFh6YJaQo94xnvl0wv97TjGPRsBIffhhtP9zl SwVy9MptYOX8NzwRR9pn7Yk2Qa2E1wrq1rtW6wrZKC2qepCS7NrnWLKUmlfFgaI2pbR1 w8Mvx784Eono8H92WfNIQ7zANtxscFcVvqC+4dbG/3eoXKPcV6bviwLcypLLf7IQIVS4 uUsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc; bh=x19w7YfjB2h5oqwKEQEJIlPdiLtoIpQZ8bzoyerjNiU=; b=wy13lhDB0PyVjVfoXRf4qARR+OKDOxPh7eeaz7V60VmxyO51i1/aDUu/JAaXUz7gX/ NODDkDJFYO7CaCJpYjzlWXeGnQ2goMIN3GnyK8g/BW1VOFvaX2RZjc2FHEnypMQk56F9 fYgs55dOIgkKXcahi16oovggJ3SX5mCXxeOZKjG0vvar/C0EtpdHj9DaA6yOYrnB4bQg 9Lo6LCgQuSqWR9pwN8lsbABTg5rXUAR1rx42Ojym7jVuvE5jeE8c2NZsLSDtblX+rSOR 9gJMw0KEAp9ZaPx/Gs1SEby9b7I5JfHTHx1A68TZ6IAtWmY/3kZNjiU0m8dJzS2hShwV K4ZA== X-Gm-Message-State: ACgBeo3oAG+J/c5YpzeMDpJXbJWYg1MXVMjqYUqoHteMb9g61ZNXKnmC I3YK7kp0cXoeVdo523YXgSZqOSG6ywWM3A== X-Google-Smtp-Source: AA6agR7foEo/7M4C5ONOhvXQ8qEDEFguwnR+u/cXygoPZXDo9PsMwRUqDkwblXY+sMGxeAexNOqEBw== X-Received: by 2002:a17:90b:4c8c:b0:1fa:c44f:473a with SMTP id my12-20020a17090b4c8c00b001fac44f473amr7587509pjb.195.1660879600002; Thu, 18 Aug 2022 20:26:40 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, iii@linux.ibm.com, dramforever@live.com, alistair.francis@wdc.com, alex.bennee@linaro.org Subject: [PATCH v6 20/21] target/riscv: Add MAX_INSN_LEN and insn_len Date: Thu, 18 Aug 2022 20:26:14 -0700 Message-Id: <20220819032615.884847-21-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220819032615.884847-1-richard.henderson@linaro.org> References: <20220819032615.884847-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::1034; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1034.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1660880623238100001 Content-Type: text/plain; charset="utf-8" These will be useful in properly ending the TB. Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis Tested-by: Vivian Wang --- target/riscv/translate.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 38666ddc91..a719aa6e63 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -1022,6 +1022,14 @@ static uint32_t opcode_at(DisasContextBase *dcbase, = target_ulong pc) /* Include decoders for factored-out extensions */ #include "decode-XVentanaCondOps.c.inc" =20 +/* The specification allows for longer insns, but not supported by qemu. */ +#define MAX_INSN_LEN 4 + +static inline int insn_len(uint16_t first_word) +{ + return (first_word & 3) =3D=3D 3 ? 4 : 2; +} + static void decode_opc(CPURISCVState *env, DisasContext *ctx, uint16_t opc= ode) { /* @@ -1037,7 +1045,7 @@ static void decode_opc(CPURISCVState *env, DisasConte= xt *ctx, uint16_t opcode) }; =20 /* Check for compressed insn */ - if (extract16(opcode, 0, 2) !=3D 3) { + if (insn_len(opcode) =3D=3D 2) { if (!has_ext(ctx, RVC)) { gen_exception_illegal(ctx); } else { --=20 2.34.1 From nobody Sun May 5 06:28:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1660880484; cv=none; d=zohomail.com; s=zohoarc; b=nq3xFOGafj5dD1bJz9jniumYv6lkoWfCL1dpg54M+HB5sH2dL6g/vPqeO4gkTIK9T6ldv176vUTxL6/2T1q2Cs0PXqUiVTH3U3hegoTqoWQQ7VEOFCWGd9Zqoo+f8ImQVPlrH8G/4+n2tc5lhO/Axm5s7PUczy43f9A7uBczqAw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1660880484; 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; bh=eG1O+v8L8NJE9bJ3ZvxBbx6/WL3iXYhAToDfN+kCmp0=; b=HJQ/tuQ78SMCNY09HDzUfN3iDhtGbJ7Uvi4Cwq0kOoyASm3JKJzwwCkkQ7qa98W1lMo8q+LqURoANVMtIklqqqd6hpkWB1sfXJgnSL4KXR5G9EqX0p09kDbVb6nKgggA8ior3rQWrqxassK4NHJ6SmvRuQfBretHaEo/06jvyUw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1660880484186532.0298770775564; Thu, 18 Aug 2022 20:41:24 -0700 (PDT) Received: from localhost ([::1]:34460 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oOsst-0002Sw-0x for importer@patchew.org; Thu, 18 Aug 2022 23:41:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48812) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oOseh-0002Ok-ID for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:43 -0400 Received: from mail-pg1-x52c.google.com ([2607:f8b0:4864:20::52c]:39505) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oOsef-0002k1-LV for qemu-devel@nongnu.org; Thu, 18 Aug 2022 23:26:43 -0400 Received: by mail-pg1-x52c.google.com with SMTP id q9so1839329pgq.6 for ; Thu, 18 Aug 2022 20:26:41 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:bbf3:9914:aa9c:3b4e]) by smtp.gmail.com with ESMTPSA id g184-20020a6252c1000000b00535d19c46d7sm2199904pfb.203.2022.08.18.20.26.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Aug 2022 20:26:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc; bh=eG1O+v8L8NJE9bJ3ZvxBbx6/WL3iXYhAToDfN+kCmp0=; b=vjHtIMwWNM8NKeTeKYqzlRL4PjUznKYu5wOaYlqIjR14ztgWVDOWLdABJ4S4DcVM63 Y/6g+Q8/qt16YJlZYwfMgyeuP8/KnjvHjhPGu0SYz/foRv+c/vJTt4d5WSSfTl/NxKYY Nk2q5oqaE0H8AL8sKwgSHA07dJ1V3WTG9pGE6ToVPAD8enR1Ii1f2Ls9j0mFj7I8Ynkj jqyzVHyhhuA+UwHyPz29wtPlwPQpaVSf+9hHRcXcoEH3Hy43mmvzY2va8iDdTrdiXfGm G0JpZfYTIHblmtinJaAX71GJWkUZ8ilOd3tPOldXzm5scpk/Wjg3nSrjo1UTPl0uD4ma FmYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc; bh=eG1O+v8L8NJE9bJ3ZvxBbx6/WL3iXYhAToDfN+kCmp0=; b=Nv2lXlqU55X1No2H17ueHHSAHeM2GBBmvAWy48K4kgahHY5LXrxwdfZSvkom7mXNUp 33e+KQ4KCsdeZFsPwV2LP+qUKamaxP7Hk4Gqe0tq7kXNbedmk3UC1JD/nBV7pZWVmxoc Wj+y9ZmAOSPHTBfRcawJ9TSJcIa9kmnZIlPxe5mU/fZc/rS6PK6TUHMc/LtX8mABO2WZ KxLDZ7qhZEOLrfDgGrfbLbFvfls83RorZGu9gq0VXbQuAXTMt/l32nkAzH/ZXd9/PT+h NIQ2rJ/4Itul9m9QXNOY4zHXMYwBeiX5fQxBCNYOcNyGvPsMMiTvUEoqZSCh1dCj/ELH 23mg== X-Gm-Message-State: ACgBeo3Y95xSdYEU56BRqfONOmAGBtQWbXDwJyWsan4wzeeB7NaKf7Q5 gjSXODClwjUrNeN/IUg0TINrQTj8rp3rEg== X-Google-Smtp-Source: AA6agR68NsfRFpb5xS0BHOO1HY6Uwqlcrg3tVT4COnmDNzLI/a7N9cOQWe/wCdDYUt/h1xTO2kSxMw== X-Received: by 2002:a05:6a00:2392:b0:52e:b4fb:848 with SMTP id f18-20020a056a00239200b0052eb4fb0848mr5954277pfc.8.1660879600910; Thu, 18 Aug 2022 20:26:40 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, iii@linux.ibm.com, dramforever@live.com, alistair.francis@wdc.com, alex.bennee@linaro.org Subject: [PATCH v6 21/21] target/riscv: Make translator stop before the end of a page Date: Thu, 18 Aug 2022 20:26:15 -0700 Message-Id: <20220819032615.884847-22-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220819032615.884847-1-richard.henderson@linaro.org> References: <20220819032615.884847-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::52c; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1660880484640100001 Content-Type: text/plain; charset="utf-8" Right now the translator stops right *after* the end of a page, which breaks reporting of fault locations when the last instruction of a multi-insn translation block crosses a page boundary. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1155 Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis Tested-by: Vivian Wang --- target/riscv/translate.c | 17 +++++-- tests/tcg/riscv64/noexec.c | 79 +++++++++++++++++++++++++++++++ tests/tcg/riscv64/Makefile.target | 1 + 3 files changed, 93 insertions(+), 4 deletions(-) create mode 100644 tests/tcg/riscv64/noexec.c diff --git a/target/riscv/translate.c b/target/riscv/translate.c index a719aa6e63..f8af6daa70 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -1154,12 +1154,21 @@ static void riscv_tr_translate_insn(DisasContextBas= e *dcbase, CPUState *cpu) } ctx->nftemp =3D 0; =20 + /* Only the first insn within a TB is allowed to cross a page boundary= . */ if (ctx->base.is_jmp =3D=3D DISAS_NEXT) { - target_ulong page_start; - - page_start =3D ctx->base.pc_first & TARGET_PAGE_MASK; - if (ctx->base.pc_next - page_start >=3D TARGET_PAGE_SIZE) { + if (!is_same_page(&ctx->base, ctx->base.pc_next)) { ctx->base.is_jmp =3D DISAS_TOO_MANY; + } else { + unsigned page_ofs =3D ctx->base.pc_next & ~TARGET_PAGE_MASK; + + if (page_ofs > TARGET_PAGE_SIZE - MAX_INSN_LEN) { + uint16_t next_insn =3D cpu_lduw_code(env, ctx->base.pc_nex= t); + int len =3D insn_len(next_insn); + + if (!is_same_page(&ctx->base, ctx->base.pc_next + len)) { + ctx->base.is_jmp =3D DISAS_TOO_MANY; + } + } } } } diff --git a/tests/tcg/riscv64/noexec.c b/tests/tcg/riscv64/noexec.c new file mode 100644 index 0000000000..86f64b28db --- /dev/null +++ b/tests/tcg/riscv64/noexec.c @@ -0,0 +1,79 @@ +#include "../multiarch/noexec.c.inc" + +static void *arch_mcontext_pc(const mcontext_t *ctx) +{ + return (void *)ctx->__gregs[REG_PC]; +} + +static int arch_mcontext_arg(const mcontext_t *ctx) +{ + return ctx->__gregs[REG_A0]; +} + +static void arch_flush(void *p, int len) +{ + __builtin___clear_cache(p, p + len); +} + +extern char noexec_1[]; +extern char noexec_2[]; +extern char noexec_end[]; + +asm(".option push\n" + ".option norvc\n" + "noexec_1:\n" + " li a0,1\n" /* a0 is 0 on entry, set 1. */ + "noexec_2:\n" + " li a0,2\n" /* a0 is 0/1; set 2. */ + " ret\n" + "noexec_end:\n" + ".option pop"); + +int main(void) +{ + struct noexec_test noexec_tests[] =3D { + { + .name =3D "fallthrough", + .test_code =3D noexec_1, + .test_len =3D noexec_end - noexec_1, + .page_ofs =3D noexec_1 - noexec_2, + .entry_ofs =3D noexec_1 - noexec_2, + .expected_si_ofs =3D 0, + .expected_pc_ofs =3D 0, + .expected_arg =3D 1, + }, + { + .name =3D "jump", + .test_code =3D noexec_1, + .test_len =3D noexec_end - noexec_1, + .page_ofs =3D noexec_1 - noexec_2, + .entry_ofs =3D 0, + .expected_si_ofs =3D 0, + .expected_pc_ofs =3D 0, + .expected_arg =3D 0, + }, + { + .name =3D "fallthrough [cross]", + .test_code =3D noexec_1, + .test_len =3D noexec_end - noexec_1, + .page_ofs =3D noexec_1 - noexec_2 - 2, + .entry_ofs =3D noexec_1 - noexec_2 - 2, + .expected_si_ofs =3D 0, + .expected_pc_ofs =3D -2, + .expected_arg =3D 1, + }, + { + .name =3D "jump [cross]", + .test_code =3D noexec_1, + .test_len =3D noexec_end - noexec_1, + .page_ofs =3D noexec_1 - noexec_2 - 2, + .entry_ofs =3D -2, + .expected_si_ofs =3D 0, + .expected_pc_ofs =3D -2, + .expected_arg =3D 0, + }, + }; + + return test_noexec(noexec_tests, + sizeof(noexec_tests) / sizeof(noexec_tests[0])); +} diff --git a/tests/tcg/riscv64/Makefile.target b/tests/tcg/riscv64/Makefile= .target index d41bf6d60d..b5b89dfb0e 100644 --- a/tests/tcg/riscv64/Makefile.target +++ b/tests/tcg/riscv64/Makefile.target @@ -3,3 +3,4 @@ =20 VPATH +=3D $(SRC_PATH)/tests/tcg/riscv64 TESTS +=3D test-div +TESTS +=3D noexec --=20 2.34.1