comparison src/os_cpu/solaris_x86/vm/os_solaris_x86.cpp @ 18041:52b4284cb496

Merge with jdk8u20-b26
author Gilles Duboscq <duboscq@ssw.jku.at>
date Wed, 15 Oct 2014 16:02:50 +0200
parents 4ca6dc0799b6 98af1e198e73
children
comparison
equal deleted inserted replaced
17606:45d7b2c7029d 18041:52b4284cb496
1 /* 1 /*
2 * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. 2 * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 * 4 *
5 * This code is free software; you can redistribute it and/or modify it 5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as 6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
457 thread->disable_stack_red_zone(); 457 thread->disable_stack_red_zone();
458 tty->print_raw_cr("An irrecoverable stack overflow has occurred."); 458 tty->print_raw_cr("An irrecoverable stack overflow has occurred.");
459 } 459 }
460 } 460 }
461 461
462 if ((sig == SIGSEGV) && VM_Version::is_cpuinfo_segv_addr(pc)) {
463 // Verify that OS save/restore AVX registers.
464 stub = VM_Version::cpuinfo_cont_addr();
465 }
466
462 if (thread->thread_state() == _thread_in_vm) { 467 if (thread->thread_state() == _thread_in_vm) {
463 if (sig == SIGBUS && info->si_code == BUS_OBJERR && thread->doing_unsafe_access()) { 468 if (sig == SIGBUS && info->si_code == BUS_OBJERR && thread->doing_unsafe_access()) {
464 stub = StubRoutines::handler_for_unsafe_access(); 469 stub = StubRoutines::handler_for_unsafe_access();
465 } 470 }
466 } 471 }
473 else if (sig == SIGBUS && info->si_code == BUS_OBJERR) { 478 else if (sig == SIGBUS && info->si_code == BUS_OBJERR) {
474 // BugId 4454115: A read from a MappedByteBuffer can fault 479 // BugId 4454115: A read from a MappedByteBuffer can fault
475 // here if the underlying file has been truncated. 480 // here if the underlying file has been truncated.
476 // Do not crash the VM in such a case. 481 // Do not crash the VM in such a case.
477 CodeBlob* cb = CodeCache::find_blob_unsafe(pc); 482 CodeBlob* cb = CodeCache::find_blob_unsafe(pc);
478 nmethod* nm = cb->is_nmethod() ? (nmethod*)cb : NULL; 483 if (cb != NULL) {
479 if (nm != NULL && nm->has_unsafe_access()) { 484 nmethod* nm = cb->is_nmethod() ? (nmethod*)cb : NULL;
480 stub = StubRoutines::handler_for_unsafe_access(); 485 if (nm != NULL && nm->has_unsafe_access()) {
486 stub = StubRoutines::handler_for_unsafe_access();
487 }
481 } 488 }
482 } 489 }
483 else 490 else
484 if (sig == SIGFPE && info->si_code == FPE_INTDIV) { 491 if (sig == SIGFPE && info->si_code == FPE_INTDIV) {
485 // integer divide by zero 492 // integer divide by zero
722 729
723 VMError err(t, sig, pc, info, ucVoid); 730 VMError err(t, sig, pc, info, ucVoid);
724 err.report_and_die(); 731 err.report_and_die();
725 732
726 ShouldNotReachHere(); 733 ShouldNotReachHere();
734 return false;
727 } 735 }
728 736
729 void os::print_context(outputStream *st, void *context) { 737 void os::print_context(outputStream *st, void *context) {
730 if (context == NULL) return; 738 if (context == NULL) return;
731 739