< prev index next >
src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotVMConfig.java
Print this page
@@ -21,10 +21,13 @@
* questions.
*/
package jdk.vm.ci.hotspot;
import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntime.runtime;
+import static jdk.vm.ci.hotspot.UnsafeAccess.UNSAFE;
+
+import jdk.internal.misc.Unsafe;
/**
* Used to access native configuration details.
*
* All non-static, public fields in this class are so that they can be compiled as constants.
@@ -48,17 +51,14 @@
* Gets the host architecture name for the purpose of finding the corresponding
* {@linkplain HotSpotJVMCIBackendFactory backend}.
*/
String getHostArchitectureName() {
String arch = System.getProperty("os.arch");
- switch (arch) {
- case "x86_64":
+ if (arch.equals("x86_64")) {
arch = "amd64";
- break;
- case "sparcv9":
+ } else if (arch.equals("sparcv9")) {
arch = "sparc";
- break;
}
return arch;
}
final boolean useDeferredInitBarriers = getFlag("ReduceInitialCardMarks", Boolean.class);
@@ -229,10 +229,25 @@
final long vmSymbolsSymbols = getFieldAddress("vmSymbols::_symbols[0]", "Symbol*");
final int vmSymbolsFirstSID = getConstant("vmSymbols::FIRST_SID", Integer.class);
final int vmSymbolsSIDLimit = getConstant("vmSymbols::SID_LIMIT", Integer.class);
+ /**
+ * Returns the symbol in the {@code vmSymbols} table at position {@code index} as a
+ * {@link String}.
+ *
+ * @param index position in the symbol table
+ * @return the symbol at position id
+ */
+ String symbolAt(int index) {
+ HotSpotJVMCIRuntimeProvider runtime = runtime();
+ assert vmSymbolsFirstSID <= index && index < vmSymbolsSIDLimit : "index " + index + " is out of bounds";
+ assert symbolPointerSize == Unsafe.ADDRESS_SIZE : "the following address read is broken";
+ int offset = index * symbolPointerSize;
+ return runtime.getCompilerToVM().getSymbol(UNSAFE.getAddress(vmSymbolsSymbols + offset));
+ }
+
final int universeBaseVtableSize = getFieldValue("CompilerToVM::Data::Universe_base_vtable_size", Integer.class, "int");
final int baseVtableLength() {
return universeBaseVtableSize / vtableEntrySize;
}
< prev index next >