src/share/vm/prims/jvm.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File hotspot Sdiff src/share/vm/prims

src/share/vm/prims/jvm.cpp

Print this page




 146     TempNewSymbol privileged_action = SymbolTable::new_symbol("java/security/PrivilegedAction", CHECK);
 147     Klass* privileged_action_klass = SystemDictionary::resolve_or_fail(privileged_action, false, CHECK);
 148 
 149     Method* last_caller = NULL;
 150 
 151     while (!vfst.at_end()) {
 152       Method* m = vfst.method();
 153       if (!vfst.method()->method_holder()->is_subclass_of(SystemDictionary::ClassLoader_klass())&&
 154           !vfst.method()->method_holder()->is_subclass_of(access_controller_klass) &&
 155           !vfst.method()->method_holder()->is_subclass_of(privileged_action_klass)) {
 156         break;
 157       }
 158       last_caller = m;
 159       vfst.next();
 160     }
 161     // if this is called from Class.forName0 and that is called from Class.forName,
 162     // then print the caller of Class.forName.  If this is Class.loadClass, then print
 163     // that caller, otherwise keep quiet since this should be picked up elsewhere.
 164     bool found_it = false;
 165     if (!vfst.at_end() &&
 166         vfst.method()->method_holder()->name() == vmSymbols::java_lang_Class() &&
 167         vfst.method()->name() == vmSymbols::forName0_name()) {
 168       vfst.next();
 169       if (!vfst.at_end() &&
 170           vfst.method()->method_holder()->name() == vmSymbols::java_lang_Class() &&
 171           vfst.method()->name() == vmSymbols::forName_name()) {
 172         vfst.next();
 173         found_it = true;
 174       }
 175     } else if (last_caller != NULL &&
 176                last_caller->method_holder()->name() ==
 177                vmSymbols::java_lang_ClassLoader() &&
 178                (last_caller->name() == vmSymbols::loadClassInternal_name() ||
 179                 last_caller->name() == vmSymbols::loadClass_name())) {
 180       found_it = true;
 181     } else if (!vfst.at_end()) {
 182       if (vfst.method()->is_native()) {
 183         // JNI call
 184         found_it = true;
 185       }
 186     }
 187     if (found_it && !vfst.at_end()) {
 188       // found the caller
 189       caller = vfst.method()->method_holder();
 190       line_number = vfst.method()->line_number_from_bci(vfst.bci());
 191       if (line_number == -1) {
 192         // show method name if it's a native method
 193         trace = vfst.method()->name_and_sig_as_C_string();
 194       }
 195       Symbol* s = caller->source_file_name();
 196       if (s != NULL) {
 197         source_file = s->as_C_string();
 198       }
 199     }


2359   Method* method = InstanceKlass::cast(k)->methods()->at(method_index);
2360   return method->size_of_parameters();
2361 JVM_END
2362 
2363 
2364 JVM_QUICK_ENTRY(jint, JVM_GetMethodIxMaxStack(JNIEnv *env, jclass cls, int method_index))
2365   JVMWrapper("JVM_GetMethodIxMaxStack");
2366   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
2367   k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
2368   Method* method = InstanceKlass::cast(k)->methods()->at(method_index);
2369   return method->verifier_max_stack();
2370 JVM_END
2371 
2372 
2373 JVM_QUICK_ENTRY(jboolean, JVM_IsConstructorIx(JNIEnv *env, jclass cls, int method_index))
2374   JVMWrapper("JVM_IsConstructorIx");
2375   ResourceMark rm(THREAD);
2376   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
2377   k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
2378   Method* method = InstanceKlass::cast(k)->methods()->at(method_index);
2379   return method->name() == vmSymbols::object_initializer_name();
2380 JVM_END
2381 
2382 
2383 JVM_QUICK_ENTRY(jboolean, JVM_IsVMGeneratedMethodIx(JNIEnv *env, jclass cls, int method_index))
2384   JVMWrapper("JVM_IsVMGeneratedMethodIx");
2385   ResourceMark rm(THREAD);
2386   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
2387   k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
2388   Method* method = InstanceKlass::cast(k)->methods()->at(method_index);
2389   return method->is_overpass();
2390 JVM_END
2391 
2392 JVM_ENTRY(const char*, JVM_GetMethodIxNameUTF(JNIEnv *env, jclass cls, jint method_index))
2393   JVMWrapper("JVM_GetMethodIxIxUTF");
2394   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
2395   k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
2396   Method* method = InstanceKlass::cast(k)->methods()->at(method_index);
2397   return method->name()->as_utf8();
2398 JVM_END
2399 


2527       fatal("JVM_GetCPMethodClassNameUTF: illegal constant");
2528   }
2529   ShouldNotReachHere();
2530   return NULL;
2531 JVM_END
2532 
2533 
2534 JVM_ENTRY(jint, JVM_GetCPFieldModifiers(JNIEnv *env, jclass cls, int cp_index, jclass called_cls))
2535   JVMWrapper("JVM_GetCPFieldModifiers");
2536   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
2537   Klass* k_called = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(called_cls));
2538   k        = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
2539   k_called = JvmtiThreadState::class_to_verify_considering_redefinition(k_called, thread);
2540   ConstantPool* cp = InstanceKlass::cast(k)->constants();
2541   ConstantPool* cp_called = InstanceKlass::cast(k_called)->constants();
2542   switch (cp->tag_at(cp_index).value()) {
2543     case JVM_CONSTANT_Fieldref: {
2544       Symbol* name      = cp->uncached_name_ref_at(cp_index);
2545       Symbol* signature = cp->uncached_signature_ref_at(cp_index);
2546       for (JavaFieldStream fs(k_called); !fs.done(); fs.next()) {
2547         if (fs.name() == name && fs.signature() == signature) {
2548           return fs.access_flags().as_short() & JVM_RECOGNIZED_FIELD_MODIFIERS;
2549         }
2550       }
2551       return -1;
2552     }
2553     default:
2554       fatal("JVM_GetCPFieldModifiers: illegal constant");
2555   }
2556   ShouldNotReachHere();
2557   return 0;
2558 JVM_END
2559 
2560 
2561 JVM_QUICK_ENTRY(jint, JVM_GetCPMethodModifiers(JNIEnv *env, jclass cls, int cp_index, jclass called_cls))
2562   JVMWrapper("JVM_GetCPMethodModifiers");
2563   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
2564   Klass* k_called = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(called_cls));
2565   k        = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
2566   k_called = JvmtiThreadState::class_to_verify_considering_redefinition(k_called, thread);
2567   ConstantPool* cp = InstanceKlass::cast(k)->constants();
2568   switch (cp->tag_at(cp_index).value()) {
2569     case JVM_CONSTANT_Methodref:
2570     case JVM_CONSTANT_InterfaceMethodref: {
2571       Symbol* name      = cp->uncached_name_ref_at(cp_index);
2572       Symbol* signature = cp->uncached_signature_ref_at(cp_index);
2573       Array<Method*>* methods = InstanceKlass::cast(k_called)->methods();
2574       int methods_count = methods->length();
2575       for (int i = 0; i < methods_count; i++) {
2576         Method* method = methods->at(i);
2577         if (method->name() == name && method->signature() == signature) {
2578             return method->access_flags().as_int() & JVM_RECOGNIZED_METHOD_MODIFIERS;
2579         }
2580       }
2581       return -1;
2582     }
2583     default:
2584       fatal("JVM_GetCPMethodModifiers: illegal constant");
2585   }
2586   ShouldNotReachHere();
2587   return 0;
2588 JVM_END
2589 
2590 
2591 // Misc //////////////////////////////////////////////////////////////////////////////////////////////
2592 
2593 JVM_LEAF(void, JVM_ReleaseUTF(const char *utf))
2594   // So long as UTF8::convert_to_utf8 returns resource strings, we don't have to do anything
2595 JVM_END
2596 
2597 


3147       oop loader = holder->class_loader();
3148       if (loader != NULL && !java_lang_ClassLoader::is_trusted_loader(loader)) {
3149         return JNIHandles::make_local(env, loader);
3150       }
3151     }
3152   }
3153   return NULL;
3154 JVM_END
3155 
3156 
3157 JVM_ENTRY(jobjectArray, JVM_GetClassContext(JNIEnv *env))
3158   JVMWrapper("JVM_GetClassContext");
3159   ResourceMark rm(THREAD);
3160   JvmtiVMObjectAllocEventCollector oam;
3161   vframeStream vfst(thread);
3162 
3163   if (SystemDictionary::reflect_CallerSensitive_klass() != NULL) {
3164     // This must only be called from SecurityManager.getClassContext
3165     Method* m = vfst.method();
3166     if (!(m->method_holder() == SystemDictionary::SecurityManager_klass() &&
3167           m->name()          == vmSymbols::getClassContext_name() &&
3168           m->signature()     == vmSymbols::void_class_array_signature())) {
3169       THROW_MSG_NULL(vmSymbols::java_lang_InternalError(), "JVM_GetClassContext must only be called from SecurityManager.getClassContext");
3170     }
3171   }
3172 
3173   // Collect method holders
3174   GrowableArray<KlassHandle>* klass_array = new GrowableArray<KlassHandle>();
3175   for (; !vfst.at_end(); vfst.security_next()) {
3176     Method* m = vfst.method();
3177     // Native frames are not returned
3178     if (!m->is_ignored_by_security_stack_walk() && !m->is_native()) {
3179       Klass* holder = m->method_holder();
3180       assert(holder->is_klass(), "just checking");
3181       klass_array->append(holder);
3182     }
3183   }
3184 
3185   // Create result array of type [Ljava/lang/Class;
3186   objArrayOop result = oopFactory::new_objArray(SystemDictionary::Class_klass(), klass_array->length(), CHECK_NULL);
3187   // Fill in mirrors corresponding to method holders
3188   for (int i = 0; i < klass_array->length(); i++) {


3194 
3195 
3196 JVM_ENTRY(jint, JVM_ClassDepth(JNIEnv *env, jstring name))
3197   JVMWrapper("JVM_ClassDepth");
3198   ResourceMark rm(THREAD);
3199   Handle h_name (THREAD, JNIHandles::resolve_non_null(name));
3200   Handle class_name_str = java_lang_String::internalize_classname(h_name, CHECK_0);
3201 
3202   const char* str = java_lang_String::as_utf8_string(class_name_str());
3203   TempNewSymbol class_name_sym = SymbolTable::probe(str, (int)strlen(str));
3204   if (class_name_sym == NULL) {
3205     return -1;
3206   }
3207 
3208   int depth = 0;
3209 
3210   for(vframeStream vfst(thread); !vfst.at_end(); vfst.next()) {
3211     if (!vfst.method()->is_native()) {
3212       InstanceKlass* holder = vfst.method()->method_holder();
3213       assert(holder->is_klass(), "just checking");
3214       if (holder->name() == class_name_sym) {
3215         return depth;
3216       }
3217       depth++;
3218     }
3219   }
3220   return -1;
3221 JVM_END
3222 
3223 
3224 JVM_ENTRY(jint, JVM_ClassLoaderDepth(JNIEnv *env))
3225   JVMWrapper("JVM_ClassLoaderDepth");
3226   ResourceMark rm(THREAD);
3227   int depth = 0;
3228   for (vframeStream vfst(thread); !vfst.at_end(); vfst.next()) {
3229     // if a method in a class in a trusted loader is in a doPrivileged, return -1
3230     bool trusted = is_trusted_frame(thread, &vfst);
3231     if (trusted) return -1;
3232 
3233     Method* m = vfst.method();
3234     if (!m->is_native()) {




 146     TempNewSymbol privileged_action = SymbolTable::new_symbol("java/security/PrivilegedAction", CHECK);
 147     Klass* privileged_action_klass = SystemDictionary::resolve_or_fail(privileged_action, false, CHECK);
 148 
 149     Method* last_caller = NULL;
 150 
 151     while (!vfst.at_end()) {
 152       Method* m = vfst.method();
 153       if (!vfst.method()->method_holder()->is_subclass_of(SystemDictionary::ClassLoader_klass())&&
 154           !vfst.method()->method_holder()->is_subclass_of(access_controller_klass) &&
 155           !vfst.method()->method_holder()->is_subclass_of(privileged_action_klass)) {
 156         break;
 157       }
 158       last_caller = m;
 159       vfst.next();
 160     }
 161     // if this is called from Class.forName0 and that is called from Class.forName,
 162     // then print the caller of Class.forName.  If this is Class.loadClass, then print
 163     // that caller, otherwise keep quiet since this should be picked up elsewhere.
 164     bool found_it = false;
 165     if (!vfst.at_end() &&
 166         vfst.method()->method_holder()->name()->equals(vmSymbols::java_lang_Class()) &&
 167         vfst.method()->name()->equals(vmSymbols::forName0_name())) {
 168       vfst.next();
 169       if (!vfst.at_end() &&
 170           vfst.method()->method_holder()->name()->equals(vmSymbols::java_lang_Class()) &&
 171           vfst.method()->name()->equals(vmSymbols::forName_name())) {
 172         vfst.next();
 173         found_it = true;
 174       }
 175     } else if (last_caller != NULL &&
 176                last_caller->method_holder()->name()->equals(
 177                vmSymbols::java_lang_ClassLoader()) &&
 178                (last_caller->name()->equals(vmSymbols::loadClassInternal_name()) ||
 179                 last_caller->name()->equals(vmSymbols::loadClass_name()))) {
 180       found_it = true;
 181     } else if (!vfst.at_end()) {
 182       if (vfst.method()->is_native()) {
 183         // JNI call
 184         found_it = true;
 185       }
 186     }
 187     if (found_it && !vfst.at_end()) {
 188       // found the caller
 189       caller = vfst.method()->method_holder();
 190       line_number = vfst.method()->line_number_from_bci(vfst.bci());
 191       if (line_number == -1) {
 192         // show method name if it's a native method
 193         trace = vfst.method()->name_and_sig_as_C_string();
 194       }
 195       Symbol* s = caller->source_file_name();
 196       if (s != NULL) {
 197         source_file = s->as_C_string();
 198       }
 199     }


2359   Method* method = InstanceKlass::cast(k)->methods()->at(method_index);
2360   return method->size_of_parameters();
2361 JVM_END
2362 
2363 
2364 JVM_QUICK_ENTRY(jint, JVM_GetMethodIxMaxStack(JNIEnv *env, jclass cls, int method_index))
2365   JVMWrapper("JVM_GetMethodIxMaxStack");
2366   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
2367   k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
2368   Method* method = InstanceKlass::cast(k)->methods()->at(method_index);
2369   return method->verifier_max_stack();
2370 JVM_END
2371 
2372 
2373 JVM_QUICK_ENTRY(jboolean, JVM_IsConstructorIx(JNIEnv *env, jclass cls, int method_index))
2374   JVMWrapper("JVM_IsConstructorIx");
2375   ResourceMark rm(THREAD);
2376   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
2377   k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
2378   Method* method = InstanceKlass::cast(k)->methods()->at(method_index);
2379   return method->name()->equals(vmSymbols::object_initializer_name());
2380 JVM_END
2381 
2382 
2383 JVM_QUICK_ENTRY(jboolean, JVM_IsVMGeneratedMethodIx(JNIEnv *env, jclass cls, int method_index))
2384   JVMWrapper("JVM_IsVMGeneratedMethodIx");
2385   ResourceMark rm(THREAD);
2386   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
2387   k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
2388   Method* method = InstanceKlass::cast(k)->methods()->at(method_index);
2389   return method->is_overpass();
2390 JVM_END
2391 
2392 JVM_ENTRY(const char*, JVM_GetMethodIxNameUTF(JNIEnv *env, jclass cls, jint method_index))
2393   JVMWrapper("JVM_GetMethodIxIxUTF");
2394   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
2395   k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
2396   Method* method = InstanceKlass::cast(k)->methods()->at(method_index);
2397   return method->name()->as_utf8();
2398 JVM_END
2399 


2527       fatal("JVM_GetCPMethodClassNameUTF: illegal constant");
2528   }
2529   ShouldNotReachHere();
2530   return NULL;
2531 JVM_END
2532 
2533 
2534 JVM_ENTRY(jint, JVM_GetCPFieldModifiers(JNIEnv *env, jclass cls, int cp_index, jclass called_cls))
2535   JVMWrapper("JVM_GetCPFieldModifiers");
2536   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
2537   Klass* k_called = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(called_cls));
2538   k        = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
2539   k_called = JvmtiThreadState::class_to_verify_considering_redefinition(k_called, thread);
2540   ConstantPool* cp = InstanceKlass::cast(k)->constants();
2541   ConstantPool* cp_called = InstanceKlass::cast(k_called)->constants();
2542   switch (cp->tag_at(cp_index).value()) {
2543     case JVM_CONSTANT_Fieldref: {
2544       Symbol* name      = cp->uncached_name_ref_at(cp_index);
2545       Symbol* signature = cp->uncached_signature_ref_at(cp_index);
2546       for (JavaFieldStream fs(k_called); !fs.done(); fs.next()) {
2547         if (fs.name()->equals(name) && fs.signature()->equals(signature)) {
2548           return fs.access_flags().as_short() & JVM_RECOGNIZED_FIELD_MODIFIERS;
2549         }
2550       }
2551       return -1;
2552     }
2553     default:
2554       fatal("JVM_GetCPFieldModifiers: illegal constant");
2555   }
2556   ShouldNotReachHere();
2557   return 0;
2558 JVM_END
2559 
2560 
2561 JVM_QUICK_ENTRY(jint, JVM_GetCPMethodModifiers(JNIEnv *env, jclass cls, int cp_index, jclass called_cls))
2562   JVMWrapper("JVM_GetCPMethodModifiers");
2563   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
2564   Klass* k_called = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(called_cls));
2565   k        = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
2566   k_called = JvmtiThreadState::class_to_verify_considering_redefinition(k_called, thread);
2567   ConstantPool* cp = InstanceKlass::cast(k)->constants();
2568   switch (cp->tag_at(cp_index).value()) {
2569     case JVM_CONSTANT_Methodref:
2570     case JVM_CONSTANT_InterfaceMethodref: {
2571       Symbol* name      = cp->uncached_name_ref_at(cp_index);
2572       Symbol* signature = cp->uncached_signature_ref_at(cp_index);
2573       Array<Method*>* methods = InstanceKlass::cast(k_called)->methods();
2574       int methods_count = methods->length();
2575       for (int i = 0; i < methods_count; i++) {
2576         Method* method = methods->at(i);
2577         if (method->name()->equals(name) && method->signature()->equals(signature)) {
2578             return method->access_flags().as_int() & JVM_RECOGNIZED_METHOD_MODIFIERS;
2579         }
2580       }
2581       return -1;
2582     }
2583     default:
2584       fatal("JVM_GetCPMethodModifiers: illegal constant");
2585   }
2586   ShouldNotReachHere();
2587   return 0;
2588 JVM_END
2589 
2590 
2591 // Misc //////////////////////////////////////////////////////////////////////////////////////////////
2592 
2593 JVM_LEAF(void, JVM_ReleaseUTF(const char *utf))
2594   // So long as UTF8::convert_to_utf8 returns resource strings, we don't have to do anything
2595 JVM_END
2596 
2597 


3147       oop loader = holder->class_loader();
3148       if (loader != NULL && !java_lang_ClassLoader::is_trusted_loader(loader)) {
3149         return JNIHandles::make_local(env, loader);
3150       }
3151     }
3152   }
3153   return NULL;
3154 JVM_END
3155 
3156 
3157 JVM_ENTRY(jobjectArray, JVM_GetClassContext(JNIEnv *env))
3158   JVMWrapper("JVM_GetClassContext");
3159   ResourceMark rm(THREAD);
3160   JvmtiVMObjectAllocEventCollector oam;
3161   vframeStream vfst(thread);
3162 
3163   if (SystemDictionary::reflect_CallerSensitive_klass() != NULL) {
3164     // This must only be called from SecurityManager.getClassContext
3165     Method* m = vfst.method();
3166     if (!(m->method_holder() == SystemDictionary::SecurityManager_klass() &&
3167           m->name()->equals(vmSymbols::getClassContext_name()) &&
3168           m->signature()->equals(vmSymbols::void_class_array_signature()))) {
3169       THROW_MSG_NULL(vmSymbols::java_lang_InternalError(), "JVM_GetClassContext must only be called from SecurityManager.getClassContext");
3170     }
3171   }
3172 
3173   // Collect method holders
3174   GrowableArray<KlassHandle>* klass_array = new GrowableArray<KlassHandle>();
3175   for (; !vfst.at_end(); vfst.security_next()) {
3176     Method* m = vfst.method();
3177     // Native frames are not returned
3178     if (!m->is_ignored_by_security_stack_walk() && !m->is_native()) {
3179       Klass* holder = m->method_holder();
3180       assert(holder->is_klass(), "just checking");
3181       klass_array->append(holder);
3182     }
3183   }
3184 
3185   // Create result array of type [Ljava/lang/Class;
3186   objArrayOop result = oopFactory::new_objArray(SystemDictionary::Class_klass(), klass_array->length(), CHECK_NULL);
3187   // Fill in mirrors corresponding to method holders
3188   for (int i = 0; i < klass_array->length(); i++) {


3194 
3195 
3196 JVM_ENTRY(jint, JVM_ClassDepth(JNIEnv *env, jstring name))
3197   JVMWrapper("JVM_ClassDepth");
3198   ResourceMark rm(THREAD);
3199   Handle h_name (THREAD, JNIHandles::resolve_non_null(name));
3200   Handle class_name_str = java_lang_String::internalize_classname(h_name, CHECK_0);
3201 
3202   const char* str = java_lang_String::as_utf8_string(class_name_str());
3203   TempNewSymbol class_name_sym = SymbolTable::probe(str, (int)strlen(str));
3204   if (class_name_sym == NULL) {
3205     return -1;
3206   }
3207 
3208   int depth = 0;
3209 
3210   for(vframeStream vfst(thread); !vfst.at_end(); vfst.next()) {
3211     if (!vfst.method()->is_native()) {
3212       InstanceKlass* holder = vfst.method()->method_holder();
3213       assert(holder->is_klass(), "just checking");
3214       if (holder->name()->equals(class_name_sym)) {
3215         return depth;
3216       }
3217       depth++;
3218     }
3219   }
3220   return -1;
3221 JVM_END
3222 
3223 
3224 JVM_ENTRY(jint, JVM_ClassLoaderDepth(JNIEnv *env))
3225   JVMWrapper("JVM_ClassLoaderDepth");
3226   ResourceMark rm(THREAD);
3227   int depth = 0;
3228   for (vframeStream vfst(thread); !vfst.at_end(); vfst.next()) {
3229     // if a method in a class in a trusted loader is in a doPrivileged, return -1
3230     bool trusted = is_trusted_frame(thread, &vfst);
3231     if (trusted) return -1;
3232 
3233     Method* m = vfst.method();
3234     if (!m->is_native()) {


src/share/vm/prims/jvm.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File