43 44 for (int i = 0; i < providers_count; ++i) { 45 count += providers[i].probe_count; 46 } 47 probes = new RegisteredProbes(count); 48 count = 0; 49 50 for (int i = 0; i < providers_count; ++i) { 51 assert(providers[i].name != NULL, "valid provider name"); 52 assert(providers[i].probe_count == 0 || providers[i].probes != NULL, 53 "valid probe count"); 54 for (int j = 0; j < providers[i].probe_count; ++j) { 55 JVM_DTraceProbe* probe = &(providers[i].probes[j]); 56 assert(probe != NULL, "valid probe"); 57 assert(probe->method != NULL, "valid method"); 58 assert(probe->name != NULL, "valid probe name"); 59 assert(probe->function != NULL, "valid probe function spec"); 60 methodHandle h_method = 61 methodHandle(THREAD, JNIHandles::resolve_jmethod_id(probe->method)); 62 nmethod* nm = AdapterHandlerLibrary::create_dtrace_nmethod(h_method); 63 h_method()->set_not_compilable(CompLevel_highest_tier); 64 h_method()->set_code(h_method, nm); 65 probes->nmethod_at_put(count++, nm); 66 } 67 } 68 69 int handle = pd_activate((void*)probes, 70 module_name, providers_count, providers); 71 if (handle <= 0) { 72 delete probes; 73 THROW_MSG_0(vmSymbols::java_lang_RuntimeException(), 74 "Unable to register DTrace probes (internal error)."); 75 } 76 probes->set_helper_handle(handle); 77 return RegisteredProbes::toOpaqueProbes(probes); 78 } 79 80 jboolean DTraceJSDT::is_probe_enabled(jmethodID method) { 81 methodOop m = JNIHandles::resolve_jmethod_id(method); 82 return nativeInstruction_at(m->code()->trap_address())->is_dtrace_trap(); | 43 44 for (int i = 0; i < providers_count; ++i) { 45 count += providers[i].probe_count; 46 } 47 probes = new RegisteredProbes(count); 48 count = 0; 49 50 for (int i = 0; i < providers_count; ++i) { 51 assert(providers[i].name != NULL, "valid provider name"); 52 assert(providers[i].probe_count == 0 || providers[i].probes != NULL, 53 "valid probe count"); 54 for (int j = 0; j < providers[i].probe_count; ++j) { 55 JVM_DTraceProbe* probe = &(providers[i].probes[j]); 56 assert(probe != NULL, "valid probe"); 57 assert(probe->method != NULL, "valid method"); 58 assert(probe->name != NULL, "valid probe name"); 59 assert(probe->function != NULL, "valid probe function spec"); 60 methodHandle h_method = 61 methodHandle(THREAD, JNIHandles::resolve_jmethod_id(probe->method)); 62 nmethod* nm = AdapterHandlerLibrary::create_dtrace_nmethod(h_method); 63 if (nm == NULL) { 64 delete probes; 65 THROW_MSG_0(vmSymbols::java_lang_RuntimeException(), 66 "Unable to register DTrace probes (CodeCache: no room for DTrace nmethods)."); 67 } 68 h_method()->set_not_compilable(CompLevel_highest_tier); 69 h_method()->set_code(h_method, nm); 70 probes->nmethod_at_put(count++, nm); 71 } 72 } 73 74 int handle = pd_activate((void*)probes, 75 module_name, providers_count, providers); 76 if (handle <= 0) { 77 delete probes; 78 THROW_MSG_0(vmSymbols::java_lang_RuntimeException(), 79 "Unable to register DTrace probes (internal error)."); 80 } 81 probes->set_helper_handle(handle); 82 return RegisteredProbes::toOpaqueProbes(probes); 83 } 84 85 jboolean DTraceJSDT::is_probe_enabled(jmethodID method) { 86 methodOop m = JNIHandles::resolve_jmethod_id(method); 87 return nativeInstruction_at(m->code()->trap_address())->is_dtrace_trap(); |