From nobody Wed May 8 23:54:13 2024 Delivered-To: importer2@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+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1621842356; cv=none; d=zohomail.com; s=zohoarc; b=Ym37LGTL3Mp3xy2XfLhZP7GEokaq1t3UgoRuMY5rd71Pjvl61H5FyWO+nMF/JobSfA+eLM7oP4JnJuadBAy1TvnsYug43XpvDq8Dyra0NJKLVySsVRpLnxnM/5HPrEZ6vbu+wwz2dFNf9OHj72s6UvNHjff8YZnD8poIObrlCb4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1621842356; 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=9St9gDR6dhSzX/GMKzChsblB8hRjAFJkdD2SKYDJakM=; b=jRS221wjOB1mXaDHBvwlSXNpfIlkdSM8Lds+XztXs5b4fQ5VQPbnPMxV9/Lz4+CRYenQbZmF+ZGBtJ2lTWyJ45XR7PVjXykkL3AU0QkIDrroyyo4bO4QHsR/sN3lkVjMPYuucQPRX/7se2UnAHRbFhiLNCHeg+S8izXDa48hTYI= 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+importer2=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 1621842356269217.85238713005208; Mon, 24 May 2021 00:45:56 -0700 (PDT) Received: from localhost ([::1]:35932 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ll5He-0001dh-7L for importer2@patchew.org; Mon, 24 May 2021 03:45:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40388) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ll5Gs-0000tJ-2L for qemu-devel@nongnu.org; Mon, 24 May 2021 03:45:06 -0400 Received: from mail-lj1-x244.google.com ([2a00:1450:4864:20::244]:44571) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ll5Gp-0001Cm-RG for qemu-devel@nongnu.org; Mon, 24 May 2021 03:45:05 -0400 Received: by mail-lj1-x244.google.com with SMTP id s25so32329495ljo.11 for ; Mon, 24 May 2021 00:45:02 -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=9St9gDR6dhSzX/GMKzChsblB8hRjAFJkdD2SKYDJakM=; b=O3WrMIWBLqa3VT15Z/+Tp6kQm+1Krs7CCEx8WhYN0+R6vHIwgVFWjY8Uya1ekeYzWi 4+Llx9MsTh4++UTF12fDRoPA0y6HNaypumMmayX0ZhWP51acvQPb5h+fwBK4qGFCXPa9 LiOWEFuWD8O3ZhraHa5AXa0msWhUVIAsZXX31reRwCDyz0rERrKG5Okzm4gamvhoMXCv tBKXmA+T3Nt9pXXLvfNC5Zj/VV+1cyrBa7ztydqCab1q7NvKdB7bGs0iNkpawre/mgvw UGBWA+VavbAwzUI7YLyv/PL2CPKEkUoB/FtY5Wyi4kKLamYs/vbNjo5bm65di6mBetri muQA== 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=9St9gDR6dhSzX/GMKzChsblB8hRjAFJkdD2SKYDJakM=; b=p7XzqrnKneOW539AxUAB3k/jXas9Y1jqmcc0xDztFT9QF8+jUmJHI0niV1rnBLHN02 xYDmt3Uw7BPY75yoSPq/4CY+5jv5IOrQdDXYaprf5ntarJjGDQIJbesi1zRwdjtOv+Tj RacunA1/46ydK+aS/DLIcMvaDTDnc4E6AQdohmKfprIeQ2ciTtYy5ndetHkQbFlJAVlr AsU60XHCgfaWhr09sp+2yZ4qBIrV086+KCv2b7iUTIWn7VE49lWZAobw/BWAOlQ69lAx r0d1ndj2oXIEUGWOdEg1SzRIxL+m3HdzvZvFfo5M59IV9YjhXZMr22SwNdR+fXV8C9Jz QVxg== X-Gm-Message-State: AOAM530C/SmQSHAZUPGKY7TWNsp5yWE18SryyzOChUb9vEjl73ZtbG4q VdtLexoTL6MqHqq0fNFKZyJiO5ih/uU+xR/wZEFJkNbrtLdRgw== X-Google-Smtp-Source: ABdhPJzhk3mQ75IupAwZ1JXNt9yID8jM33TxgsWc7rgT5IScMsjCq9BDv7s7+MlSWU0qJK85PAJ/NiIcv5Ivu8GBPss= X-Received: by 2002:a2e:b8d5:: with SMTP id s21mr15594012ljp.163.1621842300969; Mon, 24 May 2021 00:45:00 -0700 (PDT) MIME-Version: 1.0 From: Xu Zou Date: Mon, 24 May 2021 15:44:49 +0800 Message-ID: Subject: [PATCH] linux-user: Handle EXCP10_COPR properly for i386 To: qemu-devel@nongnu.org Content-Type: multipart/alternative; boundary="0000000000003b256305c30e969d" 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::244; envelope-from=sendtozouxu@gmail.com; helo=mail-lj1-x244.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-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, Xu Zou Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @gmail.com) Content-Transfer-Encoding: quoted-printable --0000000000003b256305c30e969d MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 RnJvbSBlNTVmODkwYzExYWVhNmUyOGU0YjNjZDVlZjdmMjQ5Njc3NWYyYTQzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBYdSBab3UgPHNlbmR0b3pvdXh1QGdtYWlsLmNvbT4KRGF0ZTog TW9uLCAyNCBNYXkgMjAyMSAwOTo0Mzo1NCArMDgwMApTdWJqZWN0OiBbUEFUQ0hdIGxpbnV4LXVz ZXI6IEhhbmRsZSBFWENQMTBfQ09QUiBwcm9wZXJseSBmb3IgaTM4NgoKSGFuZGxlIEVYQ1AxMF9D T1BSIHByb3Blcmx5IGZvciBpMzg2IGluIGNwdSBsb29wLgoKTkUgZmxhZyBpcyBzZXQgdG8gc2Vs ZWN0IHRoZSBuYXRpdmUgbW9kZSBmb3IgaGFuZGxpbmcgZmxvYXRpbmctcG9pbnQKZXhjZXB0aW9u cy4gRldBSVQgaW5zdHJ1Y3Rpb24gY2FuIHJhaXNlIEVYQ1AxMF9DT1BSIGV4Y2VwdGlvbiBieSB1 c2luZwpmcHVfcmFpc2VfZXhjZXB0aW9uKCkgZnVuY3Rpb24uCgpUaGUgY29kZSBpcyBiYXNlZCBv biBrZXJuZWwncyBmdW5jdGlvbiBmcHVfX2V4Y2VwdGlvbl9jb2RlKCkgaW4KYXJjaC94ODYva2Vy bmVsL2ZwdS9jb3JlLmMuCgpTaWduZWQtb2ZmLWJ5OiBYdSBab3UgPHNlbmR0b3pvdXh1QGdtYWls LmNvbT4KLS0tCiBsaW51eC11c2VyL2kzODYvY3B1X2xvb3AuYyB8IDI2ICsrKysrKysrKysrKysr KysrKysrKysrKystCiAxIGZpbGUgY2hhbmdlZCwgMjUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlv bigtKQoKZGlmZiAtLWdpdCBhL2xpbnV4LXVzZXIvaTM4Ni9jcHVfbG9vcC5jIGIvbGludXgtdXNl ci9pMzg2L2NwdV9sb29wLmMKaW5kZXggZjgxM2U4NzI5NC4uZTFmMjkxMTU1NCAxMDA2NDQKLS0t IGEvbGludXgtdXNlci9pMzg2L2NwdV9sb29wLmMKKysrIGIvbGludXgtdXNlci9pMzg2L2NwdV9s b29wLmMKQEAgLTE5OSw2ICsxOTksOCBAQCB2b2lkIGNwdV9sb29wKENQVVg4NlN0YXRlICplbnYp CiB7CiAgICAgQ1BVU3RhdGUgKmNzID0zRCBlbnZfY3B1KGVudik7CiAgICAgaW50IHRyYXBucjsK KyAgICBpbnQgc2lfY29kZTsKKyAgICB1aW50OF90IHN0YXR1czsKICAgICBhYmlfdWxvbmcgcGM7 CiAgICAgYWJpX3Vsb25nIHJldDsKCkBAIC0zMTUsNiArMzE3LDI4IEBAIHZvaWQgY3B1X2xvb3Ao Q1BVWDg2U3RhdGUgKmVudikKICAgICAgICAgY2FzZSBFWENQX0FUT01JQzoKICAgICAgICAgICAg IGNwdV9leGVjX3N0ZXBfYXRvbWljKGNzKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj YXNlIEVYQ1AxMF9DT1BSOgorICAgICAgICAgICAgc2lfY29kZSA9M0QgMDsKKyAgICAgICAgICAg IHN0YXR1cyA9M0QgZW52LT5mcF9zdGF0dXMuZmxvYXRfZXhjZXB0aW9uX2ZsYWdzOworICAgICAg ICAgICAgaWYgKHN0YXR1cyAmIGZsb2F0X2ZsYWdfaW52YWxpZCkgeworICAgICAgICAgICAgICAg IHNpX2NvZGUgPTNEIFRBUkdFVF9GUEVfRkxUSU5WOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgaWYgKHN0YXR1cyAmIGZsb2F0X2ZsYWdfZGl2Ynl6ZXJvKSB7CisgICAgICAgICAgICAgICAg c2lfY29kZSA9M0QgVEFSR0VUX0ZQRV9GTFRESVY7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBpZiAoc3RhdHVzICYgZmxvYXRfZmxhZ19vdmVyZmxvdykgeworICAgICAgICAgICAgICAgIHNp X2NvZGUgPTNEIFRBUkdFVF9GUEVfRkxUT1ZGOworICAgICAgICAgICAgfQorICAgICAgICAgICAg aWYgKChzdGF0dXMgJiBmbG9hdF9mbGFnX3VuZGVyZmxvdykgfHwKKyAgICAgICAgICAgICAgICAo c3RhdHVzICYgZmxvYXRfZmxhZ19pbnB1dF9kZW5vcm1hbCkgfHwKKyAgICAgICAgICAgICAgICAo c3RhdHVzICYgZmxvYXRfZmxhZ19vdXRwdXRfZGVub3JtYWwpKSB7CisgICAgICAgICAgICAgICAg c2lfY29kZSA9M0QgVEFSR0VUX0ZQRV9GTFRVTkQ7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBpZiAoc3RhdHVzICYgZmxvYXRfZmxhZ19pbmV4YWN0KSB7CisgICAgICAgICAgICAgICAgc2lf Y29kZSA9M0QgVEFSR0VUX0ZQRV9GTFRSRVM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBn ZW5fc2lnbmFsKGVudiwgVEFSR0VUX1NJR0ZQRSwgc2lfY29kZSwgZW52LT5laXApOworICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBwYyA9M0QgZW52LT5z ZWdzW1JfQ1NdLmJhc2UgKyBlbnYtPmVpcDsKICAgICAgICAgICAgIEVYQ1BfRFVNUChlbnYsICJx ZW11OiAweCUwOGx4OiB1bmhhbmRsZWQgQ1BVIGV4Y2VwdGlvbiAweCV4IC0KYWJvcnRpbmdcbiIs CkBAIC0zMjcsNyArMzUxLDcgQEAgdm9pZCBjcHVfbG9vcChDUFVYODZTdGF0ZSAqZW52KQoKIHZv aWQgdGFyZ2V0X2NwdV9jb3B5X3JlZ3MoQ1BVQXJjaFN0YXRlICplbnYsIHN0cnVjdCB0YXJnZXRf cHRfcmVncyAqcmVncykKIHsKLSAgICBlbnYtPmNyWzBdID0zRCBDUjBfUEdfTUFTSyB8IENSMF9X UF9NQVNLIHwgQ1IwX1BFX01BU0s7CisgICAgZW52LT5jclswXSA9M0QgQ1IwX1BHX01BU0sgfCBD UjBfV1BfTUFTSyB8IENSMF9QRV9NQVNLIHwgQ1IwX05FX01BU0s7CiAgICAgZW52LT5oZmxhZ3Mg fD0zRCBIRl9QRV9NQVNLIHwgSEZfQ1BMX01BU0s7CiAgICAgaWYgKGVudi0+ZmVhdHVyZXNbRkVB VF8xX0VEWF0gJiBDUFVJRF9TU0UpIHsKICAgICAgICAgZW52LT5jcls0XSB8PTNEIENSNF9PU0ZY U1JfTUFTSzsKLS09MjAKMi4yNS4x --0000000000003b256305c30e969d Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
From e55f890c11aea6e28e4b3cd5ef7f2496775f2a43 Mon Sep 17 0= 0:00:00 2001
From: Xu Zou <s= endtozouxu@gmail.com>
Date: Mon, 24 May 2021 09:43:54 +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 the native mode for handling floating-point
exceptions. FWAIT instruc= tion can raise EXCP10_COPR exception by using
fpu_raise_exception() func= tion.

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

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

diff --git a/linux-u= ser/i386/cpu_loop.c b/linux-user/i386/cpu_loop.c
index f813e87294..e1f29= 11554 100644
--- a/linux-user/i386/cpu_loop.c
+++ b/linux-user/i386/c= pu_loop.c
@@ -199,6 +199,8 @@ void cpu_loop(CPUX86State *env)
=C2=A0{=
=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

--0000000000003b256305c30e969d--