From nobody Mon Dec 15 23:27:05 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1643660553808488.4065733318927; Mon, 31 Jan 2022 12:22:33 -0800 (PST) Received: from localhost ([::1]:47582 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nEdC4-0002yh-VM for importer@patchew.org; Mon, 31 Jan 2022 15:22:33 -0500 Received: from eggs.gnu.org ([209.51.188.92]:42840) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nEcnc-0004nA-1m for qemu-devel@nongnu.org; Mon, 31 Jan 2022 14:57:16 -0500 Received: from [2607:f8b0:4864:20::12c] (port=38409 helo=mail-il1-x12c.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nEcnV-0002e6-Ix for qemu-devel@nongnu.org; Mon, 31 Jan 2022 14:57:15 -0500 Received: by mail-il1-x12c.google.com with SMTP id i1so12412234ils.5 for ; Mon, 31 Jan 2022 11:56:45 -0800 (PST) Received: from dune.bsdimp.com (50-253-99-174-static.hfc.comcastbusiness.net. [50.253.99.174]) by smtp.gmail.com with ESMTPSA id j2sm1972989ilu.82.2022.01.31.11.56.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Jan 2022 11:56:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+DlEs5WrZvuXfm29/4/3j1YKa0M1X3SLWmqACMEYKjk=; b=z8yvaXGmjjAJ3zxjpMyRBIyn2YA3hO9O/a6mMOBKDyC0tgNnT17OwJWgvMhm6Lfn7c /GLdOqA1YzzAZsjD8cIqWRY52IS0TwyfVoVZwjNea5t2LoZ/msZwZhvXdFzxtWatLQvx PRKSgiqhXX12m9azSPBFhanXp8i0FXm74sk5qsmEMhSSPcIuRnLZ2y5vuVatNqrwgfp6 aLLwvNTvsrPqbW+DPH4L3z9aE3I8Htelb23UhZWODiYUwbymet5jKBEgbmemLiHWiZm6 etbzfxeUdAL0wPeDsD6L9oXoUFj8aEjgL96zJNSaWkap+pVOd98wil4eLFstNbLAj/B6 QjuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+DlEs5WrZvuXfm29/4/3j1YKa0M1X3SLWmqACMEYKjk=; b=qqWgKxK03MVNfZSACkpsW5tj3F33bzSQsFh0qsemLwBlSVQA4XVfLj+L/gMi6yZJeI dni3x6opLVmBfr/TpVddOV4Ce4p2kiBK9fOngjLwsMd21SOs8R+ILL0ArJggB9xfpPp4 lXh9q96Vv6s82nQoemAqMRmS66/CDCBdkNxrFTvjk3Pg/Nnx8U52reB5SDrQZ495CU4u c0l119+cg2rMpoQjDdmI3G7DmMHrusWLV/6Ssg26B4o/Id3kbq8hIbvpnwQhJhoc4hww cslgFB9bX9rUBl+SaUCGy9l5hW7lCELFTTZD1KpABMWRfiL3jNfEwsCztM+vr2j6Yeir qHqQ== X-Gm-Message-State: AOAM531ewqNGsfsiFfcpOe+B9oWyxivZMKiBeTZRw+Qi5XSzbAtN2LBz nbwKhxeDGDl0Wl1IfdKqHNJSwc3Qp2Y5kw== X-Google-Smtp-Source: ABdhPJyauF7mcsxdPUt3mbZ6nIRT2xtkIXyZcY3taAO3zpQrK1eB5g8marn6ERwGNbLB/V5DZg1V2Q== X-Received: by 2002:a92:c109:: with SMTP id p9mr13239469ile.129.1643659005027; Mon, 31 Jan 2022 11:56:45 -0800 (PST) From: Warner Losh To: qemu-devel@nongnu.org Subject: [PULL 15/40] bsd-user/arm/target_arch_cpu.h: Implement data faults Date: Mon, 31 Jan 2022 12:56:11 -0700 Message-Id: <20220131195636.31991-16-imp@bsdimp.com> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20220131195636.31991-1-imp@bsdimp.com> References: <20220131195636.31991-1-imp@bsdimp.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Host-Lookup-Failed: Reverse DNS lookup failed for 2607:f8b0:4864:20::12c (failed) 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: none client-ip=2607:f8b0:4864:20::12c; envelope-from=imp@bsdimp.com; helo=mail-il1-x12c.google.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, PDS_HP_HELO_NORDNS=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Kyle Evans , Richard Henderson , def@FreeBSD.org, jrtc27@FreeBSD.org, Warner Losh Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1643660556188100001 Content-Type: text/plain; charset="utf-8" Update for the richer set of data faults that are now possible. Copied largely from linux-user/arm/cpu_loop.c, with minor typo fixes. Signed-off-by: Warner Losh Reviewed-by: Peter Maydell Reviewed-by: Richard Henderson --- bsd-user/arm/target_arch_cpu.h | 45 ++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/bsd-user/arm/target_arch_cpu.h b/bsd-user/arm/target_arch_cpu.h index 9d790176420..2b395d5c97f 100644 --- a/bsd-user/arm/target_arch_cpu.h +++ b/bsd-user/arm/target_arch_cpu.h @@ -39,8 +39,7 @@ static inline void target_cpu_init(CPUARMState *env, =20 static inline void target_cpu_loop(CPUARMState *env) { - int trapnr; - target_siginfo_t info; + int trapnr, si_signo, si_code; unsigned int n; CPUState *cs =3D env_cpu(env); =20 @@ -150,15 +149,41 @@ static inline void target_cpu_loop(CPUARMState *env) /* just indicate that signals should be handled asap */ break; case EXCP_PREFETCH_ABORT: - /* See arm/arm/trap.c prefetch_abort_handler() */ case EXCP_DATA_ABORT: - /* See arm/arm/trap.c data_abort_handler() */ - info.si_signo =3D TARGET_SIGSEGV; - info.si_errno =3D 0; - /* XXX: check env->error_code */ - info.si_code =3D 0; - info.si_addr =3D env->exception.vaddress; - queue_signal(env, info.si_signo, &info); + /* + * See arm/arm/trap-v6.c prefetch_abort_handler() and + * data_abort_handler() + * + * However, FreeBSD maps these to a generic value and then use= s that + * to maybe fault in pages in vm/vm_fault.c:vm_fault_trap(). I + * believe that the indirection maps the same as Linux, but ha= ven't + * chased down every single possible indirection. + */ + + /* For user-only we don't set TTBCR_EAE, so look at the FSR. */ + switch (env->exception.fsr & 0x1f) { + case 0x1: /* Alignment */ + si_signo =3D TARGET_SIGBUS; + si_code =3D TARGET_BUS_ADRALN; + break; + case 0x3: /* Access flag fault, level 1 */ + case 0x6: /* Access flag fault, level 2 */ + case 0x9: /* Domain fault, level 1 */ + case 0xb: /* Domain fault, level 2 */ + case 0xd: /* Permission fault, level 1 */ + case 0xf: /* Permission fault, level 2 */ + si_signo =3D TARGET_SIGSEGV; + si_code =3D TARGET_SEGV_ACCERR; + break; + case 0x5: /* Translation fault, level 1 */ + case 0x7: /* Translation fault, level 2 */ + si_signo =3D TARGET_SIGSEGV; + si_code =3D TARGET_SEGV_MAPERR; + break; + default: + g_assert_not_reached(); + } + force_sig_fault(si_signo, si_code, env->exception.vaddress); break; case EXCP_DEBUG: case EXCP_BKPT: --=20 2.33.1