src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp

Print this page
rev 3324 : 7167254: Crash on OSX in Enumerator.nextElement() with compressed oops
Summary: null checks in "compressed oops with base" mode may trigger a SIGBUS rather than a SIGSEGV.
Reviewed-by:

*** 520,530 **** // Java thread running in Java code => find exception handler if any // a fault inside compiled code, the interpreter, or a stub if ((sig == SIGSEGV || sig == SIGBUS) && os::is_poll_address((address)info->si_addr)) { stub = SharedRuntime::get_poll_stub(pc); ! #if defined(__APPLE__) && !defined(AMD64) // 32-bit Darwin reports a SIGBUS for nearly all memory access exceptions. // Catching SIGBUS here prevents the implicit SIGBUS NULL check below from // being called, so only do so if the implicit NULL check is not necessary. } else if (sig == SIGBUS && MacroAssembler::needs_explicit_null_check((int)info->si_addr)) { #else --- 520,530 ---- // Java thread running in Java code => find exception handler if any // a fault inside compiled code, the interpreter, or a stub if ((sig == SIGSEGV || sig == SIGBUS) && os::is_poll_address((address)info->si_addr)) { stub = SharedRuntime::get_poll_stub(pc); ! #if defined(__APPLE__) // 32-bit Darwin reports a SIGBUS for nearly all memory access exceptions. // Catching SIGBUS here prevents the implicit SIGBUS NULL check below from // being called, so only do so if the implicit NULL check is not necessary. } else if (sig == SIGBUS && MacroAssembler::needs_explicit_null_check((int)info->si_addr)) { #else