From nobody Thu May  8 07:03:53 2025
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=1662015741; cv=none;
	d=zohomail.com; s=zohoarc;
	b=U+BbPPR+RykKHMtdQ6W3vdWMj/MCtjURlvQJ/49uB1Ni2E7DiTR8sh/x/6q12auXF6vmoubXvlSBGW0+9KKHyHn+11GpsDkyT7mls26CrEhTZIwaovxsNBVnI0Y+w8I19H1UIA/pnO1Mutp1162mBXbKIe7VHjXs1Z9x7sYHfLM=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1662015741;
 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=mAPyRKdgF/QmnnGr9+Ry+JtNQV1EqoWQEzX2EjSDZn3qgUSwCka7vNCjjuDXkAXD4IMPG3uUqfIifVU7C01rmj5KsLj1UQEbJmrYlq8CAKS/7zohqlpUnUWrOv22J9Jr2qw8AuNF520646xrg3jjDN10ftqO9Rka5CxNOMZbbz4=
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=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1662015741049130.26099188800924;
 Thu, 1 Sep 2022 00:02:21 -0700 (PDT)
Received: from localhost ([::1]:53502 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1oTeDT-00030X-TW
	for importer@patchew.org; Thu, 01 Sep 2022 03:02:19 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59760)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe3p-0005oY-H8
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:52:22 -0400
Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]:44639)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe3n-0003G6-SS
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:52:21 -0400
Received: by mail-wr1-x42e.google.com with SMTP id c7so14347289wrp.11
 for <qemu-devel@nongnu.org>; Wed, 31 Aug 2022 23:52:18 -0700 (PDT)
Received: from stoup.. ([87.192.221.83]) by smtp.gmail.com with ESMTPSA id
 a6-20020a5d4d46000000b00226dedf1ab7sm8308153wru.76.2022.08.31.23.52.15
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 31 Aug 2022 23:52:16 -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=zL50RlddbX47dHMlS47xTJE7hK7f2JFYlGdgThDGU0uvA6HjRK/yuYHd4vq5Tk0drv
 53Nmd5h2AZNj35fTbXRfr9pC4y+xwOE2kPBCotGWMIGLqsnLkG8ebztXIYXDjlbFM9qk
 tYIjm4cPYhZDB9gMmzCvcWpXJqXASrHtBsZWU2flscxZJNB9KS/3x3+67raebdtDW/yX
 uK/H3YhXPvL3rgkIIen/Oe8bSekaU70D/01hBNqPZjmof6BaGolHzdLFQVdEHuBw9FcE
 Py6S0RrSAQUlv6eMkaH4IX1k+88Kk/Fb2kUU7u52kGQE/82zIe97YwFSviYK8LGf9LmU
 J0MA==
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=Sc7+c1fqI1jGxfU+lORbqrpE5LYeSYW9VA9DFTRceWVxXlzmzqhItYHiy59dArx+Tg
 BCuWlrRs0hu5BKtsvpjpkngvq1ZXX9vyNPdRWjl4OSxIN66t+qHLAo24cev1I1FKNdTM
 hxFMvqvuWQ1G3sPK5JpZgqRcXU8etMvL1gakzGnnxV+WEcdARiwbFlqG4x+88F85k+xm
 LHaRThEqJBepBfWgAzm3BS5iVRAT2GBrYZS3OjOLr5Y1wDffwTKAkXGDeeRvWbKmhEFv
 EkMoDLu+hr2LQVL4uLjPFYp5FhOBwpOblrvQiBR9DLLV9o/Mh/ZEOOw4Zl4YXlvmpYQH
 I0AA==
X-Gm-Message-State: ACgBeo1eaEJN0U3CqahGuK82lFBtxVOzhpCfbdw2YwBeyeF58MqQFlb1
 38/scA0lm91KTbrSUmM8Sxo/+DGJWCm89zjz
X-Google-Smtp-Source: 
 AA6agR6SMoWzz+itLwsLPbSqdBAnhet1LpqVKbk3v7eGZgWnqEWJt1eOfpXXhFCeoBNPfBYRt3YF/Q==
X-Received: by 2002:adf:e411:0:b0:226:d3f9:4a03 with SMTP id
 g17-20020adfe411000000b00226d3f94a03mr13322790wrm.673.1662015137710;
 Wed, 31 Aug 2022 23:52:17 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: Ilya Leoshkevich <iii@linux.ibm.com>
Subject: [PULL 01/20] linux-user/arm: Mark the commpage executable
Date: Thu,  1 Sep 2022 07:51:47 +0100
Message-Id: <20220901065210.117081-2-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.34.1
In-Reply-To: <20220901065210.117081-1-richard.henderson@linaro.org>
References: <20220901065210.117081-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=2a00:1450:4864:20::42e;
 envelope-from=richard.henderson@linaro.org; helo=mail-wr1-x42e.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: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1662015741725100001
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 <iii@linux.ibm.com>
Tested-by: Ilya Leoshkevich <iii@linux.ibm.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 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 Thu May  8 07:03:53 2025
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=1662015513; cv=none;
	d=zohomail.com; s=zohoarc;
	b=cVN82UnnfcUYxljJs5JdO9dTGelQFNJohwp8ssADJdLoo+Vbd+4BU4dZ8vNXzmYJjvXyhumZ/QdP9oLVG2a6ZEKz+5ZQ7fHRE0oV2cZ6xBavdRV1Bv33LvWWzJNIox2mYfTXJvkuBCpoc4hIh3jS1w/LJkYO/Kw0KjY2XBs/Kzs=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1662015513;
 h=Content-Type: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=U/h2PuXjGmHqeTevSKtXVEUhLbvpxvYx+D8DjCnF93A=;
	b=JdyqwJf73EnHwSQxly3nVJctxcaIm/quu+ix46H7p7TGMrefCVIafdbUbt71Fnthrf773rOIeBU6zLV3A3/9U9Oqw40UhWH1XwbpzHe7jdhWEUZaYYPSh78uLKEqJo8/Z7Xl/kc4XxfgIADRQ+yY0/VuimJuR0SHV9GTU0Brhh0=
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=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1662015513793476.76316634306784;
 Wed, 31 Aug 2022 23:58:33 -0700 (PDT)
Received: from localhost ([::1]:44768 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1oTe9o-0000bn-CB
	for importer@patchew.org; Thu, 01 Sep 2022 02:58:32 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59762)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe3s-0005qO-Sq
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:52:26 -0400
Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]:44647)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe3q-0003GH-Ks
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:52:24 -0400
Received: by mail-wr1-x436.google.com with SMTP id c7so14347407wrp.11
 for <qemu-devel@nongnu.org>; Wed, 31 Aug 2022 23:52:22 -0700 (PDT)
Received: from stoup.. ([87.192.221.83]) by smtp.gmail.com with ESMTPSA id
 a6-20020a5d4d46000000b00226dedf1ab7sm8308153wru.76.2022.08.31.23.52.18
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 31 Aug 2022 23:52:19 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=content-transfer-encoding:mime-version:references:in-reply-to
 :message-id:date:subject:cc:to:from:from:to:cc;
 bh=U/h2PuXjGmHqeTevSKtXVEUhLbvpxvYx+D8DjCnF93A=;
 b=vqpMhMs98O5Rytl5EydDZ48GdA9HSHoQyd8AcOqNgjK69tLg7ajRmPOyAZttLPK4du
 pNJjeGKWxRHNUxljDwFzcZwBtwRq6AeRw5+EWnWrFPwzziRQ5kkjP+A0sFE5Y5vLyNLP
 1jWSlWuplvLG8NGPyHAwd7Y1uDy58O6Sc1sDlEaFNlDsnpMdNhnae+v3OrY3NHPmSHyP
 oiPDhzAdCALQRwwQha+wGZ5W6a6ZjCGt9LEhU/ZuAd9cSvebfIhtUlbA3VjSjkt8Abo0
 73/dMIw8Ud+Ta8WLiOIrHrr+srJqpKRagEZzrtHiWlyyVRopz5mL/02ssuW2ARoJ4Xf3
 /x+g==
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=U/h2PuXjGmHqeTevSKtXVEUhLbvpxvYx+D8DjCnF93A=;
 b=4xMBI1uovuKKBiX4tk9wuDblR4Yc1secO75CbgA/OToxcIhUiAgdJGLVgh/34ofbPM
 q0imvy2mRFaG6kK4DG+R6GTQy+pYhgmdtQhqL3wCh64xQXpee1QIZoXMVJ72QQaH78zM
 VTWEW0zn7jMBmSmBfdXEfLh0Qsi57fXZQ6pzTcWBW2B9CIvKkxWXXtSRgFEoerK/yiEg
 vy0QcizZhBK7VjKsIACFevUB+9aBlFvWdeSWLBsaV/Xg9lniDh125w+doxBUMoxV2BcL
 fOj75ERdHHTOYGOEIfoSuAmtyp29j0FmoEA9ZpDEZk3jUWvUPZKui0zJyVvjJReJsX7g
 Rycw==
X-Gm-Message-State: ACgBeo0vGL54B7MoTR3/85sVIgfQc6i4zntqXaeGXO+5q9hKv9RSq+lu
 0ZFtOkS1mM0rzY8bvx0MdbBPqtvp33bHAb9L
X-Google-Smtp-Source: 
 AA6agR6hroC4/P+azLa8YAMO4DHJ1S9U7pab5C0CQRkY140KlwxsEw/rZwpZjTZkF5GbYu9e3ZbM/g==
X-Received: by 2002:a5d:5985:0:b0:222:c5dd:b7c8 with SMTP id
 n5-20020a5d5985000000b00222c5ddb7c8mr13940825wri.511.1662015140539;
 Wed, 31 Aug 2022 23:52:20 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Subject: [PULL 1/4] target/avr: Support probe argument to tlb_fill
Date: Thu,  1 Sep 2022 07:51:48 +0100
Message-Id: <20220901065210.117081-3-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.34.1
In-Reply-To: <20220901065210.117081-1-richard.henderson@linaro.org>
References: <20220901065210.117081-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
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=2a00:1450:4864:20::436;
 envelope-from=richard.henderson@linaro.org; helo=mail-wr1-x436.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: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1662015515953100003

While there are no target-specific nonfaulting probes,
generic code may grow some uses at some point.

Note that the attrs argument was incorrect -- it should have
been MEMTXATTRS_UNSPECIFIED. Just use the simpler interface.

Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 target/avr/helper.c | 46 ++++++++++++++++++++++++++++-----------------
 1 file changed, 29 insertions(+), 17 deletions(-)

diff --git a/target/avr/helper.c b/target/avr/helper.c
index db76452f9a..82284f8997 100644
--- a/target/avr/helper.c
+++ b/target/avr/helper.c
@@ -102,38 +102,50 @@ bool avr_cpu_tlb_fill(CPUState *cs, vaddr address, in=
t size,
                       MMUAccessType access_type, int mmu_idx,
                       bool probe, uintptr_t retaddr)
 {
-    int prot =3D 0;
-    MemTxAttrs attrs =3D {};
+    int prot, page_size =3D TARGET_PAGE_SIZE;
     uint32_t paddr;
=20
     address &=3D TARGET_PAGE_MASK;
=20
     if (mmu_idx =3D=3D MMU_CODE_IDX) {
-        /* access to code in flash */
+        /* Access to code in flash. */
         paddr =3D OFFSET_CODE + address;
         prot =3D PAGE_READ | PAGE_EXEC;
-        if (paddr + TARGET_PAGE_SIZE > OFFSET_DATA) {
+        if (paddr >=3D OFFSET_DATA) {
+            /*
+             * This should not be possible via any architectural operation=
s.
+             * There is certainly not an exception that we can deliver.
+             * Accept probing that might come from generic code.
+             */
+            if (probe) {
+                return false;
+            }
             error_report("execution left flash memory");
             abort();
         }
-    } else if (address < NUMBER_OF_CPU_REGISTERS + NUMBER_OF_IO_REGISTERS)=
 {
-        /*
-         * access to CPU registers, exit and rebuilt this TB to use full a=
ccess
-         * incase it touches specially handled registers like SREG or SP
-         */
-        AVRCPU *cpu =3D AVR_CPU(cs);
-        CPUAVRState *env =3D &cpu->env;
-        env->fullacc =3D 1;
-        cpu_loop_exit_restore(cs, retaddr);
     } else {
-        /* access to memory. nothing special */
+        /* Access to memory. */
         paddr =3D OFFSET_DATA + address;
         prot =3D PAGE_READ | PAGE_WRITE;
+        if (address < NUMBER_OF_CPU_REGISTERS + NUMBER_OF_IO_REGISTERS) {
+            /*
+             * Access to CPU registers, exit and rebuilt this TB to use
+             * full access in case it touches specially handled registers
+             * like SREG or SP.  For probing, set page_size =3D 1, in order
+             * to force tlb_fill to be called for the next access.
+             */
+            if (probe) {
+                page_size =3D 1;
+            } else {
+                AVRCPU *cpu =3D AVR_CPU(cs);
+                CPUAVRState *env =3D &cpu->env;
+                env->fullacc =3D 1;
+                cpu_loop_exit_restore(cs, retaddr);
+            }
+        }
     }
=20
-    tlb_set_page_with_attrs(cs, address, paddr, attrs, prot,
-                            mmu_idx, TARGET_PAGE_SIZE);
-
+    tlb_set_page(cs, address, paddr, prot, mmu_idx, page_size);
     return true;
 }
=20
--=20
2.34.1


From nobody Thu May  8 07:03:53 2025
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=1662016426; cv=none;
	d=zohomail.com; s=zohoarc;
	b=aiHri2xlryWm/rQI7SLl6acUqiOTYVJEp1YPLvVt4XFReXytTzJbbVy12pN4eDsnJ0QMR5ItBA62wXDx4thVAdV+QIHa+gvgXFcJgyCQw0Y2XbbFWqXLQgxmmR23FB7on67Nj2FIfJ5/lMNjlC2kC8hXvB35BIS3mMacFNRoGck=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1662016426;
 h=Content-Type: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=pnrkcB7u5z1U6ZLIT5ewwpikaStb8NPbw7XF1+tgjNM=;
	b=kW4cXFoZi/zMoKPljGn6gvnSFOKXiUVXDoTCnlhSaZuqiKZBDN3yARVuXCPGnXNYy+oAQGyyH4FQhc6DLF9SM/BITLbN3HqGhjV+dL4odPNwj8ru/XSM7pNwHsGYeutqR3dL905wvQqUXRG0AZOpGqnYAcCj9Z4n4jYCz/2vq6g=
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=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1662016426707171.8996544634051;
 Thu, 1 Sep 2022 00:13:46 -0700 (PDT)
Received: from localhost ([::1]:32932 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1oTeOW-0004DV-L1
	for importer@patchew.org; Thu, 01 Sep 2022 03:13:44 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59114)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe3w-0005tI-VC
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:52:31 -0400
Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]:37426)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe3v-0003Gc-A6
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:52:28 -0400
Received: by mail-wr1-x436.google.com with SMTP id n17so21007773wrm.4
 for <qemu-devel@nongnu.org>; Wed, 31 Aug 2022 23:52:26 -0700 (PDT)
Received: from stoup.. ([87.192.221.83]) by smtp.gmail.com with ESMTPSA id
 a6-20020a5d4d46000000b00226dedf1ab7sm8308153wru.76.2022.08.31.23.52.23
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 31 Aug 2022 23:52:24 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=content-transfer-encoding:mime-version:references:in-reply-to
 :message-id:date:subject:cc:to:from:from:to:cc;
 bh=pnrkcB7u5z1U6ZLIT5ewwpikaStb8NPbw7XF1+tgjNM=;
 b=IdCIzWwsBBxT4n1uUZukAlpHIRx1mAUESF7XAocOL/1ZkFZYKXgm/CIcngpWJOw4Qg
 4/18t5zC2tXX5JuyDeyn6JvNIKX4rLJA9u4eI2FzBKh1O0ypodrsHOJbsNLY1XL8uhec
 GVKLcfOaqyovMGQ/O62W/IB9b5IRfpdonJb5lZsTatf2MK7jqQVbUJKL5VlKS3k6KL7F
 GGXCkYNp8ZnmLpDSvwEmOT7pKuWO3mRJCt+tK7hmXcAIyA3VODkgjqWnShCMcBTFreBB
 bFaG80ky+QMv1dtZNdT4FGYhGk29O0cMH+UJJ1lt50Bv9DVMR/K/ZNOegam4nXMMg+JM
 v1jw==
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=pnrkcB7u5z1U6ZLIT5ewwpikaStb8NPbw7XF1+tgjNM=;
 b=x4lPUM8XEXg0PfDdYfAK5vsqPsH+xLqhVWpvu/BbHD+mTnQXnXpyscAoFQDupd5gKW
 nmTrvsZtd7KQ/xyTS07bEKLUGLDvUnZSHXULSe6Odarly0pJrHJajHoKspgHMGE/7brQ
 RnjJEd3qA/HyAHWhauYIVK6VN2owSpwm1fFKjUPaasOYrks8mk4FlVtcKWwY7IAdEWp7
 bPhJyoZKXc5uIgpe3b9af/B1QKL2Fto5jETIvOWj3JWi1w/UMQpJVtlpFbFf0wFbWj49
 s8GbnnWNQssqN1xmiwtvacAi/DJbudaX4kqu5Il/0CJWphblrI/Vn0Qngjhoig1/soNo
 PkMA==
X-Gm-Message-State: ACgBeo0Mv+rAbRlJrwaHrFE6pMwRU1qCatUULEste7s2QYLLklxfJvMM
 N89xszJwqO8SVdEi/8J4iRDlGMVbAARzUE1P
X-Google-Smtp-Source: 
 AA6agR5sK3jthDMNd3vbsAdtpTbsk5jdu/k0/Nb+RSOGwExl2fuPE82mQwLeuB8f18SOz6mTK1maMw==
X-Received: by 2002:a5d:47a1:0:b0:226:ebfc:f759 with SMTP id
 1-20020a5d47a1000000b00226ebfcf759mr3592783wrb.636.1662015145864;
 Wed, 31 Aug 2022 23:52:25 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: Michael Rolnik <mrolnik@gmail.com>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Subject: [PULL 2/4] target/avr: Call avr_cpu_do_interrupt directly
Date: Thu,  1 Sep 2022 07:51:50 +0100
Message-Id: <20220901065210.117081-5-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.34.1
In-Reply-To: <20220901065210.117081-1-richard.henderson@linaro.org>
References: <20220901065210.117081-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
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=2a00:1450:4864:20::436;
 envelope-from=richard.henderson@linaro.org; helo=mail-wr1-x436.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: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1662016426905100001

There is no need to go through cc->tcg_ops when
we know what value that must have.

Reviewed-by: Michael Rolnik <mrolnik@gmail.com>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 target/avr/helper.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/target/avr/helper.c b/target/avr/helper.c
index 82284f8997..9614ccf3e4 100644
--- a/target/avr/helper.c
+++ b/target/avr/helper.c
@@ -29,14 +29,13 @@
 bool avr_cpu_exec_interrupt(CPUState *cs, int interrupt_request)
 {
     bool ret =3D false;
-    CPUClass *cc =3D CPU_GET_CLASS(cs);
     AVRCPU *cpu =3D AVR_CPU(cs);
     CPUAVRState *env =3D &cpu->env;
=20
     if (interrupt_request & CPU_INTERRUPT_RESET) {
         if (cpu_interrupts_enabled(env)) {
             cs->exception_index =3D EXCP_RESET;
-            cc->tcg_ops->do_interrupt(cs);
+            avr_cpu_do_interrupt(cs);
=20
             cs->interrupt_request &=3D ~CPU_INTERRUPT_RESET;
=20
@@ -47,7 +46,7 @@ bool avr_cpu_exec_interrupt(CPUState *cs, int interrupt_r=
equest)
         if (cpu_interrupts_enabled(env) && env->intsrc !=3D 0) {
             int index =3D ctz32(env->intsrc);
             cs->exception_index =3D EXCP_INT(index);
-            cc->tcg_ops->do_interrupt(cs);
+            avr_cpu_do_interrupt(cs);
=20
             env->intsrc &=3D env->intsrc - 1; /* clear the interrupt */
             if (!env->intsrc) {
--=20
2.34.1


From nobody Thu May  8 07:03:53 2025
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=1662015999; cv=none;
	d=zohomail.com; s=zohoarc;
	b=W3LdVi8HfBCFcAyETZQhk03C7/N6OqXEGK1M0U4ezqtRSwV8ie3eHocRS+DmZO4OfRLSYPxq9KtwVPRVM9DsLOE0BpHg0m8cZvSAnizsBFLSRdJ2Q+gHbN5DtDxeCKl1yedk9ylaRV7MFOaIkOqONy6GbqNHvl89n7/k64byMCI=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1662015999;
 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=ZNzqKEzBLDAnKiMjXdO/e2u7QvIQN2GJYgCXXZ6Lzg+d5zy8FHVrxJOojaWOSEySJ0RMULJnMRoDMvhcJeT9lmrv+r2OnaKU1I1Hg1VOTlJlhOfWOd1qK9Sba67C6PyW4GpwMLEAo9k+Sb5F/p+Iq0o+XmeGwuyIz1PmkdFv0Dg=
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=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 166201599920282.51075795006773;
 Thu, 1 Sep 2022 00:06:39 -0700 (PDT)
Received: from localhost ([::1]:35272 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1oTeHd-0006Ur-Fk
	for importer@patchew.org; Thu, 01 Sep 2022 03:06:37 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59112)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe3v-0005s7-MO
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:52:27 -0400
Received: from mail-wr1-x433.google.com ([2a00:1450:4864:20::433]:43685)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe3t-0003GR-Vn
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:52:27 -0400
Received: by mail-wr1-x433.google.com with SMTP id u18so8341642wrq.10
 for <qemu-devel@nongnu.org>; Wed, 31 Aug 2022 23:52:24 -0700 (PDT)
Received: from stoup.. ([87.192.221.83]) by smtp.gmail.com with ESMTPSA id
 a6-20020a5d4d46000000b00226dedf1ab7sm8308153wru.76.2022.08.31.23.52.20
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 31 Aug 2022 23:52:22 -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=HQfoTiO5xIrT302HofUFO4RioFMFKKBINHO9/6/a34Nv9+SbpPGujeWNAmuSmg90Cw
 tAubLWzbsHFbdUU5l8RoYjR0vP5SjWBR5ZiMl/cG25D54JXBpej9HE7kPRrJZCizrooB
 zsldSeE4BOwvHaUbpj3cqLHHADLdSD3H9ewloX2c+KkmLNJNhyBIBIZWZeaP7vid8ayJ
 /gS4nd7ZpPDkmaaqe1rrO9iUElMRq97VLv7hUlJnSCLgJ1PUBGgoRzLntuHqFWdpHsEG
 yeA4vXaACEUeZGG0TSmaGYDULU4FX3fItJG8dcEwOB1K6IzEdOQo8HJRXLXjzIO3QGzc
 hRDA==
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=BrRrYx8FLPrYSgQJ2CV1OoQtnmLGeRzr50cl+bnsFIBS9ukrFAMLc4x4LLensdcai3
 BsMZjoCn9hX1vrbXThA2YFambXV3cc5ysQizNmUN72vYIPMeRo6t7SSELD0/gNt3dAz6
 vUbKglhUmCwX9BiYPDR7x+MFrtCuuWuugKi2seTxyERUoVkeftt8hgecNET5Cr1Ulu1Y
 XlmutSF/pwk8tYlI5WG7s/oiX8UY9RFYrRhX1hdjZpw83DoA556kkk5Sko3n7rrfz6Zt
 zEyjeudsIeAlKWZx8dFMkSjsg5vePEMtFdMewoZ27SB9gr/ugIqtLZGEdg1usOFMOGct
 Z8Cg==
X-Gm-Message-State: ACgBeo3zoQqkeYgrRwEVcFaio77lKah57Kb5c3XoD7KikolHwHhnCvpI
 NN3Dqt6FyK81/HH6q7kxNmhAFpHNjx4lR4Tf
X-Google-Smtp-Source: 
 AA6agR6UBvyeHK9eKooLytkr/Vhjznt599l2ovDgNeh++rOCdFBGyPLeAJ2aHLxP8nL1W7i/OwFg0Q==
X-Received: by 2002:a5d:64e9:0:b0:220:7dd7:63eb with SMTP id
 g9-20020a5d64e9000000b002207dd763ebmr13502698wri.590.1662015143275;
 Wed, 31 Aug 2022 23:52:23 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: Ilya Leoshkevich <iii@linux.ibm.com>
Subject: [PULL 02/20] linux-user/hppa: Allocate page zero as a commpage
Date: Thu,  1 Sep 2022 07:51:49 +0100
Message-Id: <20220901065210.117081-4-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.34.1
In-Reply-To: <20220901065210.117081-1-richard.henderson@linaro.org>
References: <20220901065210.117081-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=2a00:1450:4864:20::433;
 envelope-from=richard.henderson@linaro.org; helo=mail-wr1-x433.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: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1662015999695100001
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 <iii@linux.ibm.com>
Tested-by: Ilya Leoshkevich <iii@linux.ibm.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 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 Thu May  8 07:03:53 2025
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=1662015991; cv=none;
	d=zohomail.com; s=zohoarc;
	b=irJxEGHexanEFrVALd+1b2EpYLkd2vlNu1QXJKbW2KTMjiYUADk0MwLu7mZaOI0zM/jLv3ov+olhFOsn0J30KtgNUEPqll6unDcftMmJJzkS5UJDXIXOtmI5WW+sSJ1ecsYi0WSaCM0iocAFBVFsWmNgx9Eoi0H0cfGiEDXfOrU=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1662015991;
 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=yfnHu4EbbnRvw3l+CBQz1H5c9gnGaVUZEDhcbvAt58s=;
	b=NVfaZpzugDDuuz+7qUfDYxgUBUftJxQ+ylXIVtsCcueewr8FNqqbEu/+9l6AMqXy/NEjB3rGksq6OlioOstPUdAkbJq15111S7dl7i27SoVnLBhfHMnykjVmgwQ0ZbYRoR8VVrrCns3CfgsvsVaG5pWyleHFB4CCPPZ0eLzvAYM=
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=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1662015991114680.196308002694;
 Thu, 1 Sep 2022 00:06:31 -0700 (PDT)
Received: from localhost ([::1]:35270 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1oTeHV-0006Ow-L6
	for importer@patchew.org; Thu, 01 Sep 2022 03:06:29 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59116)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe41-0005uu-Pa
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:52:41 -0400
Received: from mail-wr1-x435.google.com ([2a00:1450:4864:20::435]:39717)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe40-0003Gu-3C
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:52:33 -0400
Received: by mail-wr1-x435.google.com with SMTP id az27so21014549wrb.6
 for <qemu-devel@nongnu.org>; Wed, 31 Aug 2022 23:52:31 -0700 (PDT)
Received: from stoup.. ([87.192.221.83]) by smtp.gmail.com with ESMTPSA id
 a6-20020a5d4d46000000b00226dedf1ab7sm8308153wru.76.2022.08.31.23.52.26
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 31 Aug 2022 23:52:27 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=content-transfer-encoding:mime-version:references:in-reply-to
 :message-id:date:subject:cc:to:from:from:to:cc;
 bh=yfnHu4EbbnRvw3l+CBQz1H5c9gnGaVUZEDhcbvAt58s=;
 b=ic3hhYqnPJ5I0nsVaP+B4tQS1ELAfQC4B0QPJnYOXLTSg0mXdETrZd0ileEs7LqMj3
 Fmz3zHNH6ml/ad4SA9lGzAzh3gjbGGdW4g+xKTzW0rlKEQfHyCK5eUlVUBGrOCiPj4h8
 PFDthGaht+LJ3jPsIccb1pArT92miBNu+9meLynSqO3MsA6h+huSRHaN+TQkswGYOASe
 TRwhWvDTth/uAN66ilVBY2EoyLpiJVZjQj2J6v88Bq7t3DD6zZoFPBaGW/eSm0768Xk8
 KDx46A+smCE7YiLNqVE4AcASbnC1Uqs5gPPY99PTorAlH/9bSb08LIZ0oxnld2Mfxyhi
 y/fg==
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=yfnHu4EbbnRvw3l+CBQz1H5c9gnGaVUZEDhcbvAt58s=;
 b=QgT70uxDrdXtteR24ouiV7WqDV/NIx+DIlFgUm4r59L5j3A3cndu2H2XFMyS447WNx
 VWt8jrZ5w0jKxRNkVj8S2U19QRkGYxyJ/QuFMQ+g7AKSGzOkOldEsTbLFtqv3S3ytXys
 B+lLb/eWP5Ifkcd+Lhe+JjF1VXp4SvoJE5a6aHQ4zWoweF6Xo+cqMmJDkcySHYFfrvEG
 wnDSijRSG3nnFw/UmdY9eYHvB1dddJnlIcPGBulC/dUapo0VHP0fNBu7mxGust3DSfPk
 WsJqMBfADfy3yYS6PFkMzYZ/eveoqCtJNvwxObdCD4GPiq3LPhdj2IQh/cocnaV8AgFG
 pX9g==
X-Gm-Message-State: ACgBeo3k+pOHSGvcFQbj/0Al6nwFosSi1OO77sjLhS9EGKXuS9j3mxYD
 Pl03agEW9UzjZAVdzzYi37WdOICyghaCADB2
X-Google-Smtp-Source: 
 AA6agR6twWaBoAEkebxSL9onk6TeWqSCgEKxJOtFX/RyKJhqp4mmNpzIYVyS/RR+gYt3Av37hfsiqA==
X-Received: by 2002:a05:6000:81b:b0:226:bada:a5 with SMTP id
 bt27-20020a056000081b00b00226bada00a5mr13698448wrb.539.1662015149937;
 Wed, 31 Aug 2022 23:52:29 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: Ilya Leoshkevich <iii@linux.ibm.com>
Subject: [PULL 03/20] linux-user/x86_64: Allocate vsyscall page as a commpage
Date: Thu,  1 Sep 2022 07:51:51 +0100
Message-Id: <20220901065210.117081-6-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.34.1
In-Reply-To: <20220901065210.117081-1-richard.henderson@linaro.org>
References: <20220901065210.117081-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=2a00:1450:4864:20::435;
 envelope-from=richard.henderson@linaro.org; helo=mail-wr1-x435.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: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1662015991588100001
Content-Type: text/plain; charset="utf-8"

We're about to start validating PAGE_EXEC, which means that we've
got to mark the vsyscall page executable.  We had been special
casing this entirely within translate.

Acked-by: Ilya Leoshkevich <iii@linux.ibm.com>
Tested-by: Ilya Leoshkevich <iii@linux.ibm.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 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 Thu May  8 07:03:53 2025
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=1662016258; cv=none;
	d=zohomail.com; s=zohoarc;
	b=JvOQzKpWwdF28zawIT+n7wi8okFy84cHlHFbGiE6/xY8iYTrxewX0ja+drK/vzHFs7c0Izir1+bYRyHRU3abStCCBpnfL+wSLL42uWt9O/oZxMmYIiS2Jf2ITfXUZgRyP1UWKsojK3+CCkSXDxLvguUUPHngaX3vtOUm766Hewc=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1662016258;
 h=Content-Type: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=onqIs+XT2WZfG8WtGyXgNUrHr/Df9zcYrXD6nOSwGCs=;
	b=VsduBVCyUe2knfT2/pnC2N7SVDG3wEJbRJ1LBHWWWWrU16E/hMh3LDeGlTFypRN/kEcHTb0xNXPN9Jna6sflqw8yMP8GWPjiUqNkQOICFP7Mc1+YhdUY4csaqBHlghsNZTSXuj2hemn2+UwGzIBVdQzFKC3sEFnITRBAub4bmKo=
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=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1662016258810387.6467078792026;
 Thu, 1 Sep 2022 00:10:58 -0700 (PDT)
Received: from localhost ([::1]:57224 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1oTeLp-0000jg-MZ
	for importer@patchew.org; Thu, 01 Sep 2022 03:10:57 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:50334)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe45-0005uy-P5
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:52:45 -0400
Received: from mail-wr1-x432.google.com ([2a00:1450:4864:20::432]:36760)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe43-0003HE-PJ
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:52:37 -0400
Received: by mail-wr1-x432.google.com with SMTP id u17so1743649wrp.3
 for <qemu-devel@nongnu.org>; Wed, 31 Aug 2022 23:52:34 -0700 (PDT)
Received: from stoup.. ([87.192.221.83]) by smtp.gmail.com with ESMTPSA id
 a6-20020a5d4d46000000b00226dedf1ab7sm8308153wru.76.2022.08.31.23.52.30
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 31 Aug 2022 23:52:31 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=content-transfer-encoding:mime-version:references:in-reply-to
 :message-id:date:subject:cc:to:from:from:to:cc;
 bh=onqIs+XT2WZfG8WtGyXgNUrHr/Df9zcYrXD6nOSwGCs=;
 b=j/ArPmNDqu8+dbWrYmrB1qzxQNRhwo4Yjcdj3flzD4J3lugNXFQ6wSHnD8W9g6c8Od
 MJgwbakGwCGqeZDr3r3yxyTj6d3SYmwNTvEa+Bo5oj5TEGQ/G5OgkwhyKPY+UyPVYPNu
 Ur4sM8oWgDWEKfqtQ/pZW3x5nmiuOvgEoUAPGVrL+Hy+QUyWABViiMpB5A1WTaoDKpjp
 49lu6oPygRmaCj+quhdhOtXTAiSWnUjCJN8ldge//FHNBpPhcjFuWPmtNW1BDHaJjTm7
 3IKKxPZJ50dcEucAprc/C3KbuuzYnVXb/ZnbYNm2n4+Ux/+t3feJfcQJGPnbJ/Ag2Ynu
 fdWg==
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=onqIs+XT2WZfG8WtGyXgNUrHr/Df9zcYrXD6nOSwGCs=;
 b=1BQztdn51AoT7dnUm823c0w+lNeqW6swbvsVsC0cjyE5vaoqqInSAVe+6CiI80non7
 P5fFRCAF/9Z86Zv1qltwKdFLI6Gh8/bqyDzdOt2xQyNkGRmbfwYetEcbUGFt90iy+4fZ
 rP007fIaykpsNhyflRdf2pk6JG0Gv/g4RqzCVLGo/iSwJFK1Lq0I2QWqhWx8v3lLdwZl
 4kNwCbu6OEdvYFUJtwPxXXhEjEjSm3Un5kh0JHFOX8jOdWanZ9yQOAVaZU55g72eOvna
 cUJDevQm0QLY7oE1CqL0eJwyFsdfl0L08KLfdZFtBmNdBcaOu2XbbXERQI4cfJvCtbGb
 /I9w==
X-Gm-Message-State: ACgBeo0MO7157Sym+xpDNt4CYFh8NVi2QwjsMmg24Pwi3yL2UpSHZzyU
 +ejP1z0Xby6NXfTzxoHw0ErVFRpC17pjRoNJ
X-Google-Smtp-Source: 
 AA6agR7+6xQwEt4RkfJIxf6RhS5w3+E6KvfuBuh9b/zyMeTqy8uGDa263N3ARu/6DBOTbqvKa8XDlA==
X-Received: by 2002:a05:6000:1568:b0:226:e2d0:abcb with SMTP id
 8-20020a056000156800b00226e2d0abcbmr6885447wrz.456.1662015153685;
 Wed, 31 Aug 2022 23:52:33 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: Michael Rolnik <mrolnik@gmail.com>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Subject: [PULL 3/4] target/avr: Only execute one interrupt at a time
Date: Thu,  1 Sep 2022 07:51:52 +0100
Message-Id: <20220901065210.117081-7-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.34.1
In-Reply-To: <20220901065210.117081-1-richard.henderson@linaro.org>
References: <20220901065210.117081-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
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=2a00:1450:4864:20::432;
 envelope-from=richard.henderson@linaro.org; helo=mail-wr1-x432.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001,
 T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1662016259918100001

We cannot deliver two interrupts simultaneously;
the first interrupt handler must execute first.

Reviewed-by: Michael Rolnik <mrolnik@gmail.com>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 target/avr/helper.c | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/target/avr/helper.c b/target/avr/helper.c
index 9614ccf3e4..34f1cbffb2 100644
--- a/target/avr/helper.c
+++ b/target/avr/helper.c
@@ -28,7 +28,6 @@
=20
 bool avr_cpu_exec_interrupt(CPUState *cs, int interrupt_request)
 {
-    bool ret =3D false;
     AVRCPU *cpu =3D AVR_CPU(cs);
     CPUAVRState *env =3D &cpu->env;
=20
@@ -38,8 +37,7 @@ bool avr_cpu_exec_interrupt(CPUState *cs, int interrupt_r=
equest)
             avr_cpu_do_interrupt(cs);
=20
             cs->interrupt_request &=3D ~CPU_INTERRUPT_RESET;
-
-            ret =3D true;
+            return true;
         }
     }
     if (interrupt_request & CPU_INTERRUPT_HARD) {
@@ -52,11 +50,10 @@ bool avr_cpu_exec_interrupt(CPUState *cs, int interrupt=
_request)
             if (!env->intsrc) {
                 cs->interrupt_request &=3D ~CPU_INTERRUPT_HARD;
             }
-
-            ret =3D true;
+            return true;
         }
     }
-    return ret;
+    return false;
 }
=20
 void avr_cpu_do_interrupt(CPUState *cs)
--=20
2.34.1


From nobody Thu May  8 07:03:53 2025
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=1662016614; cv=none;
	d=zohomail.com; s=zohoarc;
	b=g8dkI4HotpBEXxfDajAEilgpUAGZEkgK3lpP3GXDd3wpPq/E8MLDM3YZQJAu+mqf69S48TDkYgSIPq6v6KcQOCi7p9DI+wRlRVyRbYuNZQJj5TZ/8hKmPQddZ7R7T4EitaSTAHw+cjHaKzXPcH2A2wcW5HzDzm++c8dhRydFayg=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1662016614;
 h=Content-Type: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=osXM6kebf211jyJTnRVlg1LBiYlRKdmijrWPSS9x4Wo=;
	b=da/HUVoDo//Wc3sz7sPQWxJ275cFfOaAa+FWIGYTzyT4RzNhePq6bG0NPHRj21iuKMphRSxTNwZ7LeZYDJfjU9OEaMh/yS64kQ1a7R8LGjLOCwZBT2NqFJwS2lYnCDDBSK569QEoa/eK4WEEuborKcNyUMz36xX/MYwcR2aE20U=
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=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1662016614346240.03917507621304;
 Thu, 1 Sep 2022 00:16:54 -0700 (PDT)
Received: from localhost ([::1]:43504 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1oTeRY-0006aj-Vk
	for importer@patchew.org; Thu, 01 Sep 2022 03:16:53 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:50338)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4A-0005v5-4t
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:52:47 -0400
Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]:45914)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe47-0003G2-Vp
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:52:41 -0400
Received: by mail-wr1-x42e.google.com with SMTP id w5so4831641wrn.12
 for <qemu-devel@nongnu.org>; Wed, 31 Aug 2022 23:52:39 -0700 (PDT)
Received: from stoup.. ([87.192.221.83]) by smtp.gmail.com with ESMTPSA id
 a6-20020a5d4d46000000b00226dedf1ab7sm8308153wru.76.2022.08.31.23.52.37
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 31 Aug 2022 23:52:38 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=content-transfer-encoding:mime-version:references:in-reply-to
 :message-id:date:subject:cc:to:from:from:to:cc;
 bh=osXM6kebf211jyJTnRVlg1LBiYlRKdmijrWPSS9x4Wo=;
 b=P5WP1BaHPbW8kc19nsfqo7KRtUVJcL4r41BBgcQYOgpS3qiQbI6Afuo1dEeet9BZ+Y
 6UcKS618BMMsrW+X3lbfsHUrc6ySwVr192gEOVoolgrvMPUVJqXk+k2A/8ysCEcXLbwg
 F+gCZjta/NtZrQZkywPHT2Nl3HR3zW0jtZejKyZUhEoNFNDce5J1/g+h4aNbK1Qsd4ee
 dhBtJAOy13pl3uzoa7bXuTsKX7HqpLIoJ7C0pE9fi/dS12NIL/D/uhZ5Wxfh1eHix4C0
 0tj77MKCnN/00Wasm455yREtDF0fVljkyuvYjbpF9NnR9AT1q+fB8bNPGD8he1THYkKc
 lOOw==
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=osXM6kebf211jyJTnRVlg1LBiYlRKdmijrWPSS9x4Wo=;
 b=seiq2gHqU3GD4btkWoIqnlEQUUrndjD2Z/JdIMxj+Fw8jrcq2m5/24qk1/0QLfhO0R
 lvu4ql24Y8WhOP/o0pzOkRtkY1+RdUwLOr7LcdddIOmO4HJ7v8zpexXmAqpcF3ZFnM2t
 GlqG7meu4gvY7eYOiupHxNSaGvQcBYKYpI3TVBDhSvCNtTLrzjA0irv54SIT5wNJTyhj
 GCVrxlwkdqnxNmuUYB8Vo7zo4swrX3myka5XejBPUA+QJ0zv1Dtkouuj0FU8pK9kf9kE
 nKFmrDiFAxIUGs8XbCcSDMn1y66zkVLzFhAxWtwiwivhZBDwqeIk56LVMHiCgJGiwwqQ
 7xwA==
X-Gm-Message-State: ACgBeo2r0ET9gWKNagq2pIHtrI8/HvLHRLqar0YE9xD+KymxwKDk/2xL
 gNcImEDMIR+JDTCLwmS2MHmcy7raQl/+GaBb
X-Google-Smtp-Source: 
 AA6agR6p+vw0IIZK4pcdIi0ctV5Ohps4h8+o0/k0rvEJt2SRf/ukC2BDzkfuFAOdYWQEhyBPeXHAUQ==
X-Received: by 2002:a5d:64c9:0:b0:226:dfa0:3fa7 with SMTP id
 f9-20020a5d64c9000000b00226dfa03fa7mr8469555wri.350.1662015159205;
 Wed, 31 Aug 2022 23:52:39 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: Michael Rolnik <mrolnik@gmail.com>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Subject: [PULL 4/4] target/avr: Disable interrupts when env->skip set
Date: Thu,  1 Sep 2022 07:51:54 +0100
Message-Id: <20220901065210.117081-9-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.34.1
In-Reply-To: <20220901065210.117081-1-richard.henderson@linaro.org>
References: <20220901065210.117081-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
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=2a00:1450:4864:20::42e;
 envelope-from=richard.henderson@linaro.org; helo=mail-wr1-x42e.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: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1662016615852100001

This bit is not saved across interrupts, so we must
delay delivering the interrupt until the skip has
been processed.

Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1118
Reviewed-by: Michael Rolnik <mrolnik@gmail.com>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 target/avr/helper.c    |  9 +++++++++
 target/avr/translate.c | 26 ++++++++++++++++++++++----
 2 files changed, 31 insertions(+), 4 deletions(-)

diff --git a/target/avr/helper.c b/target/avr/helper.c
index 34f1cbffb2..156dde4e92 100644
--- a/target/avr/helper.c
+++ b/target/avr/helper.c
@@ -31,6 +31,15 @@ bool avr_cpu_exec_interrupt(CPUState *cs, int interrupt_=
request)
     AVRCPU *cpu =3D AVR_CPU(cs);
     CPUAVRState *env =3D &cpu->env;
=20
+    /*
+     * We cannot separate a skip from the next instruction,
+     * as the skip would not be preserved across the interrupt.
+     * Separating the two insn normally only happens at page boundaries.
+     */
+    if (env->skip) {
+        return false;
+    }
+
     if (interrupt_request & CPU_INTERRUPT_RESET) {
         if (cpu_interrupts_enabled(env)) {
             cs->exception_index =3D EXCP_RESET;
diff --git a/target/avr/translate.c b/target/avr/translate.c
index dc9c3d6bcc..026753c963 100644
--- a/target/avr/translate.c
+++ b/target/avr/translate.c
@@ -2971,8 +2971,18 @@ static void avr_tr_translate_insn(DisasContextBase *=
dcbase, CPUState *cs)
     if (skip_label) {
         canonicalize_skip(ctx);
         gen_set_label(skip_label);
-        if (ctx->base.is_jmp =3D=3D DISAS_NORETURN) {
+
+        switch (ctx->base.is_jmp) {
+        case DISAS_NORETURN:
             ctx->base.is_jmp =3D DISAS_CHAIN;
+            break;
+        case DISAS_NEXT:
+            if (ctx->base.tb->flags & TB_FLAGS_SKIP) {
+                ctx->base.is_jmp =3D DISAS_TOO_MANY;
+            }
+            break;
+        default:
+            break;
         }
     }
=20
@@ -2989,6 +2999,11 @@ static void avr_tr_tb_stop(DisasContextBase *dcbase,=
 CPUState *cs)
 {
     DisasContext *ctx =3D container_of(dcbase, DisasContext, base);
     bool nonconst_skip =3D canonicalize_skip(ctx);
+    /*
+     * Because we disable interrupts while env->skip is set,
+     * we must return to the main loop to re-evaluate afterward.
+     */
+    bool force_exit =3D ctx->base.tb->flags & TB_FLAGS_SKIP;
=20
     switch (ctx->base.is_jmp) {
     case DISAS_NORETURN:
@@ -2997,7 +3012,7 @@ static void avr_tr_tb_stop(DisasContextBase *dcbase, =
CPUState *cs)
     case DISAS_NEXT:
     case DISAS_TOO_MANY:
     case DISAS_CHAIN:
-        if (!nonconst_skip) {
+        if (!nonconst_skip && !force_exit) {
             /* Note gen_goto_tb checks singlestep.  */
             gen_goto_tb(ctx, 1, ctx->npc);
             break;
@@ -3005,8 +3020,11 @@ static void avr_tr_tb_stop(DisasContextBase *dcbase,=
 CPUState *cs)
         tcg_gen_movi_tl(cpu_pc, ctx->npc);
         /* fall through */
     case DISAS_LOOKUP:
-        tcg_gen_lookup_and_goto_ptr();
-        break;
+        if (!force_exit) {
+            tcg_gen_lookup_and_goto_ptr();
+            break;
+        }
+        /* fall through */
     case DISAS_EXIT:
         tcg_gen_exit_tb(NULL, 0);
         break;
--=20
2.34.1


From nobody Thu May  8 07:03:53 2025
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=1662017104; cv=none;
	d=zohomail.com; s=zohoarc;
	b=AZzcylRcSTBPDWhqZSce1AUh1Flgcr6ZYgN2MZh3GFfimoNPxCPNusyoHp3YB1uo+P6ihHAqekURx8XHEPg6g2x4S+A6TVHaEyMopyONPR3R3Li8nvvUuS/DZW3X5A+AjHLx/MZdNPyXUmmwEMzTHddsEBz6oR1iIWOpciiifTU=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1662017104;
 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=N5DGm8afFMaSF/zrUdCmWW0tVLU18fx4gtR0JN6sJ08jAXWX+2rDYUJQhFY0uddCRJcVqYQcVOYo0nRLXPpdIuDfqT499dSFHZIt+bJvJqeWPOiRurh9CjrGiiNGXDckwdsCROfpbGUd6KKhzjiXrJGjjJQl8ywWXj5HzH4V4Hk=
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=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1662017104164305.53937220193075;
 Thu, 1 Sep 2022 00:25:04 -0700 (PDT)
Received: from localhost ([::1]:45736 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1oTeZP-0001wY-DT
	for importer@patchew.org; Thu, 01 Sep 2022 03:25:01 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:50336)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe47-0005v2-8Z
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:52:45 -0400
Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]:45914)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe45-0003G2-IF
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:52:38 -0400
Received: by mail-wr1-x42e.google.com with SMTP id w5so4831549wrn.12
 for <qemu-devel@nongnu.org>; Wed, 31 Aug 2022 23:52:37 -0700 (PDT)
Received: from stoup.. ([87.192.221.83]) by smtp.gmail.com with ESMTPSA id
 a6-20020a5d4d46000000b00226dedf1ab7sm8308153wru.76.2022.08.31.23.52.33
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 31 Aug 2022 23:52:35 -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=Ibe6ZANuzxo8Jk7qHu7vHX1KnS82e4XnpZoCNcmk1t+0AkDmLcBhNgkra8NVfx7Nfy
 /2OxVyshCbxuZHe1qtTpjzK8z8SpvsuSSpU/shaR9VIr6qaJxqjTGl/aVc8E+bE6XSzO
 TLNjf+bfRr9yo7H9ZLR+JvT7eVLYtlEP2K3mZjiLuLK7g29jft1d6disECY26yhciQTg
 BQefxM0tHPAYZ3P9uau1oFawwWwuipdN57KJC+a9YHTVLTvg8k7ioujPsqkCHT5buXut
 1rxm0IRCDFfHp50K0o5yQI2mp9ZOJ9Yd2JLZqNGq12w7vhgPjSSl3FV02ka9yMzJbhVx
 4/ew==
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=ex9oGaXWWYPEE6C0fBeIgXHRhBdyLpe9R+UfAKp+ZP6l/htfhVkgeLvrF1VLefhgKh
 tqE62agEaX4QQr1au+Byi2ohn+ho5IviUyrvU2p6rY9eBApI1nWeTdVRR3YYH0gbkdV6
 PsBVt3xcO29sb9G+iyRAOPVGode7kLQy7REwphF1Yqof91/LhEcChtdqJ6ESCQrRrmYY
 EzDfWHcvvFoZSdTj3VTKKwtZjmkO78JP8JWhl/C17E6NEIyUpz9Z6Wd4ju1//K5tuqRK
 sY5iWhCu+InDPn2vvgKYJzYpDzsZleQZBHaS0JRF7d6c/8l0tQAe0239KrSGbkoLxEsQ
 pdjA==
X-Gm-Message-State: ACgBeo1K8G2qFa6U5WsFJa/wHptFdJ1np4UjxwSpPXTXBiW1t5JfQZGp
 LFL5r2UKhUlWpxcMiyPC7GBuScTrpaP/Rfpr
X-Google-Smtp-Source: 
 AA6agR5ojxA9I7xXLO2Z9FwkIt+oNCPM79MFq45uCS8e6zNrTwZPVowb+l1s1OU2+qO3fqqfORQjaQ==
X-Received: by 2002:a5d:69c4:0:b0:226:dde6:a1d7 with SMTP id
 s4-20020a5d69c4000000b00226dde6a1d7mr9231177wrw.618.1662015156810;
 Wed, 31 Aug 2022 23:52:36 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: Ilya Leoshkevich <iii@linux.ibm.com>
Subject: [PULL 04/20] linux-user: Honor PT_GNU_STACK
Date: Thu,  1 Sep 2022 07:51:53 +0100
Message-Id: <20220901065210.117081-8-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.34.1
In-Reply-To: <20220901065210.117081-1-richard.henderson@linaro.org>
References: <20220901065210.117081-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=2a00:1450:4864:20::42e;
 envelope-from=richard.henderson@linaro.org; helo=mail-wr1-x42e.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: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1662017105152100001
Content-Type: text/plain; charset="utf-8"

Map the stack executable if required by default or on demand.

Acked-by: Ilya Leoshkevich <iii@linux.ibm.com>
Tested-by: Ilya Leoshkevich <iii@linux.ibm.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 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 Thu May  8 07:03:53 2025
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=1662017282; cv=none;
	d=zohomail.com; s=zohoarc;
	b=J97Fx98LtTrnApFTi6nuAsGmKKOIiir+aRvGVOpgaURsKWPeLAG/Jen5cjeo2y2g51iC3dFhanc+2YXmUTYvi4IekjR4kQmOsPkws/vUeYeh9TJUXG5BG8PFje16lYSgVgEdtc83TEG37a0tWOM3Jixm4tetei2ifz6E1NcD4rQ=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1662017282;
 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=SHzx12Rsu42Ye71toTN4bWIrkmgQVEH0DPBud2OqwOk=;
	b=j7nE4OGmBDnwPlkO318+LO0z4F1e/nUfdR4mOcY0WokoGdcJKLtYukzqmYoDtw9eWXe56kDgMibtPosADjCQhAPpJnWWmUUB4FgEQ+CgRrwXgMhnKxRo22NgGRy1vp/QGoKyESBjLfnkiktCrKEi+QcZdV0hLWzY3aQ5BmCiGrg=
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=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1662017282585742.857535860532;
 Thu, 1 Sep 2022 00:28:02 -0700 (PDT)
Received: from localhost ([::1]:34454 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1oTecI-0004WB-TA
	for importer@patchew.org; Thu, 01 Sep 2022 03:27:58 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:41050)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4I-0005vk-AG
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:52:52 -0400
Received: from mail-wm1-x333.google.com ([2a00:1450:4864:20::333]:35439)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4A-0003Hi-Jn
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:52:45 -0400
Received: by mail-wm1-x333.google.com with SMTP id
 m17-20020a7bce11000000b003a5bedec07bso802567wmc.0
 for <qemu-devel@nongnu.org>; Wed, 31 Aug 2022 23:52:42 -0700 (PDT)
Received: from stoup.. ([87.192.221.83]) by smtp.gmail.com with ESMTPSA id
 a6-20020a5d4d46000000b00226dedf1ab7sm8308153wru.76.2022.08.31.23.52.39
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 31 Aug 2022 23:52:40 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=content-transfer-encoding:mime-version:references:in-reply-to
 :message-id:date:subject:cc:to:from:from:to:cc;
 bh=SHzx12Rsu42Ye71toTN4bWIrkmgQVEH0DPBud2OqwOk=;
 b=wbzy/ksNA0SlkUV1s8PhRlgkyUksszXHWERNT9qmG1ysVn+FPq/H5cqzO8g15LpgOt
 T7Aj/wy+TYP4W3IqIOr/0KYvUjRUWMevR3R7AYhWMmVw5I1QcGVSyhGjrw9fpEA4l8FS
 oUy9BWBK0cNfV88Qu3bRSnonAbl6fuXn2+SYuFbMFI5NaoRbZzAJnyvLmMGh+orfImXi
 N9Kn8u+sUcrbTLt/sy4n627hBKkUEpTeGsSOJse/YORzWj2xIswUZbIhvffa75VxnKE6
 I3aVp8mi+gw4OTQPDNQL9PPl10nJCOjXHp9Jzy13bXXug6nhQ4hAb3qMm/Eeyz0S0Tyl
 Auag==
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=SHzx12Rsu42Ye71toTN4bWIrkmgQVEH0DPBud2OqwOk=;
 b=FlXSCFBeV1d5lbZXp4Pk5qOHLNYslhKzLv/HlBgzMetUhFQez2T0/LwxzjISbst5zr
 85jPEuxDam6E1EPYO5bCgvOKTVBlefDqJ4Q7uWYL2I8aYkBgWnBSXIzI8UVTyvHmkSmG
 5QZYfdtcx5C/YR3270TslhJp/24gfFzyksWAREFtOcjGj7KFVM3U1QTTdE3fanxO6fJj
 S1o9LfD8Zlu0rPL3rHxMsL1zIGn/vHxbJAM3OI+qED9DQ5ilQzVuHEp9YfYZiE+XYQjo
 0orUB1mgENXURznwQo1+xUcw6QK+knnxDFQIPXmi8/8GaYFfSaUEOPO2JvIkZo4N/btP
 fkjQ==
X-Gm-Message-State: ACgBeo2/a95zavOH9TMKY4GGsZNth6GEOaX0FjzOnC3y57JGngSkKBHx
 F60GFZJ+JT/Je83PQOd4Iqf1ekb/cdX+VNaP
X-Google-Smtp-Source: 
 AA6agR5dY7amNurjCy1COxfxoYjugTqfIo+aoPrNnMHCPF1yUgTV5DqTsnnQPbL8e81XJow3Bo98bw==
X-Received: by 2002:a05:600c:25ce:b0:3a5:a3b7:bbfe with SMTP id
 14-20020a05600c25ce00b003a5a3b7bbfemr4249120wml.115.1662015161030;
 Wed, 31 Aug 2022 23:52:41 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: Ilya Leoshkevich <iii@linux.ibm.com>
Subject: [PULL 05/20] linux-user: Clear translations on mprotect()
Date: Thu,  1 Sep 2022 07:51:55 +0100
Message-Id: <20220901065210.117081-10-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.34.1
In-Reply-To: <20220901065210.117081-1-richard.henderson@linaro.org>
References: <20220901065210.117081-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=2a00:1450:4864:20::333;
 envelope-from=richard.henderson@linaro.org; helo=mail-wm1-x333.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: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1662017283436100001
Content-Type: text/plain; charset="utf-8"

From: Ilya Leoshkevich <iii@linux.ibm.com>

Currently it's possible to execute pages that do not have PAGE_EXEC
if there is an existing translation block. Fix by invalidating TBs
that touch the affected pages.

Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Message-Id: <20220817150506.592862-2-iii@linux.ibm.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 linux-user/mmap.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/linux-user/mmap.c b/linux-user/mmap.c
index 048c4135af..6a828e8418 100644
--- a/linux-user/mmap.c
+++ b/linux-user/mmap.c
@@ -177,9 +177,11 @@ int target_mprotect(abi_ulong start, abi_ulong len, in=
t target_prot)
             goto error;
         }
     }
+
     page_set_flags(start, start + len, page_flags);
-    mmap_unlock();
-    return 0;
+    tb_invalidate_phys_range(start, start + len);
+    ret =3D 0;
+
 error:
     mmap_unlock();
     return ret;
--=20
2.34.1
From nobody Thu May  8 07:03:53 2025
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=1662017678; cv=none;
	d=zohomail.com; s=zohoarc;
	b=hhdMPZIBS2dO1LDRREixpdhpdItYMFTlXrGWZzB0yo/MQyAZ76Sulg4Fts4AItquN7nQI4DEfq1RtEpI24CpUKhuGsyBGu1AtkNAtwKPakfjIBcXEiQ224TyETrc/Z/a3jgsvvFq9hvLd/vNwAoTv7T5Zf1eBY4pylqay+h/vdg=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1662017678;
 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=imUJM0RqgHiOwu5RQxmd+nAJI9wbi70LVnHfGbBaG3lup47a7KpQ3gfKM0O59pTFMoDLiNL+3cpZuta0JpHFXRyqvHZ8bBj18q3jH6P6hTYX7B+PqWpK1BbmCT1EWekq10Brd+V2ceTTElUUf6ZfkOPU34mv/JPxTqybJEAnN1o=
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=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 16620176785321010.9208357304855;
 Thu, 1 Sep 2022 00:34:38 -0700 (PDT)
Received: from localhost ([::1]:34144 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1oTeij-00029A-6W
	for importer@patchew.org; Thu, 01 Sep 2022 03:34:37 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:41052)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4K-0005wB-6p
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:53:02 -0400
Received: from mail-wr1-x42b.google.com ([2a00:1450:4864:20::42b]:35584)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4G-0003Hs-UV
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:52:51 -0400
Received: by mail-wr1-x42b.google.com with SMTP id s7so6104079wro.2
 for <qemu-devel@nongnu.org>; Wed, 31 Aug 2022 23:52:45 -0700 (PDT)
Received: from stoup.. ([87.192.221.83]) by smtp.gmail.com with ESMTPSA id
 a6-20020a5d4d46000000b00226dedf1ab7sm8308153wru.76.2022.08.31.23.52.41
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 31 Aug 2022 23:52:43 -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=T1omgBQnnViYwpXE74X5m4q8MhXmVMsv1XPYim4AMFinfRgDFQrepe2VnKQhhAxaVj
 CiMzNIiRm8K7S/l9ySjYJsCROw0VA/7/xYhZ1Glamj/sSU3MkyUH7WDRH4XHd8Dq1Fbw
 HD/O2jZPgDzL0al0SWq9p9oclibYTqflj8slj+awGl4N7SF44H4yHvvTJUmbEueVE32V
 fcex/P/wIAaf8RkTcVWGYPM1RhwXBUvy/DH9BFWuCHxtovqIc6OHVkv+j8U+IxXQAo/j
 se1s0KN8ypXaSOVVIYSW/GqBzpAyGLFaVHQ8aklEDRUyLlzieCp6COv+ZDIn63pPGz5C
 L+Og==
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=zyrUi9TbUxIVZ63gI0wFbAcQYPFM0KPr+gNVdcQOXhrLBe61vOTe4Brnol+cu18I0u
 RTeZOWkvQBgULQgfm753fmD2PcR9pjs72aXw02PemMuq7N/URpY5ghch3dxIDCYi2t3J
 0E2CpuoD/nfR7JutGZ+HgAn7HGRZ0jDmVIHp3vPfL7L1lRHKo5iCy1Me7CsPN3+9CgCG
 cMrWcoG2dnhlf6tP4euiG+DuXvB/2P2CVlKbNGQDetqZuI+sl65sgJJXDdjZG/z+XJcq
 7n89q5I3+1WqjsWZfeOIfaPfhd+rRxTTWRfuNnfyNXADfaZAypccOV1Pr02aIXqgoexb
 ZgYQ==
X-Gm-Message-State: ACgBeo2EHFrzsMLsSI4KknmMEsoglLfN01qPLb3nCPtAn5bjSqgs2AvG
 X7PcxTyXcHWThKNTZwq6oaB9xwRMxfUSfFpR
X-Google-Smtp-Source: 
 AA6agR4Z7ESlKsK1/7sM5z35P542i0jLk2WqZLEsuG5EZFjJYqL5QDwgU+ZyR/6RfAmPgMANRnX9xg==
X-Received: by 2002:a5d:64e9:0:b0:220:7dd7:63eb with SMTP id
 g9-20020a5d64e9000000b002207dd763ebmr13503325wri.590.1662015164446;
 Wed, 31 Aug 2022 23:52:44 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: Ilya Leoshkevich <iii@linux.ibm.com>
Subject: [PULL 06/20] tests/tcg/i386: Move smc_code2 to an executable section
Date: Thu,  1 Sep 2022 07:51:56 +0100
Message-Id: <20220901065210.117081-11-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.34.1
In-Reply-To: <20220901065210.117081-1-richard.henderson@linaro.org>
References: <20220901065210.117081-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=2a00:1450:4864:20::42b;
 envelope-from=richard.henderson@linaro.org; helo=mail-wr1-x42b.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001,
 T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1662017679487100001
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 <iii@linux.ibm.com>
Tested-by: Ilya Leoshkevich <iii@linux.ibm.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 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 Thu May  8 07:03:53 2025
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=1662016421; cv=none;
	d=zohomail.com; s=zohoarc;
	b=fNPYl26FFpdOZLDv77dr5RiEG8zmI6cU84weTmNLX5NojuuvrN4juuEus/A7hc32nB98ERLELtjEJd/ua63liZj1v2pLZrTUL5PiyqgmWyicella+Opc1iy5TLfPoQCZAUMh5Mzr8jSf8dOKxhaFnSm15uW54ztolj+h/uW6/AY=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1662016421;
 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=fAxlJ9/kVpUM5r6mlmj5hAi4LLyPx1/OVFFKWicxfPDTsG3Xax2qU2x0ZxC64NOX5YALFBezaYDYXiKR8YGhjP2mBhtOLgkLQjzI0mui6HMbmA/fjDDAiIYmgkxzktqpFKiebxVIed1S3SOjcg7DiJKB1voJ7jstQkxjbQ223dU=
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=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1662016421345731.204401612868;
 Thu, 1 Sep 2022 00:13:41 -0700 (PDT)
Received: from localhost ([::1]:40720 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1oTeOS-0003yC-0A
	for importer@patchew.org; Thu, 01 Sep 2022 03:13:40 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:55008)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4O-0005wO-5S
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:53:02 -0400
Received: from mail-wr1-x432.google.com ([2a00:1450:4864:20::432]:36760)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4I-0003HE-1f
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:52:53 -0400
Received: by mail-wr1-x432.google.com with SMTP id u17so1744245wrp.3
 for <qemu-devel@nongnu.org>; Wed, 31 Aug 2022 23:52:47 -0700 (PDT)
Received: from stoup.. ([87.192.221.83]) by smtp.gmail.com with ESMTPSA id
 a6-20020a5d4d46000000b00226dedf1ab7sm8308153wru.76.2022.08.31.23.52.44
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 31 Aug 2022 23:52:46 -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=iHHwqQQDIPgqQjEBQ0AM+ad6yviEEToq0tbdAALDR4+2KIGud02xYzu26YAtD0sV6K
 P7OgBy6zISuKyrDS2Es0hygczDk79dTYOt0sVBLOgu97vBbyzcMwGXVVpOh6H6TurWii
 QROQiKfUlwYBH0GX6f7erwBko7sfyOjIlF5wOVPGaFG0Nbcyz6MJpVTPq2yKOh3xZEaK
 RzMw7bYowYw7srFuCU08VlrWQuEUNlnCGbxsbWQLHPaP5OIGC9VXbvfm29wenrUsb8w9
 zC5b6guil4d1pNARPkVxhgDch7roQAmVMT33Yd+DxPOS4VA02vktfJZd0Ufle7R6mgOD
 +phQ==
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=kw3cCqoHgZIM/IKC1YxV/ncd27ZCQ/M5H++C1B75NJmMJ7ewr2zdiVHjvK/FNz3S/2
 wT8R7+epmNvTy+iXxNGOWI59fssR+RFVIPPsiGCJscsombBYgWQINfals23gw06Rqtsb
 qPYfYWXat9QaLA272e3YxgwPLa+4bCcci4O2j1w7tdlC5wPORgd0vXvTuz2MnSaQ/nyp
 DglJXPqZy+aM99i6B1l4w5qX9eB8/OrQ3t8I0ct1TKozAU/Wi4EszC+J99u2Aa3Jh44L
 xlqMkicpgi4l/44UMlpfwnMYxNiBjYPAi/JQB5/CP53Xh2YiRLX+9RFIW1gKYWkK9H3W
 CLiw==
X-Gm-Message-State: ACgBeo270iNOZA1J4DyOC4MtF0Vz/wn71AGk4H1NbjnHWwzXZd0HKKHJ
 IPZcBIz+Ace0E03lIR8xjTcUdJhOXamnklLZ
X-Google-Smtp-Source: 
 AA6agR6jviPDtlARx0B09x8DAQAC37RK3TVwyheFmDbeocoSRsX57gNCHiZ3ZYYC/eHkz4dA0TNLkg==
X-Received: by 2002:adf:e78c:0:b0:225:f5db:969e with SMTP id
 n12-20020adfe78c000000b00225f5db969emr14331996wrm.716.1662015167107;
 Wed, 31 Aug 2022 23:52:47 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: Ilya Leoshkevich <iii@linux.ibm.com>,
 Alistair Francis <alistair.francis@wdc.com>
Subject: [PULL 07/20] accel/tcg: Introduce is_same_page()
Date: Thu,  1 Sep 2022 07:51:57 +0100
Message-Id: <20220901065210.117081-12-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.34.1
In-Reply-To: <20220901065210.117081-1-richard.henderson@linaro.org>
References: <20220901065210.117081-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=2a00:1450:4864:20::432;
 envelope-from=richard.henderson@linaro.org; helo=mail-wr1-x432.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001,
 T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1662016422955100001
Content-Type: text/plain; charset="utf-8"

From: Ilya Leoshkevich <iii@linux.ibm.com>

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 <alistair.francis@wdc.com>
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Message-Id: <20220811095534.241224-3-iii@linux.ibm.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
[rth: Make the DisasContextBase parameter const.]
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 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 Thu May  8 07:03:53 2025
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=1662016435; cv=none;
	d=zohomail.com; s=zohoarc;
	b=Fpx3zcKIEt+yPIN5lmNvdva1WoQtUSnCQc6v4Hwm39PLSptdz1tiLV/sLK9PxLU60xI8iIW0Ekolz4lePO9wlVS+eq1wltjaxWBCwAnz+BDXWQYsolB1s5i+bv1bq3oST+e1Kbnfo34vt0DYUErPYkAjiOG9rk0vkBFXwmNJgsk=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1662016435;
 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=M8k7INWbeFTVJiul2ENAwHhs/2Kfd59wQP99Hj3ZwhA=;
	b=F6KNpYx16Jw86dAfyTWMDfBHQ+bdvTFq9JwaTysDweywgftAmfc5NUhcZv9j/35iL+PIwpko40Pgm9+ZNbe9/GpNfCEv7s+2yyPt7N/JR4SETBglRT4H92IziOwVGtH6cAlZ8LaFpEjCURvn9BpaJ4H4bISHKCTeHpbJsKvwReM=
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=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1662016435773930.5880005893715;
 Thu, 1 Sep 2022 00:13:55 -0700 (PDT)
Received: from localhost ([::1]:54402 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1oTeOg-0004Qa-Jg
	for importer@patchew.org; Thu, 01 Sep 2022 03:13:54 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:55010)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4O-0005wW-Qr
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:53:02 -0400
Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]:44639)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4J-0003G6-T3
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:52:54 -0400
Received: by mail-wr1-x42e.google.com with SMTP id c7so14348646wrp.11
 for <qemu-devel@nongnu.org>; Wed, 31 Aug 2022 23:52:49 -0700 (PDT)
Received: from stoup.. ([87.192.221.83]) by smtp.gmail.com with ESMTPSA id
 a6-20020a5d4d46000000b00226dedf1ab7sm8308153wru.76.2022.08.31.23.52.47
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 31 Aug 2022 23:52: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=M8k7INWbeFTVJiul2ENAwHhs/2Kfd59wQP99Hj3ZwhA=;
 b=FHqQJ3KF+JOwafQ6KEIh6z7Kyj7ISkA2TPydJOp9I3W0rlq9DEXm/XA7FuCf2Ptdz+
 Tb8K9a6TGFAdRtrLvfnnQu1zcbeZjJRoXZDFBNUuad5KfsdMDH71QYj44mxvJd3uhyZy
 EfCXjfg1DIsOX3e/amKDTsKAGRaMufYJaU+cfZkVKnhDsd7H4wGQVIAAhHE9xPD3M1Or
 E8Vldsx4GVripCsi3a4WXWF49sTWklHKE1hF4KDiOqIEitHYmsvhYxYZSo9BWikgLTTz
 h19pRU7R45CMwN9NOvOTDLGowYNtidQdS28U5Mziq3lWnP+gNJlsCEGKOI7zx13vnEbM
 p7Vg==
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=M8k7INWbeFTVJiul2ENAwHhs/2Kfd59wQP99Hj3ZwhA=;
 b=AwPLA2v2tPMp+Kbtj/emP5J+uPII6fEvMygMKTt6DJpiIkzAvXUIKjmcoc2s3hXWSj
 US/jdziEyCVlXtYas2+IBXqixeCln27dTIp5wNY8s7WDXwQTtzBx5nNJogZnld5ZYhV2
 wp9p/z8w8jbrqmPmZPmZvyzjunrkOpHiUhHZQHsJCxJ4lAhKNFQho7TcqPAkH+8zROjo
 AWHzku8QcQ4UxUCisU+BOEXnL9yu6Hmyff2+THUzbGCf679xjNHGq4gNsIe7s8atYXHe
 oYFIFzDChQoCasq9BIsoKh2r2p/tjFq4LbvyqgcjsNaaccJLGYh75luTQnSzKUnhGgeR
 nZmg==
X-Gm-Message-State: ACgBeo1JZTzjuprxkr2ziM17Q0U6kJFFNI5obWB8CfJ1F4zXq2XWHkH0
 Amum5tVHKU0SOzYLDJlMFdLUMy1qnI0DFBha
X-Google-Smtp-Source: 
 AA6agR4upyhWD18SQfy0qNBORDA2E0wckyP3ztpgp0z9zXsKWLVPM/A2MbFkaxJ0ASQfiNtGdOzO6w==
X-Received: by 2002:a5d:424f:0:b0:226:d206:cd6e with SMTP id
 s15-20020a5d424f000000b00226d206cd6emr12870542wrr.554.1662015169351;
 Wed, 31 Aug 2022 23:52:49 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: Ilya Leoshkevich <iii@linux.ibm.com>,
 Alistair Francis <alistair.francis@wdc.com>
Subject: [PULL 08/20] accel/tcg: Properly implement get_page_addr_code for
 user-only
Date: Thu,  1 Sep 2022 07:51:58 +0100
Message-Id: <20220901065210.117081-13-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.34.1
In-Reply-To: <20220901065210.117081-1-richard.henderson@linaro.org>
References: <20220901065210.117081-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=2a00:1450:4864:20::42e;
 envelope-from=richard.henderson@linaro.org; helo=mail-wr1-x42e.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: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1662016436955100001
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 <iii@linux.ibm.com>
Tested-by: Ilya Leoshkevich <iii@linux.ibm.com>
Acked-by: Alistair Francis <alistair.francis@wdc.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 include/exec/exec-all.h | 85 ++++++++++++++---------------------------
 accel/tcg/cputlb.c      |  5 ---
 accel/tcg/user-exec.c   | 14 +++++++
 3 files changed, 42 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..2bc4394b80 100644
--- a/accel/tcg/user-exec.c
+++ b/accel/tcg/user-exec.c
@@ -199,6 +199,20 @@ 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=
);
+    g_assert(flags =3D=3D 0);
+
+    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 Thu May  8 07:03:53 2025
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=1662016074; cv=none;
	d=zohomail.com; s=zohoarc;
	b=H8gQP8K5wocp49+cFQFU/LXTvc2HprDulvmCi8JBResfVEpmGnSwNuEE57la4+/E3MnLky+U+PY3al42tuwQYP8Ruti+KmdWrT8b4vTeX+fe4WOm+33wgfivwkQ6O0pz6Hp8y1MBI+mPd2mXJLJg/Jbw9gf2aIRY+z/ltpyO/V4=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1662016074;
 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=gUYWndQQ8pFmIauaAuMmFCedmEzSZQGaU3WPNExELkk=;
	b=koUIQ4BGv8XXY8QuEM7mhtt8f1Mf25pcCOBQCEaKi8Spb2+lLf125vxT3+wSlmCS+FnhCB05a/CmmoOPbLq4XGuU/ek7om+YAJv1LNYbN4DjNr+O+t9E/XuTg5J8hHMubnx7wvfAfjkWcO+k/eknIRps0JZvzmbnfD3L5WUefVo=
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=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1662016074485147.92742945929888;
 Thu, 1 Sep 2022 00:07:54 -0700 (PDT)
Received: from localhost ([::1]:48576 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1oTeIq-0006j2-7V
	for importer@patchew.org; Thu, 01 Sep 2022 03:07:52 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:55012)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4Q-0005wY-RO
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:53:03 -0400
Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]:37426)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4O-0003Gc-Hu
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:52:58 -0400
Received: by mail-wr1-x436.google.com with SMTP id n17so21009012wrm.4
 for <qemu-devel@nongnu.org>; Wed, 31 Aug 2022 23:52:54 -0700 (PDT)
Received: from stoup.. ([87.192.221.83]) by smtp.gmail.com with ESMTPSA id
 a6-20020a5d4d46000000b00226dedf1ab7sm8308153wru.76.2022.08.31.23.52.49
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 31 Aug 2022 23:52:52 -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=gUYWndQQ8pFmIauaAuMmFCedmEzSZQGaU3WPNExELkk=;
 b=IM7jwaxmOUDVeG2/cg1ZPLivWqbYBIxS52tq3zFVJtiCLm92JdI/a48MItt0w22vrl
 JRm1VJz1ke4g/CaU9xaFeRdvXGStdU2gSs9TxuiWzOGA5BmtT+ilRaAIpQyZ5iEY7jyB
 aSMOHihdKrssF8K20WZPiECt8mm5MkwkECkzjFdIoQ1JD+SfvhaiM6GaESBh2rc30glQ
 CcwX19XmOrafpoEm9qw3KA3LrfdvdhyM6SyR5H9YegtneUtzzaDES4o8N/xC0ZZyqb8h
 8oHi4/uZRljJyDmEOfm/iQWucPQoKQVb1SwuUCIMf3YpQPIXvqzLr5PTVkrPF4Wkk9ON
 3ZIA==
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=gUYWndQQ8pFmIauaAuMmFCedmEzSZQGaU3WPNExELkk=;
 b=j7YvohPk+e+2LB04KIo/nHP74WHeduoKVpxe5vQPKacEuWVuSXFiHYMGD7aclHE498
 jOh5jforUBrfCEVQsLfQIWQ734S6Lkkz8h+8ljd84eJsT72QX40QeOa783Ko6qnQieLf
 bbAm0eBcm8WdLO4bQ1KfLI0AhfNVOiJVLJG/PbMmLX572jqkicaXTo4MOmutjcViDj+7
 anDTsWQpRxWMUya1Bmos383Kj5lvNYoOWF0bJcGS2XFPAt6EYcAXd4GLQ7gZIaTMxpRg
 TdanOR7OabyExDEh8wT23YP5OxDBRZ1c5+MH0cZWQFefHVYv8ofLY++EzJz0pbS54fsH
 2VCA==
X-Gm-Message-State: ACgBeo2zN1FEM8nNwn67pI1M18gencbF2uHBSocP3UxOcVcoEYA41SeP
 KKKEMm8pt/Jhnc9qkG2V+XlVECqkwWO5ns15
X-Google-Smtp-Source: 
 AA6agR5eduiWgDYQGWmub894VlZnEs9Y0nZNoqxHncpWJYa6w7W2JvHQfIThq4xahfj6Fhb49nc64Q==
X-Received: by 2002:adf:e310:0:b0:226:d19c:de22 with SMTP id
 b16-20020adfe310000000b00226d19cde22mr12826757wrj.314.1662015173733;
 Wed, 31 Aug 2022 23:52:53 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: Alistair Francis <alistair.francis@wdc.com>,
 Ilya Leoshkevich <iii@linux.ibm.com>
Subject: [PULL 09/20] accel/tcg: Unlock mmap_lock after longjmp
Date: Thu,  1 Sep 2022 07:51:59 +0100
Message-Id: <20220901065210.117081-14-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.34.1
In-Reply-To: <20220901065210.117081-1-richard.henderson@linaro.org>
References: <20220901065210.117081-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=2a00:1450:4864:20::436;
 envelope-from=richard.henderson@linaro.org; helo=mail-wr1-x436.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: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1662016074725100001
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 <alistair.francis@wdc.com>
Acked-by: Ilya Leoshkevich <iii@linux.ibm.com>
Tested-by: Ilya Leoshkevich <iii@linux.ibm.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 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 2bc4394b80..521aa8b61e 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 Thu May  8 07:03:53 2025
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=1662015518; cv=none;
	d=zohomail.com; s=zohoarc;
	b=eyNVrwDNkeo0mEtoeY0OxHHk4Zps0bB26ImUaXeWyAXk88pxibFT89pzA42f+3mJ+WbxoVHR6QEseCZ9fYwFcUEL4rTLwxuo9wzl2L1BlmJkMiDh3KGWyOdafWUSakLLuU+bwfx4vH6BYGquULo3j/UfigeZ7m9iWMaB2WfLrHU=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1662015518;
 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=jVHtA92LQ2XRHvp3/hldzpu1kyqxEbHnGB7RzjiB2FuMdGepbl0IcMiOrBGODqNYUfvzunsxXh7qNvdgrOKBeKPZzOIKlhE2jEZd3QBpdTA/GuGdnODXjQ45y8w077LVdzewRM4ci/zfeXDU4r7aYubeoZFF7VJI/QD3ol9mNOQ=
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=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1662015518116691.3617451133024;
 Wed, 31 Aug 2022 23:58:38 -0700 (PDT)
Received: from localhost ([::1]:44770 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1oTe9s-0000kf-S3
	for importer@patchew.org; Thu, 01 Sep 2022 02:58:36 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:55014)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4U-0005we-Ir
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:53:03 -0400
Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]:45914)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4Q-0003G2-7n
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:53:00 -0400
Received: by mail-wr1-x42e.google.com with SMTP id w5so4832343wrn.12
 for <qemu-devel@nongnu.org>; Wed, 31 Aug 2022 23:52:56 -0700 (PDT)
Received: from stoup.. ([87.192.221.83]) by smtp.gmail.com with ESMTPSA id
 a6-20020a5d4d46000000b00226dedf1ab7sm8308153wru.76.2022.08.31.23.52.54
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 31 Aug 2022 23:52: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=yIEiKLRCM7TgLMdcNPxS9cOM8lzBkmKHXmNR9jzi6abZTaMt+nLlixbst1n/nf76hf
 rDm7qNnymNkoAA8FCZ8HgwLBe98URiISgUn2ltW9g4sXt3hwEnbpyd804btFeB4JBf5K
 wFMTtdl+21UHn7dVnG17aYit/icIUCSvrlZ8GGK3vYeaulQrRt68mZvUyTAgb4/TZ2Gh
 r/Z1RfMquRVoFkkkRoanSV+rA83maZzmj/qhxW3/UGLmkHrqcguVRkIu0DjjkCqVLJMf
 KjbS14SSnFVo0C3MCq8OFDGKXx2p5S3QJQaPj5NujzztdMZmHjp/UaSPjTBY1SP2wLip
 BxgA==
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=IepzW3+J+/8EbVDjsm+cw4gidjiIw98TDGXKP+ghZkFV5JXJgRasSbq9k+iy7wFqrx
 VdCaz/D5tMHMwubwtzob1/VowuWfh1WhnQI7FCeXBC+dpusYpVwyTwXzB/dCmQG4SnxE
 LXpnzpSMDeuV+JXWTaB3wGkU2YsLYbSwLNmMNX2YNIck6dTiwTATZ8SerdR4OtCXSah9
 St2n/hCGR5VX4Y83e9o7OnSl0c3gS3HtTpCM6/gCBWq1dt3IpmBt/YcImctU83fumJ0h
 QjwVnnETZ2ZICPCmTjwtRCQVG187V3m9zXlG1K8E914I81ar/4MHL/g/SjkL5BwGxXUs
 XdEQ==
X-Gm-Message-State: ACgBeo3GWE8/Kx4Uj0oWYyIB/RrLPGaue9LojRb8yuZaYP1GYA2B4RJp
 QrwY0ohEGrer9yCRe8RnldXZaoIgVw/XpVaO
X-Google-Smtp-Source: 
 AA6agR6yssG/rBudmJEhzx0k5i0wu0UN72meJ5yqMJOiLMyIA8fXfZSdo2T1yd7umSQJKBeK05ltLA==
X-Received: by 2002:a05:6000:2ce:b0:226:d420:db7a with SMTP id
 o14-20020a05600002ce00b00226d420db7amr11854630wry.489.1662015176456;
 Wed, 31 Aug 2022 23:52:56 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: Alistair Francis <alistair.francis@wdc.com>,
 Ilya Leoshkevich <iii@linux.ibm.com>
Subject: [PULL 10/20] accel/tcg: Make tb_htable_lookup static
Date: Thu,  1 Sep 2022 07:52:00 +0100
Message-Id: <20220901065210.117081-15-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.34.1
In-Reply-To: <20220901065210.117081-1-richard.henderson@linaro.org>
References: <20220901065210.117081-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=2a00:1450:4864:20::42e;
 envelope-from=richard.henderson@linaro.org; helo=mail-wr1-x42e.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: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1662015520091100001
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 <alistair.francis@wdc.com>
Acked-by: Ilya Leoshkevich <iii@linux.ibm.com>
Tested-by: Ilya Leoshkevich <iii@linux.ibm.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 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 Thu May  8 07:03:53 2025
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=1662017050; cv=none;
	d=zohomail.com; s=zohoarc;
	b=JuDcx/DqS/P95NcPAF7L7BuqxHCedr5qQddFu3BrjyReF8pd+Eh1+AMk8+/b1Bkefj4tIHL2M4zt3Y3VjQrLuUGnEE0E32ECBdtA3AzbMO286/F1cAXs+mYb2LLJJXoGL59O/iv23kMvyxYTIGeRinV4ekClLV6WcLk5s0weAsE=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1662017050;
 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=Kh1uN4/0ovlH8dCidDvOH33OgIiJlJt8Oo88s09rMG4=;
	b=OOJxo5SK4/Df8VI5D9cd3DAws+pTIQ/lkfbQbDJ/CR51feYj9Xaz3LY4VdS3pZq3JXhyZDhifjadX/adZmwNGQ4XF7PeH0PMwvkKequQNglj4TzvTUIYsyvPozOxXOgzPO86tSzDPUI4FlUmCnaM168JKK76ligkypKX0S01Ty4=
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=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1662017050511509.11951173434113;
 Thu, 1 Sep 2022 00:24:10 -0700 (PDT)
Received: from localhost ([::1]:36188 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1oTeYb-0001dG-Am
	for importer@patchew.org; Thu, 01 Sep 2022 03:24:09 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:55016)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4V-0005y9-So
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:53:03 -0400
Received: from mail-wr1-x432.google.com ([2a00:1450:4864:20::432]:36760)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4U-0003HE-3K
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:53:03 -0400
Received: by mail-wr1-x432.google.com with SMTP id u17so1744826wrp.3
 for <qemu-devel@nongnu.org>; Wed, 31 Aug 2022 23:52:59 -0700 (PDT)
Received: from stoup.. ([87.192.221.83]) by smtp.gmail.com with ESMTPSA id
 a6-20020a5d4d46000000b00226dedf1ab7sm8308153wru.76.2022.08.31.23.52.57
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 31 Aug 2022 23:52: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=Kh1uN4/0ovlH8dCidDvOH33OgIiJlJt8Oo88s09rMG4=;
 b=nGES2j1zAYv6xQaIA/Mzd/GEs7tL4t3IGA7KxYeaoCbGfKVR9ko+7LB0A3O0cwcP7B
 qpeV4Kk1cAuLt9FdcuRiwGFetArRje7HHGGQT1c8HADZjGG2GP3VzkHPRZSCSUv1gn2H
 6fYZKknyWyY8J9m6S5Flmnjxa0LC1FsOFZM1VqJPQGx3e9fU/XI2yWNeHAwNUSVcMgxt
 WvKyne/LLsyRty7s8CLLROS6ujhd30RpCBb7mHyLyYvS78FT14V7cT0huX6fAziGXa4L
 LQI2jpsAitmkLsAZXOR+tG6azvo78ndWBlA3PzpUvFnyiHCX6pfNISLElw80NDD+5MG1
 VqJQ==
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=Kh1uN4/0ovlH8dCidDvOH33OgIiJlJt8Oo88s09rMG4=;
 b=zjkP9+2IYlQ/6wuySWhRJ8K9FsNfE3uh1IxJh2errH3LJY/9BHhcWF2gi5v8WqBD7B
 GEDT65ws520e/+ge0bvUUiBGCbizxB6OAA7b0J2Zfp8xG9SFanMqaqG8XkfxCG6tZojq
 oTfDU9TjxaRXjj0QWNMhIxP50oNBRkOFSq7dDf4JQe1vJ+Au3uSswQ3WKVc8U/fn3kYe
 zBh64+HlttpfqBWt1JQLtVJmF4hyGypGHrTeHB4iN62FpLjS2ZzKLj3Ug4zdx0YRdQWu
 G1f6+H/jl1IEyPmFi41jl08WCUK4E5CbHzKo4Nm+bUjWj+48Ciftb2jt3cx7G23k7APB
 t1wQ==
X-Gm-Message-State: ACgBeo0fgNOQfrD8p2UvF67w+4v5Hvv+Lk+FQS1NpJF2Dc/aArKIxOrZ
 8D7VynbJ6FBBs6cpxtoWhaNxI5j0gkP6kJe+
X-Google-Smtp-Source: 
 AA6agR41af8jL3pLrNL3Fnr8GZ9eyEm9TpYXvD5qDAGOdFn8z5tamDFKUkZaz9g0lSOBhR3tW386ug==
X-Received: by 2002:a05:6000:799:b0:226:e3e9:e482 with SMTP id
 bu25-20020a056000079900b00226e3e9e482mr6425475wrb.219.1662015179240;
 Wed, 31 Aug 2022 23:52:59 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: Alistair Francis <alistair.francis@wdc.com>,
 Ilya Leoshkevich <iii@linux.ibm.com>
Subject: [PULL 11/20] accel/tcg: Move qemu_ram_addr_from_host_nofail to
 physmem.c
Date: Thu,  1 Sep 2022 07:52:01 +0100
Message-Id: <20220901065210.117081-16-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.34.1
In-Reply-To: <20220901065210.117081-1-richard.henderson@linaro.org>
References: <20220901065210.117081-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=2a00:1450:4864:20::432;
 envelope-from=richard.henderson@linaro.org; helo=mail-wr1-x432.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001,
 T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1662017051778100001
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 <alistair.francis@wdc.com>
Acked-by: Ilya Leoshkevich <iii@linux.ibm.com>
Tested-by: Ilya Leoshkevich <iii@linux.ibm.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 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 50231bab30..56e03e07b5 100644
--- a/softmmu/physmem.c
+++ b/softmmu/physmem.c
@@ -2443,6 +2443,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 Thu May  8 07:03:53 2025
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=1662018107; cv=none;
	d=zohomail.com; s=zohoarc;
	b=UyJEiYTSImH+HaEkFcJTrhZGAW5DtJ+Z9W/+92xEaugJhc4/sSS93M0sCegda4/uZpbOug0uLry5W3ScmgcwiLhXimrARNffwbaN0MHQ8VEgKCwWIT21NWmnFkDnmE9ha4VNjvoSSfW61I6LVfQaKq8atQZpnIPSYW5CCpA//vI=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1662018107;
 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=QZMxXWZtPoPLMuG/b9Lga8rE70U1XaPMmohwdsSbCWs/Q3Zl6rB1Jo71DgybfCVdSeKsge9FdODRSSL4RIQefozodPMwyHlxwDffLoVbz/pCdH1eBLenCB5BHGmTx6p+Tk9eMIz/Uot6ZplofHxzriOf0KNYBLs2b9Wa0j1+zFM=
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=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1662018107249469.0731091964062;
 Thu, 1 Sep 2022 00:41:47 -0700 (PDT)
Received: from localhost ([::1]:43416 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1oTepd-0008Rj-5e
	for importer@patchew.org; Thu, 01 Sep 2022 03:41:46 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:55018)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4W-0005yn-6Q
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:53:04 -0400
Received: from mail-wr1-x435.google.com ([2a00:1450:4864:20::435]:39717)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4U-0003Gu-E0
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:53:03 -0400
Received: by mail-wr1-x435.google.com with SMTP id az27so21015919wrb.6
 for <qemu-devel@nongnu.org>; Wed, 31 Aug 2022 23:53:02 -0700 (PDT)
Received: from stoup.. ([87.192.221.83]) by smtp.gmail.com with ESMTPSA id
 a6-20020a5d4d46000000b00226dedf1ab7sm8308153wru.76.2022.08.31.23.52.59
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 31 Aug 2022 23:53: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=aenCwLhyHz+42ttancSjHI4JZk2Ya2FL+nx6M3jTwMg=;
 b=z2D14sNY3YduiJeshwg3aEXmGQfRy716YpLt9ZO7I3RVYi8t+F3lK4ygqiYQzos1R2
 o/iXxcyyacdJ9jm/kfJrDgc3alaruPfLsub/bf8kA1WA1FPdDA/s9KdHjnrWabR2KWqQ
 nnEijWsDqwsTY0QXCQ6uC8uCiZi7WhOqxnVVan74+BN8cqnqVuDjo847lzEvd3T5LPYf
 h4x128WYje/JjPQ9J4tJx+HKm/pGtn2x69sIeyz7wS4sVW4IjDgUdG2zGhWMEjX4SZC1
 Auck4hQvwi+Mh3ozGHMq+PAGro68qZLbvMfBCvPeyWKoBLRtMXpjsZxEud3IvnYfkpUe
 CYUA==
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=E5WJxtE1YStRpVVTsZOAZvdkhn/lnDBmrf/Zi2XdoUhQE4tJCf1A3nKjebZWHuA7nL
 MCbUZy1KNinEwHhsFFVyLTzl8+u3J/eE5GwM1+FOe7E6ok4MFv/WSVS+/168tn5qvK1m
 ZQ0RcoJuvEdKqr8AtKsJzDZEGpwtNCMXrHpwLVdfbukkheM52EfslQHUPS1AAXFioOPv
 9gjFiWWDjhubCnVLXVoYbPYdd6kz2pk+l3/eG0mmYjyHSoitztCovTUBNgttfaOSHfsC
 /Iq03+SOvtZS+jkSG77iSJhyhvwj3LRGaH9rqxiQ+67O4MJAAYc0T4DIhXzXZJnaH/dy
 RIIw==
X-Gm-Message-State: ACgBeo1bQhzhD2kKVBwD+6xNU7h78Z+KS7AWxqUfREwTFXaxfPZPCYI2
 77gv+xGksNQP8X7GuoEpjoUhioaqt+TfZcwc
X-Google-Smtp-Source: 
 AA6agR6FWbKjkXNfRa9sDnvcM6gnCjgMiLNfvsf9DObsGt99MvfZFv5Bpw2emnTtCyk5JiO+DbuDaQ==
X-Received: by 2002:a05:6000:81b:b0:226:bada:a5 with SMTP id
 bt27-20020a056000081b00b00226bada00a5mr13699436wrb.539.1662015181647;
 Wed, 31 Aug 2022 23:53:01 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: Ilya Leoshkevich <iii@linux.ibm.com>
Subject: [PULL 12/20] accel/tcg: Use probe_access_internal for softmmu
 get_page_addr_code_hostp
Date: Thu,  1 Sep 2022 07:52:02 +0100
Message-Id: <20220901065210.117081-17-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.34.1
In-Reply-To: <20220901065210.117081-1-richard.henderson@linaro.org>
References: <20220901065210.117081-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=2a00:1450:4864:20::435;
 envelope-from=richard.henderson@linaro.org; helo=mail-wr1-x435.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: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1662018108197100001
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 <iii@linux.ibm.com>
Tested-by: Ilya Leoshkevich <iii@linux.ibm.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 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 Thu May  8 07:03:53 2025
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=1662017480; cv=none;
	d=zohomail.com; s=zohoarc;
	b=CMIb1Wdr8YjWzGDV2fW0PKSKkyrn6LbFb/hIWXCoT7QYuvso8/2/xWUAZtof1vzeHfCddhnyo+YdbbwJWsi2tGXyQEx9sqv4UkLJ8oY0rkvj4IlHOt75br56SEGypGugaMs7sHqAS+Wnu7DXT0qa2wZcji1zc3Aimm0wwNZ6OfM=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1662017480;
 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=w1ES14kbaqz1aOCbKXN9PfcL6E/pNAFDrn35F0KK2iE=;
	b=kbyOFXnfsFzGQGRp6OIFC7uZ9jikDx7uzRsjJ3nL43ATGHGuEhECU4rf63ZestH2kXsZQ2WCai5gZLiKEhdbkcvw+lrE3krLJqVtqMRoOjZV44nzNIFba1QopYrx55Owstk6bXu4uwTdLBIgMx41dwLFPqxUAo2eQP0z/DQvSTg=
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=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1662017480398554.1238532711569;
 Thu, 1 Sep 2022 00:31:20 -0700 (PDT)
Received: from localhost ([::1]:46284 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1oTefX-0007fv-7D
	for importer@patchew.org; Thu, 01 Sep 2022 03:31:19 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:50430)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4b-00069m-14
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:53:09 -0400
Received: from mail-wm1-x334.google.com ([2a00:1450:4864:20::334]:52124)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4Z-0003P1-89
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:53:08 -0400
Received: by mail-wm1-x334.google.com with SMTP id ay12so8477586wmb.1
 for <qemu-devel@nongnu.org>; Wed, 31 Aug 2022 23:53:06 -0700 (PDT)
Received: from stoup.. ([87.192.221.83]) by smtp.gmail.com with ESMTPSA id
 a6-20020a5d4d46000000b00226dedf1ab7sm8308153wru.76.2022.08.31.23.53.02
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 31 Aug 2022 23:53:03 -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=w1ES14kbaqz1aOCbKXN9PfcL6E/pNAFDrn35F0KK2iE=;
 b=IE51DO+n1JT5HFRxYYsDddn8SpP7goxnuo4Bi/L0WeQfap45zQDipNVYZyELxi0xFY
 D7yvdDIBka3a81rdKwjTcMp5OCCgJO7cGFE0Fw0fP33mLmjS4S3NeuxkB553KtNKCAIs
 qTOGKVG4f0uCRM549P+KC7T3NzYOLbdUQ6stqyzdSNNftJ/vrwSuqyCR3+Sg7SX+gw3C
 8HH6wv3068+d6PGhQs3YRNGP9fnd63mYobyjiR+vE+JmsSGKxhrXL+HU+t+9ZAAKsy2r
 aFq2bXPyqWmtBAA0r0z/xqyjaANdXiThKKDF+GuwNUon/+/74VzD68THMw+CiaSigzhR
 2tDg==
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=w1ES14kbaqz1aOCbKXN9PfcL6E/pNAFDrn35F0KK2iE=;
 b=KOlZztuQr6r507QnjNzwHZCjBdenP1p7vTJTeppZo3jW/fWC9sPEepKrrgzOurPQw9
 TI26iAbOypdpsad1A79JivOcU2ICr8fcyHOn8oVlWiabQ1l+X6/SeII1scFPd7yw4dSO
 fpjhbrqpzzmnTcYsTPh2pmLCHePf7LwuonXn8IfXJAYQGqnhO/pMh0+uQUdtXVxmG22x
 Zb5hpu1A6wkw6jtiykqYYR7/MK1eqvhGMUG9vRW+nzgfydGlkn9dMZ7gOdBKivrAOeSe
 ZzcJB53Ow1p8gjy/JPIHtO4b7G7Q1dgM6Msj1ma+ugo6XFAH8ldrXuFBglK7Tsm7RTWa
 ugCA==
X-Gm-Message-State: ACgBeo0IzKfOXFVdF6xnoyAdN+lu/4i7cTnmVI9n9Fs0Ox0beoUJSRWw
 UjvHtsOT/HyodNYjidrBmrGrplHthRU272WF
X-Google-Smtp-Source: 
 AA6agR65n4IvTD1D7NOCpyv5ZXm1iKjKXPtqPxCtZZmvCzEgxXE8HCaOxTjHllUXmbJ3A+i9Autk+A==
X-Received: by 2002:a05:600c:3508:b0:3a6:10a9:8115 with SMTP id
 h8-20020a05600c350800b003a610a98115mr4248393wmq.164.1662015184649;
 Wed, 31 Aug 2022 23:53:04 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: Ilya Leoshkevich <iii@linux.ibm.com>
Subject: [PULL 13/20] accel/tcg: Document the faulting lookup in tb_lookup_cmp
Date: Thu,  1 Sep 2022 07:52:03 +0100
Message-Id: <20220901065210.117081-18-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.34.1
In-Reply-To: <20220901065210.117081-1-richard.henderson@linaro.org>
References: <20220901065210.117081-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=2a00:1450:4864:20::334;
 envelope-from=richard.henderson@linaro.org; helo=mail-wm1-x334.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: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1662017481092100001
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.

Acked-by: Ilya Leoshkevich <iii@linux.ibm.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 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 Thu May  8 07:03:53 2025
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=1662017494; cv=none;
	d=zohomail.com; s=zohoarc;
	b=akuPjVWQlI5Ywj0QvM9/AnQ83HhARh+f5T4TnTQKgCNeWSwqiy/Tf0mQ6Me0WTC2bK1weZ2PTvRp+JlP29N6SO74SLz/vGrUmdX6EHNznnadX0zorKLvo7xMQSUs0SMrXY6K5NKJJJ8fx3KvgEMjQtOxRJgA+T5lphJOU3PEe/s=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1662017494;
 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=TgvLXy6bnY4K/Dh3r+OxzZW3X7Vee/UugH328jUXVzQTJArBMMhh+nEynkaml5JypF4cpnQ8GROYLKfjhvktPj3uf/rIW3DUHUDGqpygV3Ul049eLr5UUO+B2AD9BLvdYFQGiq8G5mOb1SiCxPoGLnCxqwRl05JXv6Om7xXO3oc=
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=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1662017494799134.04147050796098;
 Thu, 1 Sep 2022 00:31:34 -0700 (PDT)
Received: from localhost ([::1]:58796 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1oTefk-00081R-K0
	for importer@patchew.org; Thu, 01 Sep 2022 03:31:32 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:50432)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4c-0006C7-2R
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:53:10 -0400
Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]:45914)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4a-0003G2-8D
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:53:09 -0400
Received: by mail-wr1-x42e.google.com with SMTP id w5so4832845wrn.12
 for <qemu-devel@nongnu.org>; Wed, 31 Aug 2022 23:53:07 -0700 (PDT)
Received: from stoup.. ([87.192.221.83]) by smtp.gmail.com with ESMTPSA id
 a6-20020a5d4d46000000b00226dedf1ab7sm8308153wru.76.2022.08.31.23.53.05
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 31 Aug 2022 23:53: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=tnbTpQq25hji2Az9vsRCegPM/IihGJTki2qN0gANa1Q=;
 b=rHXVCrIWx+7kRVBtQUoAF1+HTtZuswSb5YAK7yOGPzsljae6cena2xzVg7XREthmsk
 LcPfujecr1D5nMMbHyZjctjdrPxqegE2hbGBekxTUo4n/VmDizSRM/SJu2Pn2JE6KIsU
 ueUFqTpAY6UV9f7x3j3zmQh/O+tNkBcWeBZtMUoh6zScyVbO0TeO+NIMexkBDWTGU5uV
 ++6ZyIk4wS1kcxlxCOO4FWgi88STKDWwkuoriotUpnkc2MZv97Y1D2IX8UqAW8XF3B8q
 jCbE5/EH4jd++9Eb846zyaQ5MtsEWEaf9dUwUReq/31BMmrXZu5PeLztlxIJFIaMkM4T
 3jyA==
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=WbWTYdJTw8HVQs2QdFoNXPiy5ooTlaT+LXA9N42rdo12MQkTqhFXS4sVr/DYKhdJR6
 /3eLpPGTqz/cuNyg/MP0Js/kMGcjPZNGw2dtmAco/Px5lsg4JCJnCFNsE9sBDU3yaPdY
 d2C4sXk3VWwwi6k/9gDpc1YRnsAbLmxgGlbFWrCTeBQBUt7s6nhK8P4jhsDI4SkHTy1M
 R8pmAkH9A533OnKEQ4qdZELIFUTLbUNqB6OuKGeGs2Nu9MSqWOuwdc8dcuGNzFvRxbR3
 mggLxhL+TqDE5pJPB5O74env0KORhVB/K50hkqsJqQZQLK9PaOEYy3pvS/Udrwke4Wj/
 u4TQ==
X-Gm-Message-State: ACgBeo0Ov8zOC4Gvef8pEVhGyTJEy0/wEramFCbi+khScCqH5UzQGAL3
 hTJMErdPqyWHORYV4y6zqW2XakVgTupuhnK7
X-Google-Smtp-Source: 
 AA6agR5UPQYDuTFGLH62MyDZJSoUoTBBOhCq2z0bRKlejZs5Hqk/Hhno+p5rnxXqsrTm/fqB+w/FoA==
X-Received: by 2002:adf:d1c2:0:b0:226:fa44:bab7 with SMTP id
 b2-20020adfd1c2000000b00226fa44bab7mr346482wrd.195.1662015187547;
 Wed, 31 Aug 2022 23:53:07 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: Alistair Francis <alistair.francis@wdc.com>,
 Ilya Leoshkevich <iii@linux.ibm.com>
Subject: [PULL 14/20] accel/tcg: Remove translator_ldsw
Date: Thu,  1 Sep 2022 07:52:04 +0100
Message-Id: <20220901065210.117081-19-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.34.1
In-Reply-To: <20220901065210.117081-1-richard.henderson@linaro.org>
References: <20220901065210.117081-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=2a00:1450:4864:20::42e;
 envelope-from=richard.henderson@linaro.org; helo=mail-wr1-x42e.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: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1662017497290100001
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 <alistair.francis@wdc.com>
Acked-by: Ilya Leoshkevich <iii@linux.ibm.com>
Tested-by: Ilya Leoshkevich <iii@linux.ibm.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 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 Thu May  8 07:03:53 2025
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=1662018539; cv=none;
	d=zohomail.com; s=zohoarc;
	b=NUm9Rxu9csjCJar1gzor+Ujo66jQol1ZA+XK/D0WYWVva02oPiaaRs4dM3EfKq+v9cN9qqsEW9PC1OSEs34azJH6EMLk9xe3o7+iYDAQG/QhMd/YIlO67aP7KeFcwml1I6by/iaRwSl+LuWLUPJFH5B1qZ8IhEz4JFp9N74A6es=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1662018539;
 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=hRbUwxQiwvBT2j8hE6FhBYYV3Wk/6h96kH+rZQ4koY32uPBxIRTyAX0oHBnAWAxu+2+6vjVgaLMH+tSxMbcJqOeVIgAh72uNlQp4IFmS8L3BEl1Lbe2j+bdmzI5Jz16Y2ubq7488Mzczx91DoWPt8i2nT0vNje7URdMvO9m79Ak=
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=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1662018539379535.928056597202;
 Thu, 1 Sep 2022 00:48:59 -0700 (PDT)
Received: from localhost ([::1]:39072 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1oTewb-000805-Q8
	for importer@patchew.org; Thu, 01 Sep 2022 03:48:57 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:50434)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4h-0006Lp-2i
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:53:15 -0400
Received: from mail-wr1-x434.google.com ([2a00:1450:4864:20::434]:33337)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4e-0003PW-18
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:53:14 -0400
Received: by mail-wr1-x434.google.com with SMTP id k9so21053402wri.0
 for <qemu-devel@nongnu.org>; Wed, 31 Aug 2022 23:53:11 -0700 (PDT)
Received: from stoup.. ([87.192.221.83]) by smtp.gmail.com with ESMTPSA id
 a6-20020a5d4d46000000b00226dedf1ab7sm8308153wru.76.2022.08.31.23.53.07
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 31 Aug 2022 23:53:08 -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=a0IQrNldV46cPkpL1JX8n9crn834dYZNZ6o8yCdXg5XAFSpmzJmBFIhSPGk03Vlpin
 uNT2pxOEojHa/9r5YFgObQ41/MjDBx5zpustJ1WRpF+M36qUlzqOodUI7UwRWFgOixPG
 yCfZeL+kGNbX0xLRfkesP+HrpumfH/+R7Q/MiG9IxHrwMCItfRAhH2RTxlSsA7DGiEkI
 UuD2czRme2SCT0P3WVvOCIw/FXVqWY1yFzjpE/01g4IxXPjbnhn82OV1IIUK9SjEOist
 NTtplERdSorL+o2Y33hrJldSbyjadmqECDyL0tlwZeeC82RIVVY8lok7/CKUNovucoX2
 qKQA==
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=IyGPpeiqxpDCynudIJAaq38/62mpzui8qMbB+G0JkKk2mAHnTxbo3mdGSpFvr9QyEY
 xlpfMqojcj6umJWdZcIi/FzzPHhuzVH8TaXGGPU8PG7Q8P1L1MxikqrVXSzzZUp2Rqu4
 Y9Z2DPulThmqzTcWMZQCGfo60/JDKr/AekmO5egw+cfgZJwMGdlynjl+KfySbkwsbaTx
 8aAXjdykuGRtqgxDLqR2QP0T6zMMJ5JlZvy6imaMfDFfIrvuWLCSBoKVyS4qj4rVNS+1
 LF9LI3FVO7Bv8kZF10A9szEj7DyWmcPJgw68C7lwVYFDNWrI0ZEtgTIgobSmMzvBPjQM
 e7IQ==
X-Gm-Message-State: ACgBeo03OnenGZCTttNml9xsmaXzeRfVWRGBAwil59bWtwB/vxsEbHxF
 vWmPSLDZ4ICRfHFj+WyNdrLTZMACtbEz9exz
X-Google-Smtp-Source: 
 AA6agR55OpJ1UMa+HtCo2oodn3YHv3QHqKwUezr5ify0JlKgN1ZQIgnNJxM/uEE6Lrb4rsviH3hu5g==
X-Received: by 2002:a5d:4cc6:0:b0:226:df71:fd54 with SMTP id
 c6-20020a5d4cc6000000b00226df71fd54mr8678901wrt.436.1662015190404;
 Wed, 31 Aug 2022 23:53:10 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: Alistair Francis <alistair.francis@wdc.com>,
 Ilya Leoshkevich <iii@linux.ibm.com>
Subject: [PULL 15/20] accel/tcg: Add pc and host_pc params to
 gen_intermediate_code
Date: Thu,  1 Sep 2022 07:52:05 +0100
Message-Id: <20220901065210.117081-20-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.34.1
In-Reply-To: <20220901065210.117081-1-richard.henderson@linaro.org>
References: <20220901065210.117081-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=2a00:1450:4864:20::434;
 envelope-from=richard.henderson@linaro.org; helo=mail-wr1-x434.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: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1662018539766100001
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 <alistair.francis@wdc.com>
Acked-by: Ilya Leoshkevich <iii@linux.ibm.com>
Tested-by: Ilya Leoshkevich <iii@linux.ibm.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 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 Thu May  8 07:03:53 2025
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=1662017942; cv=none;
	d=zohomail.com; s=zohoarc;
	b=Q1sfbh2QYfjVQeC2OoCbnObIeaf9ZwXz15EIKi6ilqOo57+f3cNctQV83zj1ayPVl/obpFnahivuZeD24AGVr8knXfE/kwcd98ZPPdYKDwz9Jy5t/1Z4CXW2DE7QcbHWRLNrRfuMyc9drtDA8woZeeQnGj8ToGN8bR04s8Mdla8=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1662017942;
 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=ApQbJ9nvmu3btlgStwZBJ4tay7bIYddHAEgy/KUz7LRuLa8ya4d4W5fY1kWVs7TyDaj+sH1Rs08/uERKtA3JNqFvyLlpwQKnn8dT57AVh9bylq8SIhy6qSHWlh90uPgxC8tVB3hmZ3a6f1ns/fPPliBQwebu5yLyj1CW99POr/I=
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=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1662017942109847.8423581922877;
 Thu, 1 Sep 2022 00:39:02 -0700 (PDT)
Received: from localhost ([::1]:35368 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1oTemy-0005Yd-IA
	for importer@patchew.org; Thu, 01 Sep 2022 03:39:00 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:52462)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4j-0006Q4-4k
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:53:17 -0400
Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]:41762)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4g-0003Qc-T1
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:53:16 -0400
Received: by mail-wr1-x429.google.com with SMTP id v16so18280055wrm.8
 for <qemu-devel@nongnu.org>; Wed, 31 Aug 2022 23:53:14 -0700 (PDT)
Received: from stoup.. ([87.192.221.83]) by smtp.gmail.com with ESMTPSA id
 a6-20020a5d4d46000000b00226dedf1ab7sm8308153wru.76.2022.08.31.23.53.10
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 31 Aug 2022 23:53:11 -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=qsv0jAFmfbikXIFDy7Wf1ri4KDXrwD1Dc+iSxeOwNCyRY4roa+dqG5XIfbJlDupJ7X
 xyO7h3LQWkxgiwhwrfuKo/gq3CPLpsedrBTLjA2rBMKRJ3JY4IIF+aOTMnUjukBuERHU
 i2jmoFD5HBEQWtSMk0OLnxdHz0wP+9gI5siyqTMmUzNzSMD9dPb9AeCgyh+wiz31uU2Z
 n53jlNDORd4OQ3wYbjGuf1eY3xVjmzFqv37UjGDVTvh6R/5Xp8gwcO38HT9WxYDdoZ1+
 LVL76iB14OcvcTEfzl7UFZao2qisnowVxrA6vouSvGU6xDBODVEH6Qgj0JaQz9yMRBOX
 TTiw==
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=I3auZoQysPu4MJ8yx01b4nxuwAqpm5U6+yxCkVu6leGRFmh2BSNH8jJ1ifzRKFTaU0
 XSPRRVONMP/feKyJP3ZttQ7tXd7npkRx2SNfooCht81T1vcFx9aStecSUyDB/hDt47o/
 aUyRtX3Z9D6aP2QcCJdUZfow4sluWaR9LmNX/H6621C815k8DwI54LXUeZV6RQxY0YgN
 q02CR8ws9juTNPtesBFHs/Nbht5awzX5jT650fcXL9o5jciLXz8DPE1TmVTF6tgY7TQw
 RO4SJ8qy1GDNTQR2lCP1oEHAHjhUWQKsB+FRNPjcdEaLeayc2zJf9KSnQOmkkay3vmu6
 s4EQ==
X-Gm-Message-State: ACgBeo22pMc5tbD0OYCxSK0jgTjfrBmKZp/0K2kPuxam4jnG236vrA0u
 4OyIEQEdqzqg5/HwAMCzYhnnwID6hRKWPovx
X-Google-Smtp-Source: 
 AA6agR489PA+QgRo36Gpk+aO59lpYT1T8X/yuwOJiZeopV2PjPnBHLUS58ynoBchu/E3nTwL8jdlEw==
X-Received: by 2002:a5d:64e9:0:b0:220:7dd7:63eb with SMTP id
 g9-20020a5d64e9000000b002207dd763ebmr13504173wri.590.1662015192279;
 Wed, 31 Aug 2022 23:53:12 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: Ilya Leoshkevich <iii@linux.ibm.com>
Subject: [PULL 16/20] accel/tcg: Add fast path for translator_ld*
Date: Thu,  1 Sep 2022 07:52:06 +0100
Message-Id: <20220901065210.117081-21-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.34.1
In-Reply-To: <20220901065210.117081-1-richard.henderson@linaro.org>
References: <20220901065210.117081-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=2a00:1450:4864:20::429;
 envelope-from=richard.henderson@linaro.org; helo=mail-wr1-x429.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: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1662017943171100001
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 <iii@linux.ibm.com>
Tested-by: Ilya Leoshkevich <iii@linux.ibm.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 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 Thu May  8 07:03:53 2025
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=1662017950; cv=none;
	d=zohomail.com; s=zohoarc;
	b=TdGRD2YqxZD3I6NBoOaCXkOAUwvL5I5h2ojDoczrY0PMUwzGoA8LcPCGreJldFRfmWd5BFK/Md8WyDj/5mVVcipuM/KoIMKqmk3wYQ9uYaeBQnIr2h4EIGZ0ACDqr5Mok5NeGZNycxvePxLkPpggCgOXwZ8rLgW2YGqMWGCD5t8=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1662017950;
 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=TFL7KqI74yzAUHXqseNNnI7SwVp5ld0bos0Q5OjU7FuTPYCU9ZGD9bVncPAhGFIJgDRl8lf2t+B93T4MHSSnaj5mo8LQcBXoxT5QTWNJzI5Pa0gXibd3+omXFr51UCY9b2yDXJGZRLaH+wyxzeQXTSgfUTC3inOKT+cvlpzs5+U=
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=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1662017949997261.725560361519;
 Thu, 1 Sep 2022 00:39:09 -0700 (PDT)
Received: from localhost ([::1]:39372 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1oTen6-0005rZ-OO
	for importer@patchew.org; Thu, 01 Sep 2022 03:39:08 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:52466)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4l-0006VG-1w
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:53:19 -0400
Received: from mail-wr1-x42b.google.com ([2a00:1450:4864:20::42b]:40465)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4h-0003Qo-C4
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:53:18 -0400
Received: by mail-wr1-x42b.google.com with SMTP id b16so13387874wru.7
 for <qemu-devel@nongnu.org>; Wed, 31 Aug 2022 23:53:14 -0700 (PDT)
Received: from stoup.. ([87.192.221.83]) by smtp.gmail.com with ESMTPSA id
 a6-20020a5d4d46000000b00226dedf1ab7sm8308153wru.76.2022.08.31.23.53.12
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 31 Aug 2022 23:53:13 -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=hE1H8+CkoACrOEG4RxH9Jvgs+UYZjHeHHCr5p1EptLcFk4uM7/Cvok7q+PtJE87ryY
 awjCqegciBk8cmygW4Fiqu3EoN5kFHi8+XLAESP1E0clk6QI7/eEII4/g+JVco+ILteF
 i4TcDROGb8PSGHbUFxDaZxK+CreT9Jt9HhIkOMhHITIs3tMYuxDffCBnPXvN60lePtmP
 b7xiqi2b7pPDxoYWc6ZM6gQUjhD55GwCksS2cGvLfgHaiZoVcObG1dWWTl1BsvHzqT1I
 Lvyn1s5VOroHmSEouKaeMnvPXLRnpjhmOwDJO1mzVVwcFvDPWas1wO+y1ejJW8jDzbPP
 IoBA==
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=Urkp8sxhmkPvRCwTsBSjH7McSDwddrZRzDUgdrNl/tyOzOgCYpq9jGaNJVJgKO5UZR
 TEeVs1fZZdiNFZr2m6rJQx9Z6VdZSeWGZttBwrhRtyyPAGsjwTWWQEAWF64wVGhxf4Nv
 FjxWpP1qHJMPXC1dNp2kMONfFKgWzDRHO0DX0WZjxGFRQCwObQoIfYIBUQF5cqaLw52C
 Ijo/BLC6o9i8yvJHSgBPSxNrIxUxRNvyqFrgNc1SJqysfBO3Hah41IiiPpH6cxVO/t/r
 usC93xbd7RFRFYvZ1c2P6OkUvP3U1zq38nsn8zrO+yl3BiSpscrmMGQFl1AzwRiPZI4P
 uGpg==
X-Gm-Message-State: ACgBeo3j09SK1xPT7xHipcdAarw4xJViX6OnR4QF3+USYAzOVAFH1DA+
 ib7c2JscJf4Hp83wK36hBaQq7b2OPM/uxDks
X-Google-Smtp-Source: 
 AA6agR52AEXHfZn8s2AijW5gQxT+u0bDmOFoN9Xr0elGcDAcqcAds6hybdOsQ2k/XK1/mrJni4GrBw==
X-Received: by 2002:a5d:47c9:0:b0:226:eb05:ecbc with SMTP id
 o9-20020a5d47c9000000b00226eb05ecbcmr4016671wrc.74.1662015194034;
 Wed, 31 Aug 2022 23:53:14 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: Ilya Leoshkevich <iii@linux.ibm.com>
Subject: [PULL 17/20] target/s390x: Make translator stop before the end of a
 page
Date: Thu,  1 Sep 2022 07:52:07 +0100
Message-Id: <20220901065210.117081-22-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.34.1
In-Reply-To: <20220901065210.117081-1-richard.henderson@linaro.org>
References: <20220901065210.117081-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=2a00:1450:4864:20::42b;
 envelope-from=richard.henderson@linaro.org; helo=mail-wr1-x42b.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001,
 T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1662017951159100001
Content-Type: text/plain; charset="utf-8"

From: Ilya Leoshkevich <iii@linux.ibm.com>

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 <iii@linux.ibm.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220817150506.592862-3-iii@linux.ibm.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 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 <assert.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+#include <sys/mman.h>
+#include <sys/ucontext.h>
+
+/* 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 Thu May  8 07:03:53 2025
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=1662018255; cv=none;
	d=zohomail.com; s=zohoarc;
	b=SFoaMBLZz4vjL8KrZWkn+OjTDwOkZrbHMYZrIVND6ZsG8qRokcTHzP9U1SCZfrHOkJjp44BcQPvE0DdV/UopPL2crMPtpf/flPEIJ2Awb5eZaksn1V/iv+h5TXSA4ljCWi44Gz1mkIqyVo06Yi6IOQ338SJ6o1e0OLL16jAHcc4=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1662018255;
 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=hoxsZ5nXd3G4I4Yhfp1pwdCCizl7q6duE0EUDLi4DT5GLOGuxu52qIJxBRVsULvGEul/u9U9kXwfaWsFXgpIyFLT/dEgCA9v6qJbMKp6AbJR17SnDzMceLAj7gJcxLEgFDpYVQoUV4qkn/iE530+sqlyYrRVRP4oP+H/TRSWxyY=
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=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1662018255171164.91620758604972;
 Thu, 1 Sep 2022 00:44:15 -0700 (PDT)
Received: from localhost ([::1]:60724 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1oTes0-00034E-KL
	for importer@patchew.org; Thu, 01 Sep 2022 03:44:12 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:52468)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4m-0006Yb-Hu
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:53:20 -0400
Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]:43594)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4j-0003R6-US
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:53:20 -0400
Received: by mail-wm1-x336.google.com with SMTP id
 ay39-20020a05600c1e2700b003a5503a80cfso834864wmb.2
 for <qemu-devel@nongnu.org>; Wed, 31 Aug 2022 23:53:17 -0700 (PDT)
Received: from stoup.. ([87.192.221.83]) by smtp.gmail.com with ESMTPSA id
 a6-20020a5d4d46000000b00226dedf1ab7sm8308153wru.76.2022.08.31.23.53.14
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 31 Aug 2022 23:53:15 -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=HOO72BB6aKAnUpewhWZn25RRfaJ5tuRFljqtwwzxIjcsZa1fU1fwx3nHFyOfAEU3GS
 NF6+lPgi8wyUJMS9nIoE9pGcFc+xFQpIAI4bNr050mgTNswvOPcukyxFg9B8wQ2+VUxa
 K+rhBbETo14pM4KxponuJozv11LtFf8xuVyDTqI/3++x6A4IGmSepLumssa3l8nlSi1r
 /Rp7cXWsft+6NSzEkAJO5S6YYJ4kW/qKDt4a+mhHPvE4zqiVxF+mSD+2N1UAhnybfFSO
 gXic87rH/94M5JsjSd5JsEXcDPwkN+6WRtag7HAjUWcpWjm4TA0323E8IS8snRc9ah4D
 pvaw==
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=nKmh0dM4l/SWAKfY5FSI2PWVfQwVJLSqpKVDn27/Z3t/QNAbFmbfNKgqandYlpevSz
 uLHoKlagXW8+odw4ApNfIOMKwWnFp0Y1Z1Zi/PR+y+9a7sO9e0v30YnRrkhxwGbf3Oto
 9iVlEz3lCHx3MTRJGbhkKJNW0TK2MMSctnAHohXsK0hEUg3ZpXShIPRi+IWgNgkh5fQt
 iDg9A3GAoVEv6rgbYEsV7Myvzxvyr3E53NtFEdzHL42DXkD9/UTwIVilsB6onlG3gIjj
 qWwI/Rxdr99eoDIikfN3LebHIoFXq34MmUtiB//g5ZHyscLw5HuM7qjacrLEJutvHX89
 0Wyw==
X-Gm-Message-State: ACgBeo2BCH/GUWn7YPaTZ0zLUR677RuL2Lp+xNdDfM0cua6XhhAtYL1g
 l/OjA3JD6Fv6DLtFcT6+axeq6MChx2WASlUW
X-Google-Smtp-Source: 
 AA6agR4Ik4Sv/njZqMvfYmEV9I2qgyrDqINuL7rqKCUnzrL2OqQnWXpGBGE3aJ0y83H4Qz+CQc757g==
X-Received: by 2002:a1c:7703:0:b0:3a5:aefa:68e3 with SMTP id
 t3-20020a1c7703000000b003a5aefa68e3mr4232556wmi.158.1662015196434;
 Wed, 31 Aug 2022 23:53:16 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: Ilya Leoshkevich <iii@linux.ibm.com>
Subject: [PULL 18/20] target/i386: Make translator stop before the end of a
 page
Date: Thu,  1 Sep 2022 07:52:08 +0100
Message-Id: <20220901065210.117081-23-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.34.1
In-Reply-To: <20220901065210.117081-1-richard.henderson@linaro.org>
References: <20220901065210.117081-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=2a00:1450:4864:20::336;
 envelope-from=richard.henderson@linaro.org; helo=mail-wm1-x336.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: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1662018257274100001
Content-Type: text/plain; charset="utf-8"

From: Ilya Leoshkevich <iii@linux.ibm.com>

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 <iii@linux.ibm.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
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 <richard.henderson@linaro.org>
---
 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 Thu May  8 07:03:53 2025
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=1662017151; cv=none;
	d=zohomail.com; s=zohoarc;
	b=TnUR6xHN+IfLG4Y/ovVkPHK52hCubZ94syWAwOmOko/jSA8oLqZ1kuBbvbcxYDKUyonwt3CtYwH0WH2nK1ZE20pV7nP+L3zDZjFhSFhrJ7/Q68Rw/KO7xZifexfpnXHFXyZvDG1ytLs65nUz18yTBgseEmnCHXRI14sUaCCN0SQ=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1662017151;
 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=cizpEg+2tlYZi/zs0+kgOpXwCF8NyYdWoayKLoVSwM/Q1sowob4mfYn7PHAe8vKFKX7xjxvPdE1b4/gUsh3YgY7vhL/f8S9CpAqeazHT7pAmdGt7aZSjGRXaqx6f2/5q7EhZ0ldEcgyT5pMomgopBh4N0zAyysuZ9DwWk4VlAVc=
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=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1662017151948383.61892094423206;
 Thu, 1 Sep 2022 00:25:51 -0700 (PDT)
Received: from localhost ([::1]:35344 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1oTeaE-0002Kh-Nh
	for importer@patchew.org; Thu, 01 Sep 2022 03:25:50 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:52470)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4o-0006ce-93
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:53:22 -0400
Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]:42908)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4m-0003RX-GO
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:53:21 -0400
Received: by mail-wr1-x42a.google.com with SMTP id m16so20984080wru.9
 for <qemu-devel@nongnu.org>; Wed, 31 Aug 2022 23:53:20 -0700 (PDT)
Received: from stoup.. ([87.192.221.83]) by smtp.gmail.com with ESMTPSA id
 a6-20020a5d4d46000000b00226dedf1ab7sm8308153wru.76.2022.08.31.23.53.16
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 31 Aug 2022 23:53:18 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=content-transfer-encoding:mime-version:references:in-reply-to
 :message-id:date:subject:cc:to:from:from:to:cc;
 bh=Ar6YL5FF/K2Div4uruzg03ZvW0xj9yBOSm1jZPy9tok=;
 b=NwKKSebeesF/qrC/3apRByzSl4cuI8eDtiSNMOXzrKoSv3dy0CXFHET8VdnVPYIPda
 7ITqsu32515oRWrXp70wFwv/BrgpGXywQf9jp2KWbV4ZqF1muSdvQKWd9LVZqrppzbzw
 uRJsXI1oaKqUZ+Q/yaUtd8KF8W5nAjVjPHlno6mMEXioEBvLzkxiUsoFACF+uuM3SDGv
 gGHFK7GIybLXTNzB8Bx2QuAhujKxBlxKvgYUIH++5z6YMiOgOhWIhNPmMi6FDG8LLsz6
 XtY048ySBramFDHVza8ejowrokb376+hbKu48mFjyEZM1udyVqXGPdm7jQPQuC7BlYjw
 lbZg==
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=gWgQo634QZuragEiyeVInwCwdstldq2cVy0URJXztZPeiCAJClecR5wp07uFSGUoAj
 6DVqgLQKFNZJ/qXqIbBcxc/XXmV+YD4KRrvUOckcG+dQBszNUKNcMp5525KjbmeMoerQ
 6xeK9i8rZ0ehzanLPvAe57oik+fxBTx6riYpGWoe1uzoEGFFmHK4tiqQsAlOYKAk/pd1
 2s9xVkvaB7jeqU3pLbgI6KCfxY1g7lTEjYNpKhHekuUTFhKlzNgmMJ+zef8Zzagl1vkZ
 E1TipOB4nho6voY3uRbkx44W+Wli4FQtGOWqkuCaNt4QniobXcsQPCpJOvmKYGqnkmD3
 dlng==
X-Gm-Message-State: ACgBeo1+S5PXIiRDP1BFgSWz39tdknl86Y7yEZ6CLIz3Gw1XkDQtlF1v
 WBx/c6QNAqOnRjsfmRzw8YBoZLB1p7yn+nDs
X-Google-Smtp-Source: 
 AA6agR6SDSWEATLaa4YR9SCDWm3LuQQxa1qHDW14UM4Iz5QwhpkPhZNTcOmDIUC9V0r4t369Ug8CRg==
X-Received: by 2002:a5d:59a2:0:b0:226:e6c3:a6c2 with SMTP id
 p2-20020a5d59a2000000b00226e6c3a6c2mr5665319wrr.236.1662015198913;
 Wed, 31 Aug 2022 23:53:18 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: Alistair Francis <alistair.francis@wdc.com>,
 Ilya Leoshkevich <iii@linux.ibm.com>
Subject: [PULL 19/20] target/riscv: Add MAX_INSN_LEN and insn_len
Date: Thu,  1 Sep 2022 07:52:09 +0100
Message-Id: <20220901065210.117081-24-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.34.1
In-Reply-To: <20220901065210.117081-1-richard.henderson@linaro.org>
References: <20220901065210.117081-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=2a00:1450:4864:20::42a;
 envelope-from=richard.henderson@linaro.org; helo=mail-wr1-x42a.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: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1662017153447100001
Content-Type: text/plain; charset="utf-8"

These will be useful in properly ending the TB.

Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Acked-by: Ilya Leoshkevich <iii@linux.ibm.com>
Tested-by: Ilya Leoshkevich <iii@linux.ibm.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 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 Thu May  8 07:03:53 2025
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=1662017516; cv=none;
	d=zohomail.com; s=zohoarc;
	b=SLN8udN0mRLCdwBPnq+GanEfiMWsCPptKYytCnsLM2BxrgH/HdZ4aV5ONX4J9c7QpNlA0iRs0KYHmOu/upMF2dD/YQDDyE1xM9Ie0HIML/sxqn/RYAqE0J1LrGbBv3EnOxKbhApw9QZqzedjBJNKau2MZTGqijNWRDMAMvO5o1c=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1662017516;
 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=fO4gaAZ87w9JVTXk/6ei1RGDeUqN0F8L3MLrCqpD8Q9x1lhNaxzUGzZZ8fmBody2BVA/3h2q3m7iCaQ9rJsq+76tEAs6fJTYUYqcGGfxzDMGexXfkXCZNaW10YlKj2gHBQVLL0pL8tJV4iqsqyl+q+KjXjpucJ8rjOtTO0a1t4M=
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=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1662017516869712.4083138127271;
 Thu, 1 Sep 2022 00:31:56 -0700 (PDT)
Received: from localhost ([::1]:38928 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1oTeg6-0008Bq-V1
	for importer@patchew.org; Thu, 01 Sep 2022 03:31:55 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:52472)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4p-0006g3-Vs
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:53:24 -0400
Received: from mail-wm1-x32b.google.com ([2a00:1450:4864:20::32b]:38673)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1oTe4n-0003Ri-U6
 for qemu-devel@nongnu.org; Thu, 01 Sep 2022 02:53:23 -0400
Received: by mail-wm1-x32b.google.com with SMTP id
 n23-20020a7bc5d7000000b003a62f19b453so775051wmk.3
 for <qemu-devel@nongnu.org>; Wed, 31 Aug 2022 23:53:21 -0700 (PDT)
Received: from stoup.. ([87.192.221.83]) by smtp.gmail.com with ESMTPSA id
 a6-20020a5d4d46000000b00226dedf1ab7sm8308153wru.76.2022.08.31.23.53.19
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 31 Aug 2022 23:53:19 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=content-transfer-encoding:mime-version:references:in-reply-to
 :message-id:date:subject:cc:to:from:from:to:cc;
 bh=duBeBoFX8QNETCcok0dytuQZN74JHxnbRDKrjktEj6Y=;
 b=E3xi7DIDKw9nc4rOehbH/66Efs8TlBTl9m6PAUpicrgA7WDwcyDTXcu/V2o1x8SBjR
 4VrQQaRv0vgJuNiTSTw+1UcFn54S/3rfghKj5s3oi1p3NrBN2tg5ZZHeb6/1alLBCy3E
 yzPvv3QQz3RcYhGo2ULgPpBt1c/Ba4my7ExdFil/Wtzpb/JIO2GslRzcXbGRcAE71vGH
 NbNucE7XLyLO1Hi2er30z683CCt5wp/xjR4UpUCCA2lwhHU2xOW/ZnaGmxmiCIOPqF7O
 Txz9apjEXneeo7v4vHhLzRJaK9IwHX8ZPLfa3hUr5RRim2suLvcAT9Iz9TOEotzRAV00
 +B+A==
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=gF9ZwPxFJMmOnaHYBFHHUwUItbOF41GM02Jmb45TmnF0Aq7IiVYoidUNuY527n0XJ2
 VYpwAEkZFce6lNcmkjTWIAYzPlXUqTDaFC5+dqdEFB8Y6OaIVq5OnVTZ5ULL+phOWAG2
 J3D0pwDbR1qh8gbYgL780BxybngJ49y2Mpw2VN4ZlFCFISFKSX+ChLXYvEPV2exoeHeS
 WjI8qUyhe5WPX6YgC77RRPeqdnqqCAbuDRP7a+W6A+j+5zFKgaaibIjVUkN4bE9q+rBC
 GEqcLC3ZDmDW2jXI0FsbRXI9qGkAFbzo8FUcazxcb5D/P25SL1H7vShyMG7JhcCyABfB
 3iRw==
X-Gm-Message-State: ACgBeo32Vd4jQ8u64WR4p6Kc16MxUmMVxMLDLDW2/VZ8la2n7mebMzcw
 DAw+14MZzhF14fxzYR+cCf96MgDNeWDEq9GD
X-Google-Smtp-Source: 
 AA6agR5UJ8aXvm2spR+kv//UMC+3gSO6agCneg0rRODFhwMGQGgtaIoEJ4mr4uf9EKJXwf7/Oy1YTA==
X-Received: by 2002:a05:600c:22d2:b0:3a8:3e8c:d914 with SMTP id
 18-20020a05600c22d200b003a83e8cd914mr4057106wmg.128.1662015200334;
 Wed, 31 Aug 2022 23:53:20 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: Alistair Francis <alistair.francis@wdc.com>,
 Ilya Leoshkevich <iii@linux.ibm.com>
Subject: [PULL 20/20] target/riscv: Make translator stop before the end of a
 page
Date: Thu,  1 Sep 2022 07:52:10 +0100
Message-Id: <20220901065210.117081-25-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.34.1
In-Reply-To: <20220901065210.117081-1-richard.henderson@linaro.org>
References: <20220901065210.117081-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=2a00:1450:4864:20::32b;
 envelope-from=richard.henderson@linaro.org; helo=mail-wm1-x32b.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: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1662017518330100001
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 <alistair.francis@wdc.com>
Acked-by: Ilya Leoshkevich <iii@linux.ibm.com>
Tested-by: Ilya Leoshkevich <iii@linux.ibm.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 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