From 9cd3a05d449f09bd50d2c87ea044d87efd12be23 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Tue, 14 Nov 2006 18:19:44 +0000 Subject: [PATCH] - Backport patch to make FC6 guests work by Kevin Kofler (bz 207843). --- qemu-0.8.2-mb-nops.diff | 82 +++++++++++++++++++++++++++++++++++++++++ qemu.spec | 8 +++- 2 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 qemu-0.8.2-mb-nops.diff diff --git a/qemu-0.8.2-mb-nops.diff b/qemu-0.8.2-mb-nops.diff new file mode 100644 index 0000000..61dd526 --- /dev/null +++ b/qemu-0.8.2-mb-nops.diff @@ -0,0 +1,82 @@ +=================================================================== +RCS file: /sources/qemu/qemu/target-i386/translate.c,v +retrieving revision 1.59 +retrieving revision 1.60 +diff -u -r1.59 -r1.60 +--- qemu/target-i386/translate.c 2006/07/10 19:53:04 1.59 ++++ qemu/target-i386/translate.c 2006/09/03 17:09:02 1.60 +@@ -1615,6 +1615,56 @@ + *offset_ptr = disp; + } + ++static void gen_nop_modrm(DisasContext *s, int modrm) ++{ ++ int mod, rm, base, code; ++ ++ mod = (modrm >> 6) & 3; ++ if (mod == 3) ++ return; ++ rm = modrm & 7; ++ ++ if (s->aflag) { ++ ++ base = rm; ++ ++ if (base == 4) { ++ code = ldub_code(s->pc++); ++ base = (code & 7); ++ } ++ ++ switch (mod) { ++ case 0: ++ if (base == 5) { ++ s->pc += 4; ++ } ++ break; ++ case 1: ++ s->pc++; ++ break; ++ default: ++ case 2: ++ s->pc += 4; ++ break; ++ } ++ } else { ++ switch (mod) { ++ case 0: ++ if (rm == 6) { ++ s->pc += 2; ++ } ++ break; ++ case 1: ++ s->pc++; ++ break; ++ default: ++ case 2: ++ s->pc += 2; ++ break; ++ } ++ } ++} ++ + /* used for LEA and MOV AX, mem */ + static void gen_add_A0_ds_seg(DisasContext *s) + { +@@ -5791,10 +5841,15 @@ + gen_lea_modrm(s, modrm, ®_addr, &offset_addr); + /* nothing more to do */ + break; +- default: +- goto illegal_op; ++ default: /* nop (multi byte) */ ++ gen_nop_modrm(s, modrm); ++ break; + } + break; ++ case 0x119 ... 0x11f: /* nop (multi byte) */ ++ modrm = ldub_code(s->pc++); ++ gen_nop_modrm(s, modrm); ++ break; + case 0x120: /* mov reg, crN */ + case 0x122: /* mov crN, reg */ + if (s->cpl != 0) { diff --git a/qemu.spec b/qemu.spec index 9f5f80d..592e05e 100644 --- a/qemu.spec +++ b/qemu.spec @@ -8,7 +8,7 @@ Summary: QEMU is a FAST! processor emulator Name: qemu Version: 0.8.2 -Release: 3%{?dist} +Release: 4%{?dist} License: GPL/LGPL Group: Development/Tools URL: http://www.qemu.org/ @@ -18,6 +18,7 @@ Patch0: qemu-0.7.0-build.patch Patch1: qemu-0.8.0-sdata.patch Patch2: qemu-0.8.2-kernheaders.patch Patch3: qemu-0.8.2-target-sparc.patch +Patch4: qemu-0.8.2-mb-nops.diff BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: SDL-devel compat-gcc-%{gccver} zlib-devel which texi2html Requires(post): /sbin/chkconfig @@ -44,6 +45,7 @@ As QEMU requires no host kernel patches to run, it is safe and easy to use. %patch1 -p1 %patch2 -p1 %patch3 -p1 +%patch4 -p1 %build ./configure \ @@ -92,6 +94,10 @@ fi %{_mandir}/man1/* %changelog +* Mon Nov 13 2006 Hans de Goede 0.8.2-4 +- Backport patch to make FC6 guests work by Kevin Kofler + (bz 207843). + * Mon Sep 11 2006 David Woodhouse 0.8.2-3 - Rebuild