< prev index next >

src/hotspot/os_cpu/linux_s390/os_linux_s390.cpp

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


 401         // Info->si_addr only points to the page base address, so we
 402         // must extract the real si_addr from the instruction and the
 403         // ucontext.
 404         assert(((NativeInstruction*)pc)->is_safepoint_poll(), "must be safepoint poll");
 405         const address real_si_addr = ((NativeInstruction*)pc)->get_poll_address(uc);
 406       }
 407 
 408       // SIGTRAP-based implicit null check in compiled code.
 409       else if ((sig == SIGFPE) &&
 410                TrapBasedNullChecks &&
 411                (trap_pc != NULL) &&
 412                Assembler::is_sigtrap_zero_check(trap_pc)) {
 413         if (TraceTraps) {
 414           tty->print_cr("trap: NULL_CHECK at " INTPTR_FORMAT " (SIGFPE)", p2i(trap_pc));
 415         }
 416         stub = SharedRuntime::continuation_for_implicit_exception(thread, trap_pc, SharedRuntime::IMPLICIT_NULL);
 417       }
 418 
 419       else if (sig == SIGSEGV && ImplicitNullChecks &&
 420                CodeCache::contains((void*) pc) &&
 421                !MacroAssembler::needs_explicit_null_check((intptr_t) info->si_addr)) {
 422         if (TraceTraps) {
 423           tty->print_cr("trap: null_check at " INTPTR_FORMAT " (SIGSEGV)", p2i(pc));
 424         }
 425         stub = SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::IMPLICIT_NULL);
 426       }
 427 
 428       // SIGTRAP-based implicit range check in compiled code.
 429       else if (sig == SIGFPE && TrapBasedRangeChecks &&
 430                (trap_pc != NULL) &&
 431                Assembler::is_sigtrap_range_check(trap_pc)) {
 432         if (TraceTraps) {
 433           tty->print_cr("trap: RANGE_CHECK at " INTPTR_FORMAT " (SIGFPE)", p2i(trap_pc));
 434         }
 435         stub = SharedRuntime::continuation_for_implicit_exception(thread, trap_pc, SharedRuntime::IMPLICIT_NULL);
 436       }
 437 
 438       else if (sig == SIGFPE && info->si_code == FPE_INTDIV) {
 439         stub = SharedRuntime::continuation_for_implicit_exception(thread, trap_pc, SharedRuntime::IMPLICIT_DIVIDE_BY_ZERO);
 440       }
 441 




 401         // Info->si_addr only points to the page base address, so we
 402         // must extract the real si_addr from the instruction and the
 403         // ucontext.
 404         assert(((NativeInstruction*)pc)->is_safepoint_poll(), "must be safepoint poll");
 405         const address real_si_addr = ((NativeInstruction*)pc)->get_poll_address(uc);
 406       }
 407 
 408       // SIGTRAP-based implicit null check in compiled code.
 409       else if ((sig == SIGFPE) &&
 410                TrapBasedNullChecks &&
 411                (trap_pc != NULL) &&
 412                Assembler::is_sigtrap_zero_check(trap_pc)) {
 413         if (TraceTraps) {
 414           tty->print_cr("trap: NULL_CHECK at " INTPTR_FORMAT " (SIGFPE)", p2i(trap_pc));
 415         }
 416         stub = SharedRuntime::continuation_for_implicit_exception(thread, trap_pc, SharedRuntime::IMPLICIT_NULL);
 417       }
 418 
 419       else if (sig == SIGSEGV && ImplicitNullChecks &&
 420                CodeCache::contains((void*) pc) &&
 421                MacroAssembler::uses_implicit_null_check(info->si_addr)) {
 422         if (TraceTraps) {
 423           tty->print_cr("trap: null_check at " INTPTR_FORMAT " (SIGSEGV)", p2i(pc));
 424         }
 425         stub = SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::IMPLICIT_NULL);
 426       }
 427 
 428       // SIGTRAP-based implicit range check in compiled code.
 429       else if (sig == SIGFPE && TrapBasedRangeChecks &&
 430                (trap_pc != NULL) &&
 431                Assembler::is_sigtrap_range_check(trap_pc)) {
 432         if (TraceTraps) {
 433           tty->print_cr("trap: RANGE_CHECK at " INTPTR_FORMAT " (SIGFPE)", p2i(trap_pc));
 434         }
 435         stub = SharedRuntime::continuation_for_implicit_exception(thread, trap_pc, SharedRuntime::IMPLICIT_NULL);
 436       }
 437 
 438       else if (sig == SIGFPE && info->si_code == FPE_INTDIV) {
 439         stub = SharedRuntime::continuation_for_implicit_exception(thread, trap_pc, SharedRuntime::IMPLICIT_DIVIDE_BY_ZERO);
 440       }
 441 


< prev index next >