summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/qemu/files
diff options
context:
space:
mode:
authorLaurentiu Palcu <laurentiu.palcu@intel.com>2013-06-20 16:59:10 +0300
committerRichard Purdie <richard.purdie@linuxfoundation.org>2013-06-20 15:09:11 +0100
commit2a4d076bdd1f4bac6a073f3e2f4e289e06f075bb (patch)
tree38f536417432e134f2bddbeb003526b52ac23381 /meta/recipes-devtools/qemu/files
parent7d02de844c00d55189673a6eed9197bcbc5b2720 (diff)
downloadpoky-2a4d076bdd1f4bac6a073f3e2f4e289e06f075bb.tar.gz
qemu: fix segfault in Xorg when not using kvm
This backported patch will fix this Xorg issue and, probably, many others which didn't show up yet. [YOCTO #4737] (From OE-Core rev: c659903841da7aa44675d2970d1b92841b91d29e) Signed-off-by: Laurentiu Palcu <laurentiu.palcu@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-devtools/qemu/files')
-rw-r--r--meta/recipes-devtools/qemu/files/target-i386-Fix-aflag-logic-for-CODE64-and-the-0x67-.patch79
1 files changed, 79 insertions, 0 deletions
diff --git a/meta/recipes-devtools/qemu/files/target-i386-Fix-aflag-logic-for-CODE64-and-the-0x67-.patch b/meta/recipes-devtools/qemu/files/target-i386-Fix-aflag-logic-for-CODE64-and-the-0x67-.patch
new file mode 100644
index 0000000000..852efd1cc9
--- /dev/null
+++ b/meta/recipes-devtools/qemu/files/target-i386-Fix-aflag-logic-for-CODE64-and-the-0x67-.patch
@@ -0,0 +1,79 @@
1Upstream-Status: Backported
2
3From dec3fc9657e0682637de4d5a29d947284d01985c Mon Sep 17 00:00:00 2001
4From: Richard Henderson <rth@twiddle.net>
5Date: Wed, 29 May 2013 12:30:51 -0700
6Subject: [PATCH] target-i386: Fix aflag logic for CODE64 and the 0x67 prefix
7
8The code reorganization in commit 4a6fd938 broke handling of PREFIX_ADR.
9While fixing this, tidy and comment the code so that it's more obvious
10what's going on in setting both aflag and dflag.
11
12The TARGET_X86_64 ifdef can be eliminated because CODE64 expands to the
13constant zero when TARGET_X86_64 is undefined.
14
15Cc: Paolo Bonzini <pbonzini@redhat.com>
16Reported-by: Laszlo Ersek <lersek@redhat.com>
17Signed-off-by: Richard Henderson <rth@twiddle.net>
18Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
19Message-id: 1369855851-21400-1-git-send-email-rth@twiddle.net
20Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
21---
22 target-i386/translate.c | 30 +++++++++++++++---------------
23 1 file changed, 15 insertions(+), 15 deletions(-)
24
25diff --git a/target-i386/translate.c b/target-i386/translate.c
26index 0aeccdb..14b0298 100644
27--- a/target-i386/translate.c
28+++ b/target-i386/translate.c
29@@ -4677,8 +4677,6 @@ static target_ulong disas_insn(CPUX86State *env, DisasContext *s,
30 }
31 s->pc = pc_start;
32 prefixes = 0;
33- aflag = s->code32;
34- dflag = s->code32;
35 s->override = -1;
36 rex_w = -1;
37 rex_r = 0;
38@@ -4801,23 +4799,25 @@ static target_ulong disas_insn(CPUX86State *env, DisasContext *s,
39 }
40
41 /* Post-process prefixes. */
42- if (prefixes & PREFIX_DATA) {
43- dflag ^= 1;
44- }
45- if (prefixes & PREFIX_ADR) {
46- aflag ^= 1;
47- }
48-#ifdef TARGET_X86_64
49 if (CODE64(s)) {
50- if (rex_w == 1) {
51- /* 0x66 is ignored if rex.w is set */
52- dflag = 2;
53+ /* In 64-bit mode, the default data size is 32-bit. Select 64-bit
54+ data with rex_w, and 16-bit data with 0x66; rex_w takes precedence
55+ over 0x66 if both are present. */
56+ dflag = (rex_w > 0 ? 2 : prefixes & PREFIX_DATA ? 0 : 1);
57+ /* In 64-bit mode, 0x67 selects 32-bit addressing. */
58+ aflag = (prefixes & PREFIX_ADR ? 1 : 2);
59+ } else {
60+ /* In 16/32-bit mode, 0x66 selects the opposite data size. */
61+ dflag = s->code32;
62+ if (prefixes & PREFIX_DATA) {
63+ dflag ^= 1;
64 }
65- if (!(prefixes & PREFIX_ADR)) {
66- aflag = 2;
67+ /* In 16/32-bit mode, 0x67 selects the opposite addressing. */
68+ aflag = s->code32;
69+ if (prefixes & PREFIX_ADR) {
70+ aflag ^= 1;
71 }
72 }
73-#endif
74
75 s->prefix = prefixes;
76 s->aflag = aflag;
77--
781.7.9.5
79