545
546
547 JVM_ENTRY(jint, JVM_MoreStackWalk(JNIEnv *env, jobject stackStream, jlong mode, jlong anchor,
548 jint frame_count, jint start_index,
549 jobjectArray frames))
550 JVMWrapper("JVM_MoreStackWalk");
551 JavaThread* jt = (JavaThread*) THREAD;
552
553 // frames array is a Class<?>[] array when only getting caller reference,
554 // and a StackFrameInfo[] array (or derivative) otherwise. It should never
555 // be null.
556 objArrayOop fa = objArrayOop(JNIHandles::resolve_non_null(frames));
557 objArrayHandle frames_array_h(THREAD, fa);
558
559 int limit = start_index+frame_count;
560 if (frames_array_h->length() < limit) {
561 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "not enough space in buffers");
562 }
563
564 Handle stackStream_h(THREAD, JNIHandles::resolve_non_null(stackStream));
565 return StackWalk::moreFrames(stackStream_h, mode, anchor, frame_count,
566 start_index, frames_array_h, THREAD);
567 JVM_END
568
569 JVM_ENTRY(void, JVM_ToStackTraceElement(JNIEnv *env, jobject frame, jobject stack))
570 JVMWrapper("JVM_ToStackTraceElement");
571 Handle stack_frame_info(THREAD, JNIHandles::resolve_non_null(frame));
572 Handle stack_trace_element(THREAD, JNIHandles::resolve_non_null(stack));
573 java_lang_StackFrameInfo::to_stack_trace_element(stack_frame_info, stack_trace_element, THREAD);
574 JVM_END
575
576 // java.lang.Object ///////////////////////////////////////////////
577
578
579 JVM_ENTRY(jint, JVM_IHashCode(JNIEnv* env, jobject handle))
580 JVMWrapper("JVM_IHashCode");
581 // as implemented in the classic virtual machine; return 0 if object is NULL
582 return handle == NULL ? 0 : ObjectSynchronizer::FastHashCode (THREAD, JNIHandles::resolve_non_null(handle)) ;
583 JVM_END
584
585
|
545
546
547 JVM_ENTRY(jint, JVM_MoreStackWalk(JNIEnv *env, jobject stackStream, jlong mode, jlong anchor,
548 jint frame_count, jint start_index,
549 jobjectArray frames))
550 JVMWrapper("JVM_MoreStackWalk");
551 JavaThread* jt = (JavaThread*) THREAD;
552
553 // frames array is a Class<?>[] array when only getting caller reference,
554 // and a StackFrameInfo[] array (or derivative) otherwise. It should never
555 // be null.
556 objArrayOop fa = objArrayOop(JNIHandles::resolve_non_null(frames));
557 objArrayHandle frames_array_h(THREAD, fa);
558
559 int limit = start_index+frame_count;
560 if (frames_array_h->length() < limit) {
561 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "not enough space in buffers");
562 }
563
564 Handle stackStream_h(THREAD, JNIHandles::resolve_non_null(stackStream));
565 return StackWalk::fetchNextBatch(stackStream_h, mode, anchor, frame_count,
566 start_index, frames_array_h, THREAD);
567 JVM_END
568
569 JVM_ENTRY(void, JVM_ToStackTraceElement(JNIEnv *env, jobject frame, jobject stack))
570 JVMWrapper("JVM_ToStackTraceElement");
571 Handle stack_frame_info(THREAD, JNIHandles::resolve_non_null(frame));
572 Handle stack_trace_element(THREAD, JNIHandles::resolve_non_null(stack));
573 java_lang_StackFrameInfo::to_stack_trace_element(stack_frame_info, stack_trace_element, THREAD);
574 JVM_END
575
576 // java.lang.Object ///////////////////////////////////////////////
577
578
579 JVM_ENTRY(jint, JVM_IHashCode(JNIEnv* env, jobject handle))
580 JVMWrapper("JVM_IHashCode");
581 // as implemented in the classic virtual machine; return 0 if object is NULL
582 return handle == NULL ? 0 : ObjectSynchronizer::FastHashCode (THREAD, JNIHandles::resolve_non_null(handle)) ;
583 JVM_END
584
585
|