1 /*
2  * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * This code is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 only, as
7  * published by the Free Software Foundation.
8  *
9  * This code is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12  * version 2 for more details (a copy is included in the LICENSE file that
13  * accompanied this code).
14  *
15  * You should have received a copy of the GNU General Public License version
16  * 2 along with this work; if not, write to the Free Software Foundation,
17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20  * or visit www.oracle.com if you need additional information or have any
21  * questions.
22  *
23  */
24 
25 #include "precompiled.hpp"
26 #include "jvmtifiles/jvmtiEnv.hpp"
27 #include "memory/gcLocker.hpp"
28 #include "memory/resourceArea.hpp"
29 #include "prims/jvmtiEventController.inline.hpp"
30 #include "prims/jvmtiImpl.hpp"
31 #include "prims/jvmtiThreadState.inline.hpp"
32 #include "runtime/vframe.hpp"
33 
34 // marker for when the stack depth has been reset and is now unknown.
35 // any negative number would work but small ones might obscure an
36 // underrun error.
37 static const int UNKNOWN_STACK_DEPTH = -99;
38 
39 ///////////////////////////////////////////////////////////////
40 //
41 // class JvmtiThreadState
42 //
43 // Instances of JvmtiThreadState hang off of each thread.
44 // Thread local storage for JVMTI.
45 //
46 
47 JvmtiThreadState *JvmtiThreadState::_head = NULL;
48 
JvmtiThreadState(JavaThread * thread)49 JvmtiThreadState::JvmtiThreadState(JavaThread* thread)
50   : _thread_event_enable() {
51   assert(JvmtiThreadState_lock->is_locked(), "sanity check");
52   _thread               = thread;
53   _exception_detected   = false;
54   _exception_caught     = false;
55   _debuggable           = true;
56   _hide_single_stepping = false;
57   _hide_level           = 0;
58   _pending_step_for_popframe = false;
59   _class_being_redefined = NULL;
60   _class_load_kind = jvmti_class_load_kind_load;
61   _head_env_thread_state = NULL;
62   _dynamic_code_event_collector = NULL;
63   _vm_object_alloc_event_collector = NULL;
64   _the_class_for_redefinition_verification = NULL;
65   _scratch_class_for_redefinition_verification = NULL;
66 
67   // JVMTI ForceEarlyReturn support
68   _pending_step_for_earlyret = false;
69   _earlyret_state = earlyret_inactive;
70   _earlyret_tos = ilgl;
71   _earlyret_value.j = 0L;
72   _earlyret_oop = NULL;
73 
74   // add all the JvmtiEnvThreadState to the new JvmtiThreadState
75   {
76     JvmtiEnvIterator it;
77     for (JvmtiEnvBase* env = it.first(); env != NULL; env = it.next(env)) {
78       if (env->is_valid()) {
79         add_env(env);
80       }
81     }
82   }
83 
84   // link us into the list
85   {
86     // The thread state list manipulation code must not have safepoints.
87     // See periodic_clean_up().
88     debug_only(No_Safepoint_Verifier nosafepoint;)
89 
90     _prev = NULL;
91     _next = _head;
92     if (_head != NULL) {
93       _head->_prev = this;
94     }
95     _head = this;
96   }
97 
98   // set this as the state for the thread
99   thread->set_jvmti_thread_state(this);
100 }
101 
102 
~JvmtiThreadState()103 JvmtiThreadState::~JvmtiThreadState()   {
104   assert(JvmtiThreadState_lock->is_locked(), "sanity check");
105 
106   // clear this as the state for the thread
107   get_thread()->set_jvmti_thread_state(NULL);
108 
109   // zap our env thread states
110   {
111     JvmtiEnvBase::entering_dying_thread_env_iteration();
112     JvmtiEnvThreadStateIterator it(this);
113     for (JvmtiEnvThreadState* ets = it.first(); ets != NULL; ) {
114       JvmtiEnvThreadState* zap = ets;
115       ets = it.next(ets);
116       delete zap;
117     }
118     JvmtiEnvBase::leaving_dying_thread_env_iteration();
119   }
120 
121   // remove us from the list
122   {
123     // The thread state list manipulation code must not have safepoints.
124     // See periodic_clean_up().
125     debug_only(No_Safepoint_Verifier nosafepoint;)
126 
127     if (_prev == NULL) {
128       assert(_head == this, "sanity check");
129       _head = _next;
130     } else {
131       assert(_head != this, "sanity check");
132       _prev->_next = _next;
133     }
134     if (_next != NULL) {
135       _next->_prev = _prev;
136     }
137     _next = NULL;
138     _prev = NULL;
139   }
140 }
141 
142 
143 void
periodic_clean_up()144 JvmtiThreadState::periodic_clean_up() {
145   assert(SafepointSynchronize::is_at_safepoint(), "at safepoint");
146 
147   // This iteration is initialized with "_head" instead of "JvmtiThreadState::first()"
148   // because the latter requires the JvmtiThreadState_lock.
149   // This iteration is safe at a safepoint as well, see the No_Safepoint_Verifier
150   // asserts at all list manipulation sites.
151   for (JvmtiThreadState *state = _head; state != NULL; state = state->next()) {
152     // For each environment thread state corresponding to an invalid environment
153     // unlink it from the list and deallocate it.
154     JvmtiEnvThreadStateIterator it(state);
155     JvmtiEnvThreadState* previous_ets = NULL;
156     JvmtiEnvThreadState* ets = it.first();
157     while (ets != NULL) {
158       if (ets->get_env()->is_valid()) {
159         previous_ets = ets;
160         ets = it.next(ets);
161       } else {
162         // This one isn't valid, remove it from the list and deallocate it
163         JvmtiEnvThreadState* defunct_ets = ets;
164         ets = ets->next();
165         if (previous_ets == NULL) {
166           assert(state->head_env_thread_state() == defunct_ets, "sanity check");
167           state->set_head_env_thread_state(ets);
168         } else {
169           previous_ets->set_next(ets);
170         }
171         delete defunct_ets;
172       }
173     }
174   }
175 }
176 
add_env(JvmtiEnvBase * env)177 void JvmtiThreadState::add_env(JvmtiEnvBase *env) {
178   assert(JvmtiThreadState_lock->is_locked(), "sanity check");
179 
180   JvmtiEnvThreadState *new_ets = new JvmtiEnvThreadState(_thread, env);
181   // add this environment thread state to the end of the list (order is important)
182   {
183     // list deallocation (which occurs at a safepoint) cannot occur simultaneously
184     debug_only(No_Safepoint_Verifier nosafepoint;)
185 
186     JvmtiEnvThreadStateIterator it(this);
187     JvmtiEnvThreadState* previous_ets = NULL;
188     for (JvmtiEnvThreadState* ets = it.first(); ets != NULL; ets = it.next(ets)) {
189       previous_ets = ets;
190     }
191     if (previous_ets == NULL) {
192       set_head_env_thread_state(new_ets);
193     } else {
194       previous_ets->set_next(new_ets);
195     }
196   }
197 }
198 
199 
200 
201 
enter_interp_only_mode()202 void JvmtiThreadState::enter_interp_only_mode() {
203   assert(_thread->get_interp_only_mode() == 0, "entering interp only when mode not zero");
204   _thread->increment_interp_only_mode();
205 }
206 
207 
leave_interp_only_mode()208 void JvmtiThreadState::leave_interp_only_mode() {
209   assert(_thread->get_interp_only_mode() == 1, "leaving interp only when mode not one");
210   _thread->decrement_interp_only_mode();
211 }
212 
213 
214 // Helper routine used in several places
count_frames()215 int JvmtiThreadState::count_frames() {
216 #ifdef ASSERT
217   uint32_t debug_bits = 0;
218 #endif
219   assert(SafepointSynchronize::is_at_safepoint() ||
220          JvmtiEnv::is_thread_fully_suspended(get_thread(), false, &debug_bits),
221          "at safepoint or must be suspended");
222 
223   if (!get_thread()->has_last_Java_frame()) return 0;  // no Java frames
224 
225   ResourceMark rm;
226   RegisterMap reg_map(get_thread());
227   javaVFrame *jvf = get_thread()->last_java_vframe(&reg_map);
228   int n = 0;
229   // tty->print_cr("CSD: counting frames on %s ...",
230   //               JvmtiTrace::safe_get_thread_name(get_thread()));
231   while (jvf != NULL) {
232     Method* method = jvf->method();
233     // tty->print_cr("CSD: frame - method %s.%s - loc %d",
234     //               method->klass_name()->as_C_string(),
235     //               method->name()->as_C_string(),
236     //               jvf->bci() );
237     jvf = jvf->java_sender();
238     n++;
239   }
240   // tty->print_cr("CSD: frame count: %d", n);
241   return n;
242 }
243 
244 
invalidate_cur_stack_depth()245 void JvmtiThreadState::invalidate_cur_stack_depth() {
246   Thread *cur = Thread::current();
247   uint32_t debug_bits = 0;
248 
249   // The caller can be the VMThread at a safepoint, the current thread
250   // or the target thread must be suspended.
251   guarantee((cur->is_VM_thread() && SafepointSynchronize::is_at_safepoint()) ||
252     (JavaThread *)cur == get_thread() ||
253     JvmtiEnv::is_thread_fully_suspended(get_thread(), false, &debug_bits),
254     "sanity check");
255 
256   _cur_stack_depth = UNKNOWN_STACK_DEPTH;
257 }
258 
incr_cur_stack_depth()259 void JvmtiThreadState::incr_cur_stack_depth() {
260   guarantee(JavaThread::current() == get_thread(), "must be current thread");
261 
262   if (!is_interp_only_mode()) {
263     _cur_stack_depth = UNKNOWN_STACK_DEPTH;
264   }
265   if (_cur_stack_depth != UNKNOWN_STACK_DEPTH) {
266     ++_cur_stack_depth;
267   }
268 }
269 
decr_cur_stack_depth()270 void JvmtiThreadState::decr_cur_stack_depth() {
271   guarantee(JavaThread::current() == get_thread(), "must be current thread");
272 
273   if (!is_interp_only_mode()) {
274     _cur_stack_depth = UNKNOWN_STACK_DEPTH;
275   }
276   if (_cur_stack_depth != UNKNOWN_STACK_DEPTH) {
277     --_cur_stack_depth;
278     assert(_cur_stack_depth >= 0, "incr/decr_cur_stack_depth mismatch");
279   }
280 }
281 
cur_stack_depth()282 int JvmtiThreadState::cur_stack_depth() {
283   uint32_t debug_bits = 0;
284   guarantee(JavaThread::current() == get_thread() ||
285     JvmtiEnv::is_thread_fully_suspended(get_thread(), false, &debug_bits),
286     "must be current thread or suspended");
287 
288   if (!is_interp_only_mode() || _cur_stack_depth == UNKNOWN_STACK_DEPTH) {
289     _cur_stack_depth = count_frames();
290   } else {
291     // heavy weight assert
292     assert(_cur_stack_depth == count_frames(),
293            "cur_stack_depth out of sync");
294   }
295   return _cur_stack_depth;
296 }
297 
may_be_walked()298 bool JvmtiThreadState::may_be_walked() {
299   return (get_thread()->is_being_ext_suspended() || (JavaThread::current() == get_thread()));
300 }
301 
302 
process_pending_step_for_popframe()303 void JvmtiThreadState::process_pending_step_for_popframe() {
304   // We are single stepping as the last part of the PopFrame() dance
305   // so we have some house keeping to do.
306 
307   JavaThread *thr = get_thread();
308   if (thr->popframe_condition() != JavaThread::popframe_inactive) {
309     // If the popframe_condition field is not popframe_inactive, then
310     // we missed all of the popframe_field cleanup points:
311     //
312     // - unpack_frames() was not called (nothing to deopt)
313     // - remove_activation_preserving_args_entry() was not called
314     //   (did not get suspended in a call_vm() family call and did
315     //   not complete a call_vm() family call on the way here)
316     thr->clear_popframe_condition();
317   }
318 
319   // clearing the flag indicates we are done with the PopFrame() dance
320   clr_pending_step_for_popframe();
321 
322   // If exception was thrown in this frame, need to reset jvmti thread state.
323   // Single stepping may not get enabled correctly by the agent since
324   // exception state is passed in MethodExit event which may be sent at some
325   // time in the future. JDWP agent ignores MethodExit events if caused by
326   // an exception.
327   //
328   if (is_exception_detected()) {
329     clear_exception_detected();
330   }
331   // If step is pending for popframe then it may not be
332   // a repeat step. The new_bci and method_id is same as current_bci
333   // and current method_id after pop and step for recursive calls.
334   // Force the step by clearing the last location.
335   JvmtiEnvThreadStateIterator it(this);
336   for (JvmtiEnvThreadState* ets = it.first(); ets != NULL; ets = it.next(ets)) {
337     ets->clear_current_location();
338   }
339 }
340 
341 
342 // Class:     JvmtiThreadState
343 // Function:  update_for_pop_top_frame
344 // Description:
345 //   This function removes any frame pop notification request for
346 //   the top frame and invalidates both the current stack depth and
347 //   all cached frameIDs.
348 //
349 // Called by: PopFrame
350 //
update_for_pop_top_frame()351 void JvmtiThreadState::update_for_pop_top_frame() {
352   if (is_interp_only_mode()) {
353     // remove any frame pop notification request for the top frame
354     // in any environment
355     int popframe_number = cur_stack_depth();
356     {
357       JvmtiEnvThreadStateIterator it(this);
358       for (JvmtiEnvThreadState* ets = it.first(); ets != NULL; ets = it.next(ets)) {
359         if (ets->is_frame_pop(popframe_number)) {
360           ets->clear_frame_pop(popframe_number);
361         }
362       }
363     }
364     // force stack depth to be recalculated
365     invalidate_cur_stack_depth();
366   } else {
367     assert(!is_enabled(JVMTI_EVENT_FRAME_POP), "Must have no framepops set");
368   }
369 }
370 
371 
process_pending_step_for_earlyret()372 void JvmtiThreadState::process_pending_step_for_earlyret() {
373   // We are single stepping as the last part of the ForceEarlyReturn
374   // dance so we have some house keeping to do.
375 
376   if (is_earlyret_pending()) {
377     // If the earlyret_state field is not earlyret_inactive, then
378     // we missed all of the earlyret_field cleanup points:
379     //
380     // - remove_activation() was not called
381     //   (did not get suspended in a call_vm() family call and did
382     //   not complete a call_vm() family call on the way here)
383     //
384     // One legitimate way for us to miss all the cleanup points is
385     // if we got here right after handling a compiled return. If that
386     // is the case, then we consider our return from compiled code to
387     // complete the ForceEarlyReturn request and we clear the condition.
388     clr_earlyret_pending();
389     set_earlyret_oop(NULL);
390     clr_earlyret_value();
391   }
392 
393   // clearing the flag indicates we are done with
394   // the ForceEarlyReturn() dance
395   clr_pending_step_for_earlyret();
396 
397   // If exception was thrown in this frame, need to reset jvmti thread state.
398   // Single stepping may not get enabled correctly by the agent since
399   // exception state is passed in MethodExit event which may be sent at some
400   // time in the future. JDWP agent ignores MethodExit events if caused by
401   // an exception.
402   //
403   if (is_exception_detected()) {
404     clear_exception_detected();
405   }
406   // If step is pending for earlyret then it may not be a repeat step.
407   // The new_bci and method_id is same as current_bci and current
408   // method_id after earlyret and step for recursive calls.
409   // Force the step by clearing the last location.
410   JvmtiEnvThreadStateIterator it(this);
411   for (JvmtiEnvThreadState* ets = it.first(); ets != NULL; ets = it.next(ets)) {
412     ets->clear_current_location();
413   }
414 }
415 
oops_do(OopClosure * f)416 void JvmtiThreadState::oops_do(OopClosure* f) {
417   f->do_oop((oop*) &_earlyret_oop);
418 }
419