382 "Requested array size exceeds VM limit");
383 }
384 }
385
386 static void cleanup_thread (JavaThread* thread) NOT_JVMTI_RETURN;
387 static void clear_detected_exception (JavaThread* thread) NOT_JVMTI_RETURN;
388
389 static void oops_do(OopClosure* f) NOT_JVMTI_RETURN;
390 static void weak_oops_do(BoolObjectClosure* b, OopClosure* f) NOT_JVMTI_RETURN;
391 static void gc_epilogue() NOT_JVMTI_RETURN;
392
393 static void transition_pending_onload_raw_monitors() NOT_JVMTI_RETURN;
394
395 #if INCLUDE_SERVICES
396 // attach support
397 static jint load_agent_library(const char *agent, const char *absParam, const char *options, outputStream* out) NOT_JVMTI_RETURN_(JNI_ERR);
398 #endif
399
400 // SetNativeMethodPrefix support
401 static char** get_all_native_method_prefixes(int* count_ptr) NOT_JVMTI_RETURN_(NULL);
402 };
403
404 // Support class used by JvmtiDynamicCodeEventCollector and others. It
405 // describes a single code blob by name and address range.
406 class JvmtiCodeBlobDesc : public CHeapObj<mtInternal> {
407 private:
408 char _name[64];
409 address _code_begin;
410 address _code_end;
411
412 public:
413 JvmtiCodeBlobDesc(const char *name, address code_begin, address code_end) {
414 assert(name != NULL, "all code blobs must be named");
415 strncpy(_name, name, sizeof(_name));
416 _name[sizeof(_name)-1] = '\0';
417 _code_begin = code_begin;
418 _code_end = code_end;
419 }
420 char* name() { return _name; }
421 address code_begin() { return _code_begin; }
|
382 "Requested array size exceeds VM limit");
383 }
384 }
385
386 static void cleanup_thread (JavaThread* thread) NOT_JVMTI_RETURN;
387 static void clear_detected_exception (JavaThread* thread) NOT_JVMTI_RETURN;
388
389 static void oops_do(OopClosure* f) NOT_JVMTI_RETURN;
390 static void weak_oops_do(BoolObjectClosure* b, OopClosure* f) NOT_JVMTI_RETURN;
391 static void gc_epilogue() NOT_JVMTI_RETURN;
392
393 static void transition_pending_onload_raw_monitors() NOT_JVMTI_RETURN;
394
395 #if INCLUDE_SERVICES
396 // attach support
397 static jint load_agent_library(const char *agent, const char *absParam, const char *options, outputStream* out) NOT_JVMTI_RETURN_(JNI_ERR);
398 #endif
399
400 // SetNativeMethodPrefix support
401 static char** get_all_native_method_prefixes(int* count_ptr) NOT_JVMTI_RETURN_(NULL);
402
403 // JavaThread lifecycle support:
404 static jvmtiError cv_external_thread_to_JavaThread(ThreadsList * t_list,
405 jthread thread,
406 JavaThread ** jt_pp,
407 oop * thread_oop_p);
408 static jvmtiError cv_oop_to_JavaThread(ThreadsList * t_list, oop thread_oop,
409 JavaThread ** jt_pp);
410 };
411
412 // Support class used by JvmtiDynamicCodeEventCollector and others. It
413 // describes a single code blob by name and address range.
414 class JvmtiCodeBlobDesc : public CHeapObj<mtInternal> {
415 private:
416 char _name[64];
417 address _code_begin;
418 address _code_end;
419
420 public:
421 JvmtiCodeBlobDesc(const char *name, address code_begin, address code_end) {
422 assert(name != NULL, "all code blobs must be named");
423 strncpy(_name, name, sizeof(_name));
424 _name[sizeof(_name)-1] = '\0';
425 _code_begin = code_begin;
426 _code_end = code_end;
427 }
428 char* name() { return _name; }
429 address code_begin() { return _code_begin; }
|