< prev index next >

src/hotspot/os_cpu/linux_s390/os_linux_s390.cpp

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2016, 2018 SAP SE. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as --- 1,7 ---- /* ! * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2016, 2018 SAP SE. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as
*** 268,280 **** } } #ifdef CAN_SHOW_REGISTERS_ON_ASSERT if ((sig == SIGSEGV || sig == SIGBUS) && info != NULL && info->si_addr == g_assert_poison) { ! if (handle_assert_poison_fault(ucVoid, info->si_addr)) { ! return 1; ! } } #endif JavaThread* thread = NULL; VMThread* vmthread = NULL; --- 268,279 ---- } } #ifdef CAN_SHOW_REGISTERS_ON_ASSERT if ((sig == SIGSEGV || sig == SIGBUS) && info != NULL && info->si_addr == g_assert_poison) { ! handle_assert_poison_fault(ucVoid, info->si_addr); ! return 1; } #endif JavaThread* thread = NULL; VMThread* vmthread = NULL;
*** 466,495 **** } else if ((sig == SIGFPE) && VM_Version::is_determine_features_test_running()) { // SIGFPE is known to be caused by trying to execute a vector instruction // when the vector facility is installed, but operating system support is missing. VM_Version::reset_has_VectorFacility(); stub = pc; // Continue with next instruction. ! } else if ((thread->thread_state() == _thread_in_vm || ! thread->thread_state() == _thread_in_native) && sig == SIGBUS && thread->doing_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(); os::Linux::ucontext_set_pc(uc, pc + Assembler::instr_len(pc)); return true; } } - - // jni_fast_Get<Primitive>Field can trap at certain pc's if a GC kicks in - // and the heap gets shrunk before the field access. - if ((sig == SIGSEGV) || (sig == SIGBUS)) { - address addr = JNI_FastGetField::find_slowcase_pc(pc); - if (addr != (address)-1) { - stub = addr; - } - } } if (stub != NULL) { // Save all thread context in case we need to restore it. if (thread != NULL) thread->set_saved_exception_pc(pc); --- 465,484 ---- } else if ((sig == SIGFPE) && VM_Version::is_determine_features_test_running()) { // SIGFPE is known to be caused by trying to execute a vector instruction // when the vector facility is installed, but operating system support is missing. VM_Version::reset_has_VectorFacility(); stub = pc; // Continue with next instruction. ! } else if (thread->thread_state() == _thread_in_vm && sig == SIGBUS && thread->doing_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(); os::Linux::ucontext_set_pc(uc, pc + Assembler::instr_len(pc)); return true; } } } if (stub != NULL) { // Save all thread context in case we need to restore it. if (thread != NULL) thread->set_saved_exception_pc(pc);
< prev index next >