mirror of
https://github.com/openjdk/jdk.git
synced 2026-05-14 15:39:45 +00:00
7167254: Crash on OSX in Enumerator.nextElement() with compressed oops
Null checks in "compressed oops with base" mode may trigger a SIGBUS rather than a SIGSEGV. Reviewed-by: dsamersoff, dcubed, rbackman, kvn
This commit is contained in:
parent
b305cf722e
commit
285f7e0640
@ -522,11 +522,12 @@ JVM_handle_bsd_signal(int sig,
|
||||
|
||||
if ((sig == SIGSEGV || sig == SIGBUS) && os::is_poll_address((address)info->si_addr)) {
|
||||
stub = SharedRuntime::get_poll_stub(pc);
|
||||
#if defined(__APPLE__) && !defined(AMD64)
|
||||
#if defined(__APPLE__)
|
||||
// 32-bit Darwin reports a SIGBUS for nearly all memory access exceptions.
|
||||
// 64-bit Darwin may also use a SIGBUS (seen with compressed oops).
|
||||
// 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 if (sig == SIGBUS && MacroAssembler::needs_explicit_null_check((intptr_t)info->si_addr)) {
|
||||
#else
|
||||
} else if (sig == SIGBUS /* && info->si_code == BUS_OBJERR */) {
|
||||
#endif
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user