aboutsummaryrefslogtreecommitdiffstats
path: root/src/utils/pintos
diff options
context:
space:
mode:
authorFilip Strömbäck <filip.stromback@liu.se>2018-04-18 16:59:40 +0200
committerFilip Strömbäck <filip.stromback@liu.se>2018-04-18 16:59:40 +0200
commitfaedf3ab0659cff849034d85d7c58551afb2d5eb (patch)
tree32dd8744f31314c167521a14f58a353e2068d1ed /src/utils/pintos
parentdb66a7426d91c3513dad0ba2bb795aa6164c5be1 (diff)
downloadpintos-rs-faedf3ab0659cff849034d85d7c58551afb2d5eb.tar.gz
Fixed compilation issues on the latest GCC and QEMU.
Signed-off-by: Filip Strömbäck <filip.stromback@liu.se>
Diffstat (limited to 'src/utils/pintos')
-rwxr-xr-xsrc/utils/pintos22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/utils/pintos b/src/utils/pintos
index e96bc22..2d1d7f0 100755
--- a/src/utils/pintos
+++ b/src/utils/pintos
@@ -484,10 +484,13 @@ sub run_qemu {
my (@cmd) = ('qemu-system-i386'); # klaar@ida 2015-02-13
for my $iface (0...3) {
+ # filst@ida 2018-04-18:
+ # Use -drive file=<file>,index=<index>,format=raw to avoid warnings on newer Qemu
my ($option) = ('-hda', '-hdb', '-hdc', '-hdd')[$iface];
- push (@cmd, $option, $disks_by_iface[$iface]{FILE_NAME})
+ push (@cmd, '-drive', "file=" . $disks_by_iface[$iface]{FILE_NAME} . ",index=$iface,format=raw")
if defined $disks_by_iface[$iface]{FILE_NAME};
}
+
# klaar@ida 2015-03-18:
# '-p' is not supported on modern qemu
# '-s' is default for '-gdb tcp:1234' on modern qemu
@@ -504,7 +507,22 @@ sub run_qemu {
# push (@cmd, '-s', '-S') if $debug eq 'gdb'; # replaced by above
push (@cmd, '-monitor', 'null') if $vga eq 'none' && $debug eq 'none';
push (@cmd, '-nographic') if $vga eq 'none';
- run_command (@cmd);
+
+ # Insert a device that lets us shutdown Pintos. See https://wiki.osdev.org/Shutdown for details
+ push (@cmd, '-device', 'isa-debug-exit,iobase=0xf4,iosize=0x04');
+
+ # When using isa-debug-exit, we can not exit QEMU cleanly. We exit with 0x30, which will make QEMU exit
+ # with the code 0x30*2 + 1 = 97, and therefore we treat 97 as success as well.
+ my ($exit) = xsystem (@cmd);
+ if (WIFEXITED($exit)) {
+ $exit = WEXITSTATUS($exit);
+ if ($exit == 97) {
+ # We use this code to exit cleanly from within Pintos (see https://wiki.osdev.org/Shutdown)
+ # since we can not exit with code 0 using the debug shutdown device in QEMU.
+ $exit = 0;
+ }
+ }
+ die "command failed\n" if $exit;
}
# player_unsup($flag)