From nobody Fri May 10 14:31:55 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=1661292457; cv=none; d=zohomail.com; s=zohoarc; b=cutYz/KnZIU8fMInGWLKpnzclDQmLfhQPUZ7M+Yz1jKKDME0gtSK3tOXpaDrbVx+gNnB11UD+6MuUX004RNBczanrvAcimlGfCHmGOLshxdir+yRT5IQs4rI/G2UUEnr5SRRUurBLDaWKA8s2XrlEviliF+ZTNwAsQbl4jvmlXc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1661292457; 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=cnDX4PL0OXe9dOqXgYaSV2oqzwR9gOMv9I1pf97HvaI=; b=M1YnN6Wxx2tj5MLka4GGY1IdyzRwiNKmjmbd+oPnsUoUEvwD/mCRWzO4pDDHlCLCpYbjBc2tEvFT29XSJmb+u8BXQFZQIuOiQ0xcbW2qDTUxzw4GDU5p8vZ/OT3h6CeBEPiuK+V5pDNvN+PJwj8U+I6P3f1DkQe6MQWgUNnycW0= 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 1661292457372739.7154704358103; Tue, 23 Aug 2022 15:07:37 -0700 (PDT) Received: from localhost ([::1]:38382 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oQc3b-0002fD-Ry for importer@patchew.org; Tue, 23 Aug 2022 18:07:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42484) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oQc1u-0008F2-9Y for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:05:50 -0400 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]:51761) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oQc1r-0001Pe-Pk for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:05:49 -0400 Received: by mail-pj1-x1036.google.com with SMTP id e19so14035479pju.1 for ; Tue, 23 Aug 2022 15:05:47 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:46f9:77b4:ec0a:c2d9]) by smtp.gmail.com with ESMTPSA id n12-20020a170902f60c00b0017292073839sm11020974plg.178.2022.08.23.15.05.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Aug 2022 15:05:45 -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=cnDX4PL0OXe9dOqXgYaSV2oqzwR9gOMv9I1pf97HvaI=; b=P3dP9H9X4MUpMlciZ7pJLXK2q5GyptJMTUBs0K0LZCpaL9kIcQEoaRVkS3x7MAasxT ooqxIl5VGFItwx0BTKFXPSDd5mkh/uo2q24y5zUI2cvjIJ/K4OZht5oUT+YduHEDiXCz h5Rt7GeTZTrJ+jc2VQg+nSWjPXXigoOJ1QXTUiF71udI+epvD8ow8WFrhe1Y9V3Wu3f4 7PcaelA7B+b6ZsBmbMH/iBuHi1Y1zhf3Qf1rJGtDvBr3l+az5bPhhwriOEsVYTA97IeO TJ9K8gKaOnRPlwsvPvmcQiaQ1ZU5ZCt3q0NUJrSEDDMSfVGkJ0XVQRS3sVn/IQhfzJPd vl5w== 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=cnDX4PL0OXe9dOqXgYaSV2oqzwR9gOMv9I1pf97HvaI=; b=ETd86+6JNGkFT6LzsOjuAJGO7bFMMd4mUnGJ4fucUyfIkPUXMlPsra01m05clpw6hp GkVN9DqWhSOx7w/T9tq3inVTVtM/CGTJYjiVidndUkKvqaEav2RWOPzcgis0aUqvnun2 vyBWg3Ob7N54Za7mpJ3kiinLHAkpZ+6wq47xPNoKAt4jfqblZsnpjobzbcN+dAT5V807 AU+I2qsnkEhcleMkDDOfRKXFuxtwvh3Vo9sPZcIxq3gDFhEnOBR2R+6w2EAht5Z6KLAJ TAdRBA1KWTkcbmatI32NznftK/P0mnuthtfgfQpQYb9xKHjq42uti+Pl/ZF11mvKE4mX lsCw== X-Gm-Message-State: ACgBeo3N3PXYhPz0wTMDeXS9Gsg/m4XoF2mK3hhDo6qeXofuYsySxDlJ 8TzH0Papy1ZNHYZXyPAUxzm1RPeoNqax4w== X-Google-Smtp-Source: AA6agR73jzZiO5Z4Gaia8xipM30UgPqxv7DgZTnZr2ueSdXWnkoaYe3veaxqDgZxCJ+14Uthd17HEA== X-Received: by 2002:a17:902:e945:b0:16b:f802:1660 with SMTP id b5-20020a170902e94500b0016bf8021660mr26424870pll.7.1661292346479; Tue, 23 Aug 2022 15:05:46 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: iii@linux.ibm.com, laurent@vivier.eu, alex.bennee@linaro.org Subject: [PATCH v7 01/20] linux-user/arm: Mark the commpage executable Date: Tue, 23 Aug 2022 15:05:23 -0700 Message-Id: <20220823220542.1993395-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220823220542.1993395-1-richard.henderson@linaro.org> References: <20220823220542.1993395-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::1036; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1036.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: 1661292458513100003 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. Acked-by: Ilya Leoshkevich Tested-by: Ilya Leoshkevich Signed-off-by: Richard Henderson --- 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 Fri May 10 14:31:55 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=1661292455; cv=none; d=zohomail.com; s=zohoarc; b=CMb8xnVYqT7LIruVcGVWaNMpZSHMYKcFTs/SuKk8U+JXXfqHxMKFV4AyVCgDc0hhq5dQw7RNn3qVykm2dZDOPfiMYkYRfYrLwdvfjME1AHtHe4aFQZ3Z5t2+DEsOy142QH4pqUcW8tKDlHGfDBNhQ5rLlUoY/4Div7IborxnyRw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1661292455; 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=+TkWIdFQsuVrBlz1iMZEZBv2Eng982tGzQv+UxtokKc=; b=KVjrPKReU493STDJIDQGeM3bI/9q3qeHlG4s1Drrnv7I2vxDxGeIdCoFLI+bNHUa4WiFwPfP0NMG+WauFJlLWNVGavBKG9xjZyRQ8dnjBEauydX//sBVtg3TN3Cc315lBeyL50uK6es2cbKoIGoTWttgbRc4ZUr8jVp9itcLluM= 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 1661292455718898.5782251037408; Tue, 23 Aug 2022 15:07:35 -0700 (PDT) Received: from localhost ([::1]:38380 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oQc3Z-0002ac-Tb for importer@patchew.org; Tue, 23 Aug 2022 18:07:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42486) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oQc1u-0008FI-Fz for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:05:50 -0400 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]:40755) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oQc1s-0001Pj-SU for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:05:50 -0400 Received: by mail-pl1-x62e.google.com with SMTP id x23so14021543pll.7 for ; Tue, 23 Aug 2022 15:05:48 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:46f9:77b4:ec0a:c2d9]) by smtp.gmail.com with ESMTPSA id n12-20020a170902f60c00b0017292073839sm11020974plg.178.2022.08.23.15.05.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Aug 2022 15:05:47 -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=+TkWIdFQsuVrBlz1iMZEZBv2Eng982tGzQv+UxtokKc=; b=ogHPF1YDTP16bHxplKV5svr1jYj8fYHn+hG4xP/fCiq4yOaw1QIu0aOZb/PEJnTTue WX4YMDG2KBNzX3Rw01g3TWoUUttIyjzPBwQIA6Yq+UGYA6gtpxbEZaIhiq3JhMmIusyR biZduVRr1mYn7FDEnRansvK7bI/BuxCsPueBrzAXE/abPuPVLPttCqbzx0uL8ufoWnJG R/qvH5bSPjL/YFWlTbVQq5N9RD8hn5rcPQ7tFovJb8wZ+GurULJvCkdsNsJ4rXguOrhG x4Ab0CWGjCiMQpGokHwgbhVhWvabWRjeEs9XwGdSR8xjdgpCOpjq3xK0OwKt2FPdYyV7 wDGQ== 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=+TkWIdFQsuVrBlz1iMZEZBv2Eng982tGzQv+UxtokKc=; b=257goKBICq1caqAKwTyUtbRAaxHXifpz3dMhox+M3sgBD22Pp7i+ZN6G+rcaqKL/fC b997ikDbOlOKZr0mfUAn4c7l1qKCJko8o+h6osFzHBcMLciPLxoPvFMxHd+xaYvRUR6M rfEoRCplpHu0gjm8ZD4YXvCxe+t1HZg3X2Xa36BZorknqEWF7W2NYyeIGtkN6vP5k3b0 bL3jdia3RMwUrXEMxkcmfQTj9vob9sN8VFFWdH1ZTAgEQypp8HfRt6avn578ujufKDy0 Gn4u5TTq8Dr+uQK+xpA3ydRRSTUicaDaU1KTJ91sqXbeRonaTdcD+pX3KCPfv/lmpgIj qTzA== X-Gm-Message-State: ACgBeo2RdkyfEu3smmJhBy6inGTrGKQA7QgQBwdz1k6B6oa8Xw0EozWi 4MkEyMgF9uzU26Z1jHFxMXZS/LiOezQH1g== X-Google-Smtp-Source: AA6agR58us1e4TMsBTDavrkqtrIgJ9s5L5t61zpxBT7sVrG4AdhEXM+xZTUi6wytm3ykmJY4xlnj4w== X-Received: by 2002:a17:902:e5c6:b0:16e:f3b6:ddb5 with SMTP id u6-20020a170902e5c600b0016ef3b6ddb5mr25993952plf.122.1661292347586; Tue, 23 Aug 2022 15:05:47 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: iii@linux.ibm.com, laurent@vivier.eu, alex.bennee@linaro.org Subject: [PATCH v7 02/20] linux-user/hppa: Allocate page zero as a commpage Date: Tue, 23 Aug 2022 15:05:24 -0700 Message-Id: <20220823220542.1993395-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220823220542.1993395-1-richard.henderson@linaro.org> References: <20220823220542.1993395-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: 1661292456904100001 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. Acked-by: Ilya Leoshkevich Tested-by: Ilya Leoshkevich Signed-off-by: Richard Henderson --- 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 Fri May 10 14:31:55 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=1661292659; cv=none; d=zohomail.com; s=zohoarc; b=Ki4sA3R1F3A2wdAh/61PHIdVvTBSr1BESMx6wQteLF37GTBLactqD5in/f3XLsRvX4etFiG4ybaH+SgAad84mQNKKU2f7HWvaqhD1AK1NgxVw8h/nb5zpOlGa2nNieJt670bHRqZTH/amu12ibZzL0Viocoqvbbk9/QcCgFpB5Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1661292659; 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=nZZ45pMxOHvR/MX8ViZjTrfSqbkn36lcVu6HChiZ8OQ=; b=aqffUY6WWsZVAvTwuXWzVkBwfzYEGvTKneGvkb2NQRChw4rbgpIBj4fgWHHhtHyA51qWZIH++Uiw772YJAlFy2QTSyNNzIE2T4agS2SEi3qpmOjuj2TurwypRbC7b8fY3/yGsAplnn2K1NMDOALR1Od3OmqdC+Ik6fePMOGQrpU= 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 16612926597211015.7357275243913; Tue, 23 Aug 2022 15:10:59 -0700 (PDT) Received: from localhost ([::1]:37380 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oQc6s-0008NG-Nc for importer@patchew.org; Tue, 23 Aug 2022 18:10:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42488) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oQc1v-0008Gr-LU for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:05:51 -0400 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]:55939) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oQc1u-0001Pu-3n for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:05:51 -0400 Received: by mail-pj1-x102a.google.com with SMTP id pm13so6323479pjb.5 for ; Tue, 23 Aug 2022 15:05:49 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:46f9:77b4:ec0a:c2d9]) by smtp.gmail.com with ESMTPSA id n12-20020a170902f60c00b0017292073839sm11020974plg.178.2022.08.23.15.05.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Aug 2022 15:05:48 -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=nZZ45pMxOHvR/MX8ViZjTrfSqbkn36lcVu6HChiZ8OQ=; b=cChtaknjKhnoPvTgrP8fOhPUSokcE98dVPDkCCRWU9exQL0UcbmsGMeJxX5v832Inx +NqyMQ+7rVLEHDsZcBxjlJ2UNkMvlH1L3/21Fj9IBe/LFQIu3c3IxIIHuGNkxLi46aFn 1FDhcJo+Ge+ixOLjKpXOJoOdrDofOpOK8BLyq7owUnTRYHw4klTGjjB1d3IHVRljxZzI Z3TrfM6I7bCjuUQBj4KWDAmfFutAj8SnUiyNuNp15gpkQFonildRLi3L6Ykn7ZbCqmpp CJN6nLm5snm7MxcH4KZNub4smasXkHPX4bYVn5lb2bSkwzssM4d1/lIUtiD+XDGT028z aBrw== 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=nZZ45pMxOHvR/MX8ViZjTrfSqbkn36lcVu6HChiZ8OQ=; b=G+GEM//Xqdx0GeOR7z5otxBREP3/kaRvKX/14NRCH52KxvNpcTEfTMx6066WA/c5wr UInDdWQX6FSAcyBHhGtLhRXmv9y1vpC1l+KPrufSey7E/3ZeSCdocOwtW4bPjFx8YyiL 1GRp89sRdf9vDHrSG9M6QNi+EJ7twZuyh4dm1T5flFkdncTzVhCLoq8Tm7prQRnYOPjc Il9D4dS+0dp44ANmr+is/4LepSSfX9gUYDR/rpsk55yG5A89K6T1UNXWxAz4bIXwyvP/ xKTarimir1+nWyOHXRZSkgogYcS+qc97dHET6YoDYDQ2Q7+VgAGXvtaTlE39AYXl4JJ8 hG7A== X-Gm-Message-State: ACgBeo0ZCvM1wQI623u6Ofdav+zZUluDIpI7XbKmnbHo31HdVPRrm1il Qt5ZTvnV4y9tjfS15ETtYFEi8HPwXYMHaQ== X-Google-Smtp-Source: AA6agR6JUXHvsGyje5Iro+L9t5AE24dSpDmLaD0dFmlVgROwPzvpxVNzs+HzY1hUE77sLRMOsrOFMg== X-Received: by 2002:a17:90a:6707:b0:1fb:6461:695d with SMTP id n7-20020a17090a670700b001fb6461695dmr4786824pjj.158.1661292348583; Tue, 23 Aug 2022 15:05:48 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: iii@linux.ibm.com, laurent@vivier.eu, alex.bennee@linaro.org Subject: [PATCH v7 03/20] linux-user/x86_64: Allocate vsyscall page as a commpage Date: Tue, 23 Aug 2022 15:05:25 -0700 Message-Id: <20220823220542.1993395-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220823220542.1993395-1-richard.henderson@linaro.org> References: <20220823220542.1993395-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: 1661292659985100001 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. Acked-by: Ilya Leoshkevich Tested-by: Ilya Leoshkevich Signed-off-by: Richard Henderson --- 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 Fri May 10 14:31:55 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=1661292659; cv=none; d=zohomail.com; s=zohoarc; b=YH2WtRyTe9bT4prFFkDMCP5ISHtC2Zc4JcMxduUYTCEBwSJssPy/LsK2MSHv1swy3YK+Nmngzo9nRWf2mIpbHIYvfanzOojGm30uLMAEMNigoEfH0hKcL1dhtO8gRi5DhHDc2DIAxx8wJoThJF9vgNe8VOaCiDPc8MsaecZAr9I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1661292659; 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=rGKQMWIS6WhWNLXWFYWI0ihkVZKbHQO46kskGqp/pqA=; b=ZvxK1eJ6HNcV3ojkDeM5Bs4FBj2yIPp8VqrhHdkiAVr5OWPnMAW4kSo8JUAqaRrfw1Sq2wP2liZ6SiXUwt/apNH4pxFsyfhMU5BzkNJKvVMxWJoyQG3khuNXZEGodNl/MF+PofTn+QE6HW+30NtrgHN+SaoGZRUQuWirqSuzkg4= 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 1661292659070846.275419774273; Tue, 23 Aug 2022 15:10:59 -0700 (PDT) Received: from localhost ([::1]:37378 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oQc6r-0008Jt-0N for importer@patchew.org; Tue, 23 Aug 2022 18:10:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42490) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oQc1w-0008I2-A7 for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:05:52 -0400 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]:51761) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oQc1u-0001Pe-EL for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:05:51 -0400 Received: by mail-pj1-x1036.google.com with SMTP id e19so14035593pju.1 for ; Tue, 23 Aug 2022 15:05:50 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:46f9:77b4:ec0a:c2d9]) by smtp.gmail.com with ESMTPSA id n12-20020a170902f60c00b0017292073839sm11020974plg.178.2022.08.23.15.05.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Aug 2022 15:05:49 -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=rGKQMWIS6WhWNLXWFYWI0ihkVZKbHQO46kskGqp/pqA=; b=L1v/vrRQ2zmpzQpVts7uzQli8RC+EjhgTTmXHeNR5X1A4Cdr6KZfrtXBfeuwBSkRBT wDJ7WTGT0odA+gm1vf6T4Qc86hmT7wFnw7aNBaKhfIkXyEAgjBc6mwx9luWH1th0Uavw 12gLeKXRDrJAxb7xTvydVBcALUfPuThpKc08xeZTNAMpLFPUS0qdY0/ZTTanGgTK/rTq hHv0Jyewc0/f1zEseGoFfr0jG129ejetUttug4z8Zud7rDUDed/WbvZ5e6qbFd63wGbm Tx/zm09JkqXCYiLnZPGgNVH9pALrtBoiZx5H19GA7CriBsLttu7ulxu2dCBAlN6DDXDO eToQ== 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=rGKQMWIS6WhWNLXWFYWI0ihkVZKbHQO46kskGqp/pqA=; b=NDkwU1QUcAq9qU8wdKoVqFhVNeXGSPxznoVtKG4fuaxHzaZFUm99AhUxWPPDdvp4tn 4+os5DkaLRieu03puaFM5dvIxm8Y+49Ph3Ql0HDPtcbeoX2H74cPhawMqGa+VwbDXow/ WJo+MVQmLFMBvv4/gCDu2Yi66BbkQCq86nUat1Pl1TJuthfwYKt7L/n17xzMfhstN6cG 8gaOyp1nt3qIpQKK2vQEg8SeYgEdWg/hEpccobpce7Ykd0UUSrx9YWWFC0O7d16SgevJ cROi8FkH69TUBXZx1ZGzusqlOpHqgxEGqlTIa7Mtu/HQ6wehjtr3Aeua1PGa3ReJXMr+ CMaA== X-Gm-Message-State: ACgBeo0Zitr0W8nNk3svU87E4sa3o5miXP5s+llkQtnIqi4+nvunev7R QtnS9gzDks/J1OuUPnA2FJsZGnZN3smlrQ== X-Google-Smtp-Source: AA6agR4uJq02peMxWsX2XAJCLkZitrvf33xPIsy8uxyjor6Tq6mgYYOSMo6WaeIBm2nQlSAeQ5T40Q== X-Received: by 2002:a17:90b:3e8d:b0:1fa:facf:672f with SMTP id rj13-20020a17090b3e8d00b001fafacf672fmr5252724pjb.0.1661292349656; Tue, 23 Aug 2022 15:05:49 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: iii@linux.ibm.com, laurent@vivier.eu, alex.bennee@linaro.org Subject: [PATCH v7 04/20] linux-user: Honor PT_GNU_STACK Date: Tue, 23 Aug 2022 15:05:26 -0700 Message-Id: <20220823220542.1993395-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220823220542.1993395-1-richard.henderson@linaro.org> References: <20220823220542.1993395-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::1036; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1036.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: 1661292660009100002 Content-Type: text/plain; charset="utf-8" Map the stack executable if required by default or on demand. Acked-by: Ilya Leoshkevich Tested-by: Ilya Leoshkevich Signed-off-by: Richard Henderson --- 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 Fri May 10 14:31:55 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=1661293073; cv=none; d=zohomail.com; s=zohoarc; b=iOl2lob/48dmkrc4asQ/3WNXffaOY7wLyjwGV/dFT3Ld+aLgYBlgypRLZNvp8/Sh/U0xyZZliDWD/R/8sSZahV8QwOhRMhj+mryDMnj5l8ILihFmnxhb32oHGiCzsRjvq4BYQgBO5Ze158PgkIKvMYQE5UYGUmkFo61X4kmOBV0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1661293073; 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=nDHYjjsONhEWjuPybC3ywJ8JWkWkunk0DTCw/KXNzikHgfMY97ESvFOzlanm2UWa3dnOrPFVvr6HbpQvegjHtkaaju5GiTR/ZV9VYuKBWxlEIKKngBRPdpMLjX062/DXArI6R8JMNv5UoawNx3BVzFo0Apt8dz+ENAz2/3WM8Y4= 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 1661293073485473.99497816069777; Tue, 23 Aug 2022 15:17:53 -0700 (PDT) Received: from localhost ([::1]:57736 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oQcDX-0002yf-8I for importer@patchew.org; Tue, 23 Aug 2022 18:17:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50578) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oQc22-0008Tu-Ul for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:05:58 -0400 Received: from mail-pf1-x42f.google.com ([2607:f8b0:4864:20::42f]:46025) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oQc1w-0001QH-TX for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:05:58 -0400 Received: by mail-pf1-x42f.google.com with SMTP id z187so14704396pfb.12 for ; Tue, 23 Aug 2022 15:05:51 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:46f9:77b4:ec0a:c2d9]) by smtp.gmail.com with ESMTPSA id n12-20020a170902f60c00b0017292073839sm11020974plg.178.2022.08.23.15.05.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Aug 2022 15:05:50 -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=nNnzBMcqqEqesYv5MBMcs7ZKhGfaeIAbI0u0D80LNn/A2awibI2/VAbw6gjV5KJFVW +iNzcrShUnqQ4L1RiDceryFMYGnaou/D0W2qgZG0wwH7BoBdaLLBJ3plngqfr2xt3A7V Iy1TeFTu+IMtC4l12yMntT6I7RHvYcDLLecSG/06hR599qTta0Zui6xNyp1OPy4gCvCQ tQQcu1uZoo5sCW++oxzNdHPIQtTjp9syLccgano/HO9xoZEQYdNJalfxXU5uw4D2tUZg 6hq4l7/HpPYoqewDtg+oVRUN37WtylzKvJC3PDWNa0zgOMKP5WgCGyK9YgZSoZMP9AUh QWzw== 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=cCPS+6jvIWNLLzOp27AdnMK0na7y0ROAF2wVjeZMnqlmGkiBP1EqXKEfBqGw80GLdQ yVbb+tLZ3R31vuEMgmo7eLAIIeGsaqGtbq0OYg7vMN/Ykv8Skx+mYght8kEu3hx5kwsl iYW65rcMalGx2dHxzltDax8O4qhnRwp89tjyZHYaqZ8Hm6ceqti0/Pn9d7pBaktlROHy H0oLKYWNA8J5TqB8NxCSyscY0Po80tAkPZCn8d5MeOX/qgFLgkQVRjrVo6643DWfht/B nrQdeg1/+D8ZmTzs9AiEtYWXhCqMPAJXIfm26HuAdmcfOJzPAkSzWrfzk39oCKuPAYvg ItsA== X-Gm-Message-State: ACgBeo1IPapq5o1Mm2dXJ0EHKtpZjMApT+w782vPqP7Nw1heynGC6uIq HP9jux+peoidTmarHmwPlH4dspwQqK+Wmg== X-Google-Smtp-Source: AA6agR7UR5ePI4qFwHkqRr4drMFyFj6U2KZGV9Pq1fzZ3/dnQ6DdG1Sp4JZScfRSLJ9ZTO56JJOaSw== X-Received: by 2002:a05:6a00:1a0c:b0:528:6baa:a2e3 with SMTP id g12-20020a056a001a0c00b005286baaa2e3mr27201936pfv.27.1661292350500; Tue, 23 Aug 2022 15:05:50 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: iii@linux.ibm.com, laurent@vivier.eu, alex.bennee@linaro.org Subject: [PATCH v7 05/20] linux-user: Clear translations and tb_jmp_cache on mprotect() Date: Tue, 23 Aug 2022 15:05:27 -0700 Message-Id: <20220823220542.1993395-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220823220542.1993395-1-richard.henderson@linaro.org> References: <20220823220542.1993395-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, 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: 1661293075103100001 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 --- 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 Fri May 10 14:31:55 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=1661292817; cv=none; d=zohomail.com; s=zohoarc; b=Zl3P3ax7fowRosUoTyeH8zFt78fvTAwJ6leRnx/QQ6DUfH5JArQIDVcH11xQdQexGVcgycnqvcQ/cLC1zoGpAln4gVArd/+cqJFgj8JAPmSAsT3tbWfRHA1WXb0FEiBCLvG+spvnip91qR8qIwBCoNg21nFa7VxGryMh8WM1bec= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1661292817; 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=HHNtzSSJtX30aB1753TWle01U0aOKhRaC897K6yvm6M=; b=EzKCleE2vBdlxX2h9K3yRYeTQqQOH9EfAgtb9MlJ0QvIERIRsFWoUBoawbRO65EYVRYBQpMpnAM8bwm/4CSBlAterdpXA9qeEDAT40vrZhSO76GIgI2KJxAP0obTihx/R8gu8Q856MPXu2zQVA/u3MRW6MCI9WaeTN8BGaYe1Sw= 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 1661292817802328.29022763838475; Tue, 23 Aug 2022 15:13:37 -0700 (PDT) Received: from localhost ([::1]:32814 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oQc9P-0005eU-Fk for importer@patchew.org; Tue, 23 Aug 2022 18:13:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42492) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oQc1z-0008MU-DF for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:05:55 -0400 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]:43928) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oQc1x-0001QS-S6 for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:05:55 -0400 Received: by mail-pl1-x631.google.com with SMTP id 20so14013018plo.10 for ; Tue, 23 Aug 2022 15:05:53 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:46f9:77b4:ec0a:c2d9]) by smtp.gmail.com with ESMTPSA id n12-20020a170902f60c00b0017292073839sm11020974plg.178.2022.08.23.15.05.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Aug 2022 15:05:51 -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=HHNtzSSJtX30aB1753TWle01U0aOKhRaC897K6yvm6M=; b=En4LPLesOggHoQwnB9qGRYYiS0yNvrYUHdD3JufEjSwTyHMQpkAd1kwJPTBBIVQeVX YGt+uydHtoNIBRr4sOhp6eFNN4Inh/Y6Q/WE3+/6KnighuMp9FkrZkqu+foykEWgidSY 8Mg+yia4yyKmcM/j6KDtyThUHvt279t8STLZrUy8PJXasgVzdBLRHlZMGiGbqn3oF4wF EE60OyDGu3QMZl22jId6lmz+QgGzrmgF3y/RUNo2lt/9hD3f1z+ASOPL+Ne3N4JO2gev +02CY2iyd9r755lCyuVZy9uENNk5/n6TMPxwzVZq7yYEvCBnQiAxqsHXXxIxVMhjxq1h 6HNg== 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=HHNtzSSJtX30aB1753TWle01U0aOKhRaC897K6yvm6M=; b=5piTSELva9nuvVISdsaYjFMs1FBo3aUxt62ZGIYQpszRHVKRbqgb/gWYlV/KzrWWJp VrDfAa5PMpFnf5o+r+4uXl0ylN+HNPmzeEOCf+aRV2ySQVz78pRsvqPJXkvI8RevyYFH e7YDkj6Eux53quOy4+7SChGf8P+PbeaqiNR9sn+YVvAVgBtu0IC2YfZEhONjzWZuZCN0 dVMx3aBJv0fMSbEPdg3M7thYi8dQ+3J26kXMKK7MThNYhqQtPUu0/zr0c7rYUnRkU7VN Dtz3nhLbzX/B8q1WWMiuQQdfCoCTgVLnBECiaVoUdgsuGodHvi5NY/N+7rLIi+vBll6m VecA== X-Gm-Message-State: ACgBeo0mTv7R1uR84SlmBuFjBwHr67xv6MXgn8qY5j1sR1lDHUjT2UhO VjHm2EJZfSnFR5WcUeI7iaUGI+s6TiV+JQ== X-Google-Smtp-Source: AA6agR7S+nhMuw5CjpX/1kcDTktR3C6E/vHS/FFD/s1hf047D8vj1mI+nF2d5pYwkHGvCfwivJDyxA== X-Received: by 2002:a17:903:22d1:b0:172:f11f:de35 with SMTP id y17-20020a17090322d100b00172f11fde35mr9030208plg.150.1661292351512; Tue, 23 Aug 2022 15:05:51 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: iii@linux.ibm.com, laurent@vivier.eu, alex.bennee@linaro.org Subject: [PATCH v7 06/20] tests/tcg/i386: Move smc_code2 to an executable section Date: Tue, 23 Aug 2022 15:05:28 -0700 Message-Id: <20220823220542.1993395-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220823220542.1993395-1-richard.henderson@linaro.org> References: <20220823220542.1993395-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: 1661292818891100002 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. Acked-by: Ilya Leoshkevich Tested-by: Ilya Leoshkevich Signed-off-by: Richard Henderson --- 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 Fri May 10 14:31:55 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=1661292817; cv=none; d=zohomail.com; s=zohoarc; b=DVo1fipZOOHPYfZF7+Etr+xdm3LV/lHVW1V+xYRu18+8lFCq/DOO5j858A7idbUoefAlGc/ECW+mHFAFdEcVFLCujv85HQ0awDCd4FK3VdTxVLuRO60UXSvzpPsG3Iq4GnnRX9TfNGVl7W9tEQAo9gBfKhMDCQngtLVRHiCf/Nk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1661292817; 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=OsbFR6exiIugNlN/OA1NiX9KQk6dg8u5+nqhU943Djk=; b=j1CUDO1WX4GkrcfSDh4Gqyqt1qvCNVtUyhA5b76GlmTgGye/I8+aWaQTHAj1sh9O+F6gCUtSOjUQNx/0tCL3j/8xRqxF1bVCR1j+gCSu2qtud7At4T/pxz7JRebGSD+TJKvuvfsBP+tXfLvziTpcwa8acgfu8DHOC+TnMWQ3jHo= 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 1661292817672757.9088368052354; Tue, 23 Aug 2022 15:13:37 -0700 (PDT) Received: from localhost ([::1]:32812 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oQc9P-0005ch-5l for importer@patchew.org; Tue, 23 Aug 2022 18:13:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50574) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oQc20-0008PL-Nq for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:05:56 -0400 Received: from mail-pg1-x529.google.com ([2607:f8b0:4864:20::529]:40868) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oQc1z-0001Qa-5L for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:05:56 -0400 Received: by mail-pg1-x529.google.com with SMTP id w13so8330558pgq.7 for ; Tue, 23 Aug 2022 15:05:54 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:46f9:77b4:ec0a:c2d9]) by smtp.gmail.com with ESMTPSA id n12-20020a170902f60c00b0017292073839sm11020974plg.178.2022.08.23.15.05.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Aug 2022 15:05:51 -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=OsbFR6exiIugNlN/OA1NiX9KQk6dg8u5+nqhU943Djk=; b=yGIKUWsKPQ3TTiar5jk9exsCX38lMJBYtzHYv9TLHMcvTR92YDmxRrGf7Zu26j/tQP bfHmR1bs3MccPRow5DXJikZhqSykOZVZanJEyPpXANINrh37xyV96n0+QLow5m8G5pJe mloWsq+YIIxqnfVfzUVxCk23coNwk4YYUrJT2CCNRgx1HzVAh0CLsrq7MN+gs9FiCaMh hKuJ7GOLb5w5fi/yVph6AKjE0hL1MmXA+kNizcpTcYXvVkJwEZtpaQYcAqsPeIgKvk/K 1KjdObiGaYyinHcO/8P3GmTFO2kf2Dfv0u0qPn4OYfifD6RZm0MKLMkBvQzL2+L9ne80 NQSQ== 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=OsbFR6exiIugNlN/OA1NiX9KQk6dg8u5+nqhU943Djk=; b=wP5YZykq80P5i1eInbRWpW4TTbvQMPvijpPG7YDo4zg9unf9J+IAygZlmMzsfDAtHD 5giIEF/3iqsb0YijKxfNTNlyyaaVaasNUOKvF46/+uXs/gcpYf3LPE6rni6Jd7O16YZk +FtN8D6Lw/eq7oLNWIGOef7XFg/b19g5nItRkzoGHphR1LTTyiEaQmMf3kBX803y7eu2 81f2vUeUSR3Y7WmeUU+deC2kqpiJjKTqr1RFBRx70WJAGl78LC0huMNyON+lk06CajQX qQ/YtGhSWCvjPfYpFimNTGKAjHhWckOjhweh4rpJ97d8C436222HlZqaftzJipN32ZPO ajJA== X-Gm-Message-State: ACgBeo1eQ+XRT+1yYUJUfD6SAXX2c7qZMUSC/5vz9Ks0sInXjayQCtr9 fag2FqYd56UmEGgHGgDvs3WUeWnwUcJ1VQ== X-Google-Smtp-Source: AA6agR5U96VV5dWRduNoLhSJ5pVi9YnB5slyqfay/zs6qpsxZY0rjdhIn7uDT1hHLuk5+FBLInOpIw== X-Received: by 2002:a05:6a00:1947:b0:536:6730:7d33 with SMTP id s7-20020a056a00194700b0053667307d33mr15358415pfk.10.1661292352824; Tue, 23 Aug 2022 15:05:52 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: iii@linux.ibm.com, laurent@vivier.eu, alex.bennee@linaro.org, Alistair Francis Subject: [PATCH v7 07/20] accel/tcg: Introduce is_same_page() Date: Tue, 23 Aug 2022 15:05:29 -0700 Message-Id: <20220823220542.1993395-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220823220542.1993395-1-richard.henderson@linaro.org> References: <20220823220542.1993395-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::529; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x529.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: 1661292818890100001 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. Reviewed-by: Alistair Francis 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 --- 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 Fri May 10 14:31:55 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=1661292664; cv=none; d=zohomail.com; s=zohoarc; b=fJSpoK7TunLGqds+fQED/KEYf5p07nAGY+K2pOU2NrNBbRxFOZbYTJsHN9dj39xA+WB7119zyCeQHNlxtnoPmgbBMp2FzY5IXyEQKwQtuQYSWDtWIQrcIQ2NKeKJfWSC+NZNPKERqdkodlDhL0Co1tTMiY5v131uxPVhA4m4R/w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1661292664; 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=0BJKKX794+u71rVuTIcDWaChSDHlbW9A5LJBctnpTGM=; b=DGFRBXX7E14lCZqcU7bicyNeKVW9ZBrI1RcGmQWvrMZBdSHmT7On0JtV08LEEkCGmvoQ6LfHBnxEJOZ+I0DOuV7siNPUQVY5RN0pXSwVsCBh7452oqBa+vzQ/1pI7O/1K9k1H+uu/wx+DlKQqrrYA9nZuihe2ezeCrYq3sNZ3JQ= 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 1661292664090900.8397004278056; Tue, 23 Aug 2022 15:11:04 -0700 (PDT) Received: from localhost ([::1]:41326 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oQc6x-0000AK-2k for importer@patchew.org; Tue, 23 Aug 2022 18:11:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50580) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oQc23-0008Ur-8N for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:05:59 -0400 Received: from mail-pj1-x102e.google.com ([2607:f8b0:4864:20::102e]:53796) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oQc1z-0001Qf-PE for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:05:58 -0400 Received: by mail-pj1-x102e.google.com with SMTP id m15so7195613pjj.3 for ; Tue, 23 Aug 2022 15:05:55 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:46f9:77b4:ec0a:c2d9]) by smtp.gmail.com with ESMTPSA id n12-20020a170902f60c00b0017292073839sm11020974plg.178.2022.08.23.15.05.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Aug 2022 15:05:53 -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=0BJKKX794+u71rVuTIcDWaChSDHlbW9A5LJBctnpTGM=; b=Ykbt7e8cHY80y0kCc8EqMB7111RllaIrbpg0dNgode//zbQ1le0cX+MTGBoKLd4CGG jFYVCiQpDGu1Kp8HKfXgU+YyQ+sHZVHY/ruOMnU8OQD6T0PE8JrbyhtL5uGVTr0GJfj4 G2xx3DWoG/UB77CyGczv+Jc2XwHEet3ZSSbkoVF6XD86zg4zcrUJGdrYwHKHVZ4TXmxW uV+zr0UcosHphxHcoi5CFdNjFfnErsXe09UNLT0cDT0w5zcvRvnBra5dbxJiocoMKfzD KTdUZ/Noe7DPK9+cZXN+JZb8td0MYLMuemCiSeK30W7ieYiV3Kok0+g3XIivU0+/0etY h5Gg== 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=0BJKKX794+u71rVuTIcDWaChSDHlbW9A5LJBctnpTGM=; b=gn8DtjFBRCtaMrPC8PFN+I6BqJvumaswKfbn2h2ffRAMmXPxrtxbL8pn1gLKAG9ir4 E4zIJjfPU3PvVT3zAmrtjFBhmMW8diWb/FGN8rzwMukP6N8vf6BpbzbbtUWJG8nKH62Z THHXsnSyNjkvuy1NcwqpkOgjlKpysEvvlPIGpflE60Hw0odkZg5Vj1pLpc37X7laHANj OgOXNCj7ES6myJRvhYYoqMI0yR+yo5c1Nq7rDOZp9zWB+VxeJStw/ArnRXVhfDefd7ZW LPgG7VvjbYIC6jioOZVa8I3Hrd7EmO5t7rJJXPzNJPDjCS9DR4ljemblPFLhc3I0yFRF To+w== X-Gm-Message-State: ACgBeo1p7oMPXvmZTJ9/MlppfDf6KeesX0RwNZhdPeS/eebK2QZcsF5j qZ4rKO/xj9NNKPCij91sDJPe0FFbq+5cHw== X-Google-Smtp-Source: AA6agR6GK4wmWQByLm8Otn2pomrcKJZc6S9391ldFtep2/nRHO96Ode3uTQWQLB2zBAsd+0RYayvgg== X-Received: by 2002:a17:90a:19d:b0:1f7:2b1a:947a with SMTP id 29-20020a17090a019d00b001f72b1a947amr5298230pjc.118.1661292354175; Tue, 23 Aug 2022 15:05:54 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: iii@linux.ibm.com, laurent@vivier.eu, alex.bennee@linaro.org, Alistair Francis Subject: [PATCH v7 08/20] accel/tcg: Properly implement get_page_addr_code for user-only Date: Tue, 23 Aug 2022 15:05:30 -0700 Message-Id: <20220823220542.1993395-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220823220542.1993395-1-richard.henderson@linaro.org> References: <20220823220542.1993395-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::102e; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102e.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: 1661292666045100001 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. Acked-by: Ilya Leoshkevich Tested-by: Ilya Leoshkevich Acked-by: Alistair Francis Signed-off-by: Richard Henderson --- 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..cd232967e6 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, false, 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 Fri May 10 14:31:55 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=1661292461; cv=none; d=zohomail.com; s=zohoarc; b=KRl86cX2QnDtTMfUS7a5cjDdS+x/tIIdbbiPwz6spov5x4yZbWS5V9AkYLb2P5sK3dXN2kPbQkDPVtrsoATD8DLYQo1+rLLaWzSjn04GPRIoHNOfoXsBxSBA6cV7FYLAPTLV/yQwgzCehrgYiKeKRG2atDbnypCSGceUYztUwR0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1661292461; 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=+3sJUNEuXXzy90CNiiHvdm0roersCTY8EGai5wP5MQU=; b=klxj1jgCWbdUFnN+QctilJ9k2GiSGW99OcifX7De79GzWAB7pEA4Xc9QVR5qkwh3MEgwZwTCQyJNbG6U/128eMGqPWmUKiWu5Z6VD6v1wgITLmTBBBDrFBvh9OvJ+OO9Ys3zVIPDz+dx44SxULJZMvx7QP95ylGf5ZzGs1TWPVA= 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 1661292461261897.8315897989836; Tue, 23 Aug 2022 15:07:41 -0700 (PDT) Received: from localhost ([::1]:38388 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oQc3g-0002xT-8G for importer@patchew.org; Tue, 23 Aug 2022 18:07:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50582) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oQc23-0008Uu-8P for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:05:59 -0400 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]:44916) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oQc21-0001Qt-4G for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:05:58 -0400 Received: by mail-pj1-x1036.google.com with SMTP id r15-20020a17090a1bcf00b001fabf42a11cso16043053pjr.3 for ; Tue, 23 Aug 2022 15:05:56 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:46f9:77b4:ec0a:c2d9]) by smtp.gmail.com with ESMTPSA id n12-20020a170902f60c00b0017292073839sm11020974plg.178.2022.08.23.15.05.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Aug 2022 15:05:54 -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=+3sJUNEuXXzy90CNiiHvdm0roersCTY8EGai5wP5MQU=; b=zamzqE+XMJqli4/hrVaHxdLpiYKin15Ybh5CUQozwHWGhsgIwIT5NHp4CPru1YjUln YiBWoldxh6ty6cMmD/PHUxhg+CkmHMyG2I9j5pSJsBoqtI9bDcDcx4O2QmBtcJGIiuOC grvsK3/mYUL4qwo2bLp9L13xLpYDYgo5aWZ1QgqhKlIuO3OhVU1iJ7AQrtkjj7ySWWvI j1b0ZAXup/FulVsCxFXadkbLmXXCuroYcQOB5ibHvOUGtuEmllt0Ew5ZMJiLmKflnprE 7J6nByv00shb8tldW5tMTUnmkKHOugu7rmN/LqEXM78aUEpIVSv69Ds37Ffvv+afaz/P O9kQ== 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=+3sJUNEuXXzy90CNiiHvdm0roersCTY8EGai5wP5MQU=; b=oo0gChKFYxfNp/tHng21Pc+pv75dkKfv7hUVNlMqGcLql56MYDg4dJ7Wwu5VnBgNOC jHc6fl50T8PM6Z+3YYD2OgB+ZINw81WwPtFmMidoogZhLbAe/SLbl3BqMA03mCgenlCG YX15YcxQXnaU8sF70fS4Ok5byZetkHfeFCmAbZ1ikinfe8TGqyuEh0hF4wLAcgO6Z55q ERsQy+ipbp2U1b0hI38Y1uA2E/Keu/1fZlb99DVy3SwBZavV+/lS685QgSQUi0UjhGg+ SsIXmmRnN5BZlRDZ5k6UBRjqIz65PzVrd4wMwvYYU0ntXK/YZJ2GZx8q4GhCQTTBK3Fu tREg== X-Gm-Message-State: ACgBeo1ABAiTlE6JKL9aFCN+NQhzwt+oLf5scPlviLrvZmQBrQpZUiKj GHChT8T1izXWAbzKTrWKX/sZ+T/Hv29ctQ== X-Google-Smtp-Source: AA6agR4Agsxwqj+v/I6eJ/2me7lZ8Q+LdA9tUIYmgnK5/Axor0HMvMhxaOIaVggbGfM+tbMHJpFs6w== X-Received: by 2002:a17:90b:3b89:b0:1fb:765c:8450 with SMTP id pc9-20020a17090b3b8900b001fb765c8450mr2114325pjb.205.1661292355539; Tue, 23 Aug 2022 15:05:55 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: iii@linux.ibm.com, laurent@vivier.eu, alex.bennee@linaro.org, Alistair Francis Subject: [PATCH v7 09/20] accel/tcg: Unlock mmap_lock after longjmp Date: Tue, 23 Aug 2022 15:05:31 -0700 Message-Id: <20220823220542.1993395-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220823220542.1993395-1-richard.henderson@linaro.org> References: <20220823220542.1993395-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::1036; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1036.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: 1661292462604100003 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. Acked-by: Alistair Francis Acked-by: Ilya Leoshkevich Tested-by: Ilya Leoshkevich Signed-off-by: Richard Henderson --- 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 cd232967e6..a27d814f19 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 Fri May 10 14:31:55 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=1661292822; cv=none; d=zohomail.com; s=zohoarc; b=IyWHQNjMFWonSOaN9tImhJSyopkCKX+wh8J5eClJ/MIJPdL/wSO6NtFhJVHh8oVydPXS57Dw+b+Zaw2JioZPWDnxeRIU8ZsDt6o8q22gG/8fnPi+T/hAxZp58qo2szFr1x3GAaBg1+Le9PGGJMhway/pQBj7Z9A4Fc7J6/ZzdLw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1661292822; 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=zG39VovyIZ/PsCMFUhH4j2iQCKj21MZ5YeRW0rCmN4k=; b=DVMqpSpWCvLI9EyPkImLT2S7wRdlch/25cEaLb6jq2MNl0wFP9zvvoT840rjd0m8xmW9GdZJRa6HZpgTMgZMRrO4rl283pYWk790Y03rYdPjyP95/o0XSgKPW4fAXHZGiGCxkleyLnQ5eoG7+O4gg1ljI2r9B00dyToXWx3Hh0A= 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 1661292822028756.5450001579462; Tue, 23 Aug 2022 15:13:42 -0700 (PDT) Received: from localhost ([::1]:46748 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oQc9V-0005yV-24 for importer@patchew.org; Tue, 23 Aug 2022 18:13:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50586) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oQc24-00005l-Np for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:06:00 -0400 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]:42764) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oQc22-0001R5-Qv for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:06:00 -0400 Received: by mail-pj1-x102a.google.com with SMTP id s3-20020a17090a2f0300b001facfc6fdbcso15387453pjd.1 for ; Tue, 23 Aug 2022 15:05:57 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:46f9:77b4:ec0a:c2d9]) by smtp.gmail.com with ESMTPSA id n12-20020a170902f60c00b0017292073839sm11020974plg.178.2022.08.23.15.05.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Aug 2022 15:05:55 -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=zG39VovyIZ/PsCMFUhH4j2iQCKj21MZ5YeRW0rCmN4k=; b=PcZoUszIsAlyZIlFXHh9MmxDi5j81nkgQG40bead2FwhIc3CSa3hsub4h5oHEUvkNg 2I/YRGUblT8sJ4PRpddA7HixGMlpHgPHSgCB4jkANf6A0CTY0tr+zfeixvTOCgFsCPnt Ts/S5uvQGO1QX7qxNnYIcYHoGfzVfUE8Ooi3lVVXVN6aiTgvZsKWIfwh3qU5Umbo4sxm AMAbwXTFt1mBnrmOLgiDLMS2R83xz7vIm0bIBOyqHgkHWuZU5787dcRjeIppW7EnqImt UKR/jwM/BLputtmPil0UP4Ruh8NNq+dMwepgH6Tw5D34xP5l7Th2yI/uPxJ4sJivu3fp UYYQ== 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=zG39VovyIZ/PsCMFUhH4j2iQCKj21MZ5YeRW0rCmN4k=; b=ivxNgXtYvSffEZhI8lDIJ1/L1QARIrEwr9FfkJjeoR3ELj8o1Yc+wzTULQM0di4L9G vdsRWA0q6GWJfRhTJYkE6CI22A8z1z9hK92fPyUiAaJyS76YiF9kI0DrBN29fRay8uET Dhbj3GMfK1jte8Wr3Llq+Ed6Xeb4EK2F7lawcVeA+Dn6CeEabZ8i2UUipmSrBGMYQFdY +1rkFQI7fnHAV+wf9TDoO4gFa/FOAY41/o6Y0p93J4eFTtwLo3wwR+rYE6kKwg3Op/s7 nAx9kVzDUY50JO3NR36ZgAAt9TEitRmFR9nSxEwmGFxO0Kt2BRBA7neO47Sz362etUfN OI4w== X-Gm-Message-State: ACgBeo1SDIUrzOKK+FmKx0AWRjHKRtD/r0MxXWj+h44WPiVvuEuyD/4w iy1ButBwmwyivBnCAhShc23sq9wNQFATHw== X-Google-Smtp-Source: AA6agR5SEvdjFX1vWRzEzNNjsUMfhTyteFb56CnYLGKd7mviByPUITROFWU+vP17TlbZEoHp4O5rwA== X-Received: by 2002:a17:903:1cb:b0:173:1015:d004 with SMTP id e11-20020a17090301cb00b001731015d004mr1870498plh.165.1661292356481; Tue, 23 Aug 2022 15:05:56 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: iii@linux.ibm.com, laurent@vivier.eu, alex.bennee@linaro.org, Alistair Francis Subject: [PATCH v7 10/20] accel/tcg: Make tb_htable_lookup static Date: Tue, 23 Aug 2022 15:05:32 -0700 Message-Id: <20220823220542.1993395-11-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220823220542.1993395-1-richard.henderson@linaro.org> References: <20220823220542.1993395-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: 1661292822803100001 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. Reviewed-by: Alistair Francis Acked-by: Ilya Leoshkevich Tested-by: Ilya Leoshkevich Signed-off-by: Richard Henderson --- 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 Fri May 10 14:31:55 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=1661292694; cv=none; d=zohomail.com; s=zohoarc; b=QA2g1EDsVn45AD/1SOtupxCeUa4VIU07uc3eHlJqxyloXcJJAcKrFrbMSjKdoXwlAiSrilBedOt0sGXh7+ntMrgybqI00GfizlUuunQ4slnb4X3mKQ9EU7xITalTgBW9xYl2Nldk/KYe9XYqSFcbCBeu4XYkrIBfE+AgaChsOR4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1661292694; 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=R/p+r484m5PYDR84cT2Qqy34G8SbgJ7J/HJ5T0WBYxI=; b=MAAfgooObXq8vRM7zW2z4a7PaROT1MmCNkuKod1nUltbL2geTTPj7AmjK1HfU0DmwXPVAd1xBs8jatKMPATXhZ0gjclEs1NY4/WXGokHW+eAYxv4abckaROhqgFWE5prsRBQDPd8z3VkmqjBqZZgGMDwrCnYZznAkTjXGQ/yP1Y= 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 1661292694109895.2885217770975; Tue, 23 Aug 2022 15:11:34 -0700 (PDT) Received: from localhost ([::1]:35278 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oQc7Q-0001iV-37 for importer@patchew.org; Tue, 23 Aug 2022 18:11:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50588) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oQc26-00007Q-0a for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:06:02 -0400 Received: from mail-pj1-x1030.google.com ([2607:f8b0:4864:20::1030]:43911) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oQc23-0001R9-Aw for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:06:01 -0400 Received: by mail-pj1-x1030.google.com with SMTP id c13-20020a17090a4d0d00b001fb6921b42aso2840767pjg.2 for ; Tue, 23 Aug 2022 15:05:58 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:46f9:77b4:ec0a:c2d9]) by smtp.gmail.com with ESMTPSA id n12-20020a170902f60c00b0017292073839sm11020974plg.178.2022.08.23.15.05.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Aug 2022 15:05:56 -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=R/p+r484m5PYDR84cT2Qqy34G8SbgJ7J/HJ5T0WBYxI=; b=or0gIywj+8+/74uG/fqhZWvKvDpRAgaxjOUhgCoXqcBoL+ouhncoOTxsL1nsXcsPpX CsBpaqvpGJe6r/ZtpewzkavCuaNHAOtm45316CTqSsS6QIBqrX0KCxXhHZuts/iAfHE3 JsttW5ER1f+Mf3n7npIgwHLAayKLvr+309vmTWhdbFjuUtYsamKU9vH5bq3s6PxLNFIH newRxWQDSd7jy76xD4098bX/mgqp7uIiJxynIYDCC6hwZyPpaEGKXqyJnkHoCO8VVcP/ aEZlYXzdcDAN8SElyqpQKTDneUWE/nh5JY9O4Uhs8w/qWp3SOqQgEFibZk4PO/Dm+pwe YQhw== 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=R/p+r484m5PYDR84cT2Qqy34G8SbgJ7J/HJ5T0WBYxI=; b=GdukvUp+A5lU9boP5+mXTcgr1bxMwX0jdhNVOneuKBjUqG6caUJS3vZ7Z/LjZ+MHIg bZkIaCZtwi8pRZHjD0YetYhRzVEGHcbugEJeg/If5fvEZmP4PHWxAihrLBu5hAhcN3as oLdGoejgz1GcibRU6FPpHCm8PtwlguVN7CUlREFi54layjfJaH9Ut83/03YfuhjsUYdh rWa4OtK2GhAW/6jGXy2W9O+iLsJBW9OiH7irlrZ8yVkUwoL42yLd28pwEhXayY4V0KDa n6rhTAttbmJScy2CL4E/ZUzPma5IsghhXyOG+KhtfjjETsAkm4/8lZM/FYpxtX9kn9Kt x+tw== X-Gm-Message-State: ACgBeo36hFcsL15ieBMli7dj/EKhu8hz4gbSy3R/rXXq60kkA9gFVs38 sgxOCuA+ySZXWktzMAZgkGrG21TvMq0i7Q== X-Google-Smtp-Source: AA6agR7TnUaq5FMh+t4kd81EGxu2mQ4ljOzQpqau55stvzlpm21uwqVMgD6M13uZTG+7vuIVpK0xkw== X-Received: by 2002:a17:90a:bf05:b0:1fa:d8f9:5402 with SMTP id c5-20020a17090abf0500b001fad8f95402mr5087637pjs.197.1661292357911; Tue, 23 Aug 2022 15:05:57 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: iii@linux.ibm.com, laurent@vivier.eu, alex.bennee@linaro.org, Alistair Francis Subject: [PATCH v7 11/20] accel/tcg: Move qemu_ram_addr_from_host_nofail to physmem.c Date: Tue, 23 Aug 2022 15:05:33 -0700 Message-Id: <20220823220542.1993395-12-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220823220542.1993395-1-richard.henderson@linaro.org> References: <20220823220542.1993395-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::1030; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1030.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: 1661292696310100001 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. Reviewed-by: Alistair Francis Acked-by: Ilya Leoshkevich Tested-by: Ilya Leoshkevich Signed-off-by: Richard Henderson --- 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 Fri May 10 14:31:55 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=1661293078; cv=none; d=zohomail.com; s=zohoarc; b=VJAC26d2sGqHqSQllWSGSAuTh8L5hDsfKbuOhajrIISecXeRiAQPYHNDh1q6o7Sv8qT6ENmA3ceBCAbfgNUNrGSMhD992DTDIxlJa8E9DEqdExI8CNz+jqanbDaYQkpkfQsD249hgDcBxFK3/meofgETWnoALN8lw9+Oi938JaE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1661293078; 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=aenCwLhyHz+42ttancSjHI4JZk2Ya2FL+nx6M3jTwMg=; b=BmosS5ngyxOZtZr1V7bg2hJD17T31GLDnA+2eRIumrg8pDRhJH/TGnQzYvjEvoFjxMoZi31Ve8vbRx5PDExlr63Oa41V+AZ4AjpWUqfI3Y1BqMsAnKTbZFjjjRKrwk6rZaWY5DlTvkoYhN6Et61/aiN15tlzvKPUnnLfXUQ9SWk= 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 1661293078058783.5777520488012; Tue, 23 Aug 2022 15:17:58 -0700 (PDT) Received: from localhost ([::1]:44466 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oQcDd-0003Ln-1Q for importer@patchew.org; Tue, 23 Aug 2022 18:17:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50590) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oQc26-0000Ai-W4 for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:06:03 -0400 Received: from mail-pf1-x42f.google.com ([2607:f8b0:4864:20::42f]:46025) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oQc24-0001QH-7t for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:06:02 -0400 Received: by mail-pf1-x42f.google.com with SMTP id z187so14704679pfb.12 for ; Tue, 23 Aug 2022 15:05:59 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:46f9:77b4:ec0a:c2d9]) by smtp.gmail.com with ESMTPSA id n12-20020a170902f60c00b0017292073839sm11020974plg.178.2022.08.23.15.05.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Aug 2022 15:05:58 -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=aenCwLhyHz+42ttancSjHI4JZk2Ya2FL+nx6M3jTwMg=; b=Yvd06h/xswgFj6DgEE4F6BlJ4RtnT/OS2rf3y1TL9+ilAwFs/mSvo2O/vRKUjixJQ1 reyGWL5y/5U4aRycoSHkSW7KLsbKWL/A5F0/OvFlbJ0ocYG305LUUBQH0BTME3AoXkG1 PJ4lGGC4M7uelwptoGWv3fZM6c+zOfSqH91PLirQqKmAQ3ayqLVZlxL2BdIa1P5MJO9B r/qY1lRMa5ucfj6RQCxgWLI+ooTGo4Nsj7wmsNYoO8teCGhsfjBmoekSTjG//uTY8Iyp P+GLu7OzwzpExDOv3qHWyAVSh0ck6jySNeukgz7AM7DjNzGQx87GtURZg6B+9YxHEK4y xuQA== 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=aenCwLhyHz+42ttancSjHI4JZk2Ya2FL+nx6M3jTwMg=; b=z4Yheb9UE2Dby+1BVJMEbrWaZjGGYHm9Pn4+CNfP2A3VNSkzoHh6jk12K1Os5r9CtK 4fnO0hPUgOLlmnaP0sosw4PiWWok9vhDXMX8HE0gZx51K9CSaYnk/cD1VtkFuk/7hgyN kkh7GdYeHFmP+RzDB3Sl7KiosHw3LiKczrLAA03Cr3RRW5tLFN7//axK0KTon9k5jD4T ppyQ0Q1aSeHfb+INKnJNIKoo3up4VFG1911OOHMvqWo/QXw1tqJZJCBwHBRCRx4AhaZn Rnf7W4+X8+RoB51JsWbFIUMeBS/+fUx/qoBCzcnbvbF3/FJ6fGVH3KFvU2xQxk5MIn+j D8+A== X-Gm-Message-State: ACgBeo01ik4W4u3Odl+1tFEf5RobzGZqaeAIxx+ahTlxgGsLVYaeXYd5 xuQ+FglnBRfPUOdVNQPA5uB71odTEyg5Xg== X-Google-Smtp-Source: AA6agR6URotv+vFEFiEemFN3o5N1NMkfebHwuWBHe7ZD0iGoZXS4+Mmvaly0b3sNiGUdnPk6X3L8rg== X-Received: by 2002:a63:1063:0:b0:42b:1b01:b394 with SMTP id 35-20020a631063000000b0042b1b01b394mr150276pgq.602.1661292358956; Tue, 23 Aug 2022 15:05:58 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: iii@linux.ibm.com, laurent@vivier.eu, alex.bennee@linaro.org Subject: [PATCH v7 12/20] accel/tcg: Use probe_access_internal for softmmu get_page_addr_code_hostp Date: Tue, 23 Aug 2022 15:05:34 -0700 Message-Id: <20220823220542.1993395-13-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220823220542.1993395-1-richard.henderson@linaro.org> References: <20220823220542.1993395-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: 1661293079148100001 Content-Type: text/plain; charset="utf-8" Simplify the implementation of get_page_addr_code_hostp by reusing the existing probe_access infrastructure. Acked-by: Ilya Leoshkevich Tested-by: Ilya Leoshkevich Signed-off-by: Richard Henderson --- 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..8fad2d9b83 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), false, &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 Fri May 10 14:31:55 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=1661292861; cv=none; d=zohomail.com; s=zohoarc; b=YaPyQ5Zb6+GbybtI6RbJvlHP197n1YFlq0aMh0KxMkOpClaDg8aY4kx5oO27Jgk8nh6nan2pEyfAAgJXRCTtHN0sTCBLCDg7bUGJXkr7Yzkrx0H+sjunCIY5n82cm7GYMr32G22zSN4NL9x91rrP+rg6sv+3jZAfa+ga3/Vv05U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1661292861; 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=x4zWBtw9jvwUVwVAd9mRUcqQWThPixmn/z1menAiivA=; b=VrontoMLRGC61LYvy1zG651JlN11JNpC+iflBH9TVL/7uYdLGwgmPu56ZVU8JexmOgkCL8gwp+WLuzjvH53o8SGwA2rxscIyI/e2MVuR3V8rUS6hJZNaXuKX0EOfKUoYpP1U27zNxmL5+YndcGqVN0+XTu/N4zxjeZHSNCRucoI= 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 1661292861790571.851003621085; Tue, 23 Aug 2022 15:14:21 -0700 (PDT) Received: from localhost ([::1]:52466 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oQcA7-0007T1-PM for importer@patchew.org; Tue, 23 Aug 2022 18:14:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50592) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oQc27-0000Ce-Fn for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:06:03 -0400 Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]:37612) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oQc25-0001PW-S4 for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:06:03 -0400 Received: by mail-pl1-x633.google.com with SMTP id m2so14038964pls.4 for ; Tue, 23 Aug 2022 15:06:00 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:46f9:77b4:ec0a:c2d9]) by smtp.gmail.com with ESMTPSA id n12-20020a170902f60c00b0017292073839sm11020974plg.178.2022.08.23.15.05.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Aug 2022 15:05:59 -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=x4zWBtw9jvwUVwVAd9mRUcqQWThPixmn/z1menAiivA=; b=cswY3eoR7PQAzVE0RptNqm7H79rXehegzgfY6qFMg4aww3V1+JN5/scSkn1XHAY5k/ v1jfoTbvcPX56hqBT7NgmhySELbQSH41yXfyeLvo0NyASO7VpdkJIv38zfUZKhZ/l5nL Fbso4amudkY0/UTAKNcxl6X3dpHSxKugXGfSmcW3WVlmP9pyAViOvEox4gpngqGFjMwb QolEYnE+0FN5fdWYR4HlOUApKcFASD4z+FoK3DKzaLOig7fUaB8B4Ve1LvDm0milCQYK 1G4k1+sG6s4NotCTHUH4hEfeFlaFL3N+b5mK3DFmOl+JbX6J8+go6s4o4QI4JTZ7Ffxj nqGg== 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=x4zWBtw9jvwUVwVAd9mRUcqQWThPixmn/z1menAiivA=; b=jXEA0ws5NnynMyUvmVDFhubOCc/NsFbngoVKeCjEhNA6Yd1g4mFB15fQM9HWA3XdMV 9Ulk2mt4br45miysWqeloM5FQtydS4yubtZzUplKD+YlVZWuA4SpwhKA+rDQMzsVSbgF HnaKEG0JkjB2MfsmwpO1Pn05MTG0Ie+DrfOr/8AsHqYI2XR6DHKVYo8CZxMC6m2NSOHy wzb49Y+CddPtld0K/lPYuZgFVzbaf4S0JFBTSuDQJ/2AuYwRlLxRjvL/qqZa3F3r6Pk0 /IH/WBbu6t8+XBNf92QQXWujh4VbB1laz//VKX+54ALJqjOvvzowJUcf2xSxWZsOVNP6 IYEw== X-Gm-Message-State: ACgBeo3vZ0OqjcDB+8QVAQ0VdDB95BJEqjqpZPyL1CyjEzw8YPcMsZEO Ixt1qQi3yKwU4UwgHqT+JHy17VhFvsIjtA== X-Google-Smtp-Source: AA6agR6wR379KthsZOTPCRDSQnwDZHGVJRImq26JLlhybx238TdeWd/hskfo9n/xU0s/u5JOLujCtg== X-Received: by 2002:a17:902:c949:b0:172:e3c3:bdeb with SMTP id i9-20020a170902c94900b00172e3c3bdebmr12461478pla.80.1661292360122; Tue, 23 Aug 2022 15:06:00 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: iii@linux.ibm.com, laurent@vivier.eu, alex.bennee@linaro.org Subject: [PATCH v7 13/20] accel/tcg: Document the faulting lookup in tb_lookup_cmp Date: Tue, 23 Aug 2022 15:05:35 -0700 Message-Id: <20220823220542.1993395-14-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220823220542.1993395-1-richard.henderson@linaro.org> References: <20220823220542.1993395-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::633; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x633.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: 1661292863077100001 Content-Type: text/plain; charset="utf-8" It was non-obvious to me why we can raise an exception in the middle of a comparison function, but it works. While nearby, use TARGET_PAGE_ALIGN instead of open-coding. Signed-off-by: Richard Henderson Acked-by: Ilya Leoshkevich --- accel/tcg/cpu-exec.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/accel/tcg/cpu-exec.c b/accel/tcg/cpu-exec.c index 7887af6f45..5f43b9769a 100644 --- a/accel/tcg/cpu-exec.c +++ b/accel/tcg/cpu-exec.c @@ -198,7 +198,16 @@ static bool tb_lookup_cmp(const void *p, const void *d) tb_page_addr_t phys_page2; target_ulong virt_page2; =20 - virt_page2 =3D (desc->pc & TARGET_PAGE_MASK) + TARGET_PAGE_SIZ= E; + /* + * We know that the first page matched, and an otherwise valid= TB + * encountered an incomplete instruction at the end of that pa= ge, + * therefore we know that generating a new TB from the current= PC + * must also require reading from the next page -- even if the + * second pages do not match, and therefore the resulting insn + * is different for the new TB. Therefore any exception raised + * here by the faulting lookup is not premature. + */ + virt_page2 =3D TARGET_PAGE_ALIGN(desc->pc); phys_page2 =3D get_page_addr_code(desc->env, virt_page2); if (tb->page_addr[1] =3D=3D phys_page2) { return true; --=20 2.34.1 From nobody Fri May 10 14:31:55 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=1661293250; cv=none; d=zohomail.com; s=zohoarc; b=d4AQk1de3EQ5Twned94jVET4SYvakeovRxNCc70IXC+xli1BP/Yh4N38IFjOuxpRaD6PZGila1LW09lDbpLN5GnlCkBa0gRwS1Ck7yhM0LJcpTgRBBYDqderOxvzJ7mtuEhN2ZY2yJnm5fFsCKKtNhHVJPkFcaYCuSO7DL8rC2o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1661293250; 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=tnbTpQq25hji2Az9vsRCegPM/IihGJTki2qN0gANa1Q=; b=VNZVJCfxQAkFRtHNM77spqbtBN4TP/CteO/VfIWOJL+ehqa2RXx95AfZZZpgwgrs3c4Bz9AIOyTiZBXnUQ6YbhQ6yTUKtQqdIGlbqCD3esHU/HTZtVg1jvMaxQm4YJy+c/EpMh8rmpgYuWNQzxxTUmTOI/BNH10pSPiHZN/P2HQ= 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 1661293250534483.13839077742864; Tue, 23 Aug 2022 15:20:50 -0700 (PDT) Received: from localhost ([::1]:40206 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oQcGP-0007uA-JQ for importer@patchew.org; Tue, 23 Aug 2022 18:20:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50594) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oQc29-0000KL-Nf for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:06:05 -0400 Received: from mail-pj1-x102c.google.com ([2607:f8b0:4864:20::102c]:39697) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oQc27-0001S0-5d for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:06:05 -0400 Received: by mail-pj1-x102c.google.com with SMTP id s36-20020a17090a69a700b001faad0a7a34so18533928pjj.4 for ; Tue, 23 Aug 2022 15:06:02 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:46f9:77b4:ec0a:c2d9]) by smtp.gmail.com with ESMTPSA id n12-20020a170902f60c00b0017292073839sm11020974plg.178.2022.08.23.15.06.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Aug 2022 15:06:00 -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=tnbTpQq25hji2Az9vsRCegPM/IihGJTki2qN0gANa1Q=; b=Fv2fkcCgv4EpQOfOUJoTFFaCBeL2c01LqTMMv0hJPHLlF4mQpiI4oesgvsDu4tYg/R xxBfbYNNjTMpyb6ocqNmZDuOqF5lXJas3qWteoo7bkxBKyv4Q5SiBskayjq5daeR6KEr LFJU6wWdNMexOOaTU/DrtThxaojiObyL4gKja0Nd5lP5kokMKoeRAkf26LA9H9XD+6i7 aYUSg0LsLmtnqfpExgan7QgrOW4SYbREwfGUwz5C/tHQwEkJTfsncOJzVgnLHzBIhFiG ZgzcwbP78niuBFNuzbYLd3GMEQ57teTAr7EIiIogWE8aj1LGAuYOSYKeEa94gHyJJQe8 aEfQ== 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=tnbTpQq25hji2Az9vsRCegPM/IihGJTki2qN0gANa1Q=; b=LRYMk8ddI78PmBoFX9rE+r9Xg+IaOkf40IYRjm0O0tbvzA/7EmlpUjmwlGT/qsANV9 Noi4jvUytrM0/Ko8/EkyOWwUidb46Di/4m+DWYSEZszu47jirT+FimJO/tnqu5lF1kSf w2MpZKMVs++VPDfmUqvlh1mXesdDbQh6V1RnYZCM0dkon0vdkaeLLrXT+zK62MJuzYZ9 C8arxxrHPYkGtGB/jzzFHqq0NG9YdM0ngi7ivdhMiz/bhcFLKo1MnFWFhQuPGdR9Zf8V uHTEyyqW8Uqkm6JMvztJFfiq9gsW5toy5uhFZOwimZfsDpsH9t0Jli9nl4c9wenYwU8T gAiA== X-Gm-Message-State: ACgBeo2aQYDkZDfZ0p9iZBkUMAqPH6jluIbPR6xFEtKTwajqpHGCvaNS DFgqLRwbyvdiuG68y2IGjJXfA9xlsHJewQ== X-Google-Smtp-Source: AA6agR6hjaxbWCZk9Lx/3ooJsRIDWryQDiEdkKfml4pYZZjhGYGVqKRIgVJIU9q3nJ/XeuHbb/mEMw== X-Received: by 2002:a17:902:b217:b0:172:bd6c:814d with SMTP id t23-20020a170902b21700b00172bd6c814dmr23468001plr.55.1661292361817; Tue, 23 Aug 2022 15:06:01 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: iii@linux.ibm.com, laurent@vivier.eu, alex.bennee@linaro.org, Alistair Francis Subject: [PATCH v7 14/20] accel/tcg: Remove translator_ldsw Date: Tue, 23 Aug 2022 15:05:36 -0700 Message-Id: <20220823220542.1993395-15-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220823220542.1993395-1-richard.henderson@linaro.org> References: <20220823220542.1993395-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::102c; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102c.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: 1661293251986100001 Content-Type: text/plain; charset="utf-8" The only user can easily use translator_lduw and adjust the type to signed during the return. Reviewed-by: Alistair Francis Acked-by: Ilya Leoshkevich Tested-by: Ilya Leoshkevich Signed-off-by: Richard Henderson --- 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 Fri May 10 14:31:55 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=1661293390; cv=none; d=zohomail.com; s=zohoarc; b=VtvEPYuq0QTl6rjv9tssOKAlMUBYZdLojitC+n/MEWgFJ+QQCU5wY0CGsszASM657QbDugAzD1JwpYPdg8K/e/7F23cwdHa71T9MtMaqNL2CY8e0+nEu6v/R3z6JkmbIJSefzdJZTt04HFgevg22x5kizmBo5boIYv7OPNm0Aj4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1661293390; 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=9DNRaOcHSuO84yjorT/O7+HarXh4HMmzCopA5+J/Upo=; b=cImDbChno4CMEGeScAElbK1Pd0//UjAnbE5JeYzmJMy4T5g2gRg0LoHXX2kPw33QQgVfWTGH15qALmEdR3pUL8H12DvgMwbuQscjL0dbYfDc9JXbwpFHHoQuFgxuQWbbQXYpfVj2gx4H9Xtm7c2HsEj/s18taW4RJYDKZK9uXh4= 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 1661293390198212.3629605908344; Tue, 23 Aug 2022 15:23:10 -0700 (PDT) Received: from localhost ([::1]:54596 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oQcIf-0002YT-3B for importer@patchew.org; Tue, 23 Aug 2022 18:23:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59350) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oQc2B-0000PN-Sj for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:06:08 -0400 Received: from mail-pj1-x1035.google.com ([2607:f8b0:4864:20::1035]:40519) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oQc29-0001SH-2n for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:06:07 -0400 Received: by mail-pj1-x1035.google.com with SMTP id t11-20020a17090a510b00b001fac77e9d1fso15853694pjh.5 for ; Tue, 23 Aug 2022 15:06:04 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:46f9:77b4:ec0a:c2d9]) by smtp.gmail.com with ESMTPSA id n12-20020a170902f60c00b0017292073839sm11020974plg.178.2022.08.23.15.06.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Aug 2022 15:06:02 -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=9DNRaOcHSuO84yjorT/O7+HarXh4HMmzCopA5+J/Upo=; b=B2x6U74GJ71Hiq+XWJ6O3D9c6abVDGFyBBzcjoCMsGi0W2RDqGPskqK4j0BwhJffzd kDgQ20bacggwCT1UUdSxXeaquLF+GUR08Zg+Sc5I4VQBfeVQXBy51x93xk5UAPl04Eup b1eIXYXmFenUnt8BJRnP16eb+jSmBxKDv5X/huotXqL+R/EJIhGqAcrKJve7EYeZy2a7 YiZJTlRoZnmrCKwMlqnCZhFdYRwxvf2E+GLFUaQ/9rqguJTyKEjmgCHs/Q9mT8nTYyZt IfyuepyUCZHCtu/xutu9dVzpfOb2d6VPk1tj8Xgm5+iV3BC+AvLBUwuea0rpgpZez31l sQPA== 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=9DNRaOcHSuO84yjorT/O7+HarXh4HMmzCopA5+J/Upo=; b=SgWrmS39rjW15MctDV5j9pXgWt12fcblYQDAbqWgifZMixO5PEShxZSN/d9YTfoB4w E421gBK4F4KQ/iZ5CKUx/bxse3TWpOMmPu9R3gkluI+uri4mGsg+dWKxGRuaAzyExJTa UTVYeXMXS3/Y0LkgNb2q+PrRSZ/hgsbOLm0QloiCg37jmx//5v0sGVXILYnMl7/+gPiL GjTKq8wpqs6aEirGy9iOY8Bqo9Rd+15yKMlmXStD10kUTY0pUVgi90lnjzSsZqw4vjYg aYrJ9eAouI5unjc9wWA19frWcxSqhb9YCWAHvGiq2kTJtpUodm6mxX+9URKt2Hza+fMu 1YBg== X-Gm-Message-State: ACgBeo1QuODOLR63m7lrmFBodJV93FfQm/Au+9Kccq+N2fTuAtcxpePt CoSsLqG6mEtyXXePUSj0pvvdqSYvuSeisg== X-Google-Smtp-Source: AA6agR7V4K27MLnf7UY4fqZbmZ8MHtLSlnsPvSGqnAQjaQ8Xt3t3ORUFeLDZD1vRESD6zlj04p8bkA== X-Received: by 2002:a17:902:edc3:b0:172:8ae3:9778 with SMTP id q3-20020a170902edc300b001728ae39778mr25871002plk.72.1661292363517; Tue, 23 Aug 2022 15:06:03 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: iii@linux.ibm.com, laurent@vivier.eu, alex.bennee@linaro.org, Alistair Francis Subject: [PATCH v7 15/20] accel/tcg: Add pc and host_pc params to gen_intermediate_code Date: Tue, 23 Aug 2022 15:05:37 -0700 Message-Id: <20220823220542.1993395-16-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220823220542.1993395-1-richard.henderson@linaro.org> References: <20220823220542.1993395-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::1035; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1035.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: 1661293390461100001 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. Acked-by: Alistair Francis Acked-by: Ilya Leoshkevich Tested-by: Ilya Leoshkevich Signed-off-by: Richard Henderson --- include/exec/exec-all.h | 1 - include/exec/translator.h | 24 ++++++++++++++++++++---- accel/tcg/translate-all.c | 6 ++++-- 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, 97 insertions(+), 53 deletions(-) diff --git a/include/exec/exec-all.h b/include/exec/exec-all.h index 9f35e3b7a9..bcad607c4e 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 b83161a081..587886aa4e 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" @@ -1392,11 +1393,12 @@ TranslationBlock *tb_gen_code(CPUState *cpu, TCGProfile *prof =3D &tcg_ctx->prof; int64_t ti; #endif + void *host_pc; =20 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, &host_pc); =20 if (phys_pc =3D=3D -1) { /* Generate a one-shot TB with 1 insn in it */ @@ -1444,7 +1446,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 Fri May 10 14:31:55 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=1661293501; cv=none; d=zohomail.com; s=zohoarc; b=XBVQ+LPUbf1pSgZYGe3EdGNJSiwT1MnHj22PVJ6w24SIYCjjoxYcE5JUwNQ2tHFvUAfrnD7nTHHjjKGCWclx+1Tmc0Jpe3rAb2uW9/B5zK4/aXtrvAlh2OrAPieJKd8tThxu1StSLxto5gKfIcwc/9Y1Dwlw6IUkBB5CEkX8xek= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1661293501; 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=qpt+vP7ZY28XWgIAuEmGW0ut/2H0xouGRGTfyPOQPGA=; b=V0JSvXn5VgoNiILfqjgRNe7MJWEiaw+dkL4A7LQOj4aZGvSu9xwKOXNigZRKM1/8S2XKW3fePM/bw/2X+Vmzbw9wd02/CrbEucjoukif16HeDFvaafa0mCZ5xu/4stUR8DSDVk0I6eyIfcNNoJCr1KcAYMNLwQqZIAqS60rn+uo= 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 1661293501060468.1386112293909; Tue, 23 Aug 2022 15:25:01 -0700 (PDT) Received: from localhost ([::1]:34612 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oQcKQ-0005BF-OK for importer@patchew.org; Tue, 23 Aug 2022 18:24:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59352) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oQc2D-0000Rs-Sl for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:06:10 -0400 Received: from mail-pg1-x531.google.com ([2607:f8b0:4864:20::531]:37750) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oQc2A-0001SS-IF for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:06:08 -0400 Received: by mail-pg1-x531.google.com with SMTP id bh13so13417017pgb.4 for ; Tue, 23 Aug 2022 15:06:06 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:46f9:77b4:ec0a:c2d9]) by smtp.gmail.com with ESMTPSA id n12-20020a170902f60c00b0017292073839sm11020974plg.178.2022.08.23.15.06.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Aug 2022 15:06:04 -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=qpt+vP7ZY28XWgIAuEmGW0ut/2H0xouGRGTfyPOQPGA=; b=k5Q8Al9sxc8LSZ8Ghwm3+FVsM8UVtJc83W/kiwPo1uM+5zR/IZ9JE+5LwPku0LkH2w hhtTT1TNxPJcz/QWLKAWFSATSGZynvNDxHtnYppfujPFgqP12s4TuU+2lPXs5UOy6lsi iMZxMLa3rMbh+NEl5Bva89fZ9vULJfNM1XfExcgJe+8nKBhkojo6HCFA61oTT7/vKbN0 ySEGwB2bdbDNVZMCcRp0ARupSFwaIhZiJ6i4gCv3T8mW5Ck07ZXpSxnAg+VFDm+R/itz hXFxyPlmH5KLP8hOJEmskR6ZnsVL3beKPTzR6n0qeKHSuDonNz9qRucP5pLVYZ89b7SC Qh+Q== 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=qpt+vP7ZY28XWgIAuEmGW0ut/2H0xouGRGTfyPOQPGA=; b=UqGja3oKFpoUILjUvlo2dFUNo8aMrIkMoq+5UVW5ojmMzB7jD1bT0+Vveno1l/ErTv aPAz/DAqUcwQXthbp4A5Jvqcck9ZCpYeRiYpy60qKafbgWeYxxCfur4SC08OP778Un1a 7BX15nL7xmo+6/5yjlpH0U7q064nWbLcSOWUsv1MarHueZ4/6EmVWnyNPxP73kNQYmLV NqOs92jJLfpbdlSotW3CGGDuwHZ7HpM+B/50wTBhVjAnLIXIN3TviM0TFICsFKwrhwcy GQJcpk2830ldIBoyoSjfu6uaN46vZ/MMFtKjjHbS/VR2ihfXfdu5OudsjW83NnTFcgQp A5mA== X-Gm-Message-State: ACgBeo2wPc7rUxGlg2jiELb4ZzNk8UHLB4YxxqiiHDb8nCQJOpocPEkn wvBcoG/FxPZ2vwzGaZOIpoafylWSxFGwmg== X-Google-Smtp-Source: AA6agR5bUH3tImRhgEZXFGKbYtTNBpkpm1r3vp9hPcxefXSWOOpQoTsBT40Bd+Dls9aqxf8sDBN0Ww== X-Received: by 2002:a05:6a00:24cf:b0:537:12dd:9bc6 with SMTP id d15-20020a056a0024cf00b0053712dd9bc6mr3037662pfv.78.1661292365120; Tue, 23 Aug 2022 15:06:05 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: iii@linux.ibm.com, laurent@vivier.eu, alex.bennee@linaro.org Subject: [PATCH v7 16/20] accel/tcg: Add fast path for translator_ld* Date: Tue, 23 Aug 2022 15:05:38 -0700 Message-Id: <20220823220542.1993395-17-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220823220542.1993395-1-richard.henderson@linaro.org> References: <20220823220542.1993395-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: 1661293503272100001 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. Acked-by: Ilya Leoshkevich Tested-by: Ilya Leoshkevich Signed-off-by: Richard Henderson --- include/exec/translator.h | 63 +++++++++++-------- accel/tcg/translate-all.c | 23 +++---- accel/tcg/translator.c | 126 +++++++++++++++++++++++++++++--------- 3 files changed, 141 insertions(+), 71 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 587886aa4e..f5e8592d4a 100644 --- a/accel/tcg/translate-all.c +++ b/accel/tcg/translate-all.c @@ -1385,8 +1385,7 @@ 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; #ifdef CONFIG_PROFILER @@ -1429,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 @@ -1622,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 @@ -1639,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..ca8a5f2d83 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,103 @@ 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, &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 Fri May 10 14:31:55 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=1661293396; cv=none; d=zohomail.com; s=zohoarc; b=eZnTB/qevMmznv7lv8pM+twt1f7rCr1MGlTyVUQlHFl4IlTqldTpBdnrrp3DIc63OtcUsBcrDLNtDHuU1Z/grph1xBQs24BIz9O+SI3JDCOFScTvbA7R6dS0ybICBKdyJnFXWHp18LfBbLsb7JA/eUCsRstSgFU2ALTIwYDawRw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1661293396; 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=ma8Zb7C/D5E9n4vs/B/KW4yUla4VOnseIE7w6pS63kM=; b=EdNmpjKl64EcW34UPA4XVUV30o17jUMDHL7Om42SXPJsk8BSczDQBExiou7Fe9+GN4m5jKTihjQnUaxDLNW/hGti/YY9jwts8gNYAJxMRAXOhWhoPP3KiJhLyEkKR+/tSphE/PoVHeXV5xEkSjPm92+spkpGpeyW/087mZdedms= 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 1661293396114923.6593564501158; Tue, 23 Aug 2022 15:23:16 -0700 (PDT) Received: from localhost ([::1]:54598 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oQcIl-0002fw-2y for importer@patchew.org; Tue, 23 Aug 2022 18:23:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38148) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oQc2O-0000u9-Cp for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:06:20 -0400 Received: from mail-pg1-x52b.google.com ([2607:f8b0:4864:20::52b]:46777) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oQc2B-0001SX-Rt for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:06:20 -0400 Received: by mail-pg1-x52b.google.com with SMTP id d71so13385316pgc.13 for ; Tue, 23 Aug 2022 15:06:07 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:46f9:77b4:ec0a:c2d9]) by smtp.gmail.com with ESMTPSA id n12-20020a170902f60c00b0017292073839sm11020974plg.178.2022.08.23.15.06.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Aug 2022 15:06:05 -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=ma8Zb7C/D5E9n4vs/B/KW4yUla4VOnseIE7w6pS63kM=; b=CAl7FDTAidX65Zwa2mmUIdbTybXFldJ+ZAZRk7f6i5+sJ/98vpHX/buURyNEv1PaBz 9zWIvq3zfQsQYbytdckLLK6Ecj0JJ7AvAU9G6zF5HSxu6De21zVTYIGyFZZ7AUbQWi7N JsRiclKPNQgXqf8YSrw0Lqyn3sb8ayY3T/8OAkSXj//ozSDLfDhClqVOr33iinKABREa nqZmun/0K2GVnzlvt1ilN+82UCGpVu+veMBAHuBxptgw1lm6wBOttXe4b6N3zZPDBSEM 0issVoba1TljWThlBAW6vPTuntUZZB9CoXZCZIxMfrMvgS6SYPvRtJaLxNOF5L8S+ikI B66A== 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=ma8Zb7C/D5E9n4vs/B/KW4yUla4VOnseIE7w6pS63kM=; b=ebqzEzMQNSkr+LakDtEm3CfApz/5Rf3b3lj5C3MqD3QDAobtySogWDjcL8dHmdvsua PAPy4KbcvTs2oyo/kDcZA+D2RM8uyisJdWcx+RqyGIvIGNI+/8SxXiLIRvymT4lVZrzG TmRi6lqGXLxXVVci++262rOqucRgKkBVvICIcKD8HSI4aYwrs3SILraJh2qQd/nPvZcp o3JDtWlt2wKLXSFIj9DZPBVOJEK1/ase5+wOamQlJ/iClNec62ljwf0ZHbbF2IZHn6jN 9gHUjXtCWhKp/AtyvzAudWZ8wrJYvZra8S7VvTlnlCaRYldyt+h3Ii6lLVdqHCZ81FR7 2ing== X-Gm-Message-State: ACgBeo0QoFdOdvxw8eUtAYilrRAAIOoTU7xg7AuiMDZQUV/Io9QXgyA3 420npU+90absax19Kr8pzlB0uERkuFZcgg== X-Google-Smtp-Source: AA6agR7HL5XF5qGK6ac4NwS8fgBdgC9f5jq5fNn70Ny9hoTKS69Qm8xfw3ibAW1CKFsjphZ2CDE9sw== X-Received: by 2002:a63:5b10:0:b0:429:c287:7bfa with SMTP id p16-20020a635b10000000b00429c2877bfamr21206490pgb.347.1661292366320; Tue, 23 Aug 2022 15:06:06 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: iii@linux.ibm.com, laurent@vivier.eu, alex.bennee@linaro.org Subject: [PATCH v7 17/20] target/s390x: Make translator stop before the end of a page Date: Tue, 23 Aug 2022 15:05:39 -0700 Message-Id: <20220823220542.1993395-18-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220823220542.1993395-1-richard.henderson@linaro.org> References: <20220823220542.1993395-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::52b; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52b.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, 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: 1661293396465100001 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 --- target/s390x/tcg/translate.c | 15 +++- tests/tcg/s390x/noexec.c | 106 +++++++++++++++++++++++ tests/tcg/multiarch/noexec.c.inc | 139 +++++++++++++++++++++++++++++++ tests/tcg/s390x/Makefile.target | 1 + 4 files changed, 257 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..2ef539b721 --- /dev/null +++ b/tests/tcg/multiarch/noexec.c.inc @@ -0,0 +1,139 @@ +/* + * Common code for arch-specific MMU_INST_FETCH fault testing. + */ + +#define _GNU_SOURCE + +#include +#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 Fri May 10 14:31:55 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=1661293253; cv=none; d=zohomail.com; s=zohoarc; b=af/y/huD88gTikFGnen3QMmMrdwRESd5V3IN4a/HO+OkswbeyDnpaOi7uFxiUlXxwSfW/71DcvDdzmHGvQcHpluWSvDNuk1WdNE0Y6QOof2RJOtDafcwf1wRM2REKPYCA3DS5D7J6VWMnRXKACkjvCpVO91fYYcjlG4Du+B7APE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1661293253; 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=iNTo0+IlWQn4fz57YkEX/KBwpUkmvnYdUksL6z9QAHA=; b=ZgWcNvyWidI7RfiFNQR5M+WzIoALrfdL7FT9z0VpBcZv9PT/LlQGwXmg546nVJDdoGqy1c2ca4zAJagbyDpndOmLNR5xHza2gtNuxpufqwY87tjhCJ3fbncu86x8R8tzpKm5jwKBxFZgy7B+m/QtZFO8RRr3GbptPFXUpBkmQzQ= 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 1661293253919797.6869874693175; Tue, 23 Aug 2022 15:20:53 -0700 (PDT) Received: from localhost ([::1]:35878 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oQcGS-00080L-30 for importer@patchew.org; Tue, 23 Aug 2022 18:20:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59354) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oQc2E-0000U4-Nn for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:06:10 -0400 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]:40755) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oQc2C-0001Pj-I9 for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:06:10 -0400 Received: by mail-pl1-x62e.google.com with SMTP id x23so14022255pll.7 for ; Tue, 23 Aug 2022 15:06:07 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:46f9:77b4:ec0a:c2d9]) by smtp.gmail.com with ESMTPSA id n12-20020a170902f60c00b0017292073839sm11020974plg.178.2022.08.23.15.06.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Aug 2022 15:06:06 -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=iNTo0+IlWQn4fz57YkEX/KBwpUkmvnYdUksL6z9QAHA=; b=YvJni5qbHSL23L1617rU533wi/B01NE87QEfJ3g+6lHKv73cmpBpmtm9ko7DF/v+Lv toZpFBh0pt8u5FleZD8KLuJD5ZLLyfPVi0uge/RP6nWYtLwLhJecOM/Jb5S7VdMESdd1 +ZxB/lClinAAIAA+XkqbwzbAp1hK+L9ghePdEz8N1FBwAqX702spSTTS0S0alNEOz83U cjfjj5uFd12kmo5JrgGwasvBIUxvGR51Qfddsj8SD+Ck9zI3jhsK/5wb1/pnHI9JWEix Q97mD3wuROv4vZ1iED1WSkmxoD4YRM/XHFAuiAdFaJZJfiIWiwtE9jngFKjAWd4KHKlz MrjQ== 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=iNTo0+IlWQn4fz57YkEX/KBwpUkmvnYdUksL6z9QAHA=; b=T3+AJIjvXZBoMUK08MMbIlqEImKyqkEz1waYRqCFsuccereA6DBY14YW5DtOq3/WPR lVoacee1FE2yq/RbrqooCSCgp9cAIp3m48bAnm9DyYFxJ4iUubxvUapv//AQA33/JcKu qByXUWTk+IR3v1CTZfj8rGdys7+xIVBuHhbzRWzcG6QJg2vUExJDi09jFR6Sy2hsW8wr XhPv2RG4Je53c/b2GJ/uJoj3wz1NTjtmWh3V14yzF6CAYnMTWy2IM/WamtG1uiGCNcvO GBnacf9QSRXkCrtofb3Mw93zKMg9V+6ogaDj+sIesDbXQxyS9z33+xsmHmvqwYzF2rCA gugQ== X-Gm-Message-State: ACgBeo1L2bjypjZlGoKyO/S8wQmA+d8CeYMJYpeYTXo/aK7urEbQpbIV y096pV5frZD8ZNRs6Jp3FBM0YmOCZSelrw== X-Google-Smtp-Source: AA6agR6XGa23lbUptANmzDryGledqAa3sCDisYzkNJSt3Q1/VUoWQM2vBQBrc6GU2S4vzsDc1hdKIQ== X-Received: by 2002:a17:902:8b86:b0:170:d739:9a35 with SMTP id ay6-20020a1709028b8600b00170d7399a35mr26404774plb.35.1661292367185; Tue, 23 Aug 2022 15:06:07 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: iii@linux.ibm.com, laurent@vivier.eu, alex.bennee@linaro.org Subject: [PATCH v7 18/20] target/i386: Make translator stop before the end of a page Date: Tue, 23 Aug 2022 15:05:40 -0700 Message-Id: <20220823220542.1993395-19-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220823220542.1993395-1-richard.henderson@linaro.org> References: <20220823220542.1993395-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: 1661293255976100001 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> [rth: Simplify end-of-insn cross-page checks.] Signed-off-by: Richard Henderson --- target/i386/tcg/translate.c | 64 ++++++++++++++++----------- tests/tcg/x86_64/noexec.c | 75 ++++++++++++++++++++++++++++++++ tests/tcg/x86_64/Makefile.target | 3 +- 3 files changed, 116 insertions(+), 26 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..b184fe33b8 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 @@ -8652,31 +8675,22 @@ static void i386_tr_translate_insn(DisasContextBase= *dcbase, CPUState *cpu) #endif =20 pc_next =3D disas_insn(dc, cpu); - - if (dc->flags & (HF_TF_MASK | HF_INHIBIT_IRQ_MASK)) { - /* if single step mode, we generate only one instruction and - generate an exception */ - /* if irq were inhibited with HF_INHIBIT_IRQ_MASK, we clear - the flag and abort the translation to give the irqs a - chance to happen */ - dc->base.is_jmp =3D DISAS_TOO_MANY; - } else if ((tb_cflags(dc->base.tb) & CF_USE_ICOUNT) - && ((pc_next & TARGET_PAGE_MASK) - !=3D ((pc_next + TARGET_MAX_INSN_SIZE - 1) - & TARGET_PAGE_MASK) - || (pc_next & ~TARGET_PAGE_MASK) =3D=3D 0)) { - /* Do not cross the boundary of the pages in icount mode, - it can cause an exception. Do it only when boundary is - crossed by the first instruction in the block. - If current instruction already crossed the bound - it's ok, - because an exception hasn't stopped this code. - */ - dc->base.is_jmp =3D DISAS_TOO_MANY; - } else if ((pc_next - dc->base.pc_first) >=3D (TARGET_PAGE_SIZE - 32))= { - dc->base.is_jmp =3D DISAS_TOO_MANY; - } - dc->base.pc_next =3D pc_next; + + if (dc->base.is_jmp =3D=3D DISAS_NEXT) { + if (dc->flags & (HF_TF_MASK | HF_INHIBIT_IRQ_MASK)) { + /* + * If single step mode, we generate only one instruction and + * generate an exception. + * If irq were inhibited with HF_INHIBIT_IRQ_MASK, we clear + * the flag and abort the translation to give the irqs a + * chance to happen. + */ + dc->base.is_jmp =3D DISAS_TOO_MANY; + } else if (!is_same_page(&dc->base, pc_next)) { + dc->base.is_jmp =3D DISAS_TOO_MANY; + } + } } =20 static void i386_tr_tb_stop(DisasContextBase *dcbase, CPUState *cpu) 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 Fri May 10 14:31:55 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=1661293142; cv=none; d=zohomail.com; s=zohoarc; b=ScmwoyzTzLCT+N/iyIoQHo2sVx9iNlrGhSles+11A8NTHF8ppDsU6LZcgWqfOxNUphTZykIpZ8EPozddCIFADGk1NVq+Ll2Np9uQ3zzJsoS6sE8iwTQH96lv1fL94ST7Tuzp18fohnoNOuuLCBtqzqiyKpIN8yGsmkEzjQikrCs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1661293142; 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=Ar6YL5FF/K2Div4uruzg03ZvW0xj9yBOSm1jZPy9tok=; b=NbK9NqojzJ/L+YCNcuHfw3G04+xRb2OhRR6OQkzEFaz7AReo3HcdiSu13lYpQt/Bzn+cYJVW6Ti9CU3VsCmpEn5nK7OMkjSo32Ha6qN2naNMPRb2pvzZ3l7AofSUQphDXDsxpZbhrXRQG8bryTMuvW+aU+cY+hsBIXorSnzihyM= 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 1661293142853302.27811696770493; Tue, 23 Aug 2022 15:19:02 -0700 (PDT) Received: from localhost ([::1]:49540 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oQcEe-0004lb-4H for importer@patchew.org; Tue, 23 Aug 2022 18:19:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59356) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oQc2F-0000Wa-CG for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:06:11 -0400 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]:55294) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oQc2D-0001So-PF for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:06:11 -0400 Received: by mail-pj1-x1036.google.com with SMTP id bf22so15225575pjb.4 for ; Tue, 23 Aug 2022 15:06:09 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:46f9:77b4:ec0a:c2d9]) by smtp.gmail.com with ESMTPSA id n12-20020a170902f60c00b0017292073839sm11020974plg.178.2022.08.23.15.06.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Aug 2022 15:06:07 -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=Ar6YL5FF/K2Div4uruzg03ZvW0xj9yBOSm1jZPy9tok=; b=J3RygTQgC6sedEke5a+nBGAcK40qqwkdljYtjXC7z2BY1BWY5gH8GycwHk5tMNI+Cs WZnmIgRAIvo3jKAtpx9p+VylntBej8D8LX4Gyj2xMe/BmrFENyKzuUfY2tl17EcaHOeY sz1YtKYCp7Wv5JmHK4Rm1P5RUD+L0pSUKbSV+7GgcatIpKGNIztSDRt9jPLYG7KBzEwC eWEUMAX90h5CfV2fN02cfYJQB1poveGXKqb6kDrvKl0NLkRXTUUa0MsJ9BHq+T6JIgPA to5EE97/ZL0eoCpvLAODHbMHKcYkGWrQjFZbgbTLMr/ETqcD2b19OsIeHkwVdZIkQfCy yd+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=Ar6YL5FF/K2Div4uruzg03ZvW0xj9yBOSm1jZPy9tok=; b=0PnokCIQ8gEdFGVs0nbLPgcqrnAxQ96439A8RQpNXEOlMRw9bNCsXXEpDdDZCUHza+ 3xZCC4184Vae7UUuq+URhchTDrrFAZCkgc57zWB+rcSVMXKX0ynHffw7KOURXD6LCw+W fK9Kjceewrvok3ZGAygJnZWwyEqSASQebINiSCwEljeQsR7UYQUQr3CK+88PmLWpAv8u 3g8K2D6F7cQ6MIQqm6BlTD0e3SiqSHdXv9fNClCNwJEc/Wa5gFRwWfX8zn8gWSZx8t7Q nitr+fIG3JsD/DSyek52SaYpCVNuDFFORSzfU2jMyItwKbY1/gNjHVlLEASFNArcLGXQ BhVg== X-Gm-Message-State: ACgBeo01tTm0Ml4cxYXbLduNPKcYzItr+Uh3o4el8pmGK2G0bsjfyYxd cIajMcWdYwSG4C/IxW0oP1cfaeI5+DGlFQ== X-Google-Smtp-Source: AA6agR4tphudbfgsP8WjAb71k6c+1VP2o3uErwZ7cfjy3YV6OfBGqjIz6e/LYIZGKfefofAx1vAi7w== X-Received: by 2002:a17:902:7d83:b0:170:9353:f299 with SMTP id a3-20020a1709027d8300b001709353f299mr25683017plm.41.1661292368369; Tue, 23 Aug 2022 15:06:08 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: iii@linux.ibm.com, laurent@vivier.eu, alex.bennee@linaro.org, Alistair Francis Subject: [PATCH v7 19/20] target/riscv: Add MAX_INSN_LEN and insn_len Date: Tue, 23 Aug 2022 15:05:41 -0700 Message-Id: <20220823220542.1993395-20-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220823220542.1993395-1-richard.henderson@linaro.org> References: <20220823220542.1993395-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::1036; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1036.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: 1661293143456100001 Content-Type: text/plain; charset="utf-8" These will be useful in properly ending the TB. Reviewed-by: Alistair Francis Acked-by: Ilya Leoshkevich Tested-by: Ilya Leoshkevich Signed-off-by: Richard Henderson --- 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 Fri May 10 14:31:55 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=1661293074; cv=none; d=zohomail.com; s=zohoarc; b=UP+uc9GT5ntqCCUzbNvspiyMRPyYqYY3El1HK5bfBWwQZXfoXgTbXb2SCHJ71cQa0hxsdPWgXLyUaFuLWzGt2COua4IT/yx/bInxcT1TWXtdoljlv/yjkLSc1mgL8Ygzz/7UQnmGvvT+Xckh9g7QllPk4R03ShRfupvMHYj1MBU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1661293074; 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=duBeBoFX8QNETCcok0dytuQZN74JHxnbRDKrjktEj6Y=; b=FVUh/tf8EoJ5foHLYs6Q2H54zo7lLW2kpKdDoun+j8UMzrOc6eDWautqdpGzKOIVb57fvbMAhIWIExC6gESC8Pjrqv9o6chEugogorogSxF+PeBGR24LqgQ3L3uE/bO8ZUSLkFJFaBfuSQNVODrVduYkVCM00gpkpYEuTTD7XpY= 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 1661293074281178.9723348195098; Tue, 23 Aug 2022 15:17:54 -0700 (PDT) Received: from localhost ([::1]:57738 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oQcDZ-000326-8c for importer@patchew.org; Tue, 23 Aug 2022 18:17:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59358) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oQc2H-0000dX-8X for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:06:13 -0400 Received: from mail-pj1-x1033.google.com ([2607:f8b0:4864:20::1033]:33331) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oQc2F-0001St-Bl for qemu-devel@nongnu.org; Tue, 23 Aug 2022 18:06:12 -0400 Received: by mail-pj1-x1033.google.com with SMTP id ds12-20020a17090b08cc00b001fae6343d9fso2332005pjb.0 for ; Tue, 23 Aug 2022 15:06:10 -0700 (PDT) Received: from stoup.. ([2602:47:d49d:ec01:46f9:77b4:ec0a:c2d9]) by smtp.gmail.com with ESMTPSA id n12-20020a170902f60c00b0017292073839sm11020974plg.178.2022.08.23.15.06.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Aug 2022 15:06:09 -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=duBeBoFX8QNETCcok0dytuQZN74JHxnbRDKrjktEj6Y=; b=H2Nhl4GmnSpHvz8yVD8rohcHNy97tAa5i2gldxCG7R6zb7VZez+m+uh2GIk22O10zX JvRFsGbyfUBXff8EZTEKF3lqr5xelR93oZkamHkeFL8b39vnXzPLUL+7OO0eJcooPo1k wvLwP/X2cmM3GY8oEKQD9QT+fGzvEz1ZIdOOC7J5i/pO6DfK4Sw/PFYRiwlKbipheuPp huSIBguh2GKgmvBsEM6Yhyfp5Us2J5a6AeM6eUdv4X4/EQ3iCIR7ncI0YYEuPyr+hDh3 zOD/CXmmLkAmP2PmX4m7w64stvg5GD19Lo8lyvZY68G8qLXbsUOweSFqTja9b7m8OJlO M0Mg== 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=duBeBoFX8QNETCcok0dytuQZN74JHxnbRDKrjktEj6Y=; b=BO6lTwJhPz9CZlZDhVJId2+tl1Yx0vPAbdEoDxvO5fOnLSzhDM7cYOOkE3mqv3LGp+ qH3GBbOcImV9GmIrR1MJTAso4KI8ziJ2aCVLR+7319qSs9RrsTTopwP7bGiA3UYgyG/u a6dXv1Yj4hvT7KcVdyff9SVNkBnqWKvpppeCseCnD6W3dxNcDT0/QRmLtsX1HQUnVDsG XYc8RGUnVb7xbB+Xl4Vz55hrhbd+aV/VfOjvuYt7HANJtMnYo4IdWzJa+CoQn5ifbGX6 4HTV15en3ZkN3DQPOF8CiCg9jS2xlqMfkmrx0Qqn3YCB8TWBJ33xRWtox1WF/IEhxO3T Oqow== X-Gm-Message-State: ACgBeo2kF7cx5LPETq8jez5E3CI1XwrE3Tht3Q+F+L11AGeR8r0Z5Dcu U69DpLmBlBPpPnkwAoZINjD9yEBVARhWnA== X-Google-Smtp-Source: AA6agR6yUOb5xShFxamjwnlA9V/dagA6YgM39AzjbNeHy2yLy+knmA/ph1ZNtWgyysaOXTIWFERSvg== X-Received: by 2002:a17:902:e5c4:b0:173:1015:d01c with SMTP id u4-20020a170902e5c400b001731015d01cmr1888476plf.15.1661292369821; Tue, 23 Aug 2022 15:06:09 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: iii@linux.ibm.com, laurent@vivier.eu, alex.bennee@linaro.org, Alistair Francis Subject: [PATCH v7 20/20] target/riscv: Make translator stop before the end of a page Date: Tue, 23 Aug 2022 15:05:42 -0700 Message-Id: <20220823220542.1993395-21-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220823220542.1993395-1-richard.henderson@linaro.org> References: <20220823220542.1993395-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, 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: 1661293075270100003 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 Reviewed-by: Alistair Francis Acked-by: Ilya Leoshkevich Tested-by: Ilya Leoshkevich Signed-off-by: Richard Henderson --- 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