< prev index next >

src/hotspot/os_cpu/solaris_sparc/os_solaris_sparc.cpp

Print this page
rev 52430 : 8213199: GC abstraction for Assembler::needs_explicit_null_check()


 488       else if (sig == SIGFPE && info->si_code == FPE_FLTDIV) {
 489         // floating-point divide by zero
 490         stub = SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::IMPLICIT_DIVIDE_BY_ZERO);
 491       }
 492 #ifdef COMPILER2
 493       else if (sig == SIGILL && nativeInstruction_at(pc)->is_ic_miss_trap()) {
 494 #ifdef ASSERT
 495   #ifdef TIERED
 496         CodeBlob* cb = CodeCache::find_blob_unsafe(pc);
 497         assert(cb->is_compiled_by_c2(), "Wrong compiler");
 498   #endif // TIERED
 499 #endif // ASSERT
 500         // Inline cache missed and user trap "Tne G0+ST_RESERVED_FOR_USER_0+2" taken.
 501         stub = SharedRuntime::get_ic_miss_stub();
 502         // At the stub it needs to look like a call from the caller of this
 503         // method (not a call from the segv site).
 504         pc = (address)uc->uc_mcontext.gregs[REG_O7];
 505       }
 506 #endif  // COMPILER2
 507 
 508       else if (sig == SIGSEGV && info->si_code > 0 && !MacroAssembler::needs_explicit_null_check((intptr_t)info->si_addr)) {
 509         // Determination of interpreter/vtable stub/compiled code null exception
 510         stub = SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::IMPLICIT_NULL);
 511       }
 512     }
 513 
 514     // jni_fast_Get<Primitive>Field can trap at certain pc's if a GC kicks in
 515     // and the heap gets shrunk before the field access.
 516     if ((sig == SIGSEGV) || (sig == SIGBUS)) {
 517       address addr = JNI_FastGetField::find_slowcase_pc(pc);
 518       if (addr != (address)-1) {
 519         stub = addr;
 520       }
 521     }
 522 
 523     // Check to see if we caught the safepoint code in the
 524     // process of write protecting the memory serialization page.
 525     // It write enables the page immediately after protecting it
 526     // so just return.
 527     if ((sig == SIGSEGV) &&
 528         os::is_memory_serialize_page(thread, (address)info->si_addr)) {




 488       else if (sig == SIGFPE && info->si_code == FPE_FLTDIV) {
 489         // floating-point divide by zero
 490         stub = SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::IMPLICIT_DIVIDE_BY_ZERO);
 491       }
 492 #ifdef COMPILER2
 493       else if (sig == SIGILL && nativeInstruction_at(pc)->is_ic_miss_trap()) {
 494 #ifdef ASSERT
 495   #ifdef TIERED
 496         CodeBlob* cb = CodeCache::find_blob_unsafe(pc);
 497         assert(cb->is_compiled_by_c2(), "Wrong compiler");
 498   #endif // TIERED
 499 #endif // ASSERT
 500         // Inline cache missed and user trap "Tne G0+ST_RESERVED_FOR_USER_0+2" taken.
 501         stub = SharedRuntime::get_ic_miss_stub();
 502         // At the stub it needs to look like a call from the caller of this
 503         // method (not a call from the segv site).
 504         pc = (address)uc->uc_mcontext.gregs[REG_O7];
 505       }
 506 #endif  // COMPILER2
 507 
 508       else if (sig == SIGSEGV && info->si_code > 0 && MacroAssembler::uses_implicit_null_check((void*)info->si_addr)) {
 509         // Determination of interpreter/vtable stub/compiled code null exception
 510         stub = SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::IMPLICIT_NULL);
 511       }
 512     }
 513 
 514     // jni_fast_Get<Primitive>Field can trap at certain pc's if a GC kicks in
 515     // and the heap gets shrunk before the field access.
 516     if ((sig == SIGSEGV) || (sig == SIGBUS)) {
 517       address addr = JNI_FastGetField::find_slowcase_pc(pc);
 518       if (addr != (address)-1) {
 519         stub = addr;
 520       }
 521     }
 522 
 523     // Check to see if we caught the safepoint code in the
 524     // process of write protecting the memory serialization page.
 525     // It write enables the page immediately after protecting it
 526     // so just return.
 527     if ((sig == SIGSEGV) &&
 528         os::is_memory_serialize_page(thread, (address)info->si_addr)) {


< prev index next >