[OE-core] [PATCH] qemu: Backport a patch to solve SSE2 instruction emulation issues

Ni Qingliang niqingliang at insigma.com.cn
Thu Apr 19 07:49:41 UTC 2012


why not update to qemu-1.0.1 ?

On Thu, 2012-04-19 at 15:44 +0800, Richard Purdie wrote:
> This fix addresses various issues seen in qemux86-64 images:
>  * scroll bars in matchbox-terminal not working
>  * files not appearing in pcmanfm
>  * warnings on the console from glib/gobject about invalid gdouble values
> 
> Its due to an emulation issue in qemu which the backported patch fixes.
> 
> I managed to debug it to a specific function, Khem found the qemu patch
> to backport, thanks Khem!
> 
> [YOCTO #1906]
> 
> Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
> ---
> diff --git a/meta/recipes-devtools/qemu/qemu-0.15.1/a4d1f142542935b90d2eb30f3aead4edcf455fe6.patch b/meta/recipes-devtools/qemu/qemu-0.15.1/a4d1f142542935b90d2eb30f3aead4edcf455fe6.patch
> new file mode 100644
> index 0000000..405d557
> --- a/dev/null
> +++ b/meta/recipes-devtools/qemu/qemu-0.15.1/a4d1f142542935b90d2eb30f3aead4edcf455fe6.patch
> @@ -0,0 +1,66 @@
> +From a4d1f142542935b90d2eb30f3aead4edcf455fe6 Mon Sep 17 00:00:00 2001
> +From: Aurelien Jarno <aurelien at aurel32.net>
> +Date: Sat, 7 Jan 2012 15:20:11 +0100
> +Subject: [PATCH 1/1] target-i386: fix {min,max}{pd,ps,sd,ss} SSE2 instructions
> +
> +minpd, minps, minsd, minss and maxpd, maxps, maxsd, maxss SSE2
> +instructions have been broken when switching target-i386 to softfloat.
> +It's not possible to use comparison instructions on float types anymore
> +to softfloat, so use the floatXX_lt function instead, as the
> +float_XX_min and float_XX_max functions can't be used due to the Intel
> +specific behaviour.
> +
> +As it implements the correct NaNs behaviour, let's remove the
> +corresponding entry from the TODO.
> +
> +It fixes GDM screen display on Debian Lenny.
> +
> +Thanks to Peter Maydell and Jason Wessel for their analysis of the
> +problem.
> +
> +Signed-off-by: Aurelien Jarno <aurelien at aurel32.net>
> +---
> + target-i386/TODO      |    1 -
> + target-i386/ops_sse.h |    9 +++++++--
> + 2 files changed, 7 insertions(+), 3 deletions(-)
> +
> +This fixes scrollbar issues in matchbox-terminal/vte on qemux86-64 and
> +files not appearing in pcmanfm, as well as glib/gobject errors to do with gdoubles
> +on the console [YOCTO #1906]
> +
> +Upstream-Status: Backport
> +
> +Index: qemu-0.15.1/target-i386/TODO
> +===================================================================
> +--- qemu-0.15.1.orig/target-i386/TODO	2011-10-12 16:41:43.000000000 +0000
> ++++ qemu-0.15.1/target-i386/TODO	2012-04-19 07:30:38.704073075 +0000
> +@@ -15,7 +15,6 @@
> + - DRx register support
> + - CR0.AC emulation
> + - SSE alignment checks
> +-- fix SSE min/max with nans
> + 
> + Optimizations/Features:
> + 
> +Index: qemu-0.15.1/target-i386/ops_sse.h
> +===================================================================
> +--- qemu-0.15.1.orig/target-i386/ops_sse.h	2011-10-12 16:41:43.000000000 +0000
> ++++ qemu-0.15.1/target-i386/ops_sse.h	2012-04-19 07:30:38.712073076 +0000
> +@@ -584,10 +584,15 @@
> + #define FPU_SUB(size, a, b) float ## size ## _sub(a, b, &env->sse_status)
> + #define FPU_MUL(size, a, b) float ## size ## _mul(a, b, &env->sse_status)
> + #define FPU_DIV(size, a, b) float ## size ## _div(a, b, &env->sse_status)
> +-#define FPU_MIN(size, a, b) (a) < (b) ? (a) : (b)
> +-#define FPU_MAX(size, a, b) (a) > (b) ? (a) : (b)
> + #define FPU_SQRT(size, a, b) float ## size ## _sqrt(b, &env->sse_status)
> + 
> ++/* Note that the choice of comparison op here is important to get the
> ++ * special cases right: for min and max Intel specifies that (-0,0),
> ++ * (NaN, anything) and (anything, NaN) return the second argument.
> ++ */
> ++#define FPU_MIN(size, a, b) float ## size ## _lt(a, b, &env->sse_status) ? (a) : (b)
> ++#define FPU_MAX(size, a, b) float ## size ## _lt(b, a, &env->sse_status) ? (a) : (b)
> ++
> + SSE_HELPER_S(add, FPU_ADD)
> + SSE_HELPER_S(sub, FPU_SUB)
> + SSE_HELPER_S(mul, FPU_MUL)
> diff --git a/meta/recipes-devtools/qemu/qemu_0.15.1.bb b/meta/recipes-devtools/qemu/qemu_0.15.1.bb
> index 05ea5f8..e90f339 100644
> --- a/meta/recipes-devtools/qemu/qemu_0.15.1.bb
> +++ b/meta/recipes-devtools/qemu/qemu_0.15.1.bb
> @@ -3,7 +3,7 @@ require qemu.inc
>  LIC_FILES_CHKSUM = "file://COPYING;md5=441c28d2cf86e15a37fa47e15a72fbac \
>                      file://COPYING.LIB;endline=24;md5=c04def7ae38850e7d3ef548588159913"
>  
> -PR = "r5"
> +PR = "r6"
>  
>  FILESPATH = "${FILE_DIRNAME}/qemu-${PV}"
>  FILESDIR = "${WORKDIR}"
> @@ -18,6 +18,7 @@ SRC_URI = "\
>      file://fallback-to-safe-mmap_min_addr.patch \
>      file://larger_default_ram_size.patch \
>      file://arm-bgr.patch \
> +    file://a4d1f142542935b90d2eb30f3aead4edcf455fe6.patch \
>      "
>  
>  # Only use the GL passthrough patches for native/nativesdk versions
> 
> 
> 
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core

-- 
Yi Qingliang
niqingliang at insigma.com.cn
https://niqingliang2003.wordpress.com





More information about the Openembedded-core mailing list