Mercurial > hg > truffle
comparison src/os/windows/vm/os_windows.cpp @ 465:dc16daa0329d
6739363: Xcheck jni doesn't check native function arguments
Summary: Fix adds support for verifying arguments with -Xcheck:jni.
Reviewed-by: coleenp
author | poonam |
---|---|
date | Thu, 04 Dec 2008 17:29:56 -0800 |
parents | ee21eaa8ffe1 |
children | 8724fb00c422 |
comparison
equal
deleted
inserted
replaced
414:348be627a148 | 465: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 |