< prev index next >

src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/VM.java

Print this page

*** 1,7 **** /* ! * Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 150,166 **** // command line flags supplied to VM - see struct JVMFlag in jvmFlag.hpp public static final class Flag { private String type; private String name; private Address addr; ! private int flags; ! private Flag(String type, String name, Address addr, int flags) { this.type = type; this.name = name; this.addr = addr; ! this.flags = flags; } public String getType() { return type; } --- 150,166 ---- // command line flags supplied to VM - see struct JVMFlag in jvmFlag.hpp public static final class Flag { private String type; private String name; private Address addr; ! private int attr; ! private Flag(String type, String name, Address addr, int attr) { this.type = type; this.name = name; this.addr = addr; ! this.attr = attr; } public String getType() { return type; }
*** 172,187 **** public Address getAddress() { return addr; } public int getOrigin() { ! return flags & Flags_VALUE_ORIGIN_MASK; } // See JVMFlag::print_origin() in HotSpot public String getOriginString() { ! var origin = flags & Flags_VALUE_ORIGIN_MASK; if (origin == Flags_DEFAULT) { return "default"; } else if (origin == Flags_COMMAND_LINE) { return "command line"; } else if (origin == Flags_ENVIRON_VAR) { --- 172,187 ---- public Address getAddress() { return addr; } public int getOrigin() { ! return attr & Flags_VALUE_ORIGIN_MASK; } // See JVMFlag::print_origin() in HotSpot public String getOriginString() { ! var origin = attr & Flags_VALUE_ORIGIN_MASK; if (origin == Flags_DEFAULT) { return "default"; } else if (origin == Flags_COMMAND_LINE) { return "command line"; } else if (origin == Flags_ENVIRON_VAR) {
*** 190,200 **** return "config file"; } else if (origin == Flags_MANAGEMENT) { return "management"; } else if (origin == Flags_ERGONOMIC) { String result = ""; ! if ((flags & Flags_ORIG_COMMAND_LINE) == Flags_ORIG_COMMAND_LINE) { result = "command line, "; } return result + "ergonomic"; } else if (origin == Flags_ATTACH_ON_DEMAND) { return "attach"; --- 190,200 ---- return "config file"; } else if (origin == Flags_MANAGEMENT) { return "management"; } else if (origin == Flags_ERGONOMIC) { String result = ""; ! if ((attr & Flags_ORIG_COMMAND_LINE) == Flags_ORIG_COMMAND_LINE) { result = "command line, "; } return result + "ergonomic"; } else if (origin == Flags_ATTACH_ON_DEMAND) { return "attach";
*** 1005,1041 **** } } return (Flag) flagsMap.get(name); } private void readCommandLineFlags() { // get command line flags TypeDataBase db = getTypeDataBase(); Type flagType = db.lookupType("JVMFlag"); ! int numFlags = (int) flagType.getCIntegerField("numFlags").getValue(); ! // NOTE: last flag contains null values. ! commandLineFlags = new Flag[numFlags - 1]; ! ! Address flagAddr = flagType.getAddressField("flags").getValue(); ! AddressField typeFld = flagType.getAddressField("_type"); AddressField nameFld = flagType.getAddressField("_name"); ! AddressField addrFld = flagType.getAddressField("_addr"); ! CIntField flagsFld = new CIntField(flagType.getCIntegerField("_flags"), 0); ! ! long flagSize = flagType.getSize(); // sizeof(Flag) ! ! // NOTE: last flag contains null values. ! for (int f = 0; f < numFlags - 1; f++) { ! String type = CStringUtilities.getString(typeFld.getValue(flagAddr)); ! String name = CStringUtilities.getString(nameFld.getValue(flagAddr)); ! Address addr = addrFld.getValue(flagAddr); ! int flags = (int)flagsFld.getValue(flagAddr); ! commandLineFlags[f] = new Flag(type, name, addr, flags); ! flagAddr = flagAddr.addOffsetTo(flagSize); } // sort flags by name Arrays.sort(commandLineFlags, new Comparator() { public int compare(Object o1, Object o2) { Flag f1 = (Flag) o1; Flag f2 = (Flag) o2; --- 1005,1053 ---- } } return (Flag) flagsMap.get(name); } + private static final String cmdFlagTypes[] = { + "bool", + "int", + "uint", + "intx", + "uintx", + "uint64_t", + "size_t", + "double", + "ccstr", + "ccstrlist" + }; + private void readCommandLineFlags() { // get command line flags TypeDataBase db = getTypeDataBase(); Type flagType = db.lookupType("JVMFlag"); ! Address head = flagType.getAddressField("_head").getValue(); ! ArrayList<Flag> flags = new ArrayList<>(); ! CIntegerType shortType = (CIntegerType) db.lookupType("short"); ! CIntegerField typeFld = flagType.getCIntegerField("_type"); AddressField nameFld = flagType.getAddressField("_name"); ! AddressField addrFld = flagType.getAddressField("_value_addr"); ! AddressField nextFld = flagType.getAddressField("_next"); ! CIntField attrsFld = new CIntField(flagType.getCIntegerField("_attr"), 0); ! ! for (Address flag = head; flag != null; flag = nextFld.getValue(flag)) { ! int typeIndex = (int)typeFld.getCInteger(flag, shortType); ! String type = (0 <= typeIndex && typeIndex < cmdFlagTypes.length) ? cmdFlagTypes[typeIndex] : "unknown"; ! String name = CStringUtilities.getString(nameFld.getValue(flag)); ! Address addr = addrFld.getValue(flag); ! int attr = (int)attrsFld.getValue(flag); ! flags.add(new Flag(type, name, addr, attr)); } + commandLineFlags = new Flag[flags.size()]; + flags.toArray(commandLineFlags); + // sort flags by name Arrays.sort(commandLineFlags, new Comparator() { public int compare(Object o1, Object o2) { Flag f1 = (Flag) o1; Flag f2 = (Flag) o2;
< prev index next >