< prev index next >
src/hotspot/share/jvmci/jvmciEnv.cpp
Print this page
*** 1,7 ****
/*
! * Copyright (c) 1999, 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.
--- 1,7 ----
/*
! * Copyright (c) 1999, 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.
*** 60,72 ****
_failure_reason(NULL),
_retryable(true)
{
// Get Jvmti capabilities under lock to get consistent values.
MutexLocker mu(JvmtiThreadState_lock);
! _jvmti_can_hotswap_or_post_breakpoint = JvmtiExport::can_hotswap_or_post_breakpoint();
! _jvmti_can_access_local_variables = JvmtiExport::can_access_local_variables();
! _jvmti_can_post_on_exceptions = JvmtiExport::can_post_on_exceptions();
}
// ------------------------------------------------------------------
// Note: the logic of this method should mirror the logic of
// constantPoolOopDesc::verify_constant_pool_resolve.
--- 60,93 ----
_failure_reason(NULL),
_retryable(true)
{
// Get Jvmti capabilities under lock to get consistent values.
MutexLocker mu(JvmtiThreadState_lock);
! _jvmti_can_hotswap_or_post_breakpoint = JvmtiExport::can_hotswap_or_post_breakpoint() ? 1 : 0;
! _jvmti_can_access_local_variables = JvmtiExport::can_access_local_variables() ? 1 : 0;
! _jvmti_can_post_on_exceptions = JvmtiExport::can_post_on_exceptions() ? 1 : 0;
! _jvmti_can_pop_frame = JvmtiExport::can_pop_frame() ? 1 : 0;
! }
!
! bool JVMCIEnv::jvmti_state_changed() const {
! if (!jvmti_can_access_local_variables() &&
! JvmtiExport::can_access_local_variables()) {
! return true;
! }
! if (!jvmti_can_hotswap_or_post_breakpoint() &&
! JvmtiExport::can_hotswap_or_post_breakpoint()) {
! return true;
! }
! if (!jvmti_can_post_on_exceptions() &&
! JvmtiExport::can_post_on_exceptions()) {
! return true;
! }
! if (!jvmti_can_pop_frame() &&
! JvmtiExport::can_pop_frame()) {
! return true;
! }
! return false;
}
// ------------------------------------------------------------------
// Note: the logic of this method should mirror the logic of
// constantPoolOopDesc::verify_constant_pool_resolve.
*** 410,425 ****
// Check for changes to the system dictionary during compilation
// class loads, evolution, breakpoints
JVMCIEnv::CodeInstallResult JVMCIEnv::validate_compile_task_dependencies(Dependencies* dependencies, Handle compiled_code,
JVMCIEnv* env, char** failure_detail) {
// If JVMTI capabilities were enabled during compile, the compilation is invalidated.
! if (env != NULL) {
! if (!env->_jvmti_can_hotswap_or_post_breakpoint && JvmtiExport::can_hotswap_or_post_breakpoint()) {
! *failure_detail = (char*) "Hotswapping or breakpointing was enabled during compilation";
return JVMCIEnv::dependencies_failed;
}
- }
// Dependencies must be checked when the system dictionary changes
// or if we don't know whether it has changed (i.e., env == NULL).
bool counter_changed = env == NULL || env->_system_dictionary_modification_counter != SystemDictionary::number_of_modifications();
CompileTask* task = env == NULL ? NULL : env->task();
--- 431,444 ----
// Check for changes to the system dictionary during compilation
// class loads, evolution, breakpoints
JVMCIEnv::CodeInstallResult JVMCIEnv::validate_compile_task_dependencies(Dependencies* dependencies, Handle compiled_code,
JVMCIEnv* env, char** failure_detail) {
// If JVMTI capabilities were enabled during compile, the compilation is invalidated.
! if (env != NULL && env->jvmti_state_changed()) {
! *failure_detail = (char*) "Jvmti state change during compilation invalidated dependencies";
return JVMCIEnv::dependencies_failed;
}
// Dependencies must be checked when the system dictionary changes
// or if we don't know whether it has changed (i.e., env == NULL).
bool counter_changed = env == NULL || env->_system_dictionary_modification_counter != SystemDictionary::number_of_modifications();
CompileTask* task = env == NULL ? NULL : env->task();
< prev index next >