All of lore.kernel.org
 help / color / mirror / Atom feed
From: John Reiser <jreiser@BitWagon.com>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] bug: qemu-0.9.0 emulating mipsel (32-bit R3000) on amd64
Date: Sun, 06 May 2007 11:45:08 -0700	[thread overview]
Message-ID: <463E2234.3040508@BitWagon.com> (raw)

Hi,

qemu-0.9.0 compiled and running on Debian 2.6.18-4-amd64,
[compiled by gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)],
emulating Debian 2.6.18-4-qemu mipsel (32-bit MIPS R3000 little endian),
errs when gdb 6.4.90-debian (running on the emulated mipsel)
single-steps the user-mode instruction:
	lw      a2,-44(s7)
After single-stepping the 'lw', then register a2 contains garbage
instead of the memory contents at address -44(s7).
This is reproducible every time (and the bad value is the same.)
Also, executing the 'lw' by some means other than single stepping
(such as by setting a breakpoint _beyond_ the 'lw' and continuing)
apparently works correctly.

Here is the gdb console log:
-----
0x001060e4 in ?? ()
0x1060e4:       lw      a2,-44(s7)
(gdb) p $a2
$3 = 0x0
(gdb) x/x $s7-44
0x105458:       0x00120000
(gdb) g   # step one instruction and show next instruction
warning: GDB can't find the start of the function at 0x1060e8.
warning: GDB can't find the start of the function at 0x1060e8.
0x001060e8 in ?? ()
0x1060e8:       addiu   sp,sp,-32
(gdb) p $a2
$4 = 0x5000d
-----
where 'g' is a single-step macro for gdb:
   define g
   stepi
   x/i $pc
   end

I have posted the user-mode executable (28KB) at
    http://bitwagon.com/ftp/date.qemu-0.9.0.bug
The complete gdb session is eight (8) instructions:
-----
(gdb) set output-radix 16
(gdb) run
Program received signal SIGTRAP, Trace/breakpoint trap.
0x00105478 in ?? ()   # the entry point
(gdb) x/i $pc
0x105478:       break
(gdb) set $pc+=4   # skip over the 'break' at entry
(gdb) x/i $pc
0x10547c:       bal     0x10617c    # use 'g' or 'stepi' 5 times
0x105480:         addiu   s7,ra,0   # delay slot; executed but not stopped
0x10617c:       lw      s5,-48(s7)  # this 'lw' executes correctly
0x106180:       bal     0x1060e0
0x106184:         move    s6,ra   # delay slot
0x1060e0:       addiu   s5,s5,-92
0x1060e4:       lw      a2,-44(s7)  # bug: register a2 gets bad value
0x1060e8:       addiu   sp,sp,-32
(gdb) p $a2
$1 = 0x5000d   # (Even after allowing for 1-cycle load delay.)
(gdb) x/x $s7-44
0x105458:       0x00120000   # value that should be in register a2, but is not
-----

The emulated Debian system was installed using the directions at
   http://www.aurel32.net/info/debian_mips_qemu.php
and the actual installed kernel and initrd was:
   http://people.debian.org/~ths/d-i/mipsel/images/20070503-02:00/qemu/netboot/initrd.gz
   http://people.debian.org/~ths/d-i/mipsel/images/20070503-02:00/qemu/netboot/vmlinux-2.6.18-4-qemu
After installation, then the emulation is invoked by:
   qemu-system-mipsel -kernel vmlinux-2.6.18-4-qemu -initrd initrd.gz \
        -hda hda.img -append "root=/dev/hda1 console=ttyS0" -nographic \
        -net nic -net tap
The gdb transcript was copy+paste from an xterm running ssh into the
emulated system.  ["apt-get install ssh" on the emulated system.]

Please suggest how to find and fix this bug?
(It's hard to remember to avoid single-stepping 'lw'.)

-- 
John Reiser, jreiser@BitWagon.com

             reply	other threads:[~2007-05-06 18:52 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-05-06 18:45 John Reiser [this message]
2007-05-06 20:04 ` [Qemu-devel] bug: qemu-0.9.0 emulating mipsel (32-bit R3000) on amd64 Thiemo Seufer
2007-05-06 20:07   ` Thiemo Seufer
2007-05-07 12:13   ` Daniel Jacobowitz
2007-05-07 15:46     ` Paul Brook
2007-05-07 22:46     ` [Qemu-devel] workaround: " John Reiser
2007-05-07 23:03       ` Paul Brook
2007-05-07 23:08         ` Paul Brook
2007-05-08 18:03     ` [Qemu-devel] bug: " Stefan Weil
2007-05-08 23:50   ` John Reiser
2007-05-09  1:04     ` Thiemo Seufer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=463E2234.3040508@BitWagon.com \
    --to=jreiser@bitwagon.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.