summaryrefslogtreecommitdiff
path: root/openjdkjvmti/OpenjdkJvmTi.cc
diff options
context:
space:
mode:
Diffstat (limited to 'openjdkjvmti/OpenjdkJvmTi.cc')
-rw-r--r--openjdkjvmti/OpenjdkJvmTi.cc72
1 files changed, 25 insertions, 47 deletions
diff --git a/openjdkjvmti/OpenjdkJvmTi.cc b/openjdkjvmti/OpenjdkJvmTi.cc
index ffa1bd3faf..4ce376ff9b 100644
--- a/openjdkjvmti/OpenjdkJvmTi.cc
+++ b/openjdkjvmti/OpenjdkJvmTi.cc
@@ -40,6 +40,7 @@
#include "jvmti.h"
+#include "alloc_manager.h"
#include "art_jvmti.h"
#include "base/logging.h" // For gLogVerbosity.
#include "base/mutex.h"
@@ -79,6 +80,7 @@ namespace openjdkjvmti {
// These should never be null.
EventHandler* gEventHandler;
DeoptManager* gDeoptManager;
+AllocationManager* gAllocManager;
#define ENSURE_NON_NULL(n) \
do { \
@@ -344,50 +346,40 @@ class JvmtiFunctions {
return StackUtil::NotifyFramePop(env, thread, depth);
}
- static jvmtiError ForceEarlyReturnObject(jvmtiEnv* env,
- jthread thread ATTRIBUTE_UNUSED,
- jobject value ATTRIBUTE_UNUSED) {
+ static jvmtiError ForceEarlyReturnObject(jvmtiEnv* env, jthread thread, jobject value) {
ENSURE_VALID_ENV(env);
ENSURE_HAS_CAP(env, can_force_early_return);
- return ERR(NOT_IMPLEMENTED);
+ return StackUtil::ForceEarlyReturn(env, gEventHandler, thread, value);
}
- static jvmtiError ForceEarlyReturnInt(jvmtiEnv* env,
- jthread thread ATTRIBUTE_UNUSED,
- jint value ATTRIBUTE_UNUSED) {
+ static jvmtiError ForceEarlyReturnInt(jvmtiEnv* env, jthread thread, jint value) {
ENSURE_VALID_ENV(env);
ENSURE_HAS_CAP(env, can_force_early_return);
- return ERR(NOT_IMPLEMENTED);
+ return StackUtil::ForceEarlyReturn(env, gEventHandler, thread, value);
}
- static jvmtiError ForceEarlyReturnLong(jvmtiEnv* env,
- jthread thread ATTRIBUTE_UNUSED,
- jlong value ATTRIBUTE_UNUSED) {
+ static jvmtiError ForceEarlyReturnLong(jvmtiEnv* env, jthread thread, jlong value) {
ENSURE_VALID_ENV(env);
ENSURE_HAS_CAP(env, can_force_early_return);
- return ERR(NOT_IMPLEMENTED);
+ return StackUtil::ForceEarlyReturn(env, gEventHandler, thread, value);
}
- static jvmtiError ForceEarlyReturnFloat(jvmtiEnv* env,
- jthread thread ATTRIBUTE_UNUSED,
- jfloat value ATTRIBUTE_UNUSED) {
+ static jvmtiError ForceEarlyReturnFloat(jvmtiEnv* env, jthread thread, jfloat value) {
ENSURE_VALID_ENV(env);
ENSURE_HAS_CAP(env, can_force_early_return);
- return ERR(NOT_IMPLEMENTED);
+ return StackUtil::ForceEarlyReturn(env, gEventHandler, thread, value);
}
- static jvmtiError ForceEarlyReturnDouble(jvmtiEnv* env,
- jthread thread ATTRIBUTE_UNUSED,
- jdouble value ATTRIBUTE_UNUSED) {
+ static jvmtiError ForceEarlyReturnDouble(jvmtiEnv* env, jthread thread, jdouble value) {
ENSURE_VALID_ENV(env);
ENSURE_HAS_CAP(env, can_force_early_return);
- return ERR(NOT_IMPLEMENTED);
+ return StackUtil::ForceEarlyReturn(env, gEventHandler, thread, value);
}
- static jvmtiError ForceEarlyReturnVoid(jvmtiEnv* env, jthread thread ATTRIBUTE_UNUSED) {
+ static jvmtiError ForceEarlyReturnVoid(jvmtiEnv* env, jthread thread) {
ENSURE_VALID_ENV(env);
ENSURE_HAS_CAP(env, can_force_early_return);
- return ERR(NOT_IMPLEMENTED);
+ return StackUtil::ForceEarlyReturn<nullptr_t>(env, gEventHandler, thread, nullptr);
}
static jvmtiError FollowReferences(jvmtiEnv* env,
@@ -788,18 +780,7 @@ class JvmtiFunctions {
static jvmtiError RetransformClasses(jvmtiEnv* env, jint class_count, const jclass* classes) {
ENSURE_VALID_ENV(env);
ENSURE_HAS_CAP(env, can_retransform_classes);
- std::string error_msg;
- jvmtiError res = Transformer::RetransformClasses(ArtJvmTiEnv::AsArtJvmTiEnv(env),
- gEventHandler,
- art::Runtime::Current(),
- art::Thread::Current(),
- class_count,
- classes,
- &error_msg);
- if (res != OK) {
- JVMTI_LOG(WARNING, env) << "FAILURE TO RETRANFORM " << error_msg;
- }
- return res;
+ return Transformer::RetransformClasses(env, class_count, classes);
}
static jvmtiError RedefineClasses(jvmtiEnv* env,
@@ -807,18 +788,7 @@ class JvmtiFunctions {
const jvmtiClassDefinition* class_definitions) {
ENSURE_VALID_ENV(env);
ENSURE_HAS_CAP(env, can_redefine_classes);
- std::string error_msg;
- jvmtiError res = Redefiner::RedefineClasses(ArtJvmTiEnv::AsArtJvmTiEnv(env),
- gEventHandler,
- art::Runtime::Current(),
- art::Thread::Current(),
- class_count,
- class_definitions,
- &error_msg);
- if (res != OK) {
- JVMTI_LOG(WARNING, env) << "FAILURE TO REDEFINE " << error_msg;
- }
- return res;
+ return Redefiner::RedefineClasses(env, class_count, class_definitions);
}
static jvmtiError GetObjectSize(jvmtiEnv* env, jobject object, jlong* size_ptr) {
@@ -1414,6 +1384,7 @@ class JvmtiFunctions {
art::gLogVerbosity.compiler = val;
art::gLogVerbosity.deopt = val;
art::gLogVerbosity.heap = val;
+ art::gLogVerbosity.interpreter = val;
art::gLogVerbosity.jdwp = val;
art::gLogVerbosity.jit = val;
art::gLogVerbosity.monitor = val;
@@ -1427,6 +1398,7 @@ class JvmtiFunctions {
art::gLogVerbosity.verifier = val;
// Do not set verifier-debug.
art::gLogVerbosity.image = val;
+ art::gLogVerbosity.plugin = val;
// Note: can't switch systrace_lock_logging. That requires changing entrypoints.
@@ -1527,6 +1499,7 @@ static jint GetEnvHandler(art::JavaVMExt* vm, /*out*/void** env, jint version) {
extern "C" bool ArtPlugin_Initialize() {
art::Runtime* runtime = art::Runtime::Current();
+ gAllocManager = new AllocationManager;
gDeoptManager = new DeoptManager;
gEventHandler = new EventHandler;
@@ -1541,9 +1514,12 @@ extern "C" bool ArtPlugin_Initialize() {
ClassUtil::Register(gEventHandler);
DumpUtil::Register(gEventHandler);
MethodUtil::Register(gEventHandler);
+ HeapExtensions::Register(gEventHandler);
SearchUtil::Register();
HeapUtil::Register();
- Transformer::Setup();
+ FieldUtil::Register(gEventHandler);
+ BreakpointUtil::Register(gEventHandler);
+ Transformer::Register(gEventHandler);
{
// Make sure we can deopt anything we need to.
@@ -1566,6 +1542,8 @@ extern "C" bool ArtPlugin_Deinitialize() {
MethodUtil::Unregister();
SearchUtil::Unregister();
HeapUtil::Unregister();
+ FieldUtil::Unregister();
+ BreakpointUtil::Unregister();
// TODO It would be good to delete the gEventHandler and gDeoptManager here but we cannot since
// daemon threads might be suspended and we want to make sure that even if they wake up briefly