Mercurial > hg > truffle
comparison src/share/vm/prims/jvmtiEnv.cpp @ 1121:98cd9901c161
6849968: 3/2 JVMTI tests fails on jdk5.0 with hs14
Summary: If a JVMTI agent asks for version 1.0, then it should get version 1.0 semantics.
Reviewed-by: dholmes, ohair
author | dcubed |
---|---|
date | Mon, 14 Dec 2009 10:05:36 -0700 |
parents | 9127aa69352e |
children | dcb15a6f342d |
comparison
equal
deleted
inserted
replaced
1120:9127aa69352e | 1121:98cd9901c161 |
---|---|
30 #define FIXLATER 0 // REMOVE this when completed. | 30 #define FIXLATER 0 // REMOVE this when completed. |
31 | 31 |
32 // FIXLATER: hook into JvmtiTrace | 32 // FIXLATER: hook into JvmtiTrace |
33 #define TraceJVMTICalls false | 33 #define TraceJVMTICalls false |
34 | 34 |
35 JvmtiEnv::JvmtiEnv() : JvmtiEnvBase() { | 35 JvmtiEnv::JvmtiEnv(jint version) : JvmtiEnvBase(version) { |
36 } | 36 } |
37 | 37 |
38 JvmtiEnv::~JvmtiEnv() { | 38 JvmtiEnv::~JvmtiEnv() { |
39 } | 39 } |
40 | 40 |
41 JvmtiEnv* | 41 JvmtiEnv* |
42 JvmtiEnv::create_a_jvmti() { | 42 JvmtiEnv::create_a_jvmti(jint version) { |
43 return new JvmtiEnv(); | 43 return new JvmtiEnv(version); |
44 } | 44 } |
45 | 45 |
46 // VM operation class to copy jni function table at safepoint. | 46 // VM operation class to copy jni function table at safepoint. |
47 // More than one java threads or jvmti agents may be reading/ | 47 // More than one java threads or jvmti agents may be reading/ |
48 // modifying jni function tables. To reduce the risk of bad | 48 // modifying jni function tables. To reduce the risk of bad |
406 JvmtiEnv::AddToBootstrapClassLoaderSearch(const char* segment) { | 406 JvmtiEnv::AddToBootstrapClassLoaderSearch(const char* segment) { |
407 jvmtiPhase phase = get_phase(); | 407 jvmtiPhase phase = get_phase(); |
408 if (phase == JVMTI_PHASE_ONLOAD) { | 408 if (phase == JVMTI_PHASE_ONLOAD) { |
409 Arguments::append_sysclasspath(segment); | 409 Arguments::append_sysclasspath(segment); |
410 return JVMTI_ERROR_NONE; | 410 return JVMTI_ERROR_NONE; |
411 } else if (use_version_1_0_semantics()) { | |
412 // This JvmtiEnv requested version 1.0 semantics and this function | |
413 // is only allowed in the ONLOAD phase in version 1.0 so we need to | |
414 // return an error here. | |
415 return JVMTI_ERROR_WRONG_PHASE; | |
411 } else if (phase == JVMTI_PHASE_LIVE) { | 416 } else if (phase == JVMTI_PHASE_LIVE) { |
412 // The phase is checked by the wrapper that called this function, | 417 // The phase is checked by the wrapper that called this function, |
413 // but this thread could be racing with the thread that is | 418 // but this thread could be racing with the thread that is |
414 // terminating the VM so we check one more time. | 419 // terminating the VM so we check one more time. |
415 | 420 |
2855 | 2860 |
2856 // method_oop - pre-checked for validity, but may be NULL meaning obsolete method | 2861 // method_oop - pre-checked for validity, but may be NULL meaning obsolete method |
2857 // is_obsolete_ptr - pre-checked for NULL | 2862 // is_obsolete_ptr - pre-checked for NULL |
2858 jvmtiError | 2863 jvmtiError |
2859 JvmtiEnv::IsMethodObsolete(methodOop method_oop, jboolean* is_obsolete_ptr) { | 2864 JvmtiEnv::IsMethodObsolete(methodOop method_oop, jboolean* is_obsolete_ptr) { |
2865 if (use_version_1_0_semantics() && | |
2866 get_capabilities()->can_redefine_classes == 0) { | |
2867 // This JvmtiEnv requested version 1.0 semantics and this function | |
2868 // requires the can_redefine_classes capability in version 1.0 so | |
2869 // we need to return an error here. | |
2870 return JVMTI_ERROR_MUST_POSSESS_CAPABILITY; | |
2871 } | |
2872 | |
2860 if (method_oop == NULL || method_oop->is_obsolete()) { | 2873 if (method_oop == NULL || method_oop->is_obsolete()) { |
2861 *is_obsolete_ptr = true; | 2874 *is_obsolete_ptr = true; |
2862 } else { | 2875 } else { |
2863 *is_obsolete_ptr = false; | 2876 *is_obsolete_ptr = false; |
2864 } | 2877 } |