Package: qemu
Version: 0.9.0-2
Severity: normal
Tags: patch

Hi,

qemu sometimes fails to install etch. It hang during disk partitioning.
This is due to a bug in a emulated scsi controller.

Please find below a patch (backport from CVS) to fix that, as well as 
other important arm bugs.

Bye,
Aurelien


diff -u qemu-0.9.0/debian/patches/series qemu-0.9.0/debian/patches/series
--- qemu-0.9.0/debian/patches/series
+++ qemu-0.9.0/debian/patches/series
@@ -24,6 +24,7 @@
 42_arm_tls.patch -p0
 43_arm_cpustate.patch -p0
 44_arm_eabi_built_on_64bit_arches.patch -p0
+45_arm_instructions.patch -p0
 50_linuxbios_isa_bios_ram.patch -p0
 51_linuxbios_piix_ram_size.patch -p0
 52_ne2000_return.patch
@@ -36,4 +37,6 @@
 65_kfreebsd.patch -p0
 66_tls_ld.patch -p0
+70_lsi53c895a.patch -p0
+71_smc91c111.patch -p0
 80_ui_curses.patch -p0
 90_security.patch -p0
only in patch2:
unchanged:
--- qemu-0.9.0.orig/debian/patches/45_arm_instructions.patch
+++ qemu-0.9.0/debian/patches/45_arm_instructions.patch
@@ -0,0 +1,24 @@
+--- target-arm/translate.c.orig        2007-02-15 12:38:36.000000000 +0100
++++ target-arm/translate.c     2007-02-15 12:38:42.000000000 +0100
+@@ -391,9 +391,9 @@
+     if (insn & (1 << 22)) {
+         /* immediate */
+         val = (insn & 0xf) | ((insn >> 4) & 0xf0);
+-        val += extra;
+         if (!(insn & (1 << 23)))
+             val = -val;
++        val += extra;
+         if (val != 0)
+             gen_op_addl_T1_im(val);
+     } else {
+--- target-arm/op.c    2007-06-22 15:27:12.000000000 +0200
++++ target-arm/op.c    2007-05-21 19:48:01.000000000 +0200
+@@ -667,7 +667,7 @@
+     if (shift >= 32) {
+         env->CF = (T1 >> 31) & 1;
+         T1 = (int32_t)T1 >> 31;
+-    } else {
++    } else if (shift != 0) {
+         env->CF = (T1 >> (shift - 1)) & 1;
+         T1 = (int32_t)T1 >> shift;
+     }
only in patch2:
unchanged:
--- qemu-0.9.0.orig/debian/patches/70_lsi53c895a.patch
+++ qemu-0.9.0/debian/patches/70_lsi53c895a.patch
@@ -0,0 +1,110 @@
+--- hw/lsi53c895a.c    2007-02-06 00:01:54.000000000 +0100
++++ hw/lsi53c895a.c    2007-04-28 22:45:04.000000000 +0200
+@@ -251,7 +251,7 @@
+     uint32_t ia;
+     uint32_t sbc;
+     uint32_t csbc;
+-    uint32_t scratch[13]; /* SCRATCHA-SCRATCHR */
++    uint32_t scratch[18]; /* SCRATCHA-SCRATCHR */
+ 
+     /* Script ram is stored as 32-bit words in host byteorder.  */
+     uint32_t script_ram[2048];
+@@ -855,6 +855,7 @@
+             offset = sxt24(addr);
+             cpu_physical_memory_read(s->dsa + offset, (uint8_t *)buf, 8);
+             s->dbc = cpu_to_le32(buf[0]);
++            s->rbc = s->dbc;
+             addr = cpu_to_le32(buf[1]);
+         }
+         if ((s->sstat1 & PHASE_MASK) != ((insn >> 24) & 7)) {
+@@ -864,6 +865,8 @@
+             break;
+         }
+         s->dnad = addr;
++        /* ??? Set ESA.  */
++        s->ia = s->dsp - 8;
+         switch (s->sstat1 & 0x7) {
+         case PHASE_DO:
+             s->waiting = 2;
+@@ -898,8 +901,6 @@
+         s->sbc = s->dbc;
+         s->rbc -= s->dbc;
+         s->ua = addr + s->dbc;
+-        /* ??? Set ESA.  */
+-        s->ia = s->dsp - 8;
+         break;
+ 
+     case 1: /* IO or Read/Write instruction.  */
+@@ -1038,7 +1039,7 @@
+                 op0 |= op1;
+                 break;
+             case 3: /* XOR */
+-                op0 |= op1;
++                op0 ^= op1;
+                 break;
+             case 4: /* AND */
+                 op0 &= op1;
+@@ -1046,6 +1047,7 @@
+             case 5: /* SHR */
+                 op1 = op0 & 1;
+                 op0 = (op0 >> 1) | (s->carry << 7);
++                s->carry = op1;
+                 break;
+             case 6: /* ADD */
+                 op0 += op1;
+@@ -1388,7 +1390,7 @@
+         break;
+     case 0x02: /* SCNTL2 */
+         val &= ~(LSI_SCNTL2_WSR | LSI_SCNTL2_WSS);
+-        s->scntl3 = val;
++        s->scntl2 = val;
+         break;
+     case 0x03: /* SCNTL3 */
+         s->scntl3 = val;
+@@ -1433,10 +1435,13 @@
+         if (val & LSI_ISTAT0_SRST) {
+             lsi_soft_reset(s);
+         }
++        break;
+     case 0x16: /* MBOX0 */
+         s->mbox0 = val;
++        break;
+     case 0x17: /* MBOX1 */
+         s->mbox1 = val;
++        break;
+     case 0x1b: /* CTEST3 */
+         s->ctest3 = val & 0x0f;
+         break;
+@@ -1453,19 +1458,19 @@
+         }
+         s->ctest5 = val;
+         break;
+-    case 0x2c: /* DSPS[0:7] */
++    case 0x2c: /* DSP[0:7] */
+         s->dsp &= 0xffffff00;
+         s->dsp |= val;
+         break;
+-    case 0x2d: /* DSPS[8:15] */
++    case 0x2d: /* DSP[8:15] */
+         s->dsp &= 0xffff00ff;
+         s->dsp |= val << 8;
+         break;
+-    case 0x2e: /* DSPS[16:23] */
++    case 0x2e: /* DSP[16:23] */
+         s->dsp &= 0xff00ffff;
+         s->dsp |= val << 16;
+         break;
+-    case 0x2f: /* DSPS[14:31] */
++    case 0x2f: /* DSP[24:31] */
+         s->dsp &= 0x00ffffff;
+         s->dsp |= val << 24;
+         if ((s->dmode & LSI_DMODE_MAN) == 0
+@@ -1765,7 +1770,7 @@
+     lsi_reg_writeb(s, addr, val & 0xff);
+     lsi_reg_writeb(s, addr + 1, (val >> 8) & 0xff);
+     lsi_reg_writeb(s, addr + 2, (val >> 16) & 0xff);
+-    lsi_reg_writeb(s, addr + 2, (val >> 24) & 0xff);
++    lsi_reg_writeb(s, addr + 3, (val >> 24) & 0xff);
+ }
+ 
+ static void lsi_io_mapfunc(PCIDevice *pci_dev, int region_num, 
only in patch2:
unchanged:
--- qemu-0.9.0.orig/debian/patches/71_smc91c111.patch
+++ qemu-0.9.0/debian/patches/71_smc91c111.patch
@@ -0,0 +1,27 @@
+Index: hw/smc91c111.c
+===================================================================
+RCS file: /sources/qemu/qemu/hw/smc91c111.c,v
+retrieving revision 1.5
+diff -u -r1.5 smc91c111.c
+--- hw/smc91c111.c     21 Dec 2006 17:23:49 -0000      1.5
++++ hw/smc91c111.c     24 Mar 2007 18:15:21 -0000
+@@ -446,7 +446,9 @@
+         case 7:
+             /* Not implemented.  */
+             return 0;
+-        case 8: /* Free memory available.  */
++        case 8: /* Memory size.  */
++            return NUM_PACKETS;
++        case 9: /* Free memory available.  */
+             {
+                 int i;
+                 int n;
+@@ -457,8 +459,6 @@
+                 }
+                 return n;
+             }
+-        case 9: /* Memory size.  */
+-            return NUM_PACKETS;
+         case 10: case 11: /* RPCR */
+             /* Not implemented.  */
+             return 0;


-- System Information:
Debian Release: lenny/sid
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.21.1 (SMP w/2 CPU cores)
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages qemu depends on:
ii  bochsbios                     2.3-2      BIOS for the Bochs emulator
ii  libasound2                    1.0.14a-1  ALSA library
ii  libc6                         2.5-11     GNU C Library: Shared libraries
ii  libncurses5                   5.6-3      Shared libraries for terminal hand
ii  libsdl1.2debian               1.2.11-9   Simple DirectMedia Layer
ii  openhackware                  0.4.1-2    OpenFirmware emulator for PowerPC
ii  proll                         18-2       JavaStation PROM 2.x compatible re
ii  vgabios                       0.6a-1     VGA BIOS software for the Bochs an
ii  zlib1g                        1:1.2.3-15 compression library - runtime

Versions of packages qemu recommends:
ii  debootstrap                   0.3.3.3    Bootstrap a basic Debian system
ii  sharutils                     1:4.6.3-1  shar, unshar, uuencode, uudecode
pn  vde                           <none>     (no description available)


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to