< prev index next >

src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCIRuntime.java

Print this page

        

*** 25,38 **** import static jdk.vm.ci.common.InitTimer.timer; import java.io.IOException; import java.io.OutputStream; import java.io.PrintStream; - import java.lang.reflect.Array; - import java.lang.reflect.Field; - import java.lang.reflect.Method; - import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; --- 25,34 ----
*** 46,57 **** import jdk.vm.ci.code.CompiledCode; import jdk.vm.ci.code.InstalledCode; import jdk.vm.ci.common.InitTimer; import jdk.vm.ci.common.JVMCIError; import jdk.vm.ci.hotspot.services.HotSpotJVMCICompilerFactory; - import jdk.vm.ci.hotspot.services.HotSpotVMEventListener; import jdk.vm.ci.hotspot.services.HotSpotJVMCICompilerFactory.CompilationLevel; import jdk.vm.ci.meta.JavaKind; import jdk.vm.ci.meta.JavaType; import jdk.vm.ci.meta.ResolvedJavaType; import jdk.vm.ci.runtime.JVMCI; import jdk.vm.ci.runtime.JVMCIBackend; --- 42,53 ---- import jdk.vm.ci.code.CompiledCode; import jdk.vm.ci.code.InstalledCode; import jdk.vm.ci.common.InitTimer; import jdk.vm.ci.common.JVMCIError; import jdk.vm.ci.hotspot.services.HotSpotJVMCICompilerFactory; import jdk.vm.ci.hotspot.services.HotSpotJVMCICompilerFactory.CompilationLevel; + import jdk.vm.ci.hotspot.services.HotSpotVMEventListener; import jdk.vm.ci.meta.JavaKind; import jdk.vm.ci.meta.JavaType; import jdk.vm.ci.meta.ResolvedJavaType; import jdk.vm.ci.runtime.JVMCI; import jdk.vm.ci.runtime.JVMCIBackend;
*** 93,105 **** /** * A list of all supported JVMCI options. */ public enum Option { Compiler(String.class, null, "Selects the system compiler."), ! // Note: The following one is not used (see InitTimer.ENABLED). InitTimer(boolean.class, false, "Specifies if initialization timing is enabled."), ! PrintConfig(boolean.class, false, "Prints all HotSpotVMConfig fields."), PrintFlags(boolean.class, false, "Prints all JVMCI flags and exits."), ShowFlags(boolean.class, false, "Prints all JVMCI flags and continues."), TraceMethodDataFilter(String.class, null, ""); /** --- 89,102 ---- /** * A list of all supported JVMCI options. */ public enum Option { Compiler(String.class, null, "Selects the system compiler."), ! // Note: The following one is not used (see InitTimer.ENABLED). It is added here ! // so that -Djvmci.PrintFlags=true shows the option. InitTimer(boolean.class, false, "Specifies if initialization timing is enabled."), ! PrintConfig(boolean.class, false, "Prints VM configuration available via JVMCI and exits."), PrintFlags(boolean.class, false, "Prints all JVMCI flags and exits."), ShowFlags(boolean.class, false, "Prints all JVMCI flags and continues."), TraceMethodDataFilter(String.class, null, ""); /**
*** 240,249 **** --- 237,247 ---- * be read from the VM. */ @SuppressWarnings("unused") private final String[] trivialPrefixes; @SuppressWarnings("try") + @SuppressFBWarnings(value = "DM_EXIT", justification = "PrintFlags is meant to exit the VM") private HotSpotJVMCIRuntime() { compilerToVm = new CompilerToVM(); try (InitTimer t = timer("HotSpotVMConfig<init>")) { configStore = new HotSpotVMConfigStore(compilerToVm);
*** 271,281 **** System.exit(0); } } if (Option.PrintConfig.getBoolean()) { ! printConfig(config, compilerToVm); } compilerFactory = HotSpotJVMCICompilerConfig.getCompilerFactory(); if (compilerFactory instanceof HotSpotJVMCICompilerFactory) { hsCompilerFactory = (HotSpotJVMCICompilerFactory) compilerFactory; --- 269,280 ---- System.exit(0); } } if (Option.PrintConfig.getBoolean()) { ! printConfig(configStore, compilerToVm); ! System.exit(0); } compilerFactory = HotSpotJVMCICompilerConfig.getCompilerFactory(); if (compilerFactory instanceof HotSpotJVMCICompilerFactory) { hsCompilerFactory = (HotSpotJVMCICompilerFactory) compilerFactory;
*** 462,536 **** for (HotSpotVMEventListener vmEventListener : getVmEventListeners()) { vmEventListener.notifyInstall(hotSpotCodeCacheProvider, installedCode, compiledCode); } } ! private static void printConfig(HotSpotVMConfig config, CompilerToVM vm) { ! Field[] fields = config.getClass().getDeclaredFields(); ! Map<String, Field> sortedFields = new TreeMap<>(); ! for (Field f : fields) { ! if (!f.isSynthetic() && !Modifier.isStatic(f.getModifiers())) { ! f.setAccessible(true); ! sortedFields.put(f.getName(), f); ! } ! } ! for (Field f : sortedFields.values()) { ! try { ! String line = String.format("%9s %-40s = %s%n", f.getType().getSimpleName(), f.getName(), pretty(f.get(config))); byte[] lineBytes = line.getBytes(); vm.writeDebugOutput(lineBytes, 0, lineBytes.length); vm.flushDebugOutput(); - } catch (Exception e) { - } - } - } - - private static String pretty(Object value) { - if (value == null) { - return "null"; } ! Class<?> klass = value.getClass(); ! if (value instanceof String) { ! return "\"" + value + "\""; ! } else if (value instanceof Method) { ! return "method \"" + ((Method) value).getName() + "\""; ! } else if (value instanceof Class<?>) { ! return "class \"" + ((Class<?>) value).getSimpleName() + "\""; ! } else if (value instanceof Integer) { ! if ((Integer) value < 10) { ! return value.toString(); ! } ! return value + " (0x" + Integer.toHexString((Integer) value) + ")"; ! } else if (value instanceof Long) { ! if ((Long) value < 10 && (Long) value > -10) { ! return value + "l"; } - return value + "l (0x" + Long.toHexString((Long) value) + "l)"; - } else if (klass.isArray()) { - StringBuilder str = new StringBuilder(); - int dimensions = 0; - while (klass.isArray()) { - dimensions++; - klass = klass.getComponentType(); } ! int length = Array.getLength(value); ! str.append(klass.getSimpleName()).append('[').append(length).append(']'); ! for (int i = 1; i < dimensions; i++) { ! str.append("[]"); } ! str.append(" {"); ! for (int i = 0; i < length; i++) { ! str.append(pretty(Array.get(value, i))); ! if (i < length - 1) { ! str.append(", "); } } ! str.append('}'); ! return str.toString(); } - return value.toString(); } public OutputStream getLogStream() { return new OutputStream() { --- 461,504 ---- for (HotSpotVMEventListener vmEventListener : getVmEventListeners()) { vmEventListener.notifyInstall(hotSpotCodeCacheProvider, installedCode, compiledCode); } } ! @SuppressFBWarnings(value = "DM_DEFAULT_ENCODING", justification = "no localization here please!") ! private static void printConfigLine(CompilerToVM vm, String format, Object... args) { ! String line = String.format(format, args); byte[] lineBytes = line.getBytes(); vm.writeDebugOutput(lineBytes, 0, lineBytes.length); vm.flushDebugOutput(); } ! private static void printConfig(HotSpotVMConfigStore store, CompilerToVM vm) { ! TreeMap<String, VMField> fields = new TreeMap<>(store.getFields()); ! for (VMField field : fields.values()) { ! if (!field.isStatic()) { ! printConfigLine(vm, "[vmconfig:instance field] %s %s {offset=%d[0x%x]}%n", field.type, field.name, field.offset, field.offset); ! } else { ! String value = field.value == null ? "null" : String.format("%d[0x%x]", field.value, field.value); ! printConfigLine(vm, "[vmconfig:static field] %s %s = %s {address=0x%x}%n", field.type, field.name, value, field.address); } } ! TreeMap<String, VMFlag> flags = new TreeMap<>(store.getFlags()); ! for (VMFlag flag : flags.values()) { ! printConfigLine(vm, "[vmconfig:flag] %s %s = %s%n", flag.type, flag.name, flag.value); } ! TreeMap<String, Long> addresses = new TreeMap<>(store.getAddresses()); ! for (Map.Entry<String, Long> e : addresses.entrySet()) { ! printConfigLine(vm, "[vmconfig:address] %s = %d[0x%x]%n", e.getKey(), e.getValue(), e.getValue()); } + TreeMap<String, Long> constants = new TreeMap<>(store.getConstants()); + for (Map.Entry<String, Long> e : constants.entrySet()) { + printConfigLine(vm, "[vmconfig:constant] %s = %d[0x%x]%n", e.getKey(), e.getValue(), e.getValue()); } ! TreeMap<String, Long> typeSizes = new TreeMap<>(store.getTypeSizes()); ! for (Map.Entry<String, Long> e : typeSizes.entrySet()) { ! printConfigLine(vm, "[vmconfig:type size] %s = %d%n", e.getKey(), e.getValue()); } } public OutputStream getLogStream() { return new OutputStream() {
< prev index next >