391 if (TraceTraps) {
392 tty->print_cr("trap: ic_miss_check at " INTPTR_FORMAT " (SIGTRAP)", pc);
393 }
394 stub = SharedRuntime::get_ic_miss_stub();
395 goto run_stub;
396 }
397
398 // SIGTRAP-based implicit null check in compiled code.
399 else if (sig == SIGTRAP && TrapBasedNullChecks &&
400 nativeInstruction_at(pc)->is_sigtrap_null_check()) {
401 if (TraceTraps) {
402 tty->print_cr("trap: null_check at " INTPTR_FORMAT " (SIGTRAP)", pc);
403 }
404 stub = SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::IMPLICIT_NULL);
405 goto run_stub;
406 }
407
408 // SIGSEGV-based implicit null check in compiled code.
409 else if (sig == SIGSEGV && ImplicitNullChecks &&
410 CodeCache::contains((void*) pc) &&
411 !MacroAssembler::needs_explicit_null_check((intptr_t) info->si_addr)) {
412 if (TraceTraps) {
413 tty->print_cr("trap: null_check at " INTPTR_FORMAT " (SIGSEGV)", pc);
414 }
415 stub = SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::IMPLICIT_NULL);
416 }
417
418 #ifdef COMPILER2
419 // SIGTRAP-based implicit range check in compiled code.
420 else if (sig == SIGTRAP && TrapBasedRangeChecks &&
421 nativeInstruction_at(pc)->is_sigtrap_range_check()) {
422 if (TraceTraps) {
423 tty->print_cr("trap: range_check at " INTPTR_FORMAT " (SIGTRAP)", pc);
424 }
425 stub = SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::IMPLICIT_NULL);
426 goto run_stub;
427 }
428 #endif
429
430 else if (sig == SIGFPE /* && info->si_code == FPE_INTDIV */) {
|
391 if (TraceTraps) {
392 tty->print_cr("trap: ic_miss_check at " INTPTR_FORMAT " (SIGTRAP)", pc);
393 }
394 stub = SharedRuntime::get_ic_miss_stub();
395 goto run_stub;
396 }
397
398 // SIGTRAP-based implicit null check in compiled code.
399 else if (sig == SIGTRAP && TrapBasedNullChecks &&
400 nativeInstruction_at(pc)->is_sigtrap_null_check()) {
401 if (TraceTraps) {
402 tty->print_cr("trap: null_check at " INTPTR_FORMAT " (SIGTRAP)", pc);
403 }
404 stub = SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::IMPLICIT_NULL);
405 goto run_stub;
406 }
407
408 // SIGSEGV-based implicit null check in compiled code.
409 else if (sig == SIGSEGV && ImplicitNullChecks &&
410 CodeCache::contains((void*) pc) &&
411 MacroAssembler::uses_implicit_null_check(info->si_addr)) {
412 if (TraceTraps) {
413 tty->print_cr("trap: null_check at " INTPTR_FORMAT " (SIGSEGV)", pc);
414 }
415 stub = SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::IMPLICIT_NULL);
416 }
417
418 #ifdef COMPILER2
419 // SIGTRAP-based implicit range check in compiled code.
420 else if (sig == SIGTRAP && TrapBasedRangeChecks &&
421 nativeInstruction_at(pc)->is_sigtrap_range_check()) {
422 if (TraceTraps) {
423 tty->print_cr("trap: range_check at " INTPTR_FORMAT " (SIGTRAP)", pc);
424 }
425 stub = SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::IMPLICIT_NULL);
426 goto run_stub;
427 }
428 #endif
429
430 else if (sig == SIGFPE /* && info->si_code == FPE_INTDIV */) {
|
606 int SpinPause() {
607 return 0;
608 }
609 }
610
611 #ifndef PRODUCT
612 void os::verify_stack_alignment() {
613 assert(((intptr_t)os::current_stack_pointer() & (StackAlignmentInBytes-1)) == 0, "incorrect stack alignment");
614 }
615 #endif
616
617 int os::extra_bang_size_in_bytes() {
618 // PPC does not require the additional stack bang.
619 return 0;
620 }
621
622 bool os::platform_print_native_stack(outputStream* st, void* context, char *buf, int buf_size) {
623 AixNativeCallstack::print_callstack_for_context(st, (const ucontext_t*)context, true, buf, (size_t) buf_size);
624 return true;
625 }
626
627
|
606 int SpinPause() {
607 return 0;
608 }
609 }
610
611 #ifndef PRODUCT
612 void os::verify_stack_alignment() {
613 assert(((intptr_t)os::current_stack_pointer() & (StackAlignmentInBytes-1)) == 0, "incorrect stack alignment");
614 }
615 #endif
616
617 int os::extra_bang_size_in_bytes() {
618 // PPC does not require the additional stack bang.
619 return 0;
620 }
621
622 bool os::platform_print_native_stack(outputStream* st, void* context, char *buf, int buf_size) {
623 AixNativeCallstack::print_callstack_for_context(st, (const ucontext_t*)context, true, buf, (size_t) buf_size);
624 return true;
625 }
|