/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*
*/
#include "precompiled.hpp"
#include "jvmtifiles/jvmtiEnv.hpp"
#include "prims/jvmtiExport.hpp"
#include "prims/jvmtiManageCapabilities.hpp"
// capabilities which are always potentially available
// capabilities which are potentially available during OnLoad
// capabilities which are always potentially available
// but to only one environment
// capabilities which are potentially available during OnLoad
// but to only one environment
// remaining capabilities which are always potentially available
// but to only one environment
// remaining capabilities which are potentially available during OnLoad
// but to only one environment
// all capabilities ever acquired
}
}
// if the capability sets are initialized in the onload phase then
// it happens before class data sharing (CDS) is initialized. If it
// turns out that CDS gets disabled then we must adjust the always
// capabilities. To ensure a consistent view of the capabililties
// anything we add here should already be in the onload set.
if (!UseSharedSpaces) {
}
}
// corresponding init functions
if (os::is_thread_cpu_time_supported()) {
}
return jc;
}
#ifndef CC_INTERP
#endif // !CC_INTERP
// jc.can_get_monitor_info = 1;
return jc;
}
return jc;
}
return jc;
}
jvmtiCapabilities *JvmtiManageCapabilities::either(const jvmtiCapabilities *a, const jvmtiCapabilities *b,
char *ap = (char *)a;
char *bp = (char *)b;
for (int i = 0; i < CAPA_SIZE; ++i) {
}
return result;
}
jvmtiCapabilities *JvmtiManageCapabilities::both(const jvmtiCapabilities *a, const jvmtiCapabilities *b,
char *ap = (char *)a;
char *bp = (char *)b;
for (int i = 0; i < CAPA_SIZE; ++i) {
}
return result;
}
jvmtiCapabilities *JvmtiManageCapabilities::exclude(const jvmtiCapabilities *a, const jvmtiCapabilities *b,
char *ap = (char *)a;
char *bp = (char *)b;
for (int i = 0; i < CAPA_SIZE; ++i) {
}
return result;
}
char *ap = (char *)a;
for (int i = 0; i < CAPA_SIZE; ++i) {
if (*ap++ != 0) {
return true;
}
}
return false;
}
void JvmtiManageCapabilities::copy_capabilities(const jvmtiCapabilities *from, jvmtiCapabilities *to) {
for (int i = 0; i < CAPA_SIZE; ++i) {
}
}
const jvmtiCapabilities *prohibited,
// exclude prohibited capabilities, must be before adding current
// must include current since it may possess solo capabilities and now prohibited
// add other remaining
// if this is during OnLoad more capabilities are available
}
}
const jvmtiCapabilities *prohibited,
const jvmtiCapabilities *desired,
// check that the capabilities being added are potential capabilities
return JVMTI_ERROR_NOT_AVAILABLE;
}
// add to the set of ever acquired capabilities
// onload capabilities that got added are now permanent - so, also remove from onload
// same for solo capabilities (transferred capabilities in the remaining sets handled as part of standard grab - below)
// remove solo capabilities that are now taken
// return the result
update();
return JVMTI_ERROR_NONE;
}
const jvmtiCapabilities *unwanted,
// can't give up what you don't have
// restore solo capabilities but only those that belong
update();
// return the result
}
// all capabilities
bool interp_events =
bool enter_all_methods =
if (enter_all_methods) {
// Disable these when tracking the bytecodes
UseFastEmptyMethods = false;
UseFastAccessorMethods = false;
}
RewriteFrequentPairs = false;
}
// If can_redefine_classes is enabled in the onload phase then we know that the
// dependency information recorded by the compiler is complete.
}
// This controls whether the compilers keep extra locals live to
// improve the debugging experience so only set them if the selected
// capabilities look like a debugger.
}
#ifndef PRODUCT
if (cap->can_tag_objects)
if (cap->can_get_bytecodes)
if (cap->can_get_monitor_info)
if (cap->can_get_constant_pool)
if (cap->can_pop_frame)
if (cap->can_force_early_return)
if (cap->can_redefine_classes)
if (cap->can_retransform_classes)
if (cap->can_signal_thread)
if (cap->can_get_source_file_name)
if (cap->can_get_line_numbers)
if (cap->can_suspend)
if (cap->can_redefine_any_class )
if (cap->can_retransform_any_class )
if (cap->can_get_thread_cpu_time)
}
#endif