< prev index next >

src/os_cpu/linux_s390/vm/os_linux_s390.cpp

Print this page
rev 12273 : 8169317: [s390] Various minor bug fixes and adaptions.

*** 169,178 **** --- 169,180 ---- } } } frame os::current_frame() { + // Expected to return the stack pointer of this method. + // But if inlined, returns the stack pointer of our caller! intptr_t* csp = (intptr_t*) *((intptr_t*) os::current_stack_pointer()); assert (csp != NULL, "sp should not be NULL"); // Pass a dummy pc. This way we don't have to load it from the // stack, since we don't know in which slot we can find it. frame topframe(csp, (address)0x8);
*** 182,193 **** --- 184,200 ---- } else { frame senderFrame = os::get_sender_for_C_frame(&topframe); assert(senderFrame.pc() != NULL, "Sender pc should not be NULL"); // Return sender of sender of current topframe which hopefully // both have pc != NULL. + #ifdef _NMT_NOINLINE_ // Is set in slowdebug builds. + // Current_stack_pointer is not inlined, we must pop one more frame. frame tmp = os::get_sender_for_C_frame(&topframe); return os::get_sender_for_C_frame(&tmp); + #else + return os::get_sender_for_C_frame(&topframe); + #endif } } // Utility functions
*** 372,382 **** else if (sig == SIGBUS) { // BugId 4454115: A read from a MappedByteBuffer can fault here if the // underlying file has been truncated. Do not crash the VM in such a case. CodeBlob* cb = CodeCache::find_blob_unsafe(pc); ! nmethod* nm = (cb != NULL && cb->is_nmethod()) ? (nmethod*)cb : NULL; if (nm != NULL && nm->has_unsafe_access()) { // We don't really need a stub here! Just set the pending exeption and // continue at the next instruction after the faulting read. Returning // garbage from this read is ok. thread->set_pending_unsafe_access_error(); --- 379,389 ---- else if (sig == SIGBUS) { // BugId 4454115: A read from a MappedByteBuffer can fault here if the // underlying file has been truncated. Do not crash the VM in such a case. CodeBlob* cb = CodeCache::find_blob_unsafe(pc); ! CompiledMethod* nm = (cb != NULL) ? cb->as_compiled_method_or_null() : NULL; if (nm != NULL && nm->has_unsafe_access()) { // We don't really need a stub here! Just set the pending exeption and // continue at the next instruction after the faulting read. Returning // garbage from this read is ok. thread->set_pending_unsafe_access_error();
< prev index next >