src/os/windows/vm/os_windows.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File hotspot Cdiff src/os/windows/vm/os_windows.cpp

src/os/windows/vm/os_windows.cpp

Print this page

        

*** 164,179 **** // For Windows at the moment does nothing void os::run_periodic_checks() { return; } - #ifndef _WIN64 // previous UnhandledExceptionFilter, if there is one static LPTOP_LEVEL_EXCEPTION_FILTER prev_uef_handler = NULL; LONG WINAPI Handle_FLT_Exception(struct _EXCEPTION_POINTERS* exceptionInfo); - #endif void os::init_system_properties_values() { /* sysclasspath, java_home, dll_dir */ { char *home_path; char *dll_path; --- 164,177 ----
*** 2238,2250 **** // Continue the execution #endif return EXCEPTION_CONTINUE_EXECUTION; } - #ifndef _WIN64 //----------------------------------------------------------------------------- LONG WINAPI Handle_FLT_Exception(struct _EXCEPTION_POINTERS* exceptionInfo) { // handle exception caused by native method modifying control word PCONTEXT ctx = exceptionInfo->ContextRecord; DWORD exception_code = exceptionInfo->ExceptionRecord->ExceptionCode; switch (exception_code) { --- 2236,2248 ---- // Continue the execution #endif return EXCEPTION_CONTINUE_EXECUTION; } //----------------------------------------------------------------------------- LONG WINAPI Handle_FLT_Exception(struct _EXCEPTION_POINTERS* exceptionInfo) { + #ifndef _WIN64 // handle exception caused by native method modifying control word PCONTEXT ctx = exceptionInfo->ContextRecord; DWORD exception_code = exceptionInfo->ExceptionRecord->ExceptionCode; switch (exception_code) {
*** 2268,2299 **** if (prev_uef_handler != NULL) { // We didn't handle this exception so pass it to the previous // UnhandledExceptionFilter. return (prev_uef_handler)(exceptionInfo); } ! ! return EXCEPTION_CONTINUE_SEARCH; ! } ! #else //_WIN64 /* On Windows, the mxcsr control bits are non-volatile across calls See also CR 6192333 ! If EXCEPTION_FLT_* happened after some native method modified ! mxcsr - it is not a jvm fault. ! However should we decide to restore of mxcsr after a faulty ! native method we can uncomment following code jint MxCsr = INITIAL_MXCSR; // we can't use StubRoutines::addr_mxcsr_std() // because in Win64 mxcsr is not saved there if (MxCsr != ctx->MxCsr) { ctx->MxCsr = MxCsr; return EXCEPTION_CONTINUE_EXECUTION; } ! */ ! #endif //_WIN64 ! // Fatal error reporting is single threaded so we can make this a // static and preallocated. If it's more than MAX_PATH silently ignore // it. static char saved_error_file[MAX_PATH] = {0}; --- 2266,2292 ---- if (prev_uef_handler != NULL) { // We didn't handle this exception so pass it to the previous // UnhandledExceptionFilter. return (prev_uef_handler)(exceptionInfo); } ! #else // !_WIN64 /* On Windows, the mxcsr control bits are non-volatile across calls See also CR 6192333 ! */ ! PCONTEXT ctx = exceptionInfo->ContextRecord; jint MxCsr = INITIAL_MXCSR; // we can't use StubRoutines::addr_mxcsr_std() // because in Win64 mxcsr is not saved there if (MxCsr != ctx->MxCsr) { ctx->MxCsr = MxCsr; return EXCEPTION_CONTINUE_EXECUTION; } + #endif // !_WIN64 ! return EXCEPTION_CONTINUE_SEARCH; ! } // Fatal error reporting is single threaded so we can make this a // static and preallocated. If it's more than MAX_PATH silently ignore // it. static char saved_error_file[MAX_PATH] = {0};
*** 2638,2656 **** case EXCEPTION_INT_OVERFLOW: return Handle_IDiv_Exception(exceptionInfo); } // switch } - #ifndef _WIN64 if (((thread->thread_state() == _thread_in_Java) || (thread->thread_state() == _thread_in_native)) && exception_code != EXCEPTION_UNCAUGHT_CXX_EXCEPTION) { LONG result=Handle_FLT_Exception(exceptionInfo); if (result==EXCEPTION_CONTINUE_EXECUTION) return result; } - #endif //_WIN64 } if (exception_code != EXCEPTION_BREAKPOINT) { report_error(t, exception_code, pc, exceptionInfo->ExceptionRecord, exceptionInfo->ContextRecord); --- 2631,2647 ----
src/os/windows/vm/os_windows.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File