src/share/vm/runtime/dtraceJSDT.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 6834177 Sdiff src/share/vm/runtime

src/share/vm/runtime/dtraceJSDT.cpp

Print this page




  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();


src/share/vm/runtime/dtraceJSDT.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File