< 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 >