355 record_vm_internal_object_allocation(object);
356 }
357 }
358 inline static void post_array_size_exhausted() {
359 if (should_post_resource_exhausted()) {
360 post_resource_exhausted(JVMTI_RESOURCE_EXHAUSTED_OOM_ERROR,
361 "Requested array size exceeds VM limit");
362 }
363 }
364
365 static void cleanup_thread (JavaThread* thread) NOT_JVMTI_RETURN;
366 static void clear_detected_exception (JavaThread* thread) NOT_JVMTI_RETURN;
367
368 static void oops_do(OopClosure* f) NOT_JVMTI_RETURN;
369 static void weak_oops_do(BoolObjectClosure* b, OopClosure* f) NOT_JVMTI_RETURN;
370 static void gc_epilogue() NOT_JVMTI_RETURN;
371
372 static void transition_pending_onload_raw_monitors() NOT_JVMTI_RETURN;
373
374 // attach support
375 static jint load_agent_library(AttachOperation* op, outputStream* out) NOT_JVMTI_RETURN_(JNI_ERR);
376
377 // SetNativeMethodPrefix support
378 static char** get_all_native_method_prefixes(int* count_ptr) NOT_JVMTI_RETURN_(NULL);
379 };
380
381 // Support class used by JvmtiDynamicCodeEventCollector and others. It
382 // describes a single code blob by name and address range.
383 class JvmtiCodeBlobDesc : public CHeapObj<mtInternal> {
384 private:
385 char _name[64];
386 address _code_begin;
387 address _code_end;
388
389 public:
390 JvmtiCodeBlobDesc(const char *name, address code_begin, address code_end) {
391 assert(name != NULL, "all code blobs must be named");
392 strncpy(_name, name, sizeof(_name));
393 _name[sizeof(_name)-1] = '\0';
394 _code_begin = code_begin;
|
355 record_vm_internal_object_allocation(object);
356 }
357 }
358 inline static void post_array_size_exhausted() {
359 if (should_post_resource_exhausted()) {
360 post_resource_exhausted(JVMTI_RESOURCE_EXHAUSTED_OOM_ERROR,
361 "Requested array size exceeds VM limit");
362 }
363 }
364
365 static void cleanup_thread (JavaThread* thread) NOT_JVMTI_RETURN;
366 static void clear_detected_exception (JavaThread* thread) NOT_JVMTI_RETURN;
367
368 static void oops_do(OopClosure* f) NOT_JVMTI_RETURN;
369 static void weak_oops_do(BoolObjectClosure* b, OopClosure* f) NOT_JVMTI_RETURN;
370 static void gc_epilogue() NOT_JVMTI_RETURN;
371
372 static void transition_pending_onload_raw_monitors() NOT_JVMTI_RETURN;
373
374 // attach support
375 static jint load_agent_library(const char *agent, const char *absParam, const char *options, outputStream* out) NOT_JVMTI_RETURN_(JNI_ERR);
376 static jint load_agent_library(AttachOperation* op, outputStream* out) NOT_JVMTI_RETURN_(JNI_ERR);
377
378 // SetNativeMethodPrefix support
379 static char** get_all_native_method_prefixes(int* count_ptr) NOT_JVMTI_RETURN_(NULL);
380 };
381
382 // Support class used by JvmtiDynamicCodeEventCollector and others. It
383 // describes a single code blob by name and address range.
384 class JvmtiCodeBlobDesc : public CHeapObj<mtInternal> {
385 private:
386 char _name[64];
387 address _code_begin;
388 address _code_end;
389
390 public:
391 JvmtiCodeBlobDesc(const char *name, address code_begin, address code_end) {
392 assert(name != NULL, "all code blobs must be named");
393 strncpy(_name, name, sizeof(_name));
394 _name[sizeof(_name)-1] = '\0';
395 _code_begin = code_begin;
|