< prev index next >

src/hotspot/os_cpu/linux_arm/os_linux_arm.cpp

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2008, 2019, Oracle and/or its affiliates. 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 * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 2008, 2018, Oracle and/or its affiliates. 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 * published by the Free Software Foundation.
*** 299,311 **** } } #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; --- 299,310 ---- } } #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;
*** 383,393 **** // 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()) || (thread->doing_unsafe_access() && UnsafeCopyMemory::contains_pc(pc))) { unsafe_access = true; } } else if (sig == SIGSEGV && MacroAssembler::uses_implicit_null_check(info->si_addr)) { // Determination of interpreter/vtable stub/compiled code null exception --- 382,392 ---- // 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()) { unsafe_access = true; } } else if (sig == SIGSEGV && MacroAssembler::uses_implicit_null_check(info->si_addr)) { // Determination of interpreter/vtable stub/compiled code null exception
*** 397,408 **** } } else if (sig == SIGILL && *(int *)pc == NativeInstruction::zombie_illegal_instruction) { // Zombie stub = SharedRuntime::get_handle_wrong_method_stub(); } ! } else if ((thread->thread_state() == _thread_in_vm || ! thread->thread_state() == _thread_in_native) && sig == SIGBUS && thread->doing_unsafe_access()) { unsafe_access = true; } // jni_fast_Get<Primitive>Field can trap at certain pc's if a GC kicks in --- 396,406 ---- } } else if (sig == SIGILL && *(int *)pc == NativeInstruction::zombie_illegal_instruction) { // Zombie stub = SharedRuntime::get_handle_wrong_method_stub(); } ! } else if (thread->thread_state() == _thread_in_vm && sig == SIGBUS && thread->doing_unsafe_access()) { unsafe_access = true; } // jni_fast_Get<Primitive>Field can trap at certain pc's if a GC kicks in
*** 418,430 **** if (unsafe_access && stub == NULL) { // it can be an unsafe access and we haven't found // any other suitable exception reason, // so assume it is an unsafe access. address next_pc = pc + Assembler::InstructionSize; - if (UnsafeCopyMemory::contains_pc(pc)) { - next_pc = UnsafeCopyMemory::page_error_continue_pc(pc); - } #ifdef __thumb__ if (uc->uc_mcontext.arm_cpsr & PSR_T_BIT) { next_pc = (address)((intptr_t)next_pc | 0x1); } #endif --- 416,425 ----
< prev index next >