/* * This file is part of the Jikes RVM project (http://jikesrvm.org). * * This file is licensed to You under the Common Public License (CPL); * You may not use this file except in compliance with the License. You * may obtain a copy of the License at * * http://www.opensource.org/licenses/cpl1.0.php * * See the COPYRIGHT.txt file distributed with this work for information * regarding copyright ownership. */ package org.jikesrvm; import org.jikesrvm.annotations.NoSubArchCompile; /** * Flags that specify the configuration of our virtual machine. * * Note: Changing any <code>final</code> flags requires that the whole vm * be recompiled and rebuilt after their values are changed. */ @NoSubArchCompile public abstract class VM_Configuration { //TODO: Split target specific configuration into separate file public static final org.jikesrvm.ia32.VM_MachineSpecificIA.IA32 archHelper = org.jikesrvm.ia32.VM_MachineSpecificIA.IA32.singleton; public static final org.jikesrvm.cellspu.VM_MachineSpecificCellSpu.CellSpu subArchHelper = org.jikesrvm.cellspu.VM_MachineSpecificCellSpu.CellSpu.singleton; public static final boolean BuildForPowerPC = false; public static final boolean BuildForIA32 = true; public static final boolean BuildForSSE2 = BuildForIA32 && true; public static final boolean BuildForSSE2Full = BuildForSSE2 && true; public static final boolean HybridRVM = true; public static final boolean SubArchCellSpu = true; public static final boolean BuildFor32Addr = true; public static final boolean BuildFor64Addr = !BuildFor32Addr; public static final boolean BuildForAix = false; public static final boolean BuildForLinux = false; public static final boolean BuildForSolaris = false; public static final boolean BuildForSubordinate = true; public static final boolean BuildForOsx = true; public static final boolean LittleEndian = BuildForIA32; /* ABI selection. Exactly one of these variables will be true in each build. */ public static final boolean BuildForMachOABI = BuildForOsx; public static final boolean BuildForPowerOpenABI = BuildForAix || (BuildForLinux && BuildForPowerPC && BuildFor64Addr); public static final boolean BuildForSVR4ABI = !(BuildForPowerOpenABI || BuildForMachOABI); /** Do we have the facilities to intercept blocking system calls? */ public static final boolean withoutInterceptBlockingSystemCalls = BuildForAix || BuildForOsx || BuildForSolaris; /** Are we using Classpath's portable native sync feature? */ public static final boolean PortableNativeSync = true; /** * Can a dereference of a null pointer result in an access * to 'low' memory addresses that must be explicitly guarded because the * target OS doesn't allow us to read protect low memory? */ public static final boolean ExplicitlyGuardLowMemory = BuildForAix; public static final boolean BuildWithAllClasses = false; /** Assertion checking. <dl> <dt>false</dt> <dd> no assertion checking at runtime</dd> <dt>true </dt> <dd> execute assertion checks at runtime</dd> <dl> Note: code your assertion checks as <pre> if (VM.VerifyAssertions) VM._assert(xxx); </pre> */ public static final boolean VerifyAssertions = true; public static final boolean ExtremeAssertions = false; /** * If set, verify that Uninterruptible methods actually cannot be * interrupted. */ public static final boolean VerifyUnint = VerifyAssertions; // If set, ignore the supression pragma and print all warning messages. public static final boolean ParanoidVerifyUnint = false; // Is this an adaptive build? public static final boolean BuildForAdaptiveSystem = false; // Is this an opt compiler build? public static final boolean BuildForOptCompiler = false; // build with Base boot image compiler public static final boolean BuildWithBaseBootImageCompiler = true; // Interface method invocation. // We have five mechanisms: // IMT-based (Alpern, Cocchi, Fink, Grove, and Lieber). // - embedded directly in the TIB // - indirectly accessed off the TIB // ITable-based // - directly indexed (by interface id) iTables. // - searched (at dispatch time); // Naive, class object is searched for matching method on every dispatch. public static final boolean BuildForIMTInterfaceInvocation = true; public static final boolean BuildForIndirectIMT = BuildForIMTInterfaceInvocation; public static final boolean BuildForEmbeddedIMT = !BuildForIndirectIMT && BuildForIMTInterfaceInvocation; public static final boolean BuildForITableInterfaceInvocation = !BuildForIMTInterfaceInvocation; public static final boolean DirectlyIndexedITables = false; /** Epilogue yieldpoints increase sampling accuracy for adaptive recompilation. In particular, they are key for large, leaf, loop-free methods. */ public static final boolean UseEpilogueYieldPoints = BuildForAdaptiveSystem; /* NUmber of allocations between gc's during stress testing. Set to 0 to disable. */ public static final int StressGCAllocationInterval = 0; public static final boolean ForceFrequentGC = 0 != StressGCAllocationInterval; /* * We often need to slightly tweak the VM boot sequence and/or * the library/VM interface depending on the version of GNU classpath * we are building against. * We always have at least two versions we are supporting (CVS Head and * the most recent release). Sometimes we also support some back-level * releases of GNU classpath. * For each supported released version, define a static final boolean. * We don't define a boolean for CVS head because we prefer to define * CVS head as the ! of all other variables. * This makes it easier to find an eliminate * old code when we move up to the next version. */ private static final int ClasspathVersion = (int)96.1; public static final boolean BuildWithGCTrace = false; public static final boolean BuildWithGCSpy = false; /** * Alignment checking (for IA32 only; for debugging purposes only). * To enable, build with -Dconfig.alignment-checking=true. * Important: You'll also need to build without SSE (-Dtarget.arch.sse2=none) and * run Jikes with only one processor (-X:processors=1). */ public static final boolean AlignmentChecking = false; }