23 */ |
23 */ |
24 |
24 |
25 #include "precompiled.hpp" |
25 #include "precompiled.hpp" |
26 #include "classfile/systemDictionary.hpp" |
26 #include "classfile/systemDictionary.hpp" |
27 #include "interpreter/interpreter.hpp" |
27 #include "interpreter/interpreter.hpp" |
|
28 #include "interpreter/oopMapCache.hpp" |
28 #include "jvmtifiles/jvmtiEnv.hpp" |
29 #include "jvmtifiles/jvmtiEnv.hpp" |
29 #include "memory/resourceArea.hpp" |
30 #include "memory/resourceArea.hpp" |
30 #include "oops/instanceKlass.hpp" |
31 #include "oops/instanceKlass.hpp" |
31 #include "prims/jvmtiAgentThread.hpp" |
32 #include "prims/jvmtiAgentThread.hpp" |
32 #include "prims/jvmtiEventController.inline.hpp" |
33 #include "prims/jvmtiEventController.inline.hpp" |
742 } |
743 } |
743 return true; |
744 return true; |
744 } |
745 } |
745 |
746 |
746 void VM_GetOrSetLocal::doit() { |
747 void VM_GetOrSetLocal::doit() { |
|
748 InterpreterOopMap oop_mask; |
|
749 _jvf->method()->mask_for(_jvf->bci(), &oop_mask); |
|
750 if (oop_mask.is_dead(_index)) { |
|
751 // The local can be invalid and uninitialized in the scope of current bci |
|
752 _result = JVMTI_ERROR_INVALID_SLOT; |
|
753 return; |
|
754 } |
747 if (_set) { |
755 if (_set) { |
748 // Force deoptimization of frame if compiled because it's |
756 // Force deoptimization of frame if compiled because it's |
749 // possible the compiler emitted some locals as constant values, |
757 // possible the compiler emitted some locals as constant values, |
750 // meaning they are not mutable. |
758 // meaning they are not mutable. |
751 if (can_be_deoptimized(_jvf)) { |
759 if (can_be_deoptimized(_jvf)) { |