--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/VM.java Thu Apr 21 20:11:40 2016 +0000
+++ b/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/VM.java Thu Apr 21 20:49:11 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2016, 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
@@ -87,6 +87,8 @@
private StubRoutines stubRoutines;
private Bytes bytes;
+ /** Flag indicating if JVMTI support is included in the build */
+ private boolean isJvmtiSupported;
/** Flags indicating whether we are attached to a core, C1, or C2 build */
private boolean usingClientCompiler;
private boolean usingServerCompiler;
@@ -336,6 +338,16 @@
stackBias = db.lookupIntConstant("STACK_BIAS").intValue();
invocationEntryBCI = db.lookupIntConstant("InvocationEntryBci").intValue();
+ // We infer the presence of JVMTI from the presence of the InstanceKlass::_breakpoints field.
+ {
+ Type type = db.lookupType("InstanceKlass");
+ if (type.getField("_breakpoints", false, false) == null) {
+ isJvmtiSupported = false;
+ } else {
+ isJvmtiSupported = true;
+ }
+ }
+
// We infer the presence of C1 or C2 from a couple of fields we
// already have present in the type database
{
@@ -701,6 +713,11 @@
return isBigEndian;
}
+ /** Returns true if JVMTI is supported, false otherwise */
+ public boolean isJvmtiSupported() {
+ return isJvmtiSupported;
+ }
+
/** Returns true if this is a "core" build, false if either C1 or C2
is present */
public boolean isCore() {