1/* 2 * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 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 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 * 23 */ 24 25#include "precompiled.hpp" 26#include "memory/filemap.hpp" 27#include "runtime/arguments.hpp" 28#include "runtime/os.hpp" 29#include "runtime/thread.hpp" 30#include "utilities/vmError.hpp" 31 32int VMError::get_resetted_sigflags(int sig) { 33 return -1; 34} 35 36address VMError::get_resetted_sighandler(int sig) { 37 return NULL; 38} 39 40LONG WINAPI crash_handler(struct _EXCEPTION_POINTERS* exceptionInfo) { 41 DWORD exception_code = exceptionInfo->ExceptionRecord->ExceptionCode; 42 VMError::report_and_die(NULL, exception_code, NULL, exceptionInfo->ExceptionRecord, 43 exceptionInfo->ContextRecord); 44 return EXCEPTION_CONTINUE_SEARCH; 45} 46 47void VMError::reset_signal_handlers() { 48 SetUnhandledExceptionFilter(crash_handler); 49} 50 51// Write a hint to the stream in case siginfo relates to a segv/bus error 52// and the offending address points into CDS archive. 53void VMError::check_failing_cds_access(outputStream* st, const void* siginfo) { 54 if (siginfo && UseSharedSpaces) { 55 const EXCEPTION_RECORD* const er = (const EXCEPTION_RECORD*)siginfo; 56 if (er->ExceptionCode == EXCEPTION_IN_PAGE_ERROR && 57 er->NumberParameters >= 2) { 58 const void* const fault_addr = (const void*) er->ExceptionInformation[1]; 59 if (fault_addr != NULL) { 60 FileMapInfo* const mapinfo = FileMapInfo::current_info(); 61 if (mapinfo->is_in_shared_space(fault_addr)) { 62 st->print("Error accessing class data sharing archive. " 63 "Mapped file inaccessible during execution, possible disk/network problem."); 64 } 65 } 66 } 67 } 68} 69