Make close-stdin, close-stdout expected output more flexible.
[pintos-anon] / src / misc / bochs-2.1.1.patch
index d55d83ed73012e0572af614ca6009c6af8525940..beb23b98c9fede7bb81e7e0f21803c7fcd111030 100644 (file)
@@ -14,12 +14,19 @@ 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
        patch -p1 < ~/pintos/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.
 
 To apply all the patches, cd into the Bochs directory, then type
        patch -p1 < ~/pintos/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.
 
+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
 Here's a ./configure invocation for Bochs that works optimally with
 the `pintos' utility:
        ./configure --with-x --with-x11 --with-term --with-nogui
@@ -132,6 +139,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 +168,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];