diff options
Diffstat (limited to 'openjdkjvmti/ti_class.cc')
-rw-r--r-- | openjdkjvmti/ti_class.cc | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/openjdkjvmti/ti_class.cc b/openjdkjvmti/ti_class.cc index c22f38f576..924a0d84d7 100644 --- a/openjdkjvmti/ti_class.cc +++ b/openjdkjvmti/ti_class.cc @@ -56,6 +56,7 @@ #include "gc/heap.h" #include "gc_root.h" #include "handle.h" +#include "hidden_api.h" #include "jni/jni_env_ext-inl.h" #include "jni/jni_internal.h" #include "mirror/array-alloc-inl.h" @@ -1137,4 +1138,38 @@ jvmtiError ClassUtil::GetSourceDebugExtension(jvmtiEnv* env, return OK; } +jvmtiError ClassUtil::DisableHiddenApiEnforcementPolicy(jvmtiEnv* env) { + return SetHiddenApiEnforcementPolicy( + env, static_cast<jint>(art::hiddenapi::EnforcementPolicy::kDisabled)); +} + +jvmtiError ClassUtil::GetHiddenApiEnforcementPolicy(jvmtiEnv* env, jint* policy) { + if (env == nullptr) { + return ERR(INVALID_ENVIRONMENT); + } else if (art::Thread::Current() == nullptr) { + return ERR(UNATTACHED_THREAD); + } else if (policy == nullptr) { + return ERR(NULL_POINTER); + } + *policy = static_cast<jint>(art::Runtime::Current()->GetHiddenApiEnforcementPolicy()); + return OK; +} + +jvmtiError ClassUtil::SetHiddenApiEnforcementPolicy(jvmtiEnv* env, jint policy) { + if (env == nullptr) { + return ERR(INVALID_ENVIRONMENT); + } else if (art::Thread::Current() == nullptr) { + return ERR(UNATTACHED_THREAD); + } else if (policy < static_cast<jint>(art::hiddenapi::EnforcementPolicy::kDisabled) || + policy > static_cast<jint>(art::hiddenapi::EnforcementPolicy::kMax)) { + JVMTI_LOG(INFO, env) << "Bad policy: " << policy << ", must be between " + << static_cast<jint>(art::hiddenapi::EnforcementPolicy::kDisabled) + << " and " << static_cast<jint>(art::hiddenapi::EnforcementPolicy::kMax); + return ERR(ILLEGAL_ARGUMENT); + } + art::Runtime::Current()->SetHiddenApiEnforcementPolicy( + static_cast<art::hiddenapi::EnforcementPolicy>(policy)); + return OK; +} + } // namespace openjdkjvmti |