static void boot (VM_BootRecord bootrecord) {
static void boot (VM_BootRecord bootrecord) throws VM_PragmaInterruptible {
  static void boot (VM_BootRecord bootrecord) {    verbose = bootrecord.verboseGC;    int smallHeapSize = bootrecord.smallSpaceSize;    smallHeapSize = (smallHeapSize / GC_BLOCKALIGNMENT) * GC_BLOCKALIGNMENT;    smallHeapSize = VM_Memory.roundUpPage(smallHeapSize);    int immortalSize = VM_Memory.roundUpPage(4 * (bootrecord.largeSpaceSize / VM_Memory.getPagesize()) + 					   ((int) (0.05 * smallHeapSize)) + 					   4 * VM_Memory.getPagesize());    int nurserySize = bootrecord.nurserySize;        VM_Heap.boot(bootHeap, mallocHeap, bootrecord);    immortalHeap.attach(immortalSize);    largeHeap.attach(bootrecord.largeSpaceSize);    nurseryHeap.attach(bootrecord.nurserySize);    smallHeap.attach(smallHeapSize);    nurseryHeap.reset();    VM_Processor st = VM_Scheduler.processors[VM_Scheduler.PRIMORDIAL_PROCESSOR_ID];    smallHeap.boot(st, immortalHeap);    // check for inconsistent heap & nursery sizes    if (smallHeap.size <= nurseryHeap.size) {      VM.sysWrite("\nNursery size is too large for the specified Heap size:\n");      VM.sysWriteln("  Small Object Heap Size = ", smallHeap.size / 1024, " Kb");      VM.sysWriteln("  Nursery Size = ", nurseryHeap.size / 1024, " Kb");      VM.sysWrite("Use -X:h=nnn & -X:nh=nnn to specify a heap size at least twice as big as the nursery\n");      VM.sysWrite("Remember, the nursery is subtracted from the specified heap size\n");      VM.shutdown(-5);    }    // set free block count for triggering major collection    majorCollectionThreshold = nurserySize/GC_BLOCKSIZE;    VM_GCUtil.boot();    if (verbose >= 1) showParameter();  }