6964458: Reimplement class meta-data storage to use native memory

Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes

Co-authored-by: Stefan Karlsson <stefan.karlsson@oracle.com>
Co-authored-by: Mikael Gerdin <mikael.gerdin@oracle.com>
Co-authored-by: Tom Rodriguez <tom.rodriguez@oracle.com>
Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland
This commit is contained in:
Jon Masamitsu 2012-09-01 13:25:18 -04:00 committed by Coleen Phillimore
parent 36eee7c8c8
commit 5c58d27aac
853 changed files with 26124 additions and 82956 deletions

View file

@ -30,7 +30,6 @@
#include "jvmtifiles/jvmtiEnv.hpp"
#include "memory/resourceArea.hpp"
#include "memory/universe.inline.hpp"
#include "oops/cpCacheOop.hpp"
#include "oops/instanceKlass.hpp"
#include "prims/jniCheck.hpp"
#include "prims/jvm_misc.hpp"
@ -254,7 +253,7 @@ JvmtiEnv::RetransformClasses(jint class_count, const jclass* classes) {
return JVMTI_ERROR_UNMODIFIABLE_CLASS;
}
klassOop k_oop = java_lang_Class::as_klassOop(k_mirror);
Klass* k_oop = java_lang_Class::as_Klass(k_mirror);
KlassHandle klass(current_thread, k_oop);
jint status = klass->jvmti_class_status();
@ -269,10 +268,10 @@ JvmtiEnv::RetransformClasses(jint class_count, const jclass* classes) {
if (ikh->get_cached_class_file_bytes() == NULL) {
// Not cached, we need to reconstitute the class file from the
// VM representation. We don't attach the reconstituted class
// bytes to the instanceKlass here because they have not been
// bytes to the InstanceKlass here because they have not been
// validated and we're not at a safepoint.
constantPoolHandle constants(current_thread, ikh->constants());
ObjectLocker ol(constants, current_thread); // lock constant pool while we query it
MonitorLockerEx ml(constants->lock()); // lock constant pool while we query it
JvmtiClassFileReconstituter reconstituter(ikh);
if (reconstituter.get_error() != JVMTI_ERROR_NONE) {
@ -316,14 +315,14 @@ JvmtiEnv::GetObjectSize(jobject object, jlong* size_ptr) {
oop mirror = JNIHandles::resolve_external_guard(object);
NULL_CHECK(mirror, JVMTI_ERROR_INVALID_OBJECT);
if (mirror->klass() == SystemDictionary::Class_klass()) {
if (!java_lang_Class::is_primitive(mirror)) {
mirror = java_lang_Class::as_klassOop(mirror);
assert(mirror != NULL, "class for non-primitive mirror must exist");
if (mirror->klass() == SystemDictionary::Class_klass() &&
!java_lang_Class::is_primitive(mirror)) {
Klass* k = java_lang_Class::as_Klass(mirror);
assert(k != NULL, "class for non-primitive mirror must exist");
*size_ptr = k->size() * wordSize;
} else {
*size_ptr = mirror->size() * wordSize;
}
}
*size_ptr = mirror->size() * wordSize;
return JVMTI_ERROR_NONE;
} /* end GetObjectSize */
@ -552,7 +551,7 @@ JvmtiEnv::AddToSystemClassLoaderSearch(const char* segment) {
path,
THREAD);
if (HAS_PENDING_EXCEPTION) {
Symbol* ex_name = PENDING_EXCEPTION->klass()->klass_part()->name();
Symbol* ex_name = PENDING_EXCEPTION->klass()->name();
CLEAR_PENDING_EXCEPTION;
if (ex_name == vmSymbols::java_lang_NoSuchMethodError()) {
@ -1620,7 +1619,7 @@ JvmtiEnv::ForceEarlyReturnVoid(JavaThread* java_thread) {
jvmtiError
JvmtiEnv::FollowReferences(jint heap_filter, jclass klass, jobject initial_object, const jvmtiHeapCallbacks* callbacks, const void* user_data) {
// check klass if provided
klassOop k_oop = NULL;
Klass* k_oop = NULL;
if (klass != NULL) {
oop k_mirror = JNIHandles::resolve_external_guard(klass);
if (k_mirror == NULL) {
@ -1629,7 +1628,7 @@ JvmtiEnv::FollowReferences(jint heap_filter, jclass klass, jobject initial_objec
if (java_lang_Class::is_primitive(k_mirror)) {
return JVMTI_ERROR_NONE;
}
k_oop = java_lang_Class::as_klassOop(k_mirror);
k_oop = java_lang_Class::as_Klass(k_mirror);
if (k_oop == NULL) {
return JVMTI_ERROR_INVALID_CLASS;
}
@ -1651,7 +1650,7 @@ JvmtiEnv::FollowReferences(jint heap_filter, jclass klass, jobject initial_objec
jvmtiError
JvmtiEnv::IterateThroughHeap(jint heap_filter, jclass klass, const jvmtiHeapCallbacks* callbacks, const void* user_data) {
// check klass if provided
klassOop k_oop = NULL;
Klass* k_oop = NULL;
if (klass != NULL) {
oop k_mirror = JNIHandles::resolve_external_guard(klass);
if (k_mirror == NULL) {
@ -1660,7 +1659,7 @@ JvmtiEnv::IterateThroughHeap(jint heap_filter, jclass klass, const jvmtiHeapCall
if (java_lang_Class::is_primitive(k_mirror)) {
return JVMTI_ERROR_NONE;
}
k_oop = java_lang_Class::as_klassOop(k_mirror);
k_oop = java_lang_Class::as_Klass(k_mirror);
if (k_oop == NULL) {
return JVMTI_ERROR_INVALID_CLASS;
}
@ -1762,7 +1761,7 @@ JvmtiEnv::IterateOverInstancesOfClass(oop k_mirror, jvmtiHeapObjectFilter object
// DO PRIMITIVE CLASS PROCESSING
return JVMTI_ERROR_NONE;
}
klassOop k_oop = java_lang_Class::as_klassOop(k_mirror);
Klass* k_oop = java_lang_Class::as_Klass(k_mirror);
if (k_oop == NULL) {
return JVMTI_ERROR_INVALID_CLASS;
}
@ -1989,7 +1988,7 @@ JvmtiEnv::SetLocalDouble(JavaThread* java_thread, jint depth, jint slot, jdouble
// method_oop - pre-checked for validity, but may be NULL meaning obsolete method
jvmtiError
JvmtiEnv::SetBreakpoint(methodOop method_oop, jlocation location) {
JvmtiEnv::SetBreakpoint(Method* method_oop, jlocation location) {
NULL_CHECK(method_oop, JVMTI_ERROR_INVALID_METHODID);
if (location < 0) { // simple invalid location check first
return JVMTI_ERROR_INVALID_LOCATION;
@ -2015,7 +2014,7 @@ JvmtiEnv::SetBreakpoint(methodOop method_oop, jlocation location) {
// method_oop - pre-checked for validity, but may be NULL meaning obsolete method
jvmtiError
JvmtiEnv::ClearBreakpoint(methodOop method_oop, jlocation location) {
JvmtiEnv::ClearBreakpoint(Method* method_oop, jlocation location) {
NULL_CHECK(method_oop, JVMTI_ERROR_INVALID_METHODID);
if (location < 0) { // simple invalid location check first
@ -2104,9 +2103,9 @@ jvmtiError
JvmtiEnv::GetClassSignature(oop k_mirror, char** signature_ptr, char** generic_ptr) {
ResourceMark rm;
bool isPrimitive = java_lang_Class::is_primitive(k_mirror);
klassOop k = NULL;
Klass* k = NULL;
if (!isPrimitive) {
k = java_lang_Class::as_klassOop(k_mirror);
k = java_lang_Class::as_Klass(k_mirror);
NULL_CHECK(k, JVMTI_ERROR_INVALID_CLASS);
}
if (signature_ptr != NULL) {
@ -2126,7 +2125,7 @@ JvmtiEnv::GetClassSignature(oop k_mirror, char** signature_ptr, char** generic_p
if (generic_ptr != NULL) {
*generic_ptr = NULL;
if (!isPrimitive && Klass::cast(k)->oop_is_instance()) {
Symbol* soo = instanceKlass::cast(k)->generic_signature();
Symbol* soo = InstanceKlass::cast(k)->generic_signature();
if (soo != NULL) {
const char *gen_sig = soo->as_C_string();
if (gen_sig != NULL) {
@ -2154,7 +2153,7 @@ JvmtiEnv::GetClassStatus(oop k_mirror, jint* status_ptr) {
if (java_lang_Class::is_primitive(k_mirror)) {
result |= JVMTI_CLASS_STATUS_PRIMITIVE;
} else {
klassOop k = java_lang_Class::as_klassOop(k_mirror);
Klass* k = java_lang_Class::as_Klass(k_mirror);
NULL_CHECK(k, JVMTI_ERROR_INVALID_CLASS);
result = Klass::cast(k)->jvmti_class_status();
}
@ -2171,14 +2170,14 @@ JvmtiEnv::GetSourceFileName(oop k_mirror, char** source_name_ptr) {
if (java_lang_Class::is_primitive(k_mirror)) {
return JVMTI_ERROR_ABSENT_INFORMATION;
}
klassOop k_klass = java_lang_Class::as_klassOop(k_mirror);
Klass* k_klass = java_lang_Class::as_Klass(k_mirror);
NULL_CHECK(k_klass, JVMTI_ERROR_INVALID_CLASS);
if (!Klass::cast(k_klass)->oop_is_instance()) {
return JVMTI_ERROR_ABSENT_INFORMATION;
}
Symbol* sfnOop = instanceKlass::cast(k_klass)->source_file_name();
Symbol* sfnOop = InstanceKlass::cast(k_klass)->source_file_name();
NULL_CHECK(sfnOop, JVMTI_ERROR_ABSENT_INFORMATION);
{
JavaThread* current_thread = JavaThread::current();
@ -2199,9 +2198,8 @@ JvmtiEnv::GetClassModifiers(oop k_mirror, jint* modifiers_ptr) {
JavaThread* current_thread = JavaThread::current();
jint result = 0;
if (!java_lang_Class::is_primitive(k_mirror)) {
klassOop k = java_lang_Class::as_klassOop(k_mirror);
Klass* k = java_lang_Class::as_Klass(k_mirror);
NULL_CHECK(k, JVMTI_ERROR_INVALID_CLASS);
assert((Klass::cast(k)->oop_is_instance() || Klass::cast(k)->oop_is_array()), "should be an instance or an array klass");
result = Klass::cast(k)->compute_modifier_flags(current_thread);
JavaThread* THREAD = current_thread; // pass to macros
if (HAS_PENDING_EXCEPTION) {
@ -2235,7 +2233,7 @@ JvmtiEnv::GetClassMethods(oop k_mirror, jint* method_count_ptr, jmethodID** meth
*methods_ptr = (jmethodID*) jvmtiMalloc(0 * sizeof(jmethodID));
return JVMTI_ERROR_NONE;
}
klassOop k = java_lang_Class::as_klassOop(k_mirror);
Klass* k = java_lang_Class::as_Klass(k_mirror);
NULL_CHECK(k, JVMTI_ERROR_INVALID_CLASS);
// Return CLASS_NOT_PREPARED error as per JVMTI spec.
@ -2257,8 +2255,8 @@ JvmtiEnv::GetClassMethods(oop k_mirror, jint* method_count_ptr, jmethodID** meth
// Use the original method ordering indices stored in the class, so we can emit
// jmethodIDs in the order they appeared in the class file
for (index = 0; index < result_length; index++) {
methodOop m = methodOop(instanceK_h->methods()->obj_at(index));
int original_index = instanceK_h->method_ordering()->int_at(index);
Method* m = instanceK_h->methods()->at(index);
int original_index = instanceK_h->method_ordering()->at(index);
assert(original_index >= 0 && original_index < result_length, "invalid original method index");
jmethodID id = m->jmethod_id();
result_list[original_index] = id;
@ -2266,7 +2264,7 @@ JvmtiEnv::GetClassMethods(oop k_mirror, jint* method_count_ptr, jmethodID** meth
} else {
// otherwise just copy in any order
for (index = 0; index < result_length; index++) {
methodOop m = methodOop(instanceK_h->methods()->obj_at(index));
Method* m = instanceK_h->methods()->at(index);
jmethodID id = m->jmethod_id();
result_list[index] = id;
}
@ -2291,7 +2289,7 @@ JvmtiEnv::GetClassFields(oop k_mirror, jint* field_count_ptr, jfieldID** fields_
}
JavaThread* current_thread = JavaThread::current();
HandleMark hm(current_thread);
klassOop k = java_lang_Class::as_klassOop(k_mirror);
Klass* k = java_lang_Class::as_Klass(k_mirror);
NULL_CHECK(k, JVMTI_ERROR_INVALID_CLASS);
// Return CLASS_NOT_PREPARED error as per JVMTI spec.
@ -2346,7 +2344,7 @@ JvmtiEnv::GetImplementedInterfaces(oop k_mirror, jint* interface_count_ptr, jcla
}
JavaThread* current_thread = JavaThread::current();
HandleMark hm(current_thread);
klassOop k = java_lang_Class::as_klassOop(k_mirror);
Klass* k = java_lang_Class::as_Klass(k_mirror);
NULL_CHECK(k, JVMTI_ERROR_INVALID_CLASS);
// Return CLASS_NOT_PREPARED error as per JVMTI spec.
@ -2359,15 +2357,14 @@ JvmtiEnv::GetImplementedInterfaces(oop k_mirror, jint* interface_count_ptr, jcla
return JVMTI_ERROR_NONE;
}
objArrayHandle interface_list(current_thread, instanceKlass::cast(k)->local_interfaces());
const int result_length = (interface_list.is_null() ? 0 : interface_list->length());
Array<Klass*>* interface_list = InstanceKlass::cast(k)->local_interfaces();
const int result_length = (interface_list == NULL ? 0 : interface_list->length());
jclass* result_list = (jclass*) jvmtiMalloc(result_length * sizeof(jclass));
for (int i_index = 0; i_index < result_length; i_index += 1) {
oop oop_at = interface_list->obj_at(i_index);
assert(oop_at->is_klass(), "interfaces must be klassOops");
klassOop klassOop_at = klassOop(oop_at); // ???: is there a better way?
assert(Klass::cast(klassOop_at)->is_interface(), "interfaces must be interfaces");
oop mirror_at = Klass::cast(klassOop_at)->java_mirror();
Klass* klass_at = interface_list->at(i_index);
assert(klass_at->is_klass(), "interfaces must be Klass*s");
assert(Klass::cast(klass_at)->is_interface(), "interfaces must be interfaces");
oop mirror_at = Klass::cast(klass_at)->java_mirror();
Handle handle_at = Handle(current_thread, mirror_at);
result_list[i_index] = (jclass) jni_reference(handle_at);
}
@ -2387,7 +2384,7 @@ JvmtiEnv::GetClassVersionNumbers(oop k_mirror, jint* minor_version_ptr, jint* ma
if (java_lang_Class::is_primitive(k_mirror)) {
return JVMTI_ERROR_ABSENT_INFORMATION;
}
klassOop k_oop = java_lang_Class::as_klassOop(k_mirror);
Klass* k_oop = java_lang_Class::as_Klass(k_mirror);
Thread *thread = Thread::current();
HandleMark hm(thread);
KlassHandle klass(thread, k_oop);
@ -2418,7 +2415,7 @@ JvmtiEnv::GetConstantPool(oop k_mirror, jint* constant_pool_count_ptr, jint* con
return JVMTI_ERROR_ABSENT_INFORMATION;
}
klassOop k_oop = java_lang_Class::as_klassOop(k_mirror);
Klass* k_oop = java_lang_Class::as_Klass(k_mirror);
Thread *thread = Thread::current();
HandleMark hm(thread);
ResourceMark rm(thread);
@ -2434,7 +2431,7 @@ JvmtiEnv::GetConstantPool(oop k_mirror, jint* constant_pool_count_ptr, jint* con
instanceKlassHandle ikh(thread, k_oop);
constantPoolHandle constants(thread, ikh->constants());
ObjectLocker ol(constants, thread); // lock constant pool while we query it
MonitorLockerEx ml(constants->lock()); // lock constant pool while we query it
JvmtiConstantPoolReconstituter reconstituter(ikh);
if (reconstituter.get_error() != JVMTI_ERROR_NONE) {
@ -2470,7 +2467,7 @@ JvmtiEnv::IsInterface(oop k_mirror, jboolean* is_interface_ptr) {
{
bool result = false;
if (!java_lang_Class::is_primitive(k_mirror)) {
klassOop k = java_lang_Class::as_klassOop(k_mirror);
Klass* k = java_lang_Class::as_Klass(k_mirror);
if (k != NULL && Klass::cast(k)->is_interface()) {
result = true;
}
@ -2489,7 +2486,7 @@ JvmtiEnv::IsArrayClass(oop k_mirror, jboolean* is_array_class_ptr) {
{
bool result = false;
if (!java_lang_Class::is_primitive(k_mirror)) {
klassOop k = java_lang_Class::as_klassOop(k_mirror);
Klass* k = java_lang_Class::as_Klass(k_mirror);
if (k != NULL && Klass::cast(k)->oop_is_array()) {
result = true;
}
@ -2512,7 +2509,7 @@ JvmtiEnv::GetClassLoader(oop k_mirror, jobject* classloader_ptr) {
}
JavaThread* current_thread = JavaThread::current();
HandleMark hm(current_thread);
klassOop k = java_lang_Class::as_klassOop(k_mirror);
Klass* k = java_lang_Class::as_Klass(k_mirror);
NULL_CHECK(k, JVMTI_ERROR_INVALID_CLASS);
oop result_oop = Klass::cast(k)->class_loader();
@ -2536,12 +2533,12 @@ JvmtiEnv::GetSourceDebugExtension(oop k_mirror, char** source_debug_extension_pt
if (java_lang_Class::is_primitive(k_mirror)) {
return JVMTI_ERROR_ABSENT_INFORMATION;
}
klassOop k = java_lang_Class::as_klassOop(k_mirror);
Klass* k = java_lang_Class::as_Klass(k_mirror);
NULL_CHECK(k, JVMTI_ERROR_INVALID_CLASS);
if (!Klass::cast(k)->oop_is_instance()) {
return JVMTI_ERROR_ABSENT_INFORMATION;
}
char* sde = instanceKlass::cast(k)->source_debug_extension();
char* sde = InstanceKlass::cast(k)->source_debug_extension();
NULL_CHECK(sde, JVMTI_ERROR_ABSENT_INFORMATION);
{
@ -2672,7 +2669,7 @@ JvmtiEnv::IsFieldSynthetic(fieldDescriptor* fdesc_ptr, jboolean* is_synthetic_pt
// signature_ptr - NULL is a valid value, must be checked
// generic_ptr - NULL is a valid value, must be checked
jvmtiError
JvmtiEnv::GetMethodName(methodOop method_oop, char** name_ptr, char** signature_ptr, char** generic_ptr) {
JvmtiEnv::GetMethodName(Method* method_oop, char** name_ptr, char** signature_ptr, char** generic_ptr) {
NULL_CHECK(method_oop, JVMTI_ERROR_INVALID_METHODID);
JavaThread* current_thread = JavaThread::current();
@ -2713,7 +2710,7 @@ JvmtiEnv::GetMethodName(methodOop method_oop, char** name_ptr, char** signature_
// method_oop - pre-checked for validity, but may be NULL meaning obsolete method
// declaring_class_ptr - pre-checked for NULL
jvmtiError
JvmtiEnv::GetMethodDeclaringClass(methodOop method_oop, jclass* declaring_class_ptr) {
JvmtiEnv::GetMethodDeclaringClass(Method* method_oop, jclass* declaring_class_ptr) {
NULL_CHECK(method_oop, JVMTI_ERROR_INVALID_METHODID);
(*declaring_class_ptr) = get_jni_class_non_null(method_oop->method_holder());
return JVMTI_ERROR_NONE;
@ -2723,7 +2720,7 @@ JvmtiEnv::GetMethodDeclaringClass(methodOop method_oop, jclass* declaring_class_
// method_oop - pre-checked for validity, but may be NULL meaning obsolete method
// modifiers_ptr - pre-checked for NULL
jvmtiError
JvmtiEnv::GetMethodModifiers(methodOop method_oop, jint* modifiers_ptr) {
JvmtiEnv::GetMethodModifiers(Method* method_oop, jint* modifiers_ptr) {
NULL_CHECK(method_oop, JVMTI_ERROR_INVALID_METHODID);
(*modifiers_ptr) = method_oop->access_flags().as_int() & JVM_RECOGNIZED_METHOD_MODIFIERS;
return JVMTI_ERROR_NONE;
@ -2733,7 +2730,7 @@ JvmtiEnv::GetMethodModifiers(methodOop method_oop, jint* modifiers_ptr) {
// method_oop - pre-checked for validity, but may be NULL meaning obsolete method
// max_ptr - pre-checked for NULL
jvmtiError
JvmtiEnv::GetMaxLocals(methodOop method_oop, jint* max_ptr) {
JvmtiEnv::GetMaxLocals(Method* method_oop, jint* max_ptr) {
NULL_CHECK(method_oop, JVMTI_ERROR_INVALID_METHODID);
// get max stack
(*max_ptr) = method_oop->max_locals();
@ -2744,7 +2741,7 @@ JvmtiEnv::GetMaxLocals(methodOop method_oop, jint* max_ptr) {
// method_oop - pre-checked for validity, but may be NULL meaning obsolete method
// size_ptr - pre-checked for NULL
jvmtiError
JvmtiEnv::GetArgumentsSize(methodOop method_oop, jint* size_ptr) {
JvmtiEnv::GetArgumentsSize(Method* method_oop, jint* size_ptr) {
NULL_CHECK(method_oop, JVMTI_ERROR_INVALID_METHODID);
// get size of arguments
@ -2757,7 +2754,7 @@ JvmtiEnv::GetArgumentsSize(methodOop method_oop, jint* size_ptr) {
// entry_count_ptr - pre-checked for NULL
// table_ptr - pre-checked for NULL
jvmtiError
JvmtiEnv::GetLineNumberTable(methodOop method_oop, jint* entry_count_ptr, jvmtiLineNumberEntry** table_ptr) {
JvmtiEnv::GetLineNumberTable(Method* method_oop, jint* entry_count_ptr, jvmtiLineNumberEntry** table_ptr) {
NULL_CHECK(method_oop, JVMTI_ERROR_INVALID_METHODID);
if (!method_oop->has_linenumber_table()) {
return (JVMTI_ERROR_ABSENT_INFORMATION);
@ -2799,7 +2796,7 @@ JvmtiEnv::GetLineNumberTable(methodOop method_oop, jint* entry_count_ptr, jvmtiL
// start_location_ptr - pre-checked for NULL
// end_location_ptr - pre-checked for NULL
jvmtiError
JvmtiEnv::GetMethodLocation(methodOop method_oop, jlocation* start_location_ptr, jlocation* end_location_ptr) {
JvmtiEnv::GetMethodLocation(Method* method_oop, jlocation* start_location_ptr, jlocation* end_location_ptr) {
NULL_CHECK(method_oop, JVMTI_ERROR_INVALID_METHODID);
// get start and end location
@ -2819,18 +2816,18 @@ JvmtiEnv::GetMethodLocation(methodOop method_oop, jlocation* start_location_ptr,
// entry_count_ptr - pre-checked for NULL
// table_ptr - pre-checked for NULL
jvmtiError
JvmtiEnv::GetLocalVariableTable(methodOop method_oop, jint* entry_count_ptr, jvmtiLocalVariableEntry** table_ptr) {
JvmtiEnv::GetLocalVariableTable(Method* method_oop, jint* entry_count_ptr, jvmtiLocalVariableEntry** table_ptr) {
NULL_CHECK(method_oop, JVMTI_ERROR_INVALID_METHODID);
JavaThread* current_thread = JavaThread::current();
// does the klass have any local variable information?
instanceKlass* ik = instanceKlass::cast(method_oop->method_holder());
InstanceKlass* ik = InstanceKlass::cast(method_oop->method_holder());
if (!ik->access_flags().has_localvariable_table()) {
return (JVMTI_ERROR_ABSENT_INFORMATION);
}
constantPoolOop constants = method_oop->constants();
ConstantPool* constants = method_oop->constants();
NULL_CHECK(constants, JVMTI_ERROR_ABSENT_INFORMATION);
// in the vm localvariable table representation, 6 consecutive elements in the table
@ -2896,7 +2893,7 @@ JvmtiEnv::GetLocalVariableTable(methodOop method_oop, jint* entry_count_ptr, jvm
// bytecode_count_ptr - pre-checked for NULL
// bytecodes_ptr - pre-checked for NULL
jvmtiError
JvmtiEnv::GetBytecodes(methodOop method_oop, jint* bytecode_count_ptr, unsigned char** bytecodes_ptr) {
JvmtiEnv::GetBytecodes(Method* method_oop, jint* bytecode_count_ptr, unsigned char** bytecodes_ptr) {
NULL_CHECK(method_oop, JVMTI_ERROR_INVALID_METHODID);
HandleMark hm;
@ -2918,7 +2915,7 @@ JvmtiEnv::GetBytecodes(methodOop method_oop, jint* bytecode_count_ptr, unsigned
// method_oop - pre-checked for validity, but may be NULL meaning obsolete method
// is_native_ptr - pre-checked for NULL
jvmtiError
JvmtiEnv::IsMethodNative(methodOop method_oop, jboolean* is_native_ptr) {
JvmtiEnv::IsMethodNative(Method* method_oop, jboolean* is_native_ptr) {
NULL_CHECK(method_oop, JVMTI_ERROR_INVALID_METHODID);
(*is_native_ptr) = method_oop->is_native();
return JVMTI_ERROR_NONE;
@ -2928,7 +2925,7 @@ JvmtiEnv::IsMethodNative(methodOop method_oop, jboolean* is_native_ptr) {
// method_oop - pre-checked for validity, but may be NULL meaning obsolete method
// is_synthetic_ptr - pre-checked for NULL
jvmtiError
JvmtiEnv::IsMethodSynthetic(methodOop method_oop, jboolean* is_synthetic_ptr) {
JvmtiEnv::IsMethodSynthetic(Method* method_oop, jboolean* is_synthetic_ptr) {
NULL_CHECK(method_oop, JVMTI_ERROR_INVALID_METHODID);
(*is_synthetic_ptr) = method_oop->is_synthetic();
return JVMTI_ERROR_NONE;
@ -2938,7 +2935,7 @@ JvmtiEnv::IsMethodSynthetic(methodOop method_oop, jboolean* is_synthetic_ptr) {
// method_oop - pre-checked for validity, but may be NULL meaning obsolete method
// is_obsolete_ptr - pre-checked for NULL
jvmtiError
JvmtiEnv::IsMethodObsolete(methodOop method_oop, jboolean* is_obsolete_ptr) {
JvmtiEnv::IsMethodObsolete(Method* method_oop, jboolean* is_obsolete_ptr) {
if (use_version_1_0_semantics() &&
get_capabilities()->can_redefine_classes == 0) {
// This JvmtiEnv requested version 1.0 semantics and this function