src/os/windows/vm/os_windows.cpp

changeset 900
dc16daa0329d
parent 824
ee21eaa8ffe1
child 902
8724fb00c422
equal deleted inserted replaced
849:348be627a148 900:dc16daa0329d
2215 // 2215 //
2216 // Check for implicit null 2216 // Check for implicit null
2217 // We only expect null pointers in the stubs (vtable) 2217 // We only expect null pointers in the stubs (vtable)
2218 // the rest are checked explicitly now. 2218 // the rest are checked explicitly now.
2219 // 2219 //
2220 CodeBlob* cb = CodeCache::find_blob(pc); 2220 if (((uintptr_t)addr) < os::vm_page_size() ) {
2221 if (cb != NULL) { 2221 // an access to the first page of VM--assume it is a null pointer
2222 if (VtableStubs::stub_containing(pc) != NULL) { 2222 address stub = SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::IMPLICIT_NULL);
2223 if (((uintptr_t)addr) < os::vm_page_size() ) { 2223 if (stub != NULL) return Handle_Exception(exceptionInfo, stub);
2224 // an access to the first page of VM--assume it is a null pointer
2225 return Handle_Exception(exceptionInfo,
2226 SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::IMPLICIT_NULL));
2227 }
2228 }
2229 } 2224 }
2230 } 2225 }
2231 } // in_java 2226 } // in_java
2232 2227
2233 // IA64 doesn't use implicit null checking yet. So we shouldn't 2228 // IA64 doesn't use implicit null checking yet. So we shouldn't
2239 #else /* !IA64 */ 2234 #else /* !IA64 */
2240 2235
2241 // Windows 98 reports faulting addresses incorrectly 2236 // Windows 98 reports faulting addresses incorrectly
2242 if (!MacroAssembler::needs_explicit_null_check((intptr_t)addr) || 2237 if (!MacroAssembler::needs_explicit_null_check((intptr_t)addr) ||
2243 !os::win32::is_nt()) { 2238 !os::win32::is_nt()) {
2244 2239 address stub = SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::IMPLICIT_NULL);
2245 return Handle_Exception(exceptionInfo, 2240 if (stub != NULL) return Handle_Exception(exceptionInfo, stub);
2246 SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::IMPLICIT_NULL));
2247 } 2241 }
2248 report_error(t, exception_code, pc, exceptionInfo->ExceptionRecord, 2242 report_error(t, exception_code, pc, exceptionInfo->ExceptionRecord,
2249 exceptionInfo->ContextRecord); 2243 exceptionInfo->ContextRecord);
2250 return EXCEPTION_CONTINUE_SEARCH; 2244 return EXCEPTION_CONTINUE_SEARCH;
2251 #endif 2245 #endif

mercurial