src/hotspot/os_cpu/linux_s390/os_linux_s390.cpp
changeset 55490 3f3dc00a69a5
parent 53605 853c68ff2ed7
child 55653 3243c42d737d
equal deleted inserted replaced
55489:c749ecf599c0 55490:3f3dc00a69a5
     1 /*
     1 /*
     2  * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
     2  * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
     3  * Copyright (c) 2016, 2018 SAP SE. All rights reserved.
     3  * Copyright (c) 2016, 2018 SAP SE. All rights reserved.
     4  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     5  *
     5  *
     6  * This code is free software; you can redistribute it and/or modify it
     6  * This code is free software; you can redistribute it and/or modify it
     7  * under the terms of the GNU General Public License version 2 only, as
     7  * under the terms of the GNU General Public License version 2 only, as
   465       } else if ((sig == SIGFPE) && VM_Version::is_determine_features_test_running()) {
   465       } else if ((sig == SIGFPE) && VM_Version::is_determine_features_test_running()) {
   466         // SIGFPE is known to be caused by trying to execute a vector instruction
   466         // SIGFPE is known to be caused by trying to execute a vector instruction
   467         // when the vector facility is installed, but operating system support is missing.
   467         // when the vector facility is installed, but operating system support is missing.
   468         VM_Version::reset_has_VectorFacility();
   468         VM_Version::reset_has_VectorFacility();
   469         stub = pc; // Continue with next instruction.
   469         stub = pc; // Continue with next instruction.
   470       } else if (thread->thread_state() == _thread_in_vm &&
   470       } else if ((thread->thread_state() == _thread_in_vm ||
       
   471                   thread->thread_state() == _thread_in_native) &&
   471                  sig == SIGBUS && thread->doing_unsafe_access()) {
   472                  sig == SIGBUS && thread->doing_unsafe_access()) {
   472         // We don't really need a stub here! Just set the pending exeption and
   473         // We don't really need a stub here! Just set the pending exeption and
   473         // continue at the next instruction after the faulting read. Returning
   474         // continue at the next instruction after the faulting read. Returning
   474         // garbage from this read is ok.
   475         // garbage from this read is ok.
   475         thread->set_pending_unsafe_access_error();
   476         thread->set_pending_unsafe_access_error();