--- a/hotspot/src/share/vm/prims/jvmtiEnv.cpp Wed Nov 23 16:16:34 2016 +0000
+++ b/hotspot/src/share/vm/prims/jvmtiEnv.cpp Thu Dec 01 08:56:41 2016 +0000
@@ -227,6 +227,119 @@
} /* end GetNamedModule */
+// module - pre-checked for NULL
+// to_module - pre-checked for NULL
+jvmtiError
+JvmtiEnv::AddModuleReads(jobject module, jobject to_module) {
+ JavaThread* THREAD = JavaThread::current();
+
+ // check module
+ Handle h_module(THREAD, JNIHandles::resolve(module));
+ if (!java_lang_reflect_Module::is_instance(h_module())) {
+ return JVMTI_ERROR_INVALID_MODULE;
+ }
+ // check to_module
+ Handle h_to_module(THREAD, JNIHandles::resolve(to_module));
+ if (!java_lang_reflect_Module::is_instance(h_to_module())) {
+ return JVMTI_ERROR_INVALID_MODULE;
+ }
+ return JvmtiExport::add_module_reads(h_module, h_to_module, THREAD);
+} /* end AddModuleReads */
+
+
+// module - pre-checked for NULL
+// pkg_name - pre-checked for NULL
+// to_module - pre-checked for NULL
+jvmtiError
+JvmtiEnv::AddModuleExports(jobject module, const char* pkg_name, jobject to_module) {
+ JavaThread* THREAD = JavaThread::current();
+ Handle h_pkg = java_lang_String::create_from_str(pkg_name, THREAD);
+
+ // check module
+ Handle h_module(THREAD, JNIHandles::resolve(module));
+ if (!java_lang_reflect_Module::is_instance(h_module())) {
+ return JVMTI_ERROR_INVALID_MODULE;
+ }
+ // check to_module
+ Handle h_to_module(THREAD, JNIHandles::resolve(to_module));
+ if (!java_lang_reflect_Module::is_instance(h_to_module())) {
+ return JVMTI_ERROR_INVALID_MODULE;
+ }
+ return JvmtiExport::add_module_exports(h_module, h_pkg, h_to_module, THREAD);
+} /* end AddModuleExports */
+
+
+// module - pre-checked for NULL
+// pkg_name - pre-checked for NULL
+// to_module - pre-checked for NULL
+jvmtiError
+JvmtiEnv::AddModuleOpens(jobject module, const char* pkg_name, jobject to_module) {
+ JavaThread* THREAD = JavaThread::current();
+ Handle h_pkg = java_lang_String::create_from_str(pkg_name, THREAD);
+
+ // check module
+ Handle h_module(THREAD, JNIHandles::resolve(module));
+ if (!java_lang_reflect_Module::is_instance(h_module())) {
+ return JVMTI_ERROR_INVALID_MODULE;
+ }
+ // check to_module
+ Handle h_to_module(THREAD, JNIHandles::resolve(to_module));
+ if (!java_lang_reflect_Module::is_instance(h_to_module())) {
+ return JVMTI_ERROR_INVALID_MODULE;
+ }
+ return JvmtiExport::add_module_opens(h_module, h_pkg, h_to_module, THREAD);
+} /* end AddModuleOpens */
+
+
+// module - pre-checked for NULL
+// service - pre-checked for NULL
+jvmtiError
+JvmtiEnv::AddModuleUses(jobject module, jclass service) {
+ JavaThread* THREAD = JavaThread::current();
+
+ // check module
+ Handle h_module(THREAD, JNIHandles::resolve(module));
+ if (!java_lang_reflect_Module::is_instance(h_module())) {
+ return JVMTI_ERROR_INVALID_MODULE;
+ }
+ // check service
+ Handle h_service(THREAD, JNIHandles::resolve_external_guard(service));
+ if (!java_lang_Class::is_instance(h_service()) ||
+ java_lang_Class::is_primitive(h_service())) {
+ return JVMTI_ERROR_INVALID_CLASS;
+ }
+ return JvmtiExport::add_module_uses(h_module, h_service, THREAD);
+} /* end AddModuleUses */
+
+
+// module - pre-checked for NULL
+// service - pre-checked for NULL
+// impl_class - pre-checked for NULL
+jvmtiError
+JvmtiEnv::AddModuleProvides(jobject module, jclass service, jclass impl_class) {
+ JavaThread* THREAD = JavaThread::current();
+
+ // check module
+ Handle h_module(THREAD, JNIHandles::resolve(module));
+ if (!java_lang_reflect_Module::is_instance(h_module())) {
+ return JVMTI_ERROR_INVALID_MODULE;
+ }
+ // check service
+ Handle h_service(THREAD, JNIHandles::resolve_external_guard(service));
+ if (!java_lang_Class::is_instance(h_service()) ||
+ java_lang_Class::is_primitive(h_service())) {
+ return JVMTI_ERROR_INVALID_CLASS;
+ }
+ // check impl_class
+ Handle h_impl_class(THREAD, JNIHandles::resolve_external_guard(impl_class));
+ if (!java_lang_Class::is_instance(h_impl_class()) ||
+ java_lang_Class::is_primitive(h_impl_class())) {
+ return JVMTI_ERROR_INVALID_CLASS;
+ }
+ return JvmtiExport::add_module_provides(h_module, h_service, h_impl_class, THREAD);
+} /* end AddModuleProvides */
+
+
//
// Class functions
//