< 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 >