Mercurial > hg > truffle
comparison src/share/vm/prims/whitebox.cpp @ 14909:4ca6dc0799b6
Backout jdk9 merge
author | Gilles Duboscq <duboscq@ssw.jku.at> |
---|---|
date | Tue, 01 Apr 2014 13:57:07 +0200 |
parents | c66479743828 |
children | 52b4284cb496 |
comparison
equal
deleted
inserted
replaced
14908:8db6e76cb658 | 14909:4ca6dc0799b6 |
---|---|
103 WB_END | 103 WB_END |
104 | 104 |
105 WB_ENTRY(void, WB_PrintHeapSizes(JNIEnv* env, jobject o)) { | 105 WB_ENTRY(void, WB_PrintHeapSizes(JNIEnv* env, jobject o)) { |
106 CollectorPolicy * p = Universe::heap()->collector_policy(); | 106 CollectorPolicy * p = Universe::heap()->collector_policy(); |
107 gclog_or_tty->print_cr("Minimum heap "SIZE_FORMAT" Initial heap " | 107 gclog_or_tty->print_cr("Minimum heap "SIZE_FORMAT" Initial heap " |
108 SIZE_FORMAT" Maximum heap "SIZE_FORMAT" Space alignment "SIZE_FORMAT" Heap alignment "SIZE_FORMAT, | 108 SIZE_FORMAT" Maximum heap "SIZE_FORMAT" Min alignment "SIZE_FORMAT" Max alignment "SIZE_FORMAT, |
109 p->min_heap_byte_size(), p->initial_heap_byte_size(), p->max_heap_byte_size(), | 109 p->min_heap_byte_size(), p->initial_heap_byte_size(), p->max_heap_byte_size(), |
110 p->space_alignment(), p->heap_alignment()); | 110 p->space_alignment(), p->heap_alignment()); |
111 } | 111 } |
112 WB_END | 112 WB_END |
113 | 113 |
314 VMThread::execute(&op); | 314 VMThread::execute(&op); |
315 WB_END | 315 WB_END |
316 | 316 |
317 WB_ENTRY(jint, WB_DeoptimizeMethod(JNIEnv* env, jobject o, jobject method, jboolean is_osr)) | 317 WB_ENTRY(jint, WB_DeoptimizeMethod(JNIEnv* env, jobject o, jobject method, jboolean is_osr)) |
318 jmethodID jmid = reflected_method_to_jmid(thread, env, method); | 318 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
319 MutexLockerEx mu(Compile_lock); | |
320 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); | |
319 int result = 0; | 321 int result = 0; |
320 CHECK_JNI_EXCEPTION_(env, result); | |
321 MutexLockerEx mu(Compile_lock); | |
322 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); | |
323 nmethod* code; | 322 nmethod* code; |
324 if (is_osr) { | 323 if (is_osr) { |
325 int bci = InvocationEntryBci; | 324 int bci = InvocationEntryBci; |
326 while ((code = mh->lookup_osr_nmethod_for(bci, CompLevel_none, false)) != NULL) { | 325 while ((code = mh->lookup_osr_nmethod_for(bci, CompLevel_none, false)) != NULL) { |
327 code->mark_for_deoptimization(); | 326 code->mark_for_deoptimization(); |
343 return result; | 342 return result; |
344 WB_END | 343 WB_END |
345 | 344 |
346 WB_ENTRY(jboolean, WB_IsMethodCompiled(JNIEnv* env, jobject o, jobject method, jboolean is_osr)) | 345 WB_ENTRY(jboolean, WB_IsMethodCompiled(JNIEnv* env, jobject o, jobject method, jboolean is_osr)) |
347 jmethodID jmid = reflected_method_to_jmid(thread, env, method); | 346 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
348 CHECK_JNI_EXCEPTION_(env, JNI_FALSE); | |
349 MutexLockerEx mu(Compile_lock); | 347 MutexLockerEx mu(Compile_lock); |
350 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); | 348 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
351 nmethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code(); | 349 nmethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code(); |
352 if (code == NULL) { | 350 if (code == NULL) { |
353 return JNI_FALSE; | 351 return JNI_FALSE; |
355 return (code->is_alive() && !code->is_marked_for_deoptimization()); | 353 return (code->is_alive() && !code->is_marked_for_deoptimization()); |
356 WB_END | 354 WB_END |
357 | 355 |
358 WB_ENTRY(jboolean, WB_IsMethodCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level, jboolean is_osr)) | 356 WB_ENTRY(jboolean, WB_IsMethodCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level, jboolean is_osr)) |
359 jmethodID jmid = reflected_method_to_jmid(thread, env, method); | 357 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
360 CHECK_JNI_EXCEPTION_(env, JNI_FALSE); | |
361 MutexLockerEx mu(Compile_lock); | 358 MutexLockerEx mu(Compile_lock); |
362 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); | 359 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
363 if (is_osr) { | 360 if (is_osr) { |
364 return CompilationPolicy::can_be_osr_compiled(mh, comp_level); | 361 return CompilationPolicy::can_be_osr_compiled(mh, comp_level); |
365 } else { | 362 } else { |
367 } | 364 } |
368 WB_END | 365 WB_END |
369 | 366 |
370 WB_ENTRY(jboolean, WB_IsMethodQueuedForCompilation(JNIEnv* env, jobject o, jobject method)) | 367 WB_ENTRY(jboolean, WB_IsMethodQueuedForCompilation(JNIEnv* env, jobject o, jobject method)) |
371 jmethodID jmid = reflected_method_to_jmid(thread, env, method); | 368 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
372 CHECK_JNI_EXCEPTION_(env, JNI_FALSE); | |
373 MutexLockerEx mu(Compile_lock); | 369 MutexLockerEx mu(Compile_lock); |
374 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); | 370 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
375 return mh->queued_for_compilation(); | 371 return mh->queued_for_compilation(); |
376 WB_END | 372 WB_END |
377 | 373 |
378 WB_ENTRY(jint, WB_GetMethodCompilationLevel(JNIEnv* env, jobject o, jobject method, jboolean is_osr)) | 374 WB_ENTRY(jint, WB_GetMethodCompilationLevel(JNIEnv* env, jobject o, jobject method, jboolean is_osr)) |
379 jmethodID jmid = reflected_method_to_jmid(thread, env, method); | 375 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
380 CHECK_JNI_EXCEPTION_(env, CompLevel_none); | |
381 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); | 376 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
382 nmethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code(); | 377 nmethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code(); |
383 return (code != NULL ? code->comp_level() : CompLevel_none); | 378 return (code != NULL ? code->comp_level() : CompLevel_none); |
384 WB_END | 379 WB_END |
385 | 380 |
386 WB_ENTRY(void, WB_MakeMethodNotCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level, jboolean is_osr)) | 381 WB_ENTRY(void, WB_MakeMethodNotCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level, jboolean is_osr)) |
387 jmethodID jmid = reflected_method_to_jmid(thread, env, method); | 382 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
388 CHECK_JNI_EXCEPTION(env); | |
389 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); | 383 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
390 if (is_osr) { | 384 if (is_osr) { |
391 mh->set_not_osr_compilable(comp_level, true /* report */, "WhiteBox"); | 385 mh->set_not_osr_compilable(comp_level, true /* report */, "WhiteBox"); |
392 } else { | 386 } else { |
393 mh->set_not_compilable(comp_level, true /* report */, "WhiteBox"); | 387 mh->set_not_compilable(comp_level, true /* report */, "WhiteBox"); |
394 } | 388 } |
395 WB_END | 389 WB_END |
396 | 390 |
397 WB_ENTRY(jint, WB_GetMethodEntryBci(JNIEnv* env, jobject o, jobject method)) | 391 WB_ENTRY(jint, WB_GetMethodEntryBci(JNIEnv* env, jobject o, jobject method)) |
398 jmethodID jmid = reflected_method_to_jmid(thread, env, method); | 392 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
399 CHECK_JNI_EXCEPTION_(env, InvocationEntryBci); | |
400 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); | 393 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
401 nmethod* code = mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false); | 394 nmethod* code = mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false); |
402 return (code != NULL && code->is_osr_method() ? code->osr_entry_bci() : InvocationEntryBci); | 395 return (code != NULL && code->is_osr_method() ? code->osr_entry_bci() : InvocationEntryBci); |
403 WB_END | 396 WB_END |
404 | 397 |
405 WB_ENTRY(jboolean, WB_TestSetDontInlineMethod(JNIEnv* env, jobject o, jobject method, jboolean value)) | 398 WB_ENTRY(jboolean, WB_TestSetDontInlineMethod(JNIEnv* env, jobject o, jobject method, jboolean value)) |
406 jmethodID jmid = reflected_method_to_jmid(thread, env, method); | 399 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
407 CHECK_JNI_EXCEPTION_(env, JNI_FALSE); | |
408 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); | 400 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
409 bool result = mh->dont_inline(); | 401 bool result = mh->dont_inline(); |
410 mh->set_dont_inline(value == JNI_TRUE); | 402 mh->set_dont_inline(value == JNI_TRUE); |
411 return result; | 403 return result; |
412 WB_END | 404 WB_END |
420 } | 412 } |
421 WB_END | 413 WB_END |
422 | 414 |
423 WB_ENTRY(jboolean, WB_TestSetForceInlineMethod(JNIEnv* env, jobject o, jobject method, jboolean value)) | 415 WB_ENTRY(jboolean, WB_TestSetForceInlineMethod(JNIEnv* env, jobject o, jobject method, jboolean value)) |
424 jmethodID jmid = reflected_method_to_jmid(thread, env, method); | 416 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
425 CHECK_JNI_EXCEPTION_(env, JNI_FALSE); | |
426 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); | 417 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
427 bool result = mh->force_inline(); | 418 bool result = mh->force_inline(); |
428 mh->set_force_inline(value == JNI_TRUE); | 419 mh->set_force_inline(value == JNI_TRUE); |
429 return result; | 420 return result; |
430 WB_END | 421 WB_END |
431 | 422 |
432 WB_ENTRY(jboolean, WB_EnqueueMethodForCompilation(JNIEnv* env, jobject o, jobject method, jint comp_level, jint bci)) | 423 WB_ENTRY(jboolean, WB_EnqueueMethodForCompilation(JNIEnv* env, jobject o, jobject method, jint comp_level, jint bci)) |
433 jmethodID jmid = reflected_method_to_jmid(thread, env, method); | 424 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
434 CHECK_JNI_EXCEPTION_(env, JNI_FALSE); | |
435 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); | 425 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
436 nmethod* nm = CompileBroker::compile_method(mh, bci, comp_level, mh, mh->invocation_count(), "WhiteBox", THREAD); | 426 nmethod* nm = CompileBroker::compile_method(mh, bci, comp_level, mh, mh->invocation_count(), "WhiteBox", THREAD); |
437 MutexLockerEx mu(Compile_lock); | 427 MutexLockerEx mu(Compile_lock); |
438 return (mh->queued_for_compilation() || nm != NULL); | 428 return (mh->queued_for_compilation() || nm != NULL); |
439 WB_END | 429 WB_END |
440 | 430 |
441 WB_ENTRY(void, WB_ClearMethodState(JNIEnv* env, jobject o, jobject method)) | 431 WB_ENTRY(void, WB_ClearMethodState(JNIEnv* env, jobject o, jobject method)) |
442 jmethodID jmid = reflected_method_to_jmid(thread, env, method); | 432 jmethodID jmid = reflected_method_to_jmid(thread, env, method); |
443 CHECK_JNI_EXCEPTION(env); | |
444 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); | 433 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid)); |
445 MutexLockerEx mu(Compile_lock); | 434 MutexLockerEx mu(Compile_lock); |
446 MethodData* mdo = mh->method_data(); | 435 MethodData* mdo = mh->method_data(); |
447 MethodCounters* mcs = mh->method_counters(); | 436 MethodCounters* mcs = mh->method_counters(); |
448 | 437 |
625 ResourceMark rm; | 614 ResourceMark rm; |
626 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI | 615 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI |
627 bool result = true; | 616 bool result = true; |
628 // one by one registration natives for exception catching | 617 // one by one registration natives for exception catching |
629 jclass exceptionKlass = env->FindClass(vmSymbols::java_lang_NoSuchMethodError()->as_C_string()); | 618 jclass exceptionKlass = env->FindClass(vmSymbols::java_lang_NoSuchMethodError()->as_C_string()); |
630 CHECK_JNI_EXCEPTION(env); | |
631 for (int i = 0, n = sizeof(methods) / sizeof(methods[0]); i < n; ++i) { | 619 for (int i = 0, n = sizeof(methods) / sizeof(methods[0]); i < n; ++i) { |
632 if (env->RegisterNatives(wbclass, methods + i, 1) != 0) { | 620 if (env->RegisterNatives(wbclass, methods + i, 1) != 0) { |
633 result = false; | 621 result = false; |
634 jthrowable throwable_obj = env->ExceptionOccurred(); | 622 if (env->ExceptionCheck() && env->IsInstanceOf(env->ExceptionOccurred(), exceptionKlass)) { |
635 if (throwable_obj != NULL) { | 623 // j.l.NoSuchMethodError is thrown when a method can't be found or a method is not native |
624 // ignoring the exception | |
625 tty->print_cr("Warning: 'NoSuchMethodError' on register of sun.hotspot.WhiteBox::%s%s", methods[i].name, methods[i].signature); | |
636 env->ExceptionClear(); | 626 env->ExceptionClear(); |
637 if (env->IsInstanceOf(throwable_obj, exceptionKlass)) { | |
638 // j.l.NoSuchMethodError is thrown when a method can't be found or a method is not native | |
639 // ignoring the exception | |
640 tty->print_cr("Warning: 'NoSuchMethodError' on register of sun.hotspot.WhiteBox::%s%s", methods[i].name, methods[i].signature); | |
641 } | |
642 } else { | 627 } else { |
643 // register is failed w/o exception or w/ unexpected exception | 628 // register is failed w/o exception or w/ unexpected exception |
644 tty->print_cr("Warning: unexpected error on register of sun.hotspot.WhiteBox::%s%s. All methods will be unregistered", methods[i].name, methods[i].signature); | 629 tty->print_cr("Warning: unexpected error on register of sun.hotspot.WhiteBox::%s%s. All methods will be unregistered", methods[i].name, methods[i].signature); |
645 env->UnregisterNatives(wbclass); | 630 env->UnregisterNatives(wbclass); |
646 break; | 631 break; |