From: Kevin O'Connor <kevin@koconnor.net>
To: Jan Kiszka <jan.kiszka@siemens.com>
Cc: seabios <seabios@seabios.org>,
"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] Boot failure with MS-Dos 6.22 (due to bad BIOS build?)
Date: Sun, 18 Mar 2012 20:29:47 -0400 [thread overview]
Message-ID: <20120319002947.GA22937@morn.localdomain> (raw)
In-Reply-To: <4F4BA055.9010005@siemens.com>
On Mon, Feb 27, 2012 at 04:25:09PM +0100, Jan Kiszka wrote:
> On 2012-02-27 10:51, Daniel P. Berrange wrote:
> > I'm seeing current QEMU GIT fail to boot MS-Dos 6.22 with the following
> > crash:
> >
> > # qemu-system-x86_64 -fda ~/MS-DOS\ 6.22.img -m 1 -curses
> > iPXE v1.0.0-591-g7aee315
> > iPXE (http://ipxe.org) 00:03.0 C900 PCI2.10 PnP PMM+00000000+00000000 C900
> >
> > Booting from Floppy..
> > . qemu: fatal: Trying to execute code outside RAM or ROM at 0x00000001000effff
> >
> > EAX=ffffffff EBX=ffffffff ECX=0000c934 EDX=00000068
> > ESI=00006801 EDI=00000000 EBP=0000002b ESP=0000fff5
I traced this down, and it appears to be a stack size issue. It looks
like MSDOS calls "int 0x13" with 229 bytes of stack space during its
boot. On my build gcc generates the handle_13() function with a
maximum of 140 bytes of stack space utilized (according to
tools/checkstack.py). On your build, gcc created it with a maximum of
216 bytes. The entry functions use 42 bytes of stack space. Add it
up and you can see that the additional stack space that gcc used
caused %esp to wrap and the stack was corrupted.
I'm not sure how to best work around this. One way is to sprinkle
"noinline" keywords through disk.c. (It seems like gcc got in trouble
on your build by inlining many functions into disk_13().) Another way
would be to jump into the extra stack (the disk code already uses its
own stack) earlier in the handle_13 code.
Also, can you see what happens if you change "--param
large-stack-frame=4" to "--param large-stack-frame=0" in the build?
-Kevin
next prev parent reply other threads:[~2012-03-19 0:30 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-27 9:51 [Qemu-devel] Boot failure with MS-Dos 6.22 (due to bad BIOS build?) Daniel P. Berrange
2012-02-27 15:25 ` Jan Kiszka
2012-02-27 16:00 ` [Qemu-devel] [SeaBIOS] " Peter Stuge
2012-02-27 16:10 ` Jan Kiszka
2012-02-27 16:20 ` Peter Stuge
2012-02-29 8:45 ` [Qemu-devel] " Kevin O'Connor
2012-02-29 9:19 ` Daniel P. Berrange
2012-02-29 9:51 ` [Qemu-devel] [SeaBIOS] " Fred .
2012-03-19 0:29 ` Kevin O'Connor [this message]
2012-03-19 20:03 ` [Qemu-devel] " Jan Kiszka
2012-03-20 2:17 ` Kevin O'Connor
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=20120319002947.GA22937@morn.localdomain \
--to=kevin@koconnor.net \
--cc=jan.kiszka@siemens.com \
--cc=qemu-devel@nongnu.org \
--cc=seabios@seabios.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).