summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2012-04-19 08:44:11 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2012-04-22 15:56:41 +0100
commit375835092c66090266f1206be76012d78708cd9f (patch)
tree9d367ebaf533862dfc206aac00ffaba6efdc9683
parent2c3d4f5beee8f57a74244495511b9294df1085ea (diff)
downloadpoky-375835092c66090266f1206be76012d78708cd9f.tar.gz
qemu: Backport a patch to solve SSE2 instruction emulation issues
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] (From OE-Core rev: 69d083f8b8d8f7d095ed5682d305870c4d93fe62) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/recipes-devtools/qemu/qemu-0.15.1/a4d1f142542935b90d2eb30f3aead4edcf455fe6.patch66
-rw-r--r--meta/recipes-devtools/qemu/qemu_0.15.1.bb3
2 files changed, 68 insertions, 1 deletions
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 0000000000..405d557bdc
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu-0.15.1/a4d1f142542935b90d2eb30f3aead4edcf455fe6.patch
@@ -0,0 +1,66 @@
1From a4d1f142542935b90d2eb30f3aead4edcf455fe6 Mon Sep 17 00:00:00 2001
2From: Aurelien Jarno <aurelien@aurel32.net>
3Date: Sat, 7 Jan 2012 15:20:11 +0100
4Subject: [PATCH 1/1] target-i386: fix {min,max}{pd,ps,sd,ss} SSE2 instructions
5
6minpd, minps, minsd, minss and maxpd, maxps, maxsd, maxss SSE2
7instructions have been broken when switching target-i386 to softfloat.
8It's not possible to use comparison instructions on float types anymore
9to softfloat, so use the floatXX_lt function instead, as the
10float_XX_min and float_XX_max functions can't be used due to the Intel
11specific behaviour.
12
13As it implements the correct NaNs behaviour, let's remove the
14corresponding entry from the TODO.
15
16It fixes GDM screen display on Debian Lenny.
17
18Thanks to Peter Maydell and Jason Wessel for their analysis of the
19problem.
20
21Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
22---
23 target-i386/TODO | 1 -
24 target-i386/ops_sse.h | 9 +++++++--
25 2 files changed, 7 insertions(+), 3 deletions(-)
26
27This fixes scrollbar issues in matchbox-terminal/vte on qemux86-64 and
28files not appearing in pcmanfm, as well as glib/gobject errors to do with gdoubles
29on the console [YOCTO #1906]
30
31Upstream-Status: Backport
32
33Index: qemu-0.15.1/target-i386/TODO
34===================================================================
35--- qemu-0.15.1.orig/target-i386/TODO 2011-10-12 16:41:43.000000000 +0000
36+++ qemu-0.15.1/target-i386/TODO 2012-04-19 07:30:38.704073075 +0000
37@@ -15,7 +15,6 @@
38 - DRx register support
39 - CR0.AC emulation
40 - SSE alignment checks
41-- fix SSE min/max with nans
42
43 Optimizations/Features:
44
45Index: qemu-0.15.1/target-i386/ops_sse.h
46===================================================================
47--- qemu-0.15.1.orig/target-i386/ops_sse.h 2011-10-12 16:41:43.000000000 +0000
48+++ qemu-0.15.1/target-i386/ops_sse.h 2012-04-19 07:30:38.712073076 +0000
49@@ -584,10 +584,15 @@
50 #define FPU_SUB(size, a, b) float ## size ## _sub(a, b, &env->sse_status)
51 #define FPU_MUL(size, a, b) float ## size ## _mul(a, b, &env->sse_status)
52 #define FPU_DIV(size, a, b) float ## size ## _div(a, b, &env->sse_status)
53-#define FPU_MIN(size, a, b) (a) < (b) ? (a) : (b)
54-#define FPU_MAX(size, a, b) (a) > (b) ? (a) : (b)
55 #define FPU_SQRT(size, a, b) float ## size ## _sqrt(b, &env->sse_status)
56
57+/* Note that the choice of comparison op here is important to get the
58+ * special cases right: for min and max Intel specifies that (-0,0),
59+ * (NaN, anything) and (anything, NaN) return the second argument.
60+ */
61+#define FPU_MIN(size, a, b) float ## size ## _lt(a, b, &env->sse_status) ? (a) : (b)
62+#define FPU_MAX(size, a, b) float ## size ## _lt(b, a, &env->sse_status) ? (a) : (b)
63+
64 SSE_HELPER_S(add, FPU_ADD)
65 SSE_HELPER_S(sub, FPU_SUB)
66 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 05ea5f8ac7..e90f3398d5 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
3LIC_FILES_CHKSUM = "file://COPYING;md5=441c28d2cf86e15a37fa47e15a72fbac \ 3LIC_FILES_CHKSUM = "file://COPYING;md5=441c28d2cf86e15a37fa47e15a72fbac \
4 file://COPYING.LIB;endline=24;md5=c04def7ae38850e7d3ef548588159913" 4 file://COPYING.LIB;endline=24;md5=c04def7ae38850e7d3ef548588159913"
5 5
6PR = "r5" 6PR = "r6"
7 7
8FILESPATH = "${FILE_DIRNAME}/qemu-${PV}" 8FILESPATH = "${FILE_DIRNAME}/qemu-${PV}"
9FILESDIR = "${WORKDIR}" 9FILESDIR = "${WORKDIR}"
@@ -18,6 +18,7 @@ SRC_URI = "\
18 file://fallback-to-safe-mmap_min_addr.patch \ 18 file://fallback-to-safe-mmap_min_addr.patch \
19 file://larger_default_ram_size.patch \ 19 file://larger_default_ram_size.patch \
20 file://arm-bgr.patch \ 20 file://arm-bgr.patch \
21 file://a4d1f142542935b90d2eb30f3aead4edcf455fe6.patch \
21 " 22 "
22 23
23# Only use the GL passthrough patches for native/nativesdk versions 24# Only use the GL passthrough patches for native/nativesdk versions