From nobody Sat May 11 11:09:48 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1620997377; cv=none; d=zohomail.com; s=zohoarc; b=kcRQSCCj4lmwGReaAyOK3Sj+1Jeh06qfuQZc5NUmnggsMJb8mvCGjhcR5GnNg1/bL4LZlvEbuxqH30vxYjozq7+cJk6S35IX+DM8iDM7DHDQ/OTfkYBO+m/PhDjMjd7/M78dniktu8bLIu6eBWlfBxPE3VZ+x0gI6uEaUkd79wc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1620997377; h=Content-Type:Cc:Date:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To; bh=5AJUh2TVprtRiUIoo6oXARgimbroTTvCGcmu/Omqka4=; b=YEUp37VNRXsNnBLR4F2Ael1NDs6NiwZ55G/H8loCTZJkXhSVFv0YBKVRcFG/UXy56aWtpaiNXYPyP17ttRlaXewQgdBeCE7eJa9wNX2vNvRFbOGLlgQdamS7iB3rxYU43TNJAG+KOvBdEK+V6spP9jgf3Llqo8QAKox1hPdcwYI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1620997377720374.6786719799803; Fri, 14 May 2021 06:02:57 -0700 (PDT) Received: from localhost ([::1]:43596 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lhXSv-00041s-Q6 for importer@patchew.org; Fri, 14 May 2021 09:02:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42274) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lhU2R-0006Yx-9U for qemu-devel@nongnu.org; Fri, 14 May 2021 05:23:19 -0400 Received: from mail-lj1-x231.google.com ([2a00:1450:4864:20::231]:40890) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lhU2P-0002zb-AL for qemu-devel@nongnu.org; Fri, 14 May 2021 05:23:18 -0400 Received: by mail-lj1-x231.google.com with SMTP id c15so22576412ljr.7 for ; Fri, 14 May 2021 02:23:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to:cc; bh=5AJUh2TVprtRiUIoo6oXARgimbroTTvCGcmu/Omqka4=; b=gzOsizQbcECtjTK/R49kmY3f+hczWmtyIra2mVuQp4uBiNFYVWlJrPXgL88JPWHrdq 9Nr+M84EKqHjB80zjJVsjSVj4Wf3tRX9A09BLW//RpIuhaDBylNjJC7jX2Ei9bf9L3WO qN/3tVVzXp4ayhdDofFOtl3KAGTJnTy1d3nYIoaCUNoPcK1iHvQSLEUvzwS2OGWpOULK oWtCmh2PSMCZvi3mZ6Nby8GBJf0ZVUFcpkbttRl+zo3lo0KhmYSOuZkmsf0SMnfKoIeF 7WIL80uMgt3K0Rtd7ELEhQK7yf1e5l9Bhj6ts8kN3v3OjBIvvmP5HU3+Fq6c9VFMAdN5 JqDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to:cc; bh=5AJUh2TVprtRiUIoo6oXARgimbroTTvCGcmu/Omqka4=; b=EzrWUYAVGu8tUR/1oLUnQfUYXYBsrKjBa5m1lPwgFPmkxSdCdTvc2Rm1w6NUZRS+/r TaWl44Co1ooIdZy+ypx5LEGngaONFgmnMtKKwDdi5bp20TOGonGs+/BETeoJsJuq4CqD W48a35Cf0OMsEr/FZ5cST/vH0jtKqZGv4gEbMsApZSoERIsC5M2zCUkcHSyoXEGWPF4w HsPogAnuXgWR91Wyj2yX+6GrhE4JPqcfcnmzZ+EcWTZ97hKt6vVXqRRu+e6MBqGR43/K xSsnKD/YmaAhhWyH+h3ZitpAjkxsQAqD7nd6lJVx9exhkgry4+P4NNhxttslT8jk8d40 Z6jg== X-Gm-Message-State: AOAM532gWgzswXterBFjdIuS+8OX8eXgKdE9kQKjKIhLGOjdFNYJwxks oFRnJlzz9VDfG+FOsRMhyi8d0OGTedOnnGKPczI9ckCZbmoejw== X-Google-Smtp-Source: ABdhPJwtemQhXnaYj9WGqGxp3h1XUZw+aVC4+u+moRqkLTTu1sYuzBmyE6vI1I1GOVi6stfCqDc4ySf8Aqy00i9XQ4M= X-Received: by 2002:a2e:b8d6:: with SMTP id s22mr7625319ljp.117.1620984194735; Fri, 14 May 2021 02:23:14 -0700 (PDT) MIME-Version: 1.0 From: =?UTF-8?B?6YK55pet?= Date: Fri, 14 May 2021 17:23:03 +0800 Message-ID: Subject: [PATCH] linux-user: Handle EXCP10_COPR properly for i386 To: qemu-devel@nongnu.org Content-Type: multipart/alternative; boundary="0000000000001d214105c246cb2c" 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::231; envelope-from=sendtozouxu@gmail.com; helo=mail-lj1-x231.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, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Fri, 14 May 2021 09:01:36 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: laurent@vivier.eu, sendtozouxu@gmail.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @gmail.com) Content-Transfer-Encoding: quoted-printable --0000000000001d214105c246cb2c MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 RnJvbSBlODA1Yjc5M2Y3ZDRiM2U4YzM3ZDU0MGI3ZDZjYzBjNmFjNjgyMzExIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBYdSBab3UgPHNlbmR0b3pvdXh1QGdtYWlsLmNvbT4KRGF0ZTog RnJpLCAxNCBNYXkgMjAyMSAxNTo1NTowNyArMDgwMApTdWJqZWN0OiBbUEFUQ0hdIGxpbnV4LXVz ZXI6IEhhbmRsZSBFWENQMTBfQ09QUiBwcm9wZXJseSBmb3IgaTM4NgoKSGFuZGxlIEVYQ1AxMF9D T1BSIHByb3Blcmx5IGZvciBpMzg2IGluIGNwdSBsb29wLgoKTkUgZmxhZyBpcyBzZXQgdG8gc2Vs ZWN0IG5hdGl2ZSBtb2RlIGZvciBoYW5kbGluZyBmbG9hdGluZy1wb2ludApleGNlcHRpb25zLiBG V0FJVCBpbnN0cnVjdGlvbiBjYW4gcmFpc2UgRVhDUDEwX0NPUFIgZXhjZXB0aW9uIGJ5IHVzaW5n CmZwdV9yYWlzZV9leGNlcHRpb24oKSBmdW5jdGlvbi4KClRoZSBjb2RlIGlzIGJhc2VkIG9uIGtl cm5lbCdzIGZ1bmN0aW9uIGZwdV9fZXhjZXB0aW9uX2NvZGUoKSBpbgphcmNoL3g4Ni9rZXJuZWwv ZnB1L2NvcmUuYy4KClNpZ25lZC1vZmYtYnk6IFh1IFpvdSA8c2VuZHRvem91eHVAZ21haWwuY29t PgotLS0KIGxpbnV4LXVzZXIvaTM4Ni9jcHVfbG9vcC5jIHwgMjYgKysrKysrKysrKysrKysrKysr KysrKysrKy0KIDEgZmlsZSBjaGFuZ2VkLCAyNSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0p CgpkaWZmIC0tZ2l0IGEvbGludXgtdXNlci9pMzg2L2NwdV9sb29wLmMgYi9saW51eC11c2VyL2kz ODYvY3B1X2xvb3AuYwppbmRleCBmODEzZTg3Mjk0Li5lMWYyOTExNTU0IDEwMDY0NAotLS0gYS9s aW51eC11c2VyL2kzODYvY3B1X2xvb3AuYworKysgYi9saW51eC11c2VyL2kzODYvY3B1X2xvb3Au YwpAQCAtMTk5LDYgKzE5OSw4IEBAIHZvaWQgY3B1X2xvb3AoQ1BVWDg2U3RhdGUgKmVudikKIHsK ICAgICBDUFVTdGF0ZSAqY3MgPTNEIGVudl9jcHUoZW52KTsKICAgICBpbnQgdHJhcG5yOworICAg IGludCBzaV9jb2RlOworICAgIHVpbnQ4X3Qgc3RhdHVzOwogICAgIGFiaV91bG9uZyBwYzsKICAg ICBhYmlfdWxvbmcgcmV0OwoKQEAgLTMxNSw2ICszMTcsMjggQEAgdm9pZCBjcHVfbG9vcChDUFVY ODZTdGF0ZSAqZW52KQogICAgICAgICBjYXNlIEVYQ1BfQVRPTUlDOgogICAgICAgICAgICAgY3B1 X2V4ZWNfc3RlcF9hdG9taWMoY3MpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug RVhDUDEwX0NPUFI6CisgICAgICAgICAgICBzaV9jb2RlID0zRCAwOworICAgICAgICAgICAgc3Rh dHVzID0zRCBlbnYtPmZwX3N0YXR1cy5mbG9hdF9leGNlcHRpb25fZmxhZ3M7CisgICAgICAgICAg ICBpZiAoc3RhdHVzICYgZmxvYXRfZmxhZ19pbnZhbGlkKSB7CisgICAgICAgICAgICAgICAgc2lf Y29kZSA9M0QgVEFSR0VUX0ZQRV9GTFRJTlY7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp ZiAoc3RhdHVzICYgZmxvYXRfZmxhZ19kaXZieXplcm8pIHsKKyAgICAgICAgICAgICAgICBzaV9j b2RlID0zRCBUQVJHRVRfRlBFX0ZMVERJVjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm IChzdGF0dXMgJiBmbG9hdF9mbGFnX292ZXJmbG93KSB7CisgICAgICAgICAgICAgICAgc2lfY29k ZSA9M0QgVEFSR0VUX0ZQRV9GTFRPVkY7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo KHN0YXR1cyAmIGZsb2F0X2ZsYWdfdW5kZXJmbG93KSB8fAorICAgICAgICAgICAgICAgIChzdGF0 dXMgJiBmbG9hdF9mbGFnX2lucHV0X2Rlbm9ybWFsKSB8fAorICAgICAgICAgICAgICAgIChzdGF0 dXMgJiBmbG9hdF9mbGFnX291dHB1dF9kZW5vcm1hbCkpIHsKKyAgICAgICAgICAgICAgICBzaV9j b2RlID0zRCBUQVJHRVRfRlBFX0ZMVFVORDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm IChzdGF0dXMgJiBmbG9hdF9mbGFnX2luZXhhY3QpIHsKKyAgICAgICAgICAgICAgICBzaV9jb2Rl ID0zRCBUQVJHRVRfRlBFX0ZMVFJFUzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdlbl9z aWduYWwoZW52LCBUQVJHRVRfU0lHRlBFLCBzaV9jb2RlLCBlbnYtPmVpcCk7CisgICAgICAgICAg ICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHBjID0zRCBlbnYtPnNlZ3Nb Ul9DU10uYmFzZSArIGVudi0+ZWlwOwogICAgICAgICAgICAgRVhDUF9EVU1QKGVudiwgInFlbXU6 IDB4JTA4bHg6IHVuaGFuZGxlZCBDUFUgZXhjZXB0aW9uIDB4JXggLQphYm9ydGluZ1xuIiwKQEAg LTMyNyw3ICszNTEsNyBAQCB2b2lkIGNwdV9sb29wKENQVVg4NlN0YXRlICplbnYpCgogdm9pZCB0 YXJnZXRfY3B1X2NvcHlfcmVncyhDUFVBcmNoU3RhdGUgKmVudiwgc3RydWN0IHRhcmdldF9wdF9y ZWdzICpyZWdzKQogewotICAgIGVudi0+Y3JbMF0gPTNEIENSMF9QR19NQVNLIHwgQ1IwX1dQX01B U0sgfCBDUjBfUEVfTUFTSzsKKyAgICBlbnYtPmNyWzBdID0zRCBDUjBfUEdfTUFTSyB8IENSMF9X UF9NQVNLIHwgQ1IwX1BFX01BU0sgfCBDUjBfTkVfTUFTSzsKICAgICBlbnYtPmhmbGFncyB8PTNE IEhGX1BFX01BU0sgfCBIRl9DUExfTUFTSzsKICAgICBpZiAoZW52LT5mZWF0dXJlc1tGRUFUXzFf RURYXSAmIENQVUlEX1NTRSkgewogICAgICAgICBlbnYtPmNyWzRdIHw9M0QgQ1I0X09TRlhTUl9N QVNLOwotLT0yMAoyLjI1LjE= --0000000000001d214105c246cb2c Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
From e805b793f7d4b3e8c37d540b7d6cc0c6ac682311 Mon Sep 17 0= 0:00:00 2001
From: Xu Zou <s= endtozouxu@gmail.com>
Date: Fri, 14 May 2021 15:55:07 +0800
Su= bject: [PATCH] linux-user: Handle EXCP10_COPR properly for i386

Hand= le EXCP10_COPR properly for i386 in cpu loop.

NE flag is set to sele= ct native mode for handling floating-point
exceptions. FWAIT instruction= can raise EXCP10_COPR exception by using
fpu_raise_exception() function= .

The code is based on kernel's function fpu__exception_code() i= n
arch/x86/kernel/fpu/core.c.

Signed-off-by: Xu Zou <sendtozouxu@gmail.com>
---
= =C2=A0linux-user/i386/cpu_loop.c | 26 +++++++++++++++++++++++++-
=C2=A01= file changed, 25 insertions(+), 1 deletion(-)

diff --git a/linux-us= er/i386/cpu_loop.c b/linux-user/i386/cpu_loop.c
index f813e87294..e1f291= 1554 100644
--- a/linux-user/i386/cpu_loop.c
+++ b/linux-user/i386/cp= u_loop.c
@@ -199,6 +199,8 @@ void cpu_loop(CPUX86State *env)
=C2=A0{<= br>=C2=A0 =C2=A0 =C2=A0CPUState *cs =3D env_cpu(env);
=C2=A0 =C2=A0 =C2= =A0int trapnr;
+ =C2=A0 =C2=A0int si_code;
+ =C2=A0 =C2=A0uint8_t sta= tus;
=C2=A0 =C2=A0 =C2=A0abi_ulong pc;
=C2=A0 =C2=A0 =C2=A0abi_ulong = ret;
=C2=A0
@@ -315,6 +317,28 @@ void cpu_loop(CPUX86State *env)
= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0case EXCP_ATOMIC:
=C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0cpu_exec_step_atomic(cs);
=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0break;
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0case = EXCP10_COPR:
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0si_code =3D 0;+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0status =3D env->fp_status.f= loat_exception_flags;
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (sta= tus & float_flag_invalid) {
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0si_code =3D TARGET_FPE_FLTINV;
+ =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0}
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (sta= tus & float_flag_divbyzero) {
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0si_code =3D TARGET_FPE_FLTDIV;
+ =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0}
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if = (status & float_flag_overflow) {
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0si_code =3D TARGET_FPE_FLTOVF;
+ =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0}
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= if ((status & float_flag_underflow) ||
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0(status & float_flag_input_denormal) ||
= + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(status & floa= t_flag_output_denormal)) {
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0si_code =3D TARGET_FPE_FLTUND;
+ =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0}
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (status= & float_flag_inexact) {
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0si_code =3D TARGET_FPE_FLTRES;
+ =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0}
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0gen_signal= (env, TARGET_SIGFPE, si_code, env->eip);
+ =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0break;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0default:
= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0pc =3D env->segs[R_CS].b= ase + env->eip;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0EXCP_= DUMP(env, "qemu: 0x%08lx: unhandled CPU exception 0x%x - aborting\n&qu= ot;,
@@ -327,7 +351,7 @@ void cpu_loop(CPUX86State *env)
=C2=A0
= =C2=A0void target_cpu_copy_regs(CPUArchState *env, struct target_pt_regs *r= egs)
=C2=A0{
- =C2=A0 =C2=A0env->cr[0] =3D CR0_PG_MASK | CR0_WP_MA= SK | CR0_PE_MASK;
+ =C2=A0 =C2=A0env->cr[0] =3D CR0_PG_MASK | CR0_WP_= MASK | CR0_PE_MASK | CR0_NE_MASK;
=C2=A0 =C2=A0 =C2=A0env->hflags |= =3D HF_PE_MASK | HF_CPL_MASK;
=C2=A0 =C2=A0 =C2=A0if (env->features[F= EAT_1_EDX] & CPUID_SSE) {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0env->= cr[4] |=3D CR4_OSFXSR_MASK;
--
2.25.1

--0000000000001d214105c246cb2c--