< prev index next >
src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotVMConfig.java
Print this page
@@ -20,30 +20,27 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package jdk.vm.ci.hotspot;
-import static jdk.vm.ci.common.UnsafeUtil.readCString;
import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntime.runtime;
import static jdk.vm.ci.hotspot.UnsafeAccess.UNSAFE;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.Iterator;
+import jdk.internal.misc.Unsafe;
import jdk.internal.vm.annotation.Stable;
import jdk.vm.ci.common.JVMCIError;
import jdk.vm.ci.hotspotvmconfig.HotSpotVMAddress;
import jdk.vm.ci.hotspotvmconfig.HotSpotVMConstant;
import jdk.vm.ci.hotspotvmconfig.HotSpotVMData;
import jdk.vm.ci.hotspotvmconfig.HotSpotVMField;
import jdk.vm.ci.hotspotvmconfig.HotSpotVMFlag;
import jdk.vm.ci.hotspotvmconfig.HotSpotVMType;
-import jdk.internal.misc.Unsafe;
-
-//JaCoCo Exclude
/**
* Used to access native configuration details.
*
* All non-static, public fields in this class are so that they can be compiled as constants.
@@ -108,10 +105,31 @@
public String toString() {
return getClass().getSimpleName();
}
/**
+ * Reads a {@code '\0'} terminated C string from native memory and converts it to a
+ * {@link String}.
+ *
+ * @return a Java string
+ */
+ private static String readCString(Unsafe unsafe, long address) {
+ if (address == 0) {
+ return null;
+ }
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0;; i++) {
+ char c = (char) unsafe.getByte(address + i);
+ if (c == 0) {
+ break;
+ }
+ sb.append(c);
+ }
+ return sb.toString();
+ }
+
+ /**
* Initialize fields by reading their values from vmStructs.
*/
private void initialize() {
// Fill the VM fields hash map.
HashMap<String, VMFields.Field> vmFields = new HashMap<>();
< prev index next >