Update Bochs and toolchain build summaries.
[pintos-anon] / src / misc / bochs-2.1.1.patch
index d55d83ed73012e0572af614ca6009c6af8525940..42fafc5cd4ab98a7dbb2a695fc71cb65f0ae32eb 100644 (file)
@@ -14,18 +14,47 @@ connect a serial port to stdout and it doesn't work under Solaris
 anyway.  This patch is useful everywhere with `pintos', but may not be
 wanted elsewhere.
 
 anyway.  This patch is useful everywhere with `pintos', but may not be
 wanted elsewhere.
 
+The remaining patches add the `jitter' feature described in the
+project documentation, in which timer interrupts are delivered at
+random intervals.
+
 To apply all the patches, cd into the Bochs directory, then type
 To apply all the patches, cd into the Bochs directory, then type
-       patch -p1 < ~/pintos/src/misc/bochs-2.1.1.patch
+       patch -p1 < $PINTOSROOT/src/misc/bochs-2.1.1.patch
 You will have to supply the proper path to the patch, of course.  You
 can provide the --dry-run option to patch if you want to test whether
 the patch would apply cleanly before actually patching.
 
 You will have to supply the proper path to the patch, of course.  You
 can provide the --dry-run option to patch if you want to test whether
 the patch would apply cleanly before actually patching.
 
+To apply a subset of the patches, use a text editor to delete the
+unwanted patches, then follow the above instructions.
+
 Here's a ./configure invocation for Bochs that works optimally with
 the `pintos' utility:
        ./configure --with-x --with-x11 --with-term --with-nogui
 If you want the gdb stub, add --enable-gdb-stub
 If you want the internal debugger, add --enable-debugger
 
 Here's a ./configure invocation for Bochs that works optimally with
 the `pintos' utility:
        ./configure --with-x --with-x11 --with-term --with-nogui
 If you want the gdb stub, add --enable-gdb-stub
 If you want the internal debugger, add --enable-debugger
 
+Here are the commands used to build and install all the versions of
+Bochs we make available on the elaines:
+
+cd /tmp && tar xzf ~/bochs-2.1.1.tar.gz && cd bochs-2.1.1
+patch -p1 < $PINTOSROOT/src/misc/bochs-2.1.1.patch
+CFGOPTS="--with-x --with-x11 --with-term --with-nogui --prefix=/usr/class/cs140/i386"
+(mkdir plain &&
+ cd plain && 
+ ../configure $CFGOPTS && 
+ make && 
+ make install)
+(mkdir with-gdb &&
+ cd with-gdb &&
+ ../configure --enable-gdb-stub $CFGOPTS &&
+ make &&
+ cp bochs /usr/class/cs140/i386/bin/bochs-gdb)
+(mkdir with-dbg &&
+ cd with-dbg &&
+ ../configure --enable-debugger $CFGOPTS &&
+ make &&
+ cp bochs /usr/class/cs140/i386/bin/bochs-dbg)
+
 diff -urp orig/bochs-2.1.1/Makefile.in bochs-2.1.1/Makefile.in
 --- orig/bochs-2.1.1/Makefile.in       2004-02-11 14:28:02.000000000 -0800
 +++ bochs-2.1.1/Makefile.in    2004-09-13 15:05:26.281550000 -0700
 diff -urp orig/bochs-2.1.1/Makefile.in bochs-2.1.1/Makefile.in
 --- orig/bochs-2.1.1/Makefile.in       2004-02-11 14:28:02.000000000 -0800
 +++ bochs-2.1.1/Makefile.in    2004-09-13 15:05:26.281550000 -0700
@@ -132,6 +161,8 @@ diff -urp orig/bochs-2.1.1/gdbstub.cc bochs-2.1.1/gdbstub.cc
              mem2hex((char *)registers, obuf, NUMREGSBYTES);
              put_reply(obuf);
              break;
              mem2hex((char *)registers, obuf, NUMREGSBYTES);
              put_reply(obuf);
              break;
+
+diff -u tmp/bochs-2.1.1/iodev/serial.cc bochs-2.1.1/iodev/serial.cc
 --- tmp/bochs-2.1.1/iodev/serial.cc    2004-02-11 14:28:54.000001000 -0800
 +++ bochs-2.1.1/iodev/serial.cc        2004-09-14 23:02:04.000001000 -0700
 @@ -53,7 +53,7 @@
 --- tmp/bochs-2.1.1/iodev/serial.cc    2004-02-11 14:28:54.000001000 -0800
 +++ bochs-2.1.1/iodev/serial.cc        2004-09-14 23:02:04.000001000 -0700
 @@ -53,7 +53,7 @@
@@ -159,3 +190,67 @@ diff -urp orig/bochs-2.1.1/gdbstub.cc bochs-2.1.1/gdbstub.cc
    }
  #endif   /* def SERIAL_ENABLE */
    // nothing for now
    }
  #endif   /* def SERIAL_ENABLE */
    // nothing for now
+
+diff -urp bochs-2.1.1.orig/bochs.h bochs-2.1.1/bochs.h
+--- bochs-2.1.1.orig/bochs.h   2004-02-11 14:28:03.000000000 -0800
++++ bochs-2.1.1/bochs.h        2004-09-20 17:02:01.000000000 -0700
+@@ -757,4 +757,6 @@ int bx_init_hardware ();
+ #endif
++extern int jitter;
++
+ #endif  /* BX_BOCHS_H */
+diff -urp bochs-2.1.1.orig/iodev/pit82c54.cc bochs-2.1.1/iodev/pit82c54.cc
+--- bochs-2.1.1.orig/iodev/pit82c54.cc 2004-02-11 14:28:53.000000000 -0800
++++ bochs-2.1.1/iodev/pit82c54.cc      2004-09-20 17:18:24.000000000 -0700
+@@ -28,6 +28,7 @@
+ #include "bochs.h"
+ #include "pit82c54.h"
++#include <stdlib.h>
+ #define LOG_THIS this->
+@@ -356,7 +357,13 @@ pit_82C54::clock(Bit8u cnum) {
+       case 2:
+       if(thisctr.count_written) {
+         if(thisctr.triggerGATE || thisctr.first_pass) {
+-          set_count(thisctr, thisctr.inlatch);
++            unsigned n = thisctr.inlatch;
++            if (jitter) {
++                n *= (double) rand() / RAND_MAX;
++                if (n < 5)
++                    n = 5;
++            }
++          set_count(thisctr, n);
+           thisctr.next_change_time=(thisctr.count_binary-1) & 0xFFFF;
+           thisctr.null_count=0;
+           if(thisctr.inlatch==1) {
+diff -urp bochs-2.1.1.orig/iodev/pit_wrap.cc bochs-2.1.1/iodev/pit_wrap.cc
+diff -urp bochs-2.1.1.orig/iodev/serial.cc bochs-2.1.1/iodev/serial.cc
+diff -urp bochs-2.1.1.orig/main.cc bochs-2.1.1/main.cc
+--- bochs-2.1.1.orig/main.cc   2004-02-11 14:28:41.000000000 -0800
++++ bochs-2.1.1/main.cc        2004-09-20 17:15:39.000000000 -0700
+@@ -58,6 +58,7 @@
+ int bochsrc_include_count = 0;
++int jitter = 0;
+ extern "C" {
+ #include <signal.h>
+@@ -2022,6 +2024,13 @@ bx_init_main (int argc, char *argv[])
+     else if (!strcmp ("-q", argv[arg])) {
+       SIM->get_param_enum(BXP_BOCHS_START)->set (BX_QUICK_START);
+     }
++    else if (!strcmp ("-j", argv[arg])) {
++      if (++arg >= argc) BX_PANIC(("-j must be followed by a number"));
++      else {
++        jitter = 1;
++        srand (atoi (argv[arg]));
++      }
++    }
+     else if (!strcmp ("-f", argv[arg])) {
+       if (++arg >= argc) BX_PANIC(("-f must be followed by a filename"));
+       else bochsrc_filename = argv[arg];