< prev index next >

src/hotspot/share/prims/jvmtiEnv.cpp

Print this page

2756     *source_name_ptr = (char *) jvmtiMalloc(strlen(sfncp)+1);
2757     strcpy(*source_name_ptr, sfncp);
2758   }
2759 
2760   return JVMTI_ERROR_NONE;
2761 } /* end GetSourceFileName */
2762 
2763 
2764 // k_mirror - may be primitive, this must be checked
2765 // modifiers_ptr - pre-checked for null
2766 jvmtiError
2767 JvmtiEnv::GetClassModifiers(oop k_mirror, jint* modifiers_ptr) {
2768   JavaThread* current_thread  = JavaThread::current();
2769   jint result = 0;
2770   if (!java_lang_Class::is_primitive(k_mirror)) {
2771     Klass* k = java_lang_Class::as_Klass(k_mirror);
2772     NULL_CHECK(k, JVMTI_ERROR_INVALID_CLASS);
2773     result = k->compute_modifier_flags();
2774 
2775     // Reset the deleted  ACC_SUPER bit (deleted in compute_modifier_flags()).
2776     if (k->is_super()) {
2777       result |= JVM_ACC_SUPER;
2778     }
2779   } else {
2780     result = (JVM_ACC_ABSTRACT | JVM_ACC_FINAL | JVM_ACC_PUBLIC);
2781   }
2782   *modifiers_ptr = result;
2783 
2784   return JVMTI_ERROR_NONE;
2785 } /* end GetClassModifiers */
2786 
2787 
2788 // k_mirror - may be primitive, this must be checked
2789 // method_count_ptr - pre-checked for null
2790 // methods_ptr - pre-checked for null
2791 jvmtiError
2792 JvmtiEnv::GetClassMethods(oop k_mirror, jint* method_count_ptr, jmethodID** methods_ptr) {
2793   JavaThread* current_thread  = JavaThread::current();
2794   HandleMark hm(current_thread);
2795 
2796   if (java_lang_Class::is_primitive(k_mirror)) {
2797     *method_count_ptr = 0;
2798     *methods_ptr = (jmethodID*) jvmtiMalloc(0 * sizeof(jmethodID));

2889   if (!(k->jvmti_class_status() & (JVMTI_CLASS_STATUS_PREPARED|JVMTI_CLASS_STATUS_ARRAY) )) {
2890     return JVMTI_ERROR_CLASS_NOT_PREPARED;
2891   }
2892 
2893   if (!k->is_instance_klass()) {
2894     *field_count_ptr = 0;
2895     *fields_ptr = (jfieldID*) jvmtiMalloc(0 * sizeof(jfieldID));
2896     return JVMTI_ERROR_NONE;
2897   }
2898 
2899   InstanceKlass* ik = InstanceKlass::cast(k);
2900 
2901   FilteredJavaFieldStream flds(ik);
2902 
2903   int result_count = flds.field_count();
2904 
2905   // Allocate the result and fill it in.
2906   jfieldID* result_list = (jfieldID*)jvmtiMalloc(result_count * sizeof(jfieldID));
2907   for (int i = 0; i < result_count; i++, flds.next()) {
2908     result_list[i] = jfieldIDWorkaround::to_jfieldID(ik, flds.offset(),
2909                                                      flds.access_flags().is_static());

2910   }
2911   assert(flds.done(), "just checking");
2912 
2913   // Fill in the results
2914   *field_count_ptr = result_count;
2915   *fields_ptr = result_list;
2916 
2917   return JVMTI_ERROR_NONE;
2918 } /* end GetClassFields */
2919 
2920 
2921 // k_mirror - may be primitive, this must be checked
2922 // interface_count_ptr - pre-checked for null
2923 // interfaces_ptr - pre-checked for null
2924 jvmtiError
2925 JvmtiEnv::GetImplementedInterfaces(oop k_mirror, jint* interface_count_ptr, jclass** interfaces_ptr) {
2926   {
2927     if (java_lang_Class::is_primitive(k_mirror)) {
2928       *interface_count_ptr = 0;
2929       *interfaces_ptr = (jclass*) jvmtiMalloc(0 * sizeof(jclass));
2930       return JVMTI_ERROR_NONE;
2931     }
2932     JavaThread* current_thread = JavaThread::current();
2933     HandleMark hm(current_thread);
2934     Klass* k = java_lang_Class::as_Klass(k_mirror);
2935     NULL_CHECK(k, JVMTI_ERROR_INVALID_CLASS);
2936 
2937     // Return CLASS_NOT_PREPARED error as per JVMTI spec.
2938     if (!(k->jvmti_class_status() & (JVMTI_CLASS_STATUS_PREPARED|JVMTI_CLASS_STATUS_ARRAY) ))
2939       return JVMTI_ERROR_CLASS_NOT_PREPARED;
2940 
2941     if (!k->is_instance_klass()) {
2942       *interface_count_ptr = 0;
2943       *interfaces_ptr = (jclass*) jvmtiMalloc(0 * sizeof(jclass));
2944       return JVMTI_ERROR_NONE;
2945     }
2946 
2947     Array<InstanceKlass*>* interface_list = InstanceKlass::cast(k)->local_interfaces();
2948     const int result_length = (interface_list == nullptr ? 0 : interface_list->length());

2949     jclass* result_list = (jclass*) jvmtiMalloc(result_length * sizeof(jclass));
2950     for (int i_index = 0; i_index < result_length; i_index += 1) {
2951       InstanceKlass* klass_at = interface_list->at(i_index);
2952       assert(klass_at->is_klass(), "interfaces must be Klass*s");
2953       assert(klass_at->is_interface(), "interfaces must be interfaces");
2954       oop mirror_at = klass_at->java_mirror();
2955       Handle handle_at = Handle(current_thread, mirror_at);
2956       result_list[i_index] = (jclass) jni_reference(handle_at);
2957     }
2958     *interface_count_ptr = result_length;
2959     *interfaces_ptr = result_list;
2960   }
2961 
2962   return JVMTI_ERROR_NONE;
2963 } /* end GetImplementedInterfaces */
2964 
2965 
2966 // k_mirror - may be primitive, this must be checked
2967 // minor_version_ptr - pre-checked for null
2968 // major_version_ptr - pre-checked for null

2756     *source_name_ptr = (char *) jvmtiMalloc(strlen(sfncp)+1);
2757     strcpy(*source_name_ptr, sfncp);
2758   }
2759 
2760   return JVMTI_ERROR_NONE;
2761 } /* end GetSourceFileName */
2762 
2763 
2764 // k_mirror - may be primitive, this must be checked
2765 // modifiers_ptr - pre-checked for null
2766 jvmtiError
2767 JvmtiEnv::GetClassModifiers(oop k_mirror, jint* modifiers_ptr) {
2768   JavaThread* current_thread  = JavaThread::current();
2769   jint result = 0;
2770   if (!java_lang_Class::is_primitive(k_mirror)) {
2771     Klass* k = java_lang_Class::as_Klass(k_mirror);
2772     NULL_CHECK(k, JVMTI_ERROR_INVALID_CLASS);
2773     result = k->compute_modifier_flags();
2774 
2775     // Reset the deleted  ACC_SUPER bit (deleted in compute_modifier_flags()).
2776     // if (k->is_super()) {
2777     //   result |= JVM_ACC_SUPER;
2778     // }
2779   } else {
2780     result = (JVM_ACC_ABSTRACT | JVM_ACC_FINAL | JVM_ACC_PUBLIC);
2781   }
2782   *modifiers_ptr = result;
2783 
2784   return JVMTI_ERROR_NONE;
2785 } /* end GetClassModifiers */
2786 
2787 
2788 // k_mirror - may be primitive, this must be checked
2789 // method_count_ptr - pre-checked for null
2790 // methods_ptr - pre-checked for null
2791 jvmtiError
2792 JvmtiEnv::GetClassMethods(oop k_mirror, jint* method_count_ptr, jmethodID** methods_ptr) {
2793   JavaThread* current_thread  = JavaThread::current();
2794   HandleMark hm(current_thread);
2795 
2796   if (java_lang_Class::is_primitive(k_mirror)) {
2797     *method_count_ptr = 0;
2798     *methods_ptr = (jmethodID*) jvmtiMalloc(0 * sizeof(jmethodID));

2889   if (!(k->jvmti_class_status() & (JVMTI_CLASS_STATUS_PREPARED|JVMTI_CLASS_STATUS_ARRAY) )) {
2890     return JVMTI_ERROR_CLASS_NOT_PREPARED;
2891   }
2892 
2893   if (!k->is_instance_klass()) {
2894     *field_count_ptr = 0;
2895     *fields_ptr = (jfieldID*) jvmtiMalloc(0 * sizeof(jfieldID));
2896     return JVMTI_ERROR_NONE;
2897   }
2898 
2899   InstanceKlass* ik = InstanceKlass::cast(k);
2900 
2901   FilteredJavaFieldStream flds(ik);
2902 
2903   int result_count = flds.field_count();
2904 
2905   // Allocate the result and fill it in.
2906   jfieldID* result_list = (jfieldID*)jvmtiMalloc(result_count * sizeof(jfieldID));
2907   for (int i = 0; i < result_count; i++, flds.next()) {
2908     result_list[i] = jfieldIDWorkaround::to_jfieldID(ik, flds.offset(),
2909                                                      flds.access_flags().is_static(),
2910                                                      flds.field_descriptor().is_flat());
2911   }
2912   assert(flds.done(), "just checking");
2913 
2914   // Fill in the results
2915   *field_count_ptr = result_count;
2916   *fields_ptr = result_list;
2917 
2918   return JVMTI_ERROR_NONE;
2919 } /* end GetClassFields */
2920 
2921 
2922 // k_mirror - may be primitive, this must be checked
2923 // interface_count_ptr - pre-checked for null
2924 // interfaces_ptr - pre-checked for null
2925 jvmtiError
2926 JvmtiEnv::GetImplementedInterfaces(oop k_mirror, jint* interface_count_ptr, jclass** interfaces_ptr) {
2927   {
2928     if (java_lang_Class::is_primitive(k_mirror)) {
2929       *interface_count_ptr = 0;
2930       *interfaces_ptr = (jclass*) jvmtiMalloc(0 * sizeof(jclass));
2931       return JVMTI_ERROR_NONE;
2932     }
2933     JavaThread* current_thread = JavaThread::current();
2934     HandleMark hm(current_thread);
2935     Klass* k = java_lang_Class::as_Klass(k_mirror);
2936     NULL_CHECK(k, JVMTI_ERROR_INVALID_CLASS);
2937 
2938     // Return CLASS_NOT_PREPARED error as per JVMTI spec.
2939     if (!(k->jvmti_class_status() & (JVMTI_CLASS_STATUS_PREPARED|JVMTI_CLASS_STATUS_ARRAY) ))
2940       return JVMTI_ERROR_CLASS_NOT_PREPARED;
2941 
2942     if (!k->is_instance_klass()) {
2943       *interface_count_ptr = 0;
2944       *interfaces_ptr = (jclass*) jvmtiMalloc(0 * sizeof(jclass));
2945       return JVMTI_ERROR_NONE;
2946     }
2947 
2948     InstanceKlass* ik = InstanceKlass::cast(k);
2949     Array<InstanceKlass*>* interface_list = ik->local_interfaces();
2950     int result_length = (interface_list == nullptr ? 0 : interface_list->length());
2951     jclass* result_list = (jclass*) jvmtiMalloc(result_length * sizeof(jclass));
2952     for (int i_index = 0; i_index < result_length; i_index += 1) {
2953       InstanceKlass* klass_at = interface_list->at(i_index);
2954       assert(klass_at->is_klass(), "interfaces must be Klass*s");
2955       assert(klass_at->is_interface(), "interfaces must be interfaces");
2956       oop mirror_at = klass_at->java_mirror();
2957       Handle handle_at = Handle(current_thread, mirror_at);
2958       result_list[i_index] = (jclass) jni_reference(handle_at);
2959     }
2960     *interface_count_ptr = result_length;
2961     *interfaces_ptr = result_list;
2962   }
2963 
2964   return JVMTI_ERROR_NONE;
2965 } /* end GetImplementedInterfaces */
2966 
2967 
2968 // k_mirror - may be primitive, this must be checked
2969 // minor_version_ptr - pre-checked for null
2970 // major_version_ptr - pre-checked for null
< prev index next >