hotspot/src/os/windows/vm/os_windows.cpp
changeset 1618 2d86b9b84aa5
parent 1421 a7ef1a3b2644
child 1620 a85945264abc
equal deleted inserted replaced
1494:ef0a3bbff58c 1618:2d86b9b84aa5
  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