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