55 #include "oops/oop.inline.hpp"
56 #include "oops/typeArrayOop.inline.hpp"
57 #include "prims/resolvedMethodTable.hpp"
58 #include "prims/wbtestmethods/parserTests.hpp"
59 #include "prims/whitebox.inline.hpp"
60 #include "runtime/arguments.hpp"
61 #include "runtime/compilationPolicy.hpp"
62 #include "runtime/deoptimization.hpp"
63 #include "runtime/fieldDescriptor.inline.hpp"
64 #include "runtime/flags/jvmFlag.hpp"
65 #include "runtime/frame.inline.hpp"
66 #include "runtime/handles.inline.hpp"
67 #include "runtime/handshake.hpp"
68 #include "runtime/interfaceSupport.inline.hpp"
69 #include "runtime/javaCalls.hpp"
70 #include "runtime/jniHandles.inline.hpp"
71 #include "runtime/os.hpp"
72 #include "runtime/sweeper.hpp"
73 #include "runtime/thread.hpp"
74 #include "runtime/threadSMR.hpp"
75 #include "runtime/vm_version.hpp"
76 #include "services/memoryService.hpp"
77 #include "utilities/align.hpp"
78 #include "utilities/debug.hpp"
79 #include "utilities/elfFile.hpp"
80 #include "utilities/exceptions.hpp"
81 #include "utilities/macros.hpp"
82 #if INCLUDE_CDS
83 #include "prims/cdsoffsets.hpp"
84 #endif // INCLUDE_CDS
85 #if INCLUDE_G1GC
86 #include "gc/g1/g1Arguments.hpp"
87 #include "gc/g1/g1CollectedHeap.inline.hpp"
88 #include "gc/g1/g1ConcurrentMark.hpp"
89 #include "gc/g1/g1ConcurrentMarkThread.hpp"
90 #include "gc/g1/heapRegionRemSet.hpp"
91 #include "gc/g1/heterogeneousHeapRegionManager.hpp"
92 #endif // INCLUDE_G1GC
93 #if INCLUDE_PARALLELGC
94 #include "gc/parallel/parallelScavengeHeap.inline.hpp"
802 Deoptimization::deoptimize(t, *f, reg_map);
803 if (_make_not_entrant) {
804 CompiledMethod* cm = CodeCache::find_compiled(f->pc());
805 assert(cm != NULL, "sanity check");
806 cm->make_not_entrant();
807 }
808 ++_result;
809 }
810 }
811 }
812 }
813 }
814 };
815
816 WB_ENTRY(jint, WB_DeoptimizeFrames(JNIEnv* env, jobject o, jboolean make_not_entrant))
817 VM_WhiteBoxDeoptimizeFrames op(make_not_entrant == JNI_TRUE);
818 VMThread::execute(&op);
819 return op.result();
820 WB_END
821
822 WB_ENTRY(void, WB_DeoptimizeAll(JNIEnv* env, jobject o))
823 MutexLocker mu(Compile_lock);
824 CodeCache::mark_all_nmethods_for_deoptimization();
825 VM_Deoptimize op;
826 VMThread::execute(&op);
827 WB_END
828
829 WB_ENTRY(jint, WB_DeoptimizeMethod(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
830 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
831 int result = 0;
832 CHECK_JNI_EXCEPTION_(env, result);
833 MutexLocker mu(Compile_lock);
834 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
835 if (is_osr) {
836 result += mh->mark_osr_nmethods();
837 } else if (mh->code() != NULL) {
838 mh->code()->mark_for_deoptimization();
839 ++result;
840 }
841 result += CodeCache::mark_for_deoptimization(mh());
2197 {CC"nvdimmReservedEnd", CC"()J", (void*)&WB_NvdimmReservedEnd },
2198 #endif // INCLUDE_G1GC || INCLUDE_PARALLELGC
2199 #if INCLUDE_PARALLELGC
2200 {CC"psVirtualSpaceAlignment",CC"()J", (void*)&WB_PSVirtualSpaceAlignment},
2201 {CC"psHeapGenerationAlignment",CC"()J", (void*)&WB_PSHeapGenerationAlignment},
2202 #endif
2203 #if INCLUDE_NMT
2204 {CC"NMTMalloc", CC"(J)J", (void*)&WB_NMTMalloc },
2205 {CC"NMTMallocWithPseudoStack", CC"(JI)J", (void*)&WB_NMTMallocWithPseudoStack},
2206 {CC"NMTMallocWithPseudoStackAndType", CC"(JII)J", (void*)&WB_NMTMallocWithPseudoStackAndType},
2207 {CC"NMTFree", CC"(J)V", (void*)&WB_NMTFree },
2208 {CC"NMTReserveMemory", CC"(J)J", (void*)&WB_NMTReserveMemory },
2209 {CC"NMTAttemptReserveMemoryAt", CC"(JJ)J", (void*)&WB_NMTAttemptReserveMemoryAt },
2210 {CC"NMTCommitMemory", CC"(JJ)V", (void*)&WB_NMTCommitMemory },
2211 {CC"NMTUncommitMemory", CC"(JJ)V", (void*)&WB_NMTUncommitMemory },
2212 {CC"NMTReleaseMemory", CC"(JJ)V", (void*)&WB_NMTReleaseMemory },
2213 {CC"NMTChangeTrackingLevel", CC"()Z", (void*)&WB_NMTChangeTrackingLevel},
2214 {CC"NMTGetHashSize", CC"()I", (void*)&WB_NMTGetHashSize },
2215 #endif // INCLUDE_NMT
2216 {CC"deoptimizeFrames", CC"(Z)I", (void*)&WB_DeoptimizeFrames },
2217 {CC"deoptimizeAll", CC"()V", (void*)&WB_DeoptimizeAll },
2218 {CC"deoptimizeMethod0", CC"(Ljava/lang/reflect/Executable;Z)I",
2219 (void*)&WB_DeoptimizeMethod },
2220 {CC"isMethodCompiled0", CC"(Ljava/lang/reflect/Executable;Z)Z",
2221 (void*)&WB_IsMethodCompiled },
2222 {CC"isMethodCompilable0", CC"(Ljava/lang/reflect/Executable;IZ)Z",
2223 (void*)&WB_IsMethodCompilable},
2224 {CC"isMethodQueuedForCompilation0",
2225 CC"(Ljava/lang/reflect/Executable;)Z", (void*)&WB_IsMethodQueuedForCompilation},
2226 {CC"isIntrinsicAvailable0",
2227 CC"(Ljava/lang/reflect/Executable;Ljava/lang/reflect/Executable;I)Z",
2228 (void*)&WB_IsIntrinsicAvailable},
2229 {CC"makeMethodNotCompilable0",
2230 CC"(Ljava/lang/reflect/Executable;IZ)V", (void*)&WB_MakeMethodNotCompilable},
2231 {CC"testSetDontInlineMethod0",
2232 CC"(Ljava/lang/reflect/Executable;Z)Z", (void*)&WB_TestSetDontInlineMethod},
2233 {CC"getMethodCompilationLevel0",
2234 CC"(Ljava/lang/reflect/Executable;Z)I", (void*)&WB_GetMethodCompilationLevel},
2235 {CC"getMethodEntryBci0",
2236 CC"(Ljava/lang/reflect/Executable;)I", (void*)&WB_GetMethodEntryBci},
|
55 #include "oops/oop.inline.hpp"
56 #include "oops/typeArrayOop.inline.hpp"
57 #include "prims/resolvedMethodTable.hpp"
58 #include "prims/wbtestmethods/parserTests.hpp"
59 #include "prims/whitebox.inline.hpp"
60 #include "runtime/arguments.hpp"
61 #include "runtime/compilationPolicy.hpp"
62 #include "runtime/deoptimization.hpp"
63 #include "runtime/fieldDescriptor.inline.hpp"
64 #include "runtime/flags/jvmFlag.hpp"
65 #include "runtime/frame.inline.hpp"
66 #include "runtime/handles.inline.hpp"
67 #include "runtime/handshake.hpp"
68 #include "runtime/interfaceSupport.inline.hpp"
69 #include "runtime/javaCalls.hpp"
70 #include "runtime/jniHandles.inline.hpp"
71 #include "runtime/os.hpp"
72 #include "runtime/sweeper.hpp"
73 #include "runtime/thread.hpp"
74 #include "runtime/threadSMR.hpp"
75 #include "runtime/vframe.hpp"
76 #include "runtime/vm_version.hpp"
77 #include "services/memoryService.hpp"
78 #include "utilities/align.hpp"
79 #include "utilities/debug.hpp"
80 #include "utilities/elfFile.hpp"
81 #include "utilities/exceptions.hpp"
82 #include "utilities/macros.hpp"
83 #if INCLUDE_CDS
84 #include "prims/cdsoffsets.hpp"
85 #endif // INCLUDE_CDS
86 #if INCLUDE_G1GC
87 #include "gc/g1/g1Arguments.hpp"
88 #include "gc/g1/g1CollectedHeap.inline.hpp"
89 #include "gc/g1/g1ConcurrentMark.hpp"
90 #include "gc/g1/g1ConcurrentMarkThread.hpp"
91 #include "gc/g1/heapRegionRemSet.hpp"
92 #include "gc/g1/heterogeneousHeapRegionManager.hpp"
93 #endif // INCLUDE_G1GC
94 #if INCLUDE_PARALLELGC
95 #include "gc/parallel/parallelScavengeHeap.inline.hpp"
803 Deoptimization::deoptimize(t, *f, reg_map);
804 if (_make_not_entrant) {
805 CompiledMethod* cm = CodeCache::find_compiled(f->pc());
806 assert(cm != NULL, "sanity check");
807 cm->make_not_entrant();
808 }
809 ++_result;
810 }
811 }
812 }
813 }
814 }
815 };
816
817 WB_ENTRY(jint, WB_DeoptimizeFrames(JNIEnv* env, jobject o, jboolean make_not_entrant))
818 VM_WhiteBoxDeoptimizeFrames op(make_not_entrant == JNI_TRUE);
819 VMThread::execute(&op);
820 return op.result();
821 WB_END
822
823 WB_ENTRY(jboolean, WB_IsFrameDeoptimized(JNIEnv* env, jobject o, jint depth))
824 JavaThread* t = JavaThread::current();
825 bool result = false;
826 if (t->has_last_Java_frame()) {
827 RegisterMap reg_map(t);
828 javaVFrame *jvf = t->last_java_vframe(®_map);
829 for (jint d = 0; d < depth && jvf != NULL; d++ ) {
830 jvf = jvf->java_sender();
831 }
832 result = jvf != NULL && jvf->fr().is_deoptimized_frame();
833 }
834 return result;
835 WB_END
836
837 WB_ENTRY(void, WB_DeoptimizeAll(JNIEnv* env, jobject o))
838 MutexLocker mu(Compile_lock);
839 CodeCache::mark_all_nmethods_for_deoptimization();
840 VM_Deoptimize op;
841 VMThread::execute(&op);
842 WB_END
843
844 WB_ENTRY(jint, WB_DeoptimizeMethod(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
845 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
846 int result = 0;
847 CHECK_JNI_EXCEPTION_(env, result);
848 MutexLocker mu(Compile_lock);
849 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
850 if (is_osr) {
851 result += mh->mark_osr_nmethods();
852 } else if (mh->code() != NULL) {
853 mh->code()->mark_for_deoptimization();
854 ++result;
855 }
856 result += CodeCache::mark_for_deoptimization(mh());
2212 {CC"nvdimmReservedEnd", CC"()J", (void*)&WB_NvdimmReservedEnd },
2213 #endif // INCLUDE_G1GC || INCLUDE_PARALLELGC
2214 #if INCLUDE_PARALLELGC
2215 {CC"psVirtualSpaceAlignment",CC"()J", (void*)&WB_PSVirtualSpaceAlignment},
2216 {CC"psHeapGenerationAlignment",CC"()J", (void*)&WB_PSHeapGenerationAlignment},
2217 #endif
2218 #if INCLUDE_NMT
2219 {CC"NMTMalloc", CC"(J)J", (void*)&WB_NMTMalloc },
2220 {CC"NMTMallocWithPseudoStack", CC"(JI)J", (void*)&WB_NMTMallocWithPseudoStack},
2221 {CC"NMTMallocWithPseudoStackAndType", CC"(JII)J", (void*)&WB_NMTMallocWithPseudoStackAndType},
2222 {CC"NMTFree", CC"(J)V", (void*)&WB_NMTFree },
2223 {CC"NMTReserveMemory", CC"(J)J", (void*)&WB_NMTReserveMemory },
2224 {CC"NMTAttemptReserveMemoryAt", CC"(JJ)J", (void*)&WB_NMTAttemptReserveMemoryAt },
2225 {CC"NMTCommitMemory", CC"(JJ)V", (void*)&WB_NMTCommitMemory },
2226 {CC"NMTUncommitMemory", CC"(JJ)V", (void*)&WB_NMTUncommitMemory },
2227 {CC"NMTReleaseMemory", CC"(JJ)V", (void*)&WB_NMTReleaseMemory },
2228 {CC"NMTChangeTrackingLevel", CC"()Z", (void*)&WB_NMTChangeTrackingLevel},
2229 {CC"NMTGetHashSize", CC"()I", (void*)&WB_NMTGetHashSize },
2230 #endif // INCLUDE_NMT
2231 {CC"deoptimizeFrames", CC"(Z)I", (void*)&WB_DeoptimizeFrames },
2232 {CC"isFrameDeoptimized", CC"(I)Z", (void*)&WB_IsFrameDeoptimized},
2233 {CC"deoptimizeAll", CC"()V", (void*)&WB_DeoptimizeAll },
2234 {CC"deoptimizeMethod0", CC"(Ljava/lang/reflect/Executable;Z)I",
2235 (void*)&WB_DeoptimizeMethod },
2236 {CC"isMethodCompiled0", CC"(Ljava/lang/reflect/Executable;Z)Z",
2237 (void*)&WB_IsMethodCompiled },
2238 {CC"isMethodCompilable0", CC"(Ljava/lang/reflect/Executable;IZ)Z",
2239 (void*)&WB_IsMethodCompilable},
2240 {CC"isMethodQueuedForCompilation0",
2241 CC"(Ljava/lang/reflect/Executable;)Z", (void*)&WB_IsMethodQueuedForCompilation},
2242 {CC"isIntrinsicAvailable0",
2243 CC"(Ljava/lang/reflect/Executable;Ljava/lang/reflect/Executable;I)Z",
2244 (void*)&WB_IsIntrinsicAvailable},
2245 {CC"makeMethodNotCompilable0",
2246 CC"(Ljava/lang/reflect/Executable;IZ)V", (void*)&WB_MakeMethodNotCompilable},
2247 {CC"testSetDontInlineMethod0",
2248 CC"(Ljava/lang/reflect/Executable;Z)Z", (void*)&WB_TestSetDontInlineMethod},
2249 {CC"getMethodCompilationLevel0",
2250 CC"(Ljava/lang/reflect/Executable;Z)I", (void*)&WB_GetMethodCompilationLevel},
2251 {CC"getMethodEntryBci0",
2252 CC"(Ljava/lang/reflect/Executable;)I", (void*)&WB_GetMethodEntryBci},
|