Commit 95da70e5 authored by John Ousterhout's avatar John Ousterhout Committed by Darshit Shah
Browse files

Updates for new version of Qemu

Use new isa-debug-exit device for shutdown, switch name to
parent d63ee3e4
......@@ -107,6 +107,13 @@ shutdown_power_off (void)
for (p = s; *p != '\0'; p++)
outb (0x8900, *p);
/* For newer versions of qemu, you must run with -device
* isa-debug-exit, which exits on any write to an IO port (by
* default 0x501). Qemu's exit code is double the value plus one,
* so there is no way to exit cleanly. We use 0x31 which should
* result in a qemu exit code of 0x63. */
outb (0x501, 0x31);
/* This will power off a VMware VM if "gui.exitOnCLIHLT = TRUE"
is set in its configuration file. (The "pintos" script does
that automatically.) */
......@@ -619,19 +619,9 @@ sub run_qemu {
if $vga eq 'terminal';
print "warning: qemu doesn't support jitter\n"
if defined $jitter;
my (@cmd) = ('qemu-system-i386');
push (@cmd, '-device', 'isa-debug-exit');
# on newer systems (e.g. Ubuntu 14.04) there are
# various versions of qemu for different platforms available.
# if there are multiple versions, we should select the
# complete system emulator for i386 platforms.
my ($qemu) = find_in_path ("qemu");
if (!defined $qemu) {
$qemu = find_in_path("qemu-system-i386");
die "unable to autodetect qemu. please check if it is installed\n"
if !defined $qemu;
my (@cmd) = ($qemu);
push (@cmd, '-hda', $disks[0]) if defined $disks[0];
push (@cmd, '-hdb', $disks[1]) if defined $disks[1];
push (@cmd, '-hdc', $disks[2]) if defined $disks[2];
......@@ -870,7 +860,11 @@ sub xsystem {
exit 0;
return $?;
# Kind of a gross hack, because qemu's isa-debug-exit device
# only allows odd-numbered exit values, so we can't exit
# cleanly with 0. We use exit status 0x63 as an alternate
# "clean" exit status.
return ($? != 0x6300) && $?;
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment