deoptimization.cpp revision 2062:3582bf76420e
1/*
2 * Copyright (c) 1997, 2011, 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 "classfile/systemDictionary.hpp"
27#include "code/debugInfoRec.hpp"
28#include "code/nmethod.hpp"
29#include "code/pcDesc.hpp"
30#include "code/scopeDesc.hpp"
31#include "interpreter/bytecode.hpp"
32#include "interpreter/interpreter.hpp"
33#include "interpreter/oopMapCache.hpp"
34#include "memory/allocation.inline.hpp"
35#include "memory/oopFactory.hpp"
36#include "memory/resourceArea.hpp"
37#include "oops/methodOop.hpp"
38#include "oops/oop.inline.hpp"
39#include "prims/jvmtiThreadState.hpp"
40#include "runtime/biasedLocking.hpp"
41#include "runtime/compilationPolicy.hpp"
42#include "runtime/deoptimization.hpp"
43#include "runtime/interfaceSupport.hpp"
44#include "runtime/sharedRuntime.hpp"
45#include "runtime/signature.hpp"
46#include "runtime/stubRoutines.hpp"
47#include "runtime/thread.hpp"
48#include "runtime/vframe.hpp"
49#include "runtime/vframeArray.hpp"
50#include "runtime/vframe_hp.hpp"
51#include "utilities/events.hpp"
52#include "utilities/xmlstream.hpp"
53#ifdef TARGET_ARCH_x86
54# include "vmreg_x86.inline.hpp"
55#endif
56#ifdef TARGET_ARCH_sparc
57# include "vmreg_sparc.inline.hpp"
58#endif
59#ifdef TARGET_ARCH_zero
60# include "vmreg_zero.inline.hpp"
61#endif
62#ifdef COMPILER2
63#ifdef TARGET_ARCH_MODEL_x86_32
64# include "adfiles/ad_x86_32.hpp"
65#endif
66#ifdef TARGET_ARCH_MODEL_x86_64
67# include "adfiles/ad_x86_64.hpp"
68#endif
69#ifdef TARGET_ARCH_MODEL_sparc
70# include "adfiles/ad_sparc.hpp"
71#endif
72#ifdef TARGET_ARCH_MODEL_zero
73# include "adfiles/ad_zero.hpp"
74#endif
75#endif
76
77bool DeoptimizationMarker::_is_active = false;
78
79Deoptimization::UnrollBlock::UnrollBlock(int  size_of_deoptimized_frame,
80                                         int  caller_adjustment,
81                                         int  number_of_frames,
82                                         intptr_t* frame_sizes,
83                                         address* frame_pcs,
84                                         BasicType return_type) {
85  _size_of_deoptimized_frame = size_of_deoptimized_frame;
86  _caller_adjustment         = caller_adjustment;
87  _number_of_frames          = number_of_frames;
88  _frame_sizes               = frame_sizes;
89  _frame_pcs                 = frame_pcs;
90  _register_block            = NEW_C_HEAP_ARRAY(intptr_t, RegisterMap::reg_count * 2);
91  _return_type               = return_type;
92  // PD (x86 only)
93  _counter_temp              = 0;
94  _initial_fp                = 0;
95  _unpack_kind               = 0;
96  _sender_sp_temp            = 0;
97
98  _total_frame_sizes         = size_of_frames();
99}
100
101
102Deoptimization::UnrollBlock::~UnrollBlock() {
103  FREE_C_HEAP_ARRAY(intptr_t, _frame_sizes);
104  FREE_C_HEAP_ARRAY(intptr_t, _frame_pcs);
105  FREE_C_HEAP_ARRAY(intptr_t, _register_block);
106}
107
108
109intptr_t* Deoptimization::UnrollBlock::value_addr_at(int register_number) const {
110  assert(register_number < RegisterMap::reg_count, "checking register number");
111  return &_register_block[register_number * 2];
112}
113
114
115
116int Deoptimization::UnrollBlock::size_of_frames() const {
117  // Acount first for the adjustment of the initial frame
118  int result = _caller_adjustment;
119  for (int index = 0; index < number_of_frames(); index++) {
120    result += frame_sizes()[index];
121  }
122  return result;
123}
124
125
126void Deoptimization::UnrollBlock::print() {
127  ttyLocker ttyl;
128  tty->print_cr("UnrollBlock");
129  tty->print_cr("  size_of_deoptimized_frame = %d", _size_of_deoptimized_frame);
130  tty->print(   "  frame_sizes: ");
131  for (int index = 0; index < number_of_frames(); index++) {
132    tty->print("%d ", frame_sizes()[index]);
133  }
134  tty->cr();
135}
136
137
138// In order to make fetch_unroll_info work properly with escape
139// analysis, The method was changed from JRT_LEAF to JRT_BLOCK_ENTRY and
140// ResetNoHandleMark and HandleMark were removed from it. The actual reallocation
141// of previously eliminated objects occurs in realloc_objects, which is
142// called from the method fetch_unroll_info_helper below.
143JRT_BLOCK_ENTRY(Deoptimization::UnrollBlock*, Deoptimization::fetch_unroll_info(JavaThread* thread))
144  // It is actually ok to allocate handles in a leaf method. It causes no safepoints,
145  // but makes the entry a little slower. There is however a little dance we have to
146  // do in debug mode to get around the NoHandleMark code in the JRT_LEAF macro
147
148  // fetch_unroll_info() is called at the beginning of the deoptimization
149  // handler. Note this fact before we start generating temporary frames
150  // that can confuse an asynchronous stack walker. This counter is
151  // decremented at the end of unpack_frames().
152  thread->inc_in_deopt_handler();
153
154  return fetch_unroll_info_helper(thread);
155JRT_END
156
157
158// This is factored, since it is both called from a JRT_LEAF (deoptimization) and a JRT_ENTRY (uncommon_trap)
159Deoptimization::UnrollBlock* Deoptimization::fetch_unroll_info_helper(JavaThread* thread) {
160
161  // Note: there is a safepoint safety issue here. No matter whether we enter
162  // via vanilla deopt or uncommon trap we MUST NOT stop at a safepoint once
163  // the vframeArray is created.
164  //
165
166  // Allocate our special deoptimization ResourceMark
167  DeoptResourceMark* dmark = new DeoptResourceMark(thread);
168  assert(thread->deopt_mark() == NULL, "Pending deopt!");
169  thread->set_deopt_mark(dmark);
170
171  frame stub_frame = thread->last_frame(); // Makes stack walkable as side effect
172  RegisterMap map(thread, true);
173  RegisterMap dummy_map(thread, false);
174  // Now get the deoptee with a valid map
175  frame deoptee = stub_frame.sender(&map);
176  // Set the deoptee nmethod
177  assert(thread->deopt_nmethod() == NULL, "Pending deopt!");
178  thread->set_deopt_nmethod(deoptee.cb()->as_nmethod_or_null());
179
180  // Create a growable array of VFrames where each VFrame represents an inlined
181  // Java frame.  This storage is allocated with the usual system arena.
182  assert(deoptee.is_compiled_frame(), "Wrong frame type");
183  GrowableArray<compiledVFrame*>* chunk = new GrowableArray<compiledVFrame*>(10);
184  vframe* vf = vframe::new_vframe(&deoptee, &map, thread);
185  while (!vf->is_top()) {
186    assert(vf->is_compiled_frame(), "Wrong frame type");
187    chunk->push(compiledVFrame::cast(vf));
188    vf = vf->sender();
189  }
190  assert(vf->is_compiled_frame(), "Wrong frame type");
191  chunk->push(compiledVFrame::cast(vf));
192
193#ifdef COMPILER2
194  // Reallocate the non-escaping objects and restore their fields. Then
195  // relock objects if synchronization on them was eliminated.
196  if (DoEscapeAnalysis) {
197    if (EliminateAllocations) {
198      assert (chunk->at(0)->scope() != NULL,"expect only compiled java frames");
199      GrowableArray<ScopeValue*>* objects = chunk->at(0)->scope()->objects();
200
201      // The flag return_oop() indicates call sites which return oop
202      // in compiled code. Such sites include java method calls,
203      // runtime calls (for example, used to allocate new objects/arrays
204      // on slow code path) and any other calls generated in compiled code.
205      // It is not guaranteed that we can get such information here only
206      // by analyzing bytecode in deoptimized frames. This is why this flag
207      // is set during method compilation (see Compile::Process_OopMap_Node()).
208      bool save_oop_result = chunk->at(0)->scope()->return_oop();
209      Handle return_value;
210      if (save_oop_result) {
211        // Reallocation may trigger GC. If deoptimization happened on return from
212        // call which returns oop we need to save it since it is not in oopmap.
213        oop result = deoptee.saved_oop_result(&map);
214        assert(result == NULL || result->is_oop(), "must be oop");
215        return_value = Handle(thread, result);
216        assert(Universe::heap()->is_in_or_null(result), "must be heap pointer");
217        if (TraceDeoptimization) {
218          tty->print_cr("SAVED OOP RESULT " INTPTR_FORMAT " in thread " INTPTR_FORMAT, result, thread);
219        }
220      }
221      bool reallocated = false;
222      if (objects != NULL) {
223        JRT_BLOCK
224          reallocated = realloc_objects(thread, &deoptee, objects, THREAD);
225        JRT_END
226      }
227      if (reallocated) {
228        reassign_fields(&deoptee, &map, objects);
229#ifndef PRODUCT
230        if (TraceDeoptimization) {
231          ttyLocker ttyl;
232          tty->print_cr("REALLOC OBJECTS in thread " INTPTR_FORMAT, thread);
233          print_objects(objects);
234        }
235#endif
236      }
237      if (save_oop_result) {
238        // Restore result.
239        deoptee.set_saved_oop_result(&map, return_value());
240      }
241    }
242    if (EliminateLocks) {
243#ifndef PRODUCT
244      bool first = true;
245#endif
246      for (int i = 0; i < chunk->length(); i++) {
247        compiledVFrame* cvf = chunk->at(i);
248        assert (cvf->scope() != NULL,"expect only compiled java frames");
249        GrowableArray<MonitorInfo*>* monitors = cvf->monitors();
250        if (monitors->is_nonempty()) {
251          relock_objects(monitors, thread);
252#ifndef PRODUCT
253          if (TraceDeoptimization) {
254            ttyLocker ttyl;
255            for (int j = 0; j < monitors->length(); j++) {
256              MonitorInfo* mi = monitors->at(j);
257              if (mi->eliminated()) {
258                if (first) {
259                  first = false;
260                  tty->print_cr("RELOCK OBJECTS in thread " INTPTR_FORMAT, thread);
261                }
262                tty->print_cr("     object <" INTPTR_FORMAT "> locked", mi->owner());
263              }
264            }
265          }
266#endif
267        }
268      }
269    }
270  }
271#endif // COMPILER2
272  // Ensure that no safepoint is taken after pointers have been stored
273  // in fields of rematerialized objects.  If a safepoint occurs from here on
274  // out the java state residing in the vframeArray will be missed.
275  No_Safepoint_Verifier no_safepoint;
276
277  vframeArray* array = create_vframeArray(thread, deoptee, &map, chunk);
278
279  assert(thread->vframe_array_head() == NULL, "Pending deopt!");;
280  thread->set_vframe_array_head(array);
281
282  // Now that the vframeArray has been created if we have any deferred local writes
283  // added by jvmti then we can free up that structure as the data is now in the
284  // vframeArray
285
286  if (thread->deferred_locals() != NULL) {
287    GrowableArray<jvmtiDeferredLocalVariableSet*>* list = thread->deferred_locals();
288    int i = 0;
289    do {
290      // Because of inlining we could have multiple vframes for a single frame
291      // and several of the vframes could have deferred writes. Find them all.
292      if (list->at(i)->id() == array->original().id()) {
293        jvmtiDeferredLocalVariableSet* dlv = list->at(i);
294        list->remove_at(i);
295        // individual jvmtiDeferredLocalVariableSet are CHeapObj's
296        delete dlv;
297      } else {
298        i++;
299      }
300    } while ( i < list->length() );
301    if (list->length() == 0) {
302      thread->set_deferred_locals(NULL);
303      // free the list and elements back to C heap.
304      delete list;
305    }
306
307  }
308
309#ifndef SHARK
310  // Compute the caller frame based on the sender sp of stub_frame and stored frame sizes info.
311  CodeBlob* cb = stub_frame.cb();
312  // Verify we have the right vframeArray
313  assert(cb->frame_size() >= 0, "Unexpected frame size");
314  intptr_t* unpack_sp = stub_frame.sp() + cb->frame_size();
315
316  // If the deopt call site is a MethodHandle invoke call site we have
317  // to adjust the unpack_sp.
318  nmethod* deoptee_nm = deoptee.cb()->as_nmethod_or_null();
319  if (deoptee_nm != NULL && deoptee_nm->is_method_handle_return(deoptee.pc()))
320    unpack_sp = deoptee.unextended_sp();
321
322#ifdef ASSERT
323  assert(cb->is_deoptimization_stub() || cb->is_uncommon_trap_stub(), "just checking");
324  Events::log("fetch unroll sp " INTPTR_FORMAT, unpack_sp);
325#endif
326#else
327  intptr_t* unpack_sp = stub_frame.sender(&dummy_map).unextended_sp();
328#endif // !SHARK
329
330  // This is a guarantee instead of an assert because if vframe doesn't match
331  // we will unpack the wrong deoptimized frame and wind up in strange places
332  // where it will be very difficult to figure out what went wrong. Better
333  // to die an early death here than some very obscure death later when the
334  // trail is cold.
335  // Note: on ia64 this guarantee can be fooled by frames with no memory stack
336  // in that it will fail to detect a problem when there is one. This needs
337  // more work in tiger timeframe.
338  guarantee(array->unextended_sp() == unpack_sp, "vframe_array_head must contain the vframeArray to unpack");
339
340  int number_of_frames = array->frames();
341
342  // Compute the vframes' sizes.  Note that frame_sizes[] entries are ordered from outermost to innermost
343  // virtual activation, which is the reverse of the elements in the vframes array.
344  intptr_t* frame_sizes = NEW_C_HEAP_ARRAY(intptr_t, number_of_frames);
345  // +1 because we always have an interpreter return address for the final slot.
346  address* frame_pcs = NEW_C_HEAP_ARRAY(address, number_of_frames + 1);
347  int callee_parameters = 0;
348  int callee_locals = 0;
349  int popframe_extra_args = 0;
350  // Create an interpreter return address for the stub to use as its return
351  // address so the skeletal frames are perfectly walkable
352  frame_pcs[number_of_frames] = Interpreter::deopt_entry(vtos, 0);
353
354  // PopFrame requires that the preserved incoming arguments from the recently-popped topmost
355  // activation be put back on the expression stack of the caller for reexecution
356  if (JvmtiExport::can_pop_frame() && thread->popframe_forcing_deopt_reexecution()) {
357    popframe_extra_args = in_words(thread->popframe_preserved_args_size_in_words());
358  }
359
360  //
361  // frame_sizes/frame_pcs[0] oldest frame (int or c2i)
362  // frame_sizes/frame_pcs[1] next oldest frame (int)
363  // frame_sizes/frame_pcs[n] youngest frame (int)
364  //
365  // Now a pc in frame_pcs is actually the return address to the frame's caller (a frame
366  // owns the space for the return address to it's caller).  Confusing ain't it.
367  //
368  // The vframe array can address vframes with indices running from
369  // 0.._frames-1. Index  0 is the youngest frame and _frame - 1 is the oldest (root) frame.
370  // When we create the skeletal frames we need the oldest frame to be in the zero slot
371  // in the frame_sizes/frame_pcs so the assembly code can do a trivial walk.
372  // so things look a little strange in this loop.
373  //
374  for (int index = 0; index < array->frames(); index++ ) {
375    // frame[number_of_frames - 1 ] = on_stack_size(youngest)
376    // frame[number_of_frames - 2 ] = on_stack_size(sender(youngest))
377    // frame[number_of_frames - 3 ] = on_stack_size(sender(sender(youngest)))
378    frame_sizes[number_of_frames - 1 - index] = BytesPerWord * array->element(index)->on_stack_size(callee_parameters,
379                                                                                                    callee_locals,
380                                                                                                    index == 0,
381                                                                                                    popframe_extra_args);
382    // This pc doesn't have to be perfect just good enough to identify the frame
383    // as interpreted so the skeleton frame will be walkable
384    // The correct pc will be set when the skeleton frame is completely filled out
385    // The final pc we store in the loop is wrong and will be overwritten below
386    frame_pcs[number_of_frames - 1 - index ] = Interpreter::deopt_entry(vtos, 0) - frame::pc_return_offset;
387
388    callee_parameters = array->element(index)->method()->size_of_parameters();
389    callee_locals = array->element(index)->method()->max_locals();
390    popframe_extra_args = 0;
391  }
392
393  // Compute whether the root vframe returns a float or double value.
394  BasicType return_type;
395  {
396    HandleMark hm;
397    methodHandle method(thread, array->element(0)->method());
398    Bytecode_invoke invoke = Bytecode_invoke_check(method, array->element(0)->bci());
399    return_type = invoke.is_valid() ? invoke.result_type() : T_ILLEGAL;
400  }
401
402  // Compute information for handling adapters and adjusting the frame size of the caller.
403  int caller_adjustment = 0;
404
405  // Find the current pc for sender of the deoptee. Since the sender may have been deoptimized
406  // itself since the deoptee vframeArray was created we must get a fresh value of the pc rather
407  // than simply use array->sender.pc(). This requires us to walk the current set of frames
408  //
409  frame deopt_sender = stub_frame.sender(&dummy_map); // First is the deoptee frame
410  deopt_sender = deopt_sender.sender(&dummy_map);     // Now deoptee caller
411
412  // Compute the amount the oldest interpreter frame will have to adjust
413  // its caller's stack by. If the caller is a compiled frame then
414  // we pretend that the callee has no parameters so that the
415  // extension counts for the full amount of locals and not just
416  // locals-parms. This is because without a c2i adapter the parm
417  // area as created by the compiled frame will not be usable by
418  // the interpreter. (Depending on the calling convention there
419  // may not even be enough space).
420
421  // QQQ I'd rather see this pushed down into last_frame_adjust
422  // and have it take the sender (aka caller).
423
424  if (deopt_sender.is_compiled_frame()) {
425    caller_adjustment = last_frame_adjust(0, callee_locals);
426  } else if (callee_locals > callee_parameters) {
427    // The caller frame may need extending to accommodate
428    // non-parameter locals of the first unpacked interpreted frame.
429    // Compute that adjustment.
430    caller_adjustment = last_frame_adjust(callee_parameters, callee_locals);
431  }
432
433
434  // If the sender is deoptimized the we must retrieve the address of the handler
435  // since the frame will "magically" show the original pc before the deopt
436  // and we'd undo the deopt.
437
438  frame_pcs[0] = deopt_sender.raw_pc();
439
440#ifndef SHARK
441  assert(CodeCache::find_blob_unsafe(frame_pcs[0]) != NULL, "bad pc");
442#endif // SHARK
443
444  UnrollBlock* info = new UnrollBlock(array->frame_size() * BytesPerWord,
445                                      caller_adjustment * BytesPerWord,
446                                      number_of_frames,
447                                      frame_sizes,
448                                      frame_pcs,
449                                      return_type);
450#if defined(IA32) || defined(AMD64)
451  // We need a way to pass fp to the unpacking code so the skeletal frames
452  // come out correct. This is only needed for x86 because of c2 using ebp
453  // as an allocatable register. So this update is useless (and harmless)
454  // on the other platforms. It would be nice to do this in a different
455  // way but even the old style deoptimization had a problem with deriving
456  // this value. NEEDS_CLEANUP
457  // Note: now that c1 is using c2's deopt blob we must do this on all
458  // x86 based platforms
459  intptr_t** fp_addr = (intptr_t**) (((address)info) + info->initial_fp_offset_in_bytes());
460  *fp_addr = array->sender().fp(); // was adapter_caller
461#endif /* IA32 || AMD64 */
462
463  if (array->frames() > 1) {
464    if (VerifyStack && TraceDeoptimization) {
465      tty->print_cr("Deoptimizing method containing inlining");
466    }
467  }
468
469  array->set_unroll_block(info);
470  return info;
471}
472
473// Called to cleanup deoptimization data structures in normal case
474// after unpacking to stack and when stack overflow error occurs
475void Deoptimization::cleanup_deopt_info(JavaThread *thread,
476                                        vframeArray *array) {
477
478  // Get array if coming from exception
479  if (array == NULL) {
480    array = thread->vframe_array_head();
481  }
482  thread->set_vframe_array_head(NULL);
483
484  // Free the previous UnrollBlock
485  vframeArray* old_array = thread->vframe_array_last();
486  thread->set_vframe_array_last(array);
487
488  if (old_array != NULL) {
489    UnrollBlock* old_info = old_array->unroll_block();
490    old_array->set_unroll_block(NULL);
491    delete old_info;
492    delete old_array;
493  }
494
495  // Deallocate any resource creating in this routine and any ResourceObjs allocated
496  // inside the vframeArray (StackValueCollections)
497
498  delete thread->deopt_mark();
499  thread->set_deopt_mark(NULL);
500  thread->set_deopt_nmethod(NULL);
501
502
503  if (JvmtiExport::can_pop_frame()) {
504#ifndef CC_INTERP
505    // Regardless of whether we entered this routine with the pending
506    // popframe condition bit set, we should always clear it now
507    thread->clear_popframe_condition();
508#else
509    // C++ interpeter will clear has_pending_popframe when it enters
510    // with method_resume. For deopt_resume2 we clear it now.
511    if (thread->popframe_forcing_deopt_reexecution())
512        thread->clear_popframe_condition();
513#endif /* CC_INTERP */
514  }
515
516  // unpack_frames() is called at the end of the deoptimization handler
517  // and (in C2) at the end of the uncommon trap handler. Note this fact
518  // so that an asynchronous stack walker can work again. This counter is
519  // incremented at the beginning of fetch_unroll_info() and (in C2) at
520  // the beginning of uncommon_trap().
521  thread->dec_in_deopt_handler();
522}
523
524
525// Return BasicType of value being returned
526JRT_LEAF(BasicType, Deoptimization::unpack_frames(JavaThread* thread, int exec_mode))
527
528  // We are already active int he special DeoptResourceMark any ResourceObj's we
529  // allocate will be freed at the end of the routine.
530
531  // It is actually ok to allocate handles in a leaf method. It causes no safepoints,
532  // but makes the entry a little slower. There is however a little dance we have to
533  // do in debug mode to get around the NoHandleMark code in the JRT_LEAF macro
534  ResetNoHandleMark rnhm; // No-op in release/product versions
535  HandleMark hm;
536
537  frame stub_frame = thread->last_frame();
538
539  // Since the frame to unpack is the top frame of this thread, the vframe_array_head
540  // must point to the vframeArray for the unpack frame.
541  vframeArray* array = thread->vframe_array_head();
542
543#ifndef PRODUCT
544  if (TraceDeoptimization) {
545    tty->print_cr("DEOPT UNPACKING thread " INTPTR_FORMAT " vframeArray " INTPTR_FORMAT " mode %d", thread, array, exec_mode);
546  }
547#endif
548
549  UnrollBlock* info = array->unroll_block();
550
551  // Unpack the interpreter frames and any adapter frame (c2 only) we might create.
552  array->unpack_to_stack(stub_frame, exec_mode);
553
554  BasicType bt = info->return_type();
555
556  // If we have an exception pending, claim that the return type is an oop
557  // so the deopt_blob does not overwrite the exception_oop.
558
559  if (exec_mode == Unpack_exception)
560    bt = T_OBJECT;
561
562  // Cleanup thread deopt data
563  cleanup_deopt_info(thread, array);
564
565#ifndef PRODUCT
566  if (VerifyStack) {
567    ResourceMark res_mark;
568
569    // Verify that the just-unpacked frames match the interpreter's
570    // notions of expression stack and locals
571    vframeArray* cur_array = thread->vframe_array_last();
572    RegisterMap rm(thread, false);
573    rm.set_include_argument_oops(false);
574    bool is_top_frame = true;
575    int callee_size_of_parameters = 0;
576    int callee_max_locals = 0;
577    for (int i = 0; i < cur_array->frames(); i++) {
578      vframeArrayElement* el = cur_array->element(i);
579      frame* iframe = el->iframe();
580      guarantee(iframe->is_interpreted_frame(), "Wrong frame type");
581
582      // Get the oop map for this bci
583      InterpreterOopMap mask;
584      int cur_invoke_parameter_size = 0;
585      bool try_next_mask = false;
586      int next_mask_expression_stack_size = -1;
587      int top_frame_expression_stack_adjustment = 0;
588      methodHandle mh(thread, iframe->interpreter_frame_method());
589      OopMapCache::compute_one_oop_map(mh, iframe->interpreter_frame_bci(), &mask);
590      BytecodeStream str(mh);
591      str.set_start(iframe->interpreter_frame_bci());
592      int max_bci = mh->code_size();
593      // Get to the next bytecode if possible
594      assert(str.bci() < max_bci, "bci in interpreter frame out of bounds");
595      // Check to see if we can grab the number of outgoing arguments
596      // at an uncommon trap for an invoke (where the compiler
597      // generates debug info before the invoke has executed)
598      Bytecodes::Code cur_code = str.next();
599      if (cur_code == Bytecodes::_invokevirtual ||
600          cur_code == Bytecodes::_invokespecial ||
601          cur_code == Bytecodes::_invokestatic  ||
602          cur_code == Bytecodes::_invokeinterface) {
603        Bytecode_invoke invoke(mh, iframe->interpreter_frame_bci());
604        Symbol* signature = invoke.signature();
605        ArgumentSizeComputer asc(signature);
606        cur_invoke_parameter_size = asc.size();
607        if (cur_code != Bytecodes::_invokestatic) {
608          // Add in receiver
609          ++cur_invoke_parameter_size;
610        }
611      }
612      if (str.bci() < max_bci) {
613        Bytecodes::Code bc = str.next();
614        if (bc >= 0) {
615          // The interpreter oop map generator reports results before
616          // the current bytecode has executed except in the case of
617          // calls. It seems to be hard to tell whether the compiler
618          // has emitted debug information matching the "state before"
619          // a given bytecode or the state after, so we try both
620          switch (cur_code) {
621            case Bytecodes::_invokevirtual:
622            case Bytecodes::_invokespecial:
623            case Bytecodes::_invokestatic:
624            case Bytecodes::_invokeinterface:
625            case Bytecodes::_athrow:
626              break;
627            default: {
628              InterpreterOopMap next_mask;
629              OopMapCache::compute_one_oop_map(mh, str.bci(), &next_mask);
630              next_mask_expression_stack_size = next_mask.expression_stack_size();
631              // Need to subtract off the size of the result type of
632              // the bytecode because this is not described in the
633              // debug info but returned to the interpreter in the TOS
634              // caching register
635              BasicType bytecode_result_type = Bytecodes::result_type(cur_code);
636              if (bytecode_result_type != T_ILLEGAL) {
637                top_frame_expression_stack_adjustment = type2size[bytecode_result_type];
638              }
639              assert(top_frame_expression_stack_adjustment >= 0, "");
640              try_next_mask = true;
641              break;
642            }
643          }
644        }
645      }
646
647      // Verify stack depth and oops in frame
648      // This assertion may be dependent on the platform we're running on and may need modification (tested on x86 and sparc)
649      if (!(
650            /* SPARC */
651            (iframe->interpreter_frame_expression_stack_size() == mask.expression_stack_size() + callee_size_of_parameters) ||
652            /* x86 */
653            (iframe->interpreter_frame_expression_stack_size() == mask.expression_stack_size() + callee_max_locals) ||
654            (try_next_mask &&
655             (iframe->interpreter_frame_expression_stack_size() == (next_mask_expression_stack_size -
656                                                                    top_frame_expression_stack_adjustment))) ||
657            (is_top_frame && (exec_mode == Unpack_exception) && iframe->interpreter_frame_expression_stack_size() == 0) ||
658            (is_top_frame && (exec_mode == Unpack_uncommon_trap || exec_mode == Unpack_reexecute) &&
659             (iframe->interpreter_frame_expression_stack_size() == mask.expression_stack_size() + cur_invoke_parameter_size))
660            )) {
661        ttyLocker ttyl;
662
663        // Print out some information that will help us debug the problem
664        tty->print_cr("Wrong number of expression stack elements during deoptimization");
665        tty->print_cr("  Error occurred while verifying frame %d (0..%d, 0 is topmost)", i, cur_array->frames() - 1);
666        tty->print_cr("  Fabricated interpreter frame had %d expression stack elements",
667                      iframe->interpreter_frame_expression_stack_size());
668        tty->print_cr("  Interpreter oop map had %d expression stack elements", mask.expression_stack_size());
669        tty->print_cr("  try_next_mask = %d", try_next_mask);
670        tty->print_cr("  next_mask_expression_stack_size = %d", next_mask_expression_stack_size);
671        tty->print_cr("  callee_size_of_parameters = %d", callee_size_of_parameters);
672        tty->print_cr("  callee_max_locals = %d", callee_max_locals);
673        tty->print_cr("  top_frame_expression_stack_adjustment = %d", top_frame_expression_stack_adjustment);
674        tty->print_cr("  exec_mode = %d", exec_mode);
675        tty->print_cr("  cur_invoke_parameter_size = %d", cur_invoke_parameter_size);
676        tty->print_cr("  Thread = " INTPTR_FORMAT ", thread ID = " UINTX_FORMAT, thread, thread->osthread()->thread_id());
677        tty->print_cr("  Interpreted frames:");
678        for (int k = 0; k < cur_array->frames(); k++) {
679          vframeArrayElement* el = cur_array->element(k);
680          tty->print_cr("    %s (bci %d)", el->method()->name_and_sig_as_C_string(), el->bci());
681        }
682        cur_array->print_on_2(tty);
683        guarantee(false, "wrong number of expression stack elements during deopt");
684      }
685      VerifyOopClosure verify;
686      iframe->oops_interpreted_do(&verify, &rm, false);
687      callee_size_of_parameters = mh->size_of_parameters();
688      callee_max_locals = mh->max_locals();
689      is_top_frame = false;
690    }
691  }
692#endif /* !PRODUCT */
693
694
695  return bt;
696JRT_END
697
698
699int Deoptimization::deoptimize_dependents() {
700  Threads::deoptimized_wrt_marked_nmethods();
701  return 0;
702}
703
704
705#ifdef COMPILER2
706bool Deoptimization::realloc_objects(JavaThread* thread, frame* fr, GrowableArray<ScopeValue*>* objects, TRAPS) {
707  Handle pending_exception(thread->pending_exception());
708  const char* exception_file = thread->exception_file();
709  int exception_line = thread->exception_line();
710  thread->clear_pending_exception();
711
712  for (int i = 0; i < objects->length(); i++) {
713    assert(objects->at(i)->is_object(), "invalid debug information");
714    ObjectValue* sv = (ObjectValue*) objects->at(i);
715
716    KlassHandle k(((ConstantOopReadValue*) sv->klass())->value()());
717    oop obj = NULL;
718
719    if (k->oop_is_instance()) {
720      instanceKlass* ik = instanceKlass::cast(k());
721      obj = ik->allocate_instance(CHECK_(false));
722    } else if (k->oop_is_typeArray()) {
723      typeArrayKlass* ak = typeArrayKlass::cast(k());
724      assert(sv->field_size() % type2size[ak->element_type()] == 0, "non-integral array length");
725      int len = sv->field_size() / type2size[ak->element_type()];
726      obj = ak->allocate(len, CHECK_(false));
727    } else if (k->oop_is_objArray()) {
728      objArrayKlass* ak = objArrayKlass::cast(k());
729      obj = ak->allocate(sv->field_size(), CHECK_(false));
730    }
731
732    assert(obj != NULL, "allocation failed");
733    assert(sv->value().is_null(), "redundant reallocation");
734    sv->set_value(obj);
735  }
736
737  if (pending_exception.not_null()) {
738    thread->set_pending_exception(pending_exception(), exception_file, exception_line);
739  }
740
741  return true;
742}
743
744// This assumes that the fields are stored in ObjectValue in the same order
745// they are yielded by do_nonstatic_fields.
746class FieldReassigner: public FieldClosure {
747  frame* _fr;
748  RegisterMap* _reg_map;
749  ObjectValue* _sv;
750  instanceKlass* _ik;
751  oop _obj;
752
753  int _i;
754public:
755  FieldReassigner(frame* fr, RegisterMap* reg_map, ObjectValue* sv, oop obj) :
756    _fr(fr), _reg_map(reg_map), _sv(sv), _obj(obj), _i(0) {}
757
758  int i() const { return _i; }
759
760
761  void do_field(fieldDescriptor* fd) {
762    intptr_t val;
763    StackValue* value =
764      StackValue::create_stack_value(_fr, _reg_map, _sv->field_at(i()));
765    int offset = fd->offset();
766    switch (fd->field_type()) {
767    case T_OBJECT: case T_ARRAY:
768      assert(value->type() == T_OBJECT, "Agreement.");
769      _obj->obj_field_put(offset, value->get_obj()());
770      break;
771
772    case T_LONG: case T_DOUBLE: {
773      assert(value->type() == T_INT, "Agreement.");
774      StackValue* low =
775        StackValue::create_stack_value(_fr, _reg_map, _sv->field_at(++_i));
776#ifdef _LP64
777      jlong res = (jlong)low->get_int();
778#else
779#ifdef SPARC
780      // For SPARC we have to swap high and low words.
781      jlong res = jlong_from((jint)low->get_int(), (jint)value->get_int());
782#else
783      jlong res = jlong_from((jint)value->get_int(), (jint)low->get_int());
784#endif //SPARC
785#endif
786      _obj->long_field_put(offset, res);
787      break;
788    }
789    // Have to cast to INT (32 bits) pointer to avoid little/big-endian problem.
790    case T_INT: case T_FLOAT: // 4 bytes.
791      assert(value->type() == T_INT, "Agreement.");
792      val = value->get_int();
793      _obj->int_field_put(offset, (jint)*((jint*)&val));
794      break;
795
796    case T_SHORT: case T_CHAR: // 2 bytes
797      assert(value->type() == T_INT, "Agreement.");
798      val = value->get_int();
799      _obj->short_field_put(offset, (jshort)*((jint*)&val));
800      break;
801
802    case T_BOOLEAN: case T_BYTE: // 1 byte
803      assert(value->type() == T_INT, "Agreement.");
804      val = value->get_int();
805      _obj->bool_field_put(offset, (jboolean)*((jint*)&val));
806      break;
807
808    default:
809      ShouldNotReachHere();
810    }
811    _i++;
812  }
813};
814
815// restore elements of an eliminated type array
816void Deoptimization::reassign_type_array_elements(frame* fr, RegisterMap* reg_map, ObjectValue* sv, typeArrayOop obj, BasicType type) {
817  int index = 0;
818  intptr_t val;
819
820  for (int i = 0; i < sv->field_size(); i++) {
821    StackValue* value = StackValue::create_stack_value(fr, reg_map, sv->field_at(i));
822    switch(type) {
823    case T_LONG: case T_DOUBLE: {
824      assert(value->type() == T_INT, "Agreement.");
825      StackValue* low =
826        StackValue::create_stack_value(fr, reg_map, sv->field_at(++i));
827#ifdef _LP64
828      jlong res = (jlong)low->get_int();
829#else
830#ifdef SPARC
831      // For SPARC we have to swap high and low words.
832      jlong res = jlong_from((jint)low->get_int(), (jint)value->get_int());
833#else
834      jlong res = jlong_from((jint)value->get_int(), (jint)low->get_int());
835#endif //SPARC
836#endif
837      obj->long_at_put(index, res);
838      break;
839    }
840
841    // Have to cast to INT (32 bits) pointer to avoid little/big-endian problem.
842    case T_INT: case T_FLOAT: // 4 bytes.
843      assert(value->type() == T_INT, "Agreement.");
844      val = value->get_int();
845      obj->int_at_put(index, (jint)*((jint*)&val));
846      break;
847
848    case T_SHORT: case T_CHAR: // 2 bytes
849      assert(value->type() == T_INT, "Agreement.");
850      val = value->get_int();
851      obj->short_at_put(index, (jshort)*((jint*)&val));
852      break;
853
854    case T_BOOLEAN: case T_BYTE: // 1 byte
855      assert(value->type() == T_INT, "Agreement.");
856      val = value->get_int();
857      obj->bool_at_put(index, (jboolean)*((jint*)&val));
858      break;
859
860      default:
861        ShouldNotReachHere();
862    }
863    index++;
864  }
865}
866
867
868// restore fields of an eliminated object array
869void Deoptimization::reassign_object_array_elements(frame* fr, RegisterMap* reg_map, ObjectValue* sv, objArrayOop obj) {
870  for (int i = 0; i < sv->field_size(); i++) {
871    StackValue* value = StackValue::create_stack_value(fr, reg_map, sv->field_at(i));
872    assert(value->type() == T_OBJECT, "object element expected");
873    obj->obj_at_put(i, value->get_obj()());
874  }
875}
876
877
878// restore fields of all eliminated objects and arrays
879void Deoptimization::reassign_fields(frame* fr, RegisterMap* reg_map, GrowableArray<ScopeValue*>* objects) {
880  for (int i = 0; i < objects->length(); i++) {
881    ObjectValue* sv = (ObjectValue*) objects->at(i);
882    KlassHandle k(((ConstantOopReadValue*) sv->klass())->value()());
883    Handle obj = sv->value();
884    assert(obj.not_null(), "reallocation was missed");
885
886    if (k->oop_is_instance()) {
887      instanceKlass* ik = instanceKlass::cast(k());
888      FieldReassigner reassign(fr, reg_map, sv, obj());
889      ik->do_nonstatic_fields(&reassign);
890    } else if (k->oop_is_typeArray()) {
891      typeArrayKlass* ak = typeArrayKlass::cast(k());
892      reassign_type_array_elements(fr, reg_map, sv, (typeArrayOop) obj(), ak->element_type());
893    } else if (k->oop_is_objArray()) {
894      reassign_object_array_elements(fr, reg_map, sv, (objArrayOop) obj());
895    }
896  }
897}
898
899
900// relock objects for which synchronization was eliminated
901void Deoptimization::relock_objects(GrowableArray<MonitorInfo*>* monitors, JavaThread* thread) {
902  for (int i = 0; i < monitors->length(); i++) {
903    MonitorInfo* mon_info = monitors->at(i);
904    if (mon_info->eliminated()) {
905      assert(mon_info->owner() != NULL, "reallocation was missed");
906      Handle obj = Handle(mon_info->owner());
907      markOop mark = obj->mark();
908      if (UseBiasedLocking && mark->has_bias_pattern()) {
909        // New allocated objects may have the mark set to anonymously biased.
910        // Also the deoptimized method may called methods with synchronization
911        // where the thread-local object is bias locked to the current thread.
912        assert(mark->is_biased_anonymously() ||
913               mark->biased_locker() == thread, "should be locked to current thread");
914        // Reset mark word to unbiased prototype.
915        markOop unbiased_prototype = markOopDesc::prototype()->set_age(mark->age());
916        obj->set_mark(unbiased_prototype);
917      }
918      BasicLock* lock = mon_info->lock();
919      ObjectSynchronizer::slow_enter(obj, lock, thread);
920    }
921    assert(mon_info->owner()->is_locked(), "object must be locked now");
922  }
923}
924
925
926#ifndef PRODUCT
927// print information about reallocated objects
928void Deoptimization::print_objects(GrowableArray<ScopeValue*>* objects) {
929  fieldDescriptor fd;
930
931  for (int i = 0; i < objects->length(); i++) {
932    ObjectValue* sv = (ObjectValue*) objects->at(i);
933    KlassHandle k(((ConstantOopReadValue*) sv->klass())->value()());
934    Handle obj = sv->value();
935
936    tty->print("     object <" INTPTR_FORMAT "> of type ", sv->value()());
937    k->as_klassOop()->print_value();
938    tty->print(" allocated (%d bytes)", obj->size() * HeapWordSize);
939    tty->cr();
940
941    if (Verbose) {
942      k->oop_print_on(obj(), tty);
943    }
944  }
945}
946#endif
947#endif // COMPILER2
948
949vframeArray* Deoptimization::create_vframeArray(JavaThread* thread, frame fr, RegisterMap *reg_map, GrowableArray<compiledVFrame*>* chunk) {
950
951#ifndef PRODUCT
952  if (TraceDeoptimization) {
953    ttyLocker ttyl;
954    tty->print("DEOPT PACKING thread " INTPTR_FORMAT " ", thread);
955    fr.print_on(tty);
956    tty->print_cr("     Virtual frames (innermost first):");
957    for (int index = 0; index < chunk->length(); index++) {
958      compiledVFrame* vf = chunk->at(index);
959      tty->print("       %2d - ", index);
960      vf->print_value();
961      int bci = chunk->at(index)->raw_bci();
962      const char* code_name;
963      if (bci == SynchronizationEntryBCI) {
964        code_name = "sync entry";
965      } else {
966        Bytecodes::Code code = vf->method()->code_at(bci);
967        code_name = Bytecodes::name(code);
968      }
969      tty->print(" - %s", code_name);
970      tty->print_cr(" @ bci %d ", bci);
971      if (Verbose) {
972        vf->print();
973        tty->cr();
974      }
975    }
976  }
977#endif
978
979  // Register map for next frame (used for stack crawl).  We capture
980  // the state of the deopt'ing frame's caller.  Thus if we need to
981  // stuff a C2I adapter we can properly fill in the callee-save
982  // register locations.
983  frame caller = fr.sender(reg_map);
984  int frame_size = caller.sp() - fr.sp();
985
986  frame sender = caller;
987
988  // Since the Java thread being deoptimized will eventually adjust it's own stack,
989  // the vframeArray containing the unpacking information is allocated in the C heap.
990  // For Compiler1, the caller of the deoptimized frame is saved for use by unpack_frames().
991  vframeArray* array = vframeArray::allocate(thread, frame_size, chunk, reg_map, sender, caller, fr);
992
993  // Compare the vframeArray to the collected vframes
994  assert(array->structural_compare(thread, chunk), "just checking");
995  Events::log("# vframes = %d", (intptr_t)chunk->length());
996
997#ifndef PRODUCT
998  if (TraceDeoptimization) {
999    ttyLocker ttyl;
1000    tty->print_cr("     Created vframeArray " INTPTR_FORMAT, array);
1001  }
1002#endif // PRODUCT
1003
1004  return array;
1005}
1006
1007
1008static void collect_monitors(compiledVFrame* cvf, GrowableArray<Handle>* objects_to_revoke) {
1009  GrowableArray<MonitorInfo*>* monitors = cvf->monitors();
1010  for (int i = 0; i < monitors->length(); i++) {
1011    MonitorInfo* mon_info = monitors->at(i);
1012    if (!mon_info->eliminated() && mon_info->owner() != NULL) {
1013      objects_to_revoke->append(Handle(mon_info->owner()));
1014    }
1015  }
1016}
1017
1018
1019void Deoptimization::revoke_biases_of_monitors(JavaThread* thread, frame fr, RegisterMap* map) {
1020  if (!UseBiasedLocking) {
1021    return;
1022  }
1023
1024  GrowableArray<Handle>* objects_to_revoke = new GrowableArray<Handle>();
1025
1026  // Unfortunately we don't have a RegisterMap available in most of
1027  // the places we want to call this routine so we need to walk the
1028  // stack again to update the register map.
1029  if (map == NULL || !map->update_map()) {
1030    StackFrameStream sfs(thread, true);
1031    bool found = false;
1032    while (!found && !sfs.is_done()) {
1033      frame* cur = sfs.current();
1034      sfs.next();
1035      found = cur->id() == fr.id();
1036    }
1037    assert(found, "frame to be deoptimized not found on target thread's stack");
1038    map = sfs.register_map();
1039  }
1040
1041  vframe* vf = vframe::new_vframe(&fr, map, thread);
1042  compiledVFrame* cvf = compiledVFrame::cast(vf);
1043  // Revoke monitors' biases in all scopes
1044  while (!cvf->is_top()) {
1045    collect_monitors(cvf, objects_to_revoke);
1046    cvf = compiledVFrame::cast(cvf->sender());
1047  }
1048  collect_monitors(cvf, objects_to_revoke);
1049
1050  if (SafepointSynchronize::is_at_safepoint()) {
1051    BiasedLocking::revoke_at_safepoint(objects_to_revoke);
1052  } else {
1053    BiasedLocking::revoke(objects_to_revoke);
1054  }
1055}
1056
1057
1058void Deoptimization::revoke_biases_of_monitors(CodeBlob* cb) {
1059  if (!UseBiasedLocking) {
1060    return;
1061  }
1062
1063  assert(SafepointSynchronize::is_at_safepoint(), "must only be called from safepoint");
1064  GrowableArray<Handle>* objects_to_revoke = new GrowableArray<Handle>();
1065  for (JavaThread* jt = Threads::first(); jt != NULL ; jt = jt->next()) {
1066    if (jt->has_last_Java_frame()) {
1067      StackFrameStream sfs(jt, true);
1068      while (!sfs.is_done()) {
1069        frame* cur = sfs.current();
1070        if (cb->contains(cur->pc())) {
1071          vframe* vf = vframe::new_vframe(cur, sfs.register_map(), jt);
1072          compiledVFrame* cvf = compiledVFrame::cast(vf);
1073          // Revoke monitors' biases in all scopes
1074          while (!cvf->is_top()) {
1075            collect_monitors(cvf, objects_to_revoke);
1076            cvf = compiledVFrame::cast(cvf->sender());
1077          }
1078          collect_monitors(cvf, objects_to_revoke);
1079        }
1080        sfs.next();
1081      }
1082    }
1083  }
1084  BiasedLocking::revoke_at_safepoint(objects_to_revoke);
1085}
1086
1087
1088void Deoptimization::deoptimize_single_frame(JavaThread* thread, frame fr) {
1089  assert(fr.can_be_deoptimized(), "checking frame type");
1090
1091  gather_statistics(Reason_constraint, Action_none, Bytecodes::_illegal);
1092
1093  EventMark m("Deoptimization (pc=" INTPTR_FORMAT ", sp=" INTPTR_FORMAT ")", fr.pc(), fr.id());
1094
1095  // Patch the nmethod so that when execution returns to it we will
1096  // deopt the execution state and return to the interpreter.
1097  fr.deoptimize(thread);
1098}
1099
1100void Deoptimization::deoptimize(JavaThread* thread, frame fr, RegisterMap *map) {
1101  // Deoptimize only if the frame comes from compile code.
1102  // Do not deoptimize the frame which is already patched
1103  // during the execution of the loops below.
1104  if (!fr.is_compiled_frame() || fr.is_deoptimized_frame()) {
1105    return;
1106  }
1107  ResourceMark rm;
1108  DeoptimizationMarker dm;
1109  if (UseBiasedLocking) {
1110    revoke_biases_of_monitors(thread, fr, map);
1111  }
1112  deoptimize_single_frame(thread, fr);
1113
1114}
1115
1116
1117void Deoptimization::deoptimize_frame_internal(JavaThread* thread, intptr_t* id) {
1118  assert(thread == Thread::current() || SafepointSynchronize::is_at_safepoint(),
1119         "can only deoptimize other thread at a safepoint");
1120  // Compute frame and register map based on thread and sp.
1121  RegisterMap reg_map(thread, UseBiasedLocking);
1122  frame fr = thread->last_frame();
1123  while (fr.id() != id) {
1124    fr = fr.sender(&reg_map);
1125  }
1126  deoptimize(thread, fr, &reg_map);
1127}
1128
1129
1130void Deoptimization::deoptimize_frame(JavaThread* thread, intptr_t* id) {
1131  if (thread == Thread::current()) {
1132    Deoptimization::deoptimize_frame_internal(thread, id);
1133  } else {
1134    VM_DeoptimizeFrame deopt(thread, id);
1135    VMThread::execute(&deopt);
1136  }
1137}
1138
1139
1140// JVMTI PopFrame support
1141JRT_LEAF(void, Deoptimization::popframe_preserve_args(JavaThread* thread, int bytes_to_save, void* start_address))
1142{
1143  thread->popframe_preserve_args(in_ByteSize(bytes_to_save), start_address);
1144}
1145JRT_END
1146
1147
1148#if defined(COMPILER2) || defined(SHARK)
1149void Deoptimization::load_class_by_index(constantPoolHandle constant_pool, int index, TRAPS) {
1150  // in case of an unresolved klass entry, load the class.
1151  if (constant_pool->tag_at(index).is_unresolved_klass()) {
1152    klassOop tk = constant_pool->klass_at(index, CHECK);
1153    return;
1154  }
1155
1156  if (!constant_pool->tag_at(index).is_symbol()) return;
1157
1158  Handle class_loader (THREAD, instanceKlass::cast(constant_pool->pool_holder())->class_loader());
1159  Symbol*  symbol  = constant_pool->symbol_at(index);
1160
1161  // class name?
1162  if (symbol->byte_at(0) != '(') {
1163    Handle protection_domain (THREAD, Klass::cast(constant_pool->pool_holder())->protection_domain());
1164    SystemDictionary::resolve_or_null(symbol, class_loader, protection_domain, CHECK);
1165    return;
1166  }
1167
1168  // then it must be a signature!
1169  ResourceMark rm(THREAD);
1170  for (SignatureStream ss(symbol); !ss.is_done(); ss.next()) {
1171    if (ss.is_object()) {
1172      Symbol* class_name = ss.as_symbol(CHECK);
1173      Handle protection_domain (THREAD, Klass::cast(constant_pool->pool_holder())->protection_domain());
1174      SystemDictionary::resolve_or_null(class_name, class_loader, protection_domain, CHECK);
1175    }
1176  }
1177}
1178
1179
1180void Deoptimization::load_class_by_index(constantPoolHandle constant_pool, int index) {
1181  EXCEPTION_MARK;
1182  load_class_by_index(constant_pool, index, THREAD);
1183  if (HAS_PENDING_EXCEPTION) {
1184    // Exception happened during classloading. We ignore the exception here, since it
1185    // is going to be rethrown since the current activation is going to be deoptimzied and
1186    // the interpreter will re-execute the bytecode.
1187    CLEAR_PENDING_EXCEPTION;
1188  }
1189}
1190
1191JRT_ENTRY(void, Deoptimization::uncommon_trap_inner(JavaThread* thread, jint trap_request)) {
1192  HandleMark hm;
1193
1194  // uncommon_trap() is called at the beginning of the uncommon trap
1195  // handler. Note this fact before we start generating temporary frames
1196  // that can confuse an asynchronous stack walker. This counter is
1197  // decremented at the end of unpack_frames().
1198  thread->inc_in_deopt_handler();
1199
1200  // We need to update the map if we have biased locking.
1201  RegisterMap reg_map(thread, UseBiasedLocking);
1202  frame stub_frame = thread->last_frame();
1203  frame fr = stub_frame.sender(&reg_map);
1204  // Make sure the calling nmethod is not getting deoptimized and removed
1205  // before we are done with it.
1206  nmethodLocker nl(fr.pc());
1207
1208  {
1209    ResourceMark rm;
1210
1211    // Revoke biases of any monitors in the frame to ensure we can migrate them
1212    revoke_biases_of_monitors(thread, fr, &reg_map);
1213
1214    DeoptReason reason = trap_request_reason(trap_request);
1215    DeoptAction action = trap_request_action(trap_request);
1216    jint unloaded_class_index = trap_request_index(trap_request); // CP idx or -1
1217
1218    Events::log("Uncommon trap occurred @" INTPTR_FORMAT " unloaded_class_index = %d", fr.pc(), (int) trap_request);
1219    vframe*  vf  = vframe::new_vframe(&fr, &reg_map, thread);
1220    compiledVFrame* cvf = compiledVFrame::cast(vf);
1221
1222    nmethod* nm = cvf->code();
1223
1224    ScopeDesc*      trap_scope  = cvf->scope();
1225    methodHandle    trap_method = trap_scope->method();
1226    int             trap_bci    = trap_scope->bci();
1227    Bytecodes::Code trap_bc     = trap_method->java_code_at(trap_bci);
1228
1229    // Record this event in the histogram.
1230    gather_statistics(reason, action, trap_bc);
1231
1232    // Ensure that we can record deopt. history:
1233    bool create_if_missing = ProfileTraps;
1234
1235    methodDataHandle trap_mdo
1236      (THREAD, get_method_data(thread, trap_method, create_if_missing));
1237
1238    // Print a bunch of diagnostics, if requested.
1239    if (TraceDeoptimization || LogCompilation) {
1240      ResourceMark rm;
1241      ttyLocker ttyl;
1242      char buf[100];
1243      if (xtty != NULL) {
1244        xtty->begin_head("uncommon_trap thread='" UINTX_FORMAT"' %s",
1245                         os::current_thread_id(),
1246                         format_trap_request(buf, sizeof(buf), trap_request));
1247        nm->log_identity(xtty);
1248      }
1249      Symbol* class_name = NULL;
1250      bool unresolved = false;
1251      if (unloaded_class_index >= 0) {
1252        constantPoolHandle constants (THREAD, trap_method->constants());
1253        if (constants->tag_at(unloaded_class_index).is_unresolved_klass()) {
1254          class_name = constants->klass_name_at(unloaded_class_index);
1255          unresolved = true;
1256          if (xtty != NULL)
1257            xtty->print(" unresolved='1'");
1258        } else if (constants->tag_at(unloaded_class_index).is_symbol()) {
1259          class_name = constants->symbol_at(unloaded_class_index);
1260        }
1261        if (xtty != NULL)
1262          xtty->name(class_name);
1263      }
1264      if (xtty != NULL && trap_mdo.not_null()) {
1265        // Dump the relevant MDO state.
1266        // This is the deopt count for the current reason, any previous
1267        // reasons or recompiles seen at this point.
1268        int dcnt = trap_mdo->trap_count(reason);
1269        if (dcnt != 0)
1270          xtty->print(" count='%d'", dcnt);
1271        ProfileData* pdata = trap_mdo->bci_to_data(trap_bci);
1272        int dos = (pdata == NULL)? 0: pdata->trap_state();
1273        if (dos != 0) {
1274          xtty->print(" state='%s'", format_trap_state(buf, sizeof(buf), dos));
1275          if (trap_state_is_recompiled(dos)) {
1276            int recnt2 = trap_mdo->overflow_recompile_count();
1277            if (recnt2 != 0)
1278              xtty->print(" recompiles2='%d'", recnt2);
1279          }
1280        }
1281      }
1282      if (xtty != NULL) {
1283        xtty->stamp();
1284        xtty->end_head();
1285      }
1286      if (TraceDeoptimization) {  // make noise on the tty
1287        tty->print("Uncommon trap occurred in");
1288        nm->method()->print_short_name(tty);
1289        tty->print(" (@" INTPTR_FORMAT ") thread=%d reason=%s action=%s unloaded_class_index=%d",
1290                   fr.pc(),
1291                   (int) os::current_thread_id(),
1292                   trap_reason_name(reason),
1293                   trap_action_name(action),
1294                   unloaded_class_index);
1295        if (class_name != NULL) {
1296          tty->print(unresolved ? " unresolved class: " : " symbol: ");
1297          class_name->print_symbol_on(tty);
1298        }
1299        tty->cr();
1300      }
1301      if (xtty != NULL) {
1302        // Log the precise location of the trap.
1303        for (ScopeDesc* sd = trap_scope; ; sd = sd->sender()) {
1304          xtty->begin_elem("jvms bci='%d'", sd->bci());
1305          xtty->method(sd->method());
1306          xtty->end_elem();
1307          if (sd->is_top())  break;
1308        }
1309        xtty->tail("uncommon_trap");
1310      }
1311    }
1312    // (End diagnostic printout.)
1313
1314    // Load class if necessary
1315    if (unloaded_class_index >= 0) {
1316      constantPoolHandle constants(THREAD, trap_method->constants());
1317      load_class_by_index(constants, unloaded_class_index);
1318    }
1319
1320    // Flush the nmethod if necessary and desirable.
1321    //
1322    // We need to avoid situations where we are re-flushing the nmethod
1323    // because of a hot deoptimization site.  Repeated flushes at the same
1324    // point need to be detected by the compiler and avoided.  If the compiler
1325    // cannot avoid them (or has a bug and "refuses" to avoid them), this
1326    // module must take measures to avoid an infinite cycle of recompilation
1327    // and deoptimization.  There are several such measures:
1328    //
1329    //   1. If a recompilation is ordered a second time at some site X
1330    //   and for the same reason R, the action is adjusted to 'reinterpret',
1331    //   to give the interpreter time to exercise the method more thoroughly.
1332    //   If this happens, the method's overflow_recompile_count is incremented.
1333    //
1334    //   2. If the compiler fails to reduce the deoptimization rate, then
1335    //   the method's overflow_recompile_count will begin to exceed the set
1336    //   limit PerBytecodeRecompilationCutoff.  If this happens, the action
1337    //   is adjusted to 'make_not_compilable', and the method is abandoned
1338    //   to the interpreter.  This is a performance hit for hot methods,
1339    //   but is better than a disastrous infinite cycle of recompilations.
1340    //   (Actually, only the method containing the site X is abandoned.)
1341    //
1342    //   3. In parallel with the previous measures, if the total number of
1343    //   recompilations of a method exceeds the much larger set limit
1344    //   PerMethodRecompilationCutoff, the method is abandoned.
1345    //   This should only happen if the method is very large and has
1346    //   many "lukewarm" deoptimizations.  The code which enforces this
1347    //   limit is elsewhere (class nmethod, class methodOopDesc).
1348    //
1349    // Note that the per-BCI 'is_recompiled' bit gives the compiler one chance
1350    // to recompile at each bytecode independently of the per-BCI cutoff.
1351    //
1352    // The decision to update code is up to the compiler, and is encoded
1353    // in the Action_xxx code.  If the compiler requests Action_none
1354    // no trap state is changed, no compiled code is changed, and the
1355    // computation suffers along in the interpreter.
1356    //
1357    // The other action codes specify various tactics for decompilation
1358    // and recompilation.  Action_maybe_recompile is the loosest, and
1359    // allows the compiled code to stay around until enough traps are seen,
1360    // and until the compiler gets around to recompiling the trapping method.
1361    //
1362    // The other actions cause immediate removal of the present code.
1363
1364    bool update_trap_state = true;
1365    bool make_not_entrant = false;
1366    bool make_not_compilable = false;
1367    bool reprofile = false;
1368    switch (action) {
1369    case Action_none:
1370      // Keep the old code.
1371      update_trap_state = false;
1372      break;
1373    case Action_maybe_recompile:
1374      // Do not need to invalidate the present code, but we can
1375      // initiate another
1376      // Start compiler without (necessarily) invalidating the nmethod.
1377      // The system will tolerate the old code, but new code should be
1378      // generated when possible.
1379      break;
1380    case Action_reinterpret:
1381      // Go back into the interpreter for a while, and then consider
1382      // recompiling form scratch.
1383      make_not_entrant = true;
1384      // Reset invocation counter for outer most method.
1385      // This will allow the interpreter to exercise the bytecodes
1386      // for a while before recompiling.
1387      // By contrast, Action_make_not_entrant is immediate.
1388      //
1389      // Note that the compiler will track null_check, null_assert,
1390      // range_check, and class_check events and log them as if they
1391      // had been traps taken from compiled code.  This will update
1392      // the MDO trap history so that the next compilation will
1393      // properly detect hot trap sites.
1394      reprofile = true;
1395      break;
1396    case Action_make_not_entrant:
1397      // Request immediate recompilation, and get rid of the old code.
1398      // Make them not entrant, so next time they are called they get
1399      // recompiled.  Unloaded classes are loaded now so recompile before next
1400      // time they are called.  Same for uninitialized.  The interpreter will
1401      // link the missing class, if any.
1402      make_not_entrant = true;
1403      break;
1404    case Action_make_not_compilable:
1405      // Give up on compiling this method at all.
1406      make_not_entrant = true;
1407      make_not_compilable = true;
1408      break;
1409    default:
1410      ShouldNotReachHere();
1411    }
1412
1413    // Setting +ProfileTraps fixes the following, on all platforms:
1414    // 4852688: ProfileInterpreter is off by default for ia64.  The result is
1415    // infinite heroic-opt-uncommon-trap/deopt/recompile cycles, since the
1416    // recompile relies on a methodDataOop to record heroic opt failures.
1417
1418    // Whether the interpreter is producing MDO data or not, we also need
1419    // to use the MDO to detect hot deoptimization points and control
1420    // aggressive optimization.
1421    bool inc_recompile_count = false;
1422    ProfileData* pdata = NULL;
1423    if (ProfileTraps && update_trap_state && trap_mdo.not_null()) {
1424      assert(trap_mdo() == get_method_data(thread, trap_method, false), "sanity");
1425      uint this_trap_count = 0;
1426      bool maybe_prior_trap = false;
1427      bool maybe_prior_recompile = false;
1428      pdata = query_update_method_data(trap_mdo, trap_bci, reason,
1429                                   //outputs:
1430                                   this_trap_count,
1431                                   maybe_prior_trap,
1432                                   maybe_prior_recompile);
1433      // Because the interpreter also counts null, div0, range, and class
1434      // checks, these traps from compiled code are double-counted.
1435      // This is harmless; it just means that the PerXTrapLimit values
1436      // are in effect a little smaller than they look.
1437
1438      DeoptReason per_bc_reason = reason_recorded_per_bytecode_if_any(reason);
1439      if (per_bc_reason != Reason_none) {
1440        // Now take action based on the partially known per-BCI history.
1441        if (maybe_prior_trap
1442            && this_trap_count >= (uint)PerBytecodeTrapLimit) {
1443          // If there are too many traps at this BCI, force a recompile.
1444          // This will allow the compiler to see the limit overflow, and
1445          // take corrective action, if possible.  The compiler generally
1446          // does not use the exact PerBytecodeTrapLimit value, but instead
1447          // changes its tactics if it sees any traps at all.  This provides
1448          // a little hysteresis, delaying a recompile until a trap happens
1449          // several times.
1450          //
1451          // Actually, since there is only one bit of counter per BCI,
1452          // the possible per-BCI counts are {0,1,(per-method count)}.
1453          // This produces accurate results if in fact there is only
1454          // one hot trap site, but begins to get fuzzy if there are
1455          // many sites.  For example, if there are ten sites each
1456          // trapping two or more times, they each get the blame for
1457          // all of their traps.
1458          make_not_entrant = true;
1459        }
1460
1461        // Detect repeated recompilation at the same BCI, and enforce a limit.
1462        if (make_not_entrant && maybe_prior_recompile) {
1463          // More than one recompile at this point.
1464          inc_recompile_count = maybe_prior_trap;
1465        }
1466      } else {
1467        // For reasons which are not recorded per-bytecode, we simply
1468        // force recompiles unconditionally.
1469        // (Note that PerMethodRecompilationCutoff is enforced elsewhere.)
1470        make_not_entrant = true;
1471      }
1472
1473      // Go back to the compiler if there are too many traps in this method.
1474      if (this_trap_count >= (uint)PerMethodTrapLimit) {
1475        // If there are too many traps in this method, force a recompile.
1476        // This will allow the compiler to see the limit overflow, and
1477        // take corrective action, if possible.
1478        // (This condition is an unlikely backstop only, because the
1479        // PerBytecodeTrapLimit is more likely to take effect first,
1480        // if it is applicable.)
1481        make_not_entrant = true;
1482      }
1483
1484      // Here's more hysteresis:  If there has been a recompile at
1485      // this trap point already, run the method in the interpreter
1486      // for a while to exercise it more thoroughly.
1487      if (make_not_entrant && maybe_prior_recompile && maybe_prior_trap) {
1488        reprofile = true;
1489      }
1490
1491    }
1492
1493    // Take requested actions on the method:
1494
1495    // Recompile
1496    if (make_not_entrant) {
1497      if (!nm->make_not_entrant()) {
1498        return; // the call did not change nmethod's state
1499      }
1500
1501      if (pdata != NULL) {
1502        // Record the recompilation event, if any.
1503        int tstate0 = pdata->trap_state();
1504        int tstate1 = trap_state_set_recompiled(tstate0, true);
1505        if (tstate1 != tstate0)
1506          pdata->set_trap_state(tstate1);
1507      }
1508    }
1509
1510    if (inc_recompile_count) {
1511      trap_mdo->inc_overflow_recompile_count();
1512      if ((uint)trap_mdo->overflow_recompile_count() >
1513          (uint)PerBytecodeRecompilationCutoff) {
1514        // Give up on the method containing the bad BCI.
1515        if (trap_method() == nm->method()) {
1516          make_not_compilable = true;
1517        } else {
1518          trap_method->set_not_compilable(CompLevel_full_optimization);
1519          // But give grace to the enclosing nm->method().
1520        }
1521      }
1522    }
1523
1524    // Reprofile
1525    if (reprofile) {
1526      CompilationPolicy::policy()->reprofile(trap_scope, nm->is_osr_method());
1527    }
1528
1529    // Give up compiling
1530    if (make_not_compilable && !nm->method()->is_not_compilable(CompLevel_full_optimization)) {
1531      assert(make_not_entrant, "consistent");
1532      nm->method()->set_not_compilable(CompLevel_full_optimization);
1533    }
1534
1535  } // Free marked resources
1536
1537}
1538JRT_END
1539
1540methodDataOop
1541Deoptimization::get_method_data(JavaThread* thread, methodHandle m,
1542                                bool create_if_missing) {
1543  Thread* THREAD = thread;
1544  methodDataOop mdo = m()->method_data();
1545  if (mdo == NULL && create_if_missing && !HAS_PENDING_EXCEPTION) {
1546    // Build an MDO.  Ignore errors like OutOfMemory;
1547    // that simply means we won't have an MDO to update.
1548    methodOopDesc::build_interpreter_method_data(m, THREAD);
1549    if (HAS_PENDING_EXCEPTION) {
1550      assert((PENDING_EXCEPTION->is_a(SystemDictionary::OutOfMemoryError_klass())), "we expect only an OOM error here");
1551      CLEAR_PENDING_EXCEPTION;
1552    }
1553    mdo = m()->method_data();
1554  }
1555  return mdo;
1556}
1557
1558ProfileData*
1559Deoptimization::query_update_method_data(methodDataHandle trap_mdo,
1560                                         int trap_bci,
1561                                         Deoptimization::DeoptReason reason,
1562                                         //outputs:
1563                                         uint& ret_this_trap_count,
1564                                         bool& ret_maybe_prior_trap,
1565                                         bool& ret_maybe_prior_recompile) {
1566  uint prior_trap_count = trap_mdo->trap_count(reason);
1567  uint this_trap_count  = trap_mdo->inc_trap_count(reason);
1568
1569  // If the runtime cannot find a place to store trap history,
1570  // it is estimated based on the general condition of the method.
1571  // If the method has ever been recompiled, or has ever incurred
1572  // a trap with the present reason , then this BCI is assumed
1573  // (pessimistically) to be the culprit.
1574  bool maybe_prior_trap      = (prior_trap_count != 0);
1575  bool maybe_prior_recompile = (trap_mdo->decompile_count() != 0);
1576  ProfileData* pdata = NULL;
1577
1578
1579  // For reasons which are recorded per bytecode, we check per-BCI data.
1580  DeoptReason per_bc_reason = reason_recorded_per_bytecode_if_any(reason);
1581  if (per_bc_reason != Reason_none) {
1582    // Find the profile data for this BCI.  If there isn't one,
1583    // try to allocate one from the MDO's set of spares.
1584    // This will let us detect a repeated trap at this point.
1585    pdata = trap_mdo->allocate_bci_to_data(trap_bci);
1586
1587    if (pdata != NULL) {
1588      // Query the trap state of this profile datum.
1589      int tstate0 = pdata->trap_state();
1590      if (!trap_state_has_reason(tstate0, per_bc_reason))
1591        maybe_prior_trap = false;
1592      if (!trap_state_is_recompiled(tstate0))
1593        maybe_prior_recompile = false;
1594
1595      // Update the trap state of this profile datum.
1596      int tstate1 = tstate0;
1597      // Record the reason.
1598      tstate1 = trap_state_add_reason(tstate1, per_bc_reason);
1599      // Store the updated state on the MDO, for next time.
1600      if (tstate1 != tstate0)
1601        pdata->set_trap_state(tstate1);
1602    } else {
1603      if (LogCompilation && xtty != NULL) {
1604        ttyLocker ttyl;
1605        // Missing MDP?  Leave a small complaint in the log.
1606        xtty->elem("missing_mdp bci='%d'", trap_bci);
1607      }
1608    }
1609  }
1610
1611  // Return results:
1612  ret_this_trap_count = this_trap_count;
1613  ret_maybe_prior_trap = maybe_prior_trap;
1614  ret_maybe_prior_recompile = maybe_prior_recompile;
1615  return pdata;
1616}
1617
1618void
1619Deoptimization::update_method_data_from_interpreter(methodDataHandle trap_mdo, int trap_bci, int reason) {
1620  ResourceMark rm;
1621  // Ignored outputs:
1622  uint ignore_this_trap_count;
1623  bool ignore_maybe_prior_trap;
1624  bool ignore_maybe_prior_recompile;
1625  query_update_method_data(trap_mdo, trap_bci,
1626                           (DeoptReason)reason,
1627                           ignore_this_trap_count,
1628                           ignore_maybe_prior_trap,
1629                           ignore_maybe_prior_recompile);
1630}
1631
1632Deoptimization::UnrollBlock* Deoptimization::uncommon_trap(JavaThread* thread, jint trap_request) {
1633
1634  // Still in Java no safepoints
1635  {
1636    // This enters VM and may safepoint
1637    uncommon_trap_inner(thread, trap_request);
1638  }
1639  return fetch_unroll_info_helper(thread);
1640}
1641
1642// Local derived constants.
1643// Further breakdown of DataLayout::trap_state, as promised by DataLayout.
1644const int DS_REASON_MASK   = DataLayout::trap_mask >> 1;
1645const int DS_RECOMPILE_BIT = DataLayout::trap_mask - DS_REASON_MASK;
1646
1647//---------------------------trap_state_reason---------------------------------
1648Deoptimization::DeoptReason
1649Deoptimization::trap_state_reason(int trap_state) {
1650  // This assert provides the link between the width of DataLayout::trap_bits
1651  // and the encoding of "recorded" reasons.  It ensures there are enough
1652  // bits to store all needed reasons in the per-BCI MDO profile.
1653  assert(DS_REASON_MASK >= Reason_RECORDED_LIMIT, "enough bits");
1654  int recompile_bit = (trap_state & DS_RECOMPILE_BIT);
1655  trap_state -= recompile_bit;
1656  if (trap_state == DS_REASON_MASK) {
1657    return Reason_many;
1658  } else {
1659    assert((int)Reason_none == 0, "state=0 => Reason_none");
1660    return (DeoptReason)trap_state;
1661  }
1662}
1663//-------------------------trap_state_has_reason-------------------------------
1664int Deoptimization::trap_state_has_reason(int trap_state, int reason) {
1665  assert(reason_is_recorded_per_bytecode((DeoptReason)reason), "valid reason");
1666  assert(DS_REASON_MASK >= Reason_RECORDED_LIMIT, "enough bits");
1667  int recompile_bit = (trap_state & DS_RECOMPILE_BIT);
1668  trap_state -= recompile_bit;
1669  if (trap_state == DS_REASON_MASK) {
1670    return -1;  // true, unspecifically (bottom of state lattice)
1671  } else if (trap_state == reason) {
1672    return 1;   // true, definitely
1673  } else if (trap_state == 0) {
1674    return 0;   // false, definitely (top of state lattice)
1675  } else {
1676    return 0;   // false, definitely
1677  }
1678}
1679//-------------------------trap_state_add_reason-------------------------------
1680int Deoptimization::trap_state_add_reason(int trap_state, int reason) {
1681  assert(reason_is_recorded_per_bytecode((DeoptReason)reason) || reason == Reason_many, "valid reason");
1682  int recompile_bit = (trap_state & DS_RECOMPILE_BIT);
1683  trap_state -= recompile_bit;
1684  if (trap_state == DS_REASON_MASK) {
1685    return trap_state + recompile_bit;     // already at state lattice bottom
1686  } else if (trap_state == reason) {
1687    return trap_state + recompile_bit;     // the condition is already true
1688  } else if (trap_state == 0) {
1689    return reason + recompile_bit;          // no condition has yet been true
1690  } else {
1691    return DS_REASON_MASK + recompile_bit;  // fall to state lattice bottom
1692  }
1693}
1694//-----------------------trap_state_is_recompiled------------------------------
1695bool Deoptimization::trap_state_is_recompiled(int trap_state) {
1696  return (trap_state & DS_RECOMPILE_BIT) != 0;
1697}
1698//-----------------------trap_state_set_recompiled-----------------------------
1699int Deoptimization::trap_state_set_recompiled(int trap_state, bool z) {
1700  if (z)  return trap_state |  DS_RECOMPILE_BIT;
1701  else    return trap_state & ~DS_RECOMPILE_BIT;
1702}
1703//---------------------------format_trap_state---------------------------------
1704// This is used for debugging and diagnostics, including hotspot.log output.
1705const char* Deoptimization::format_trap_state(char* buf, size_t buflen,
1706                                              int trap_state) {
1707  DeoptReason reason      = trap_state_reason(trap_state);
1708  bool        recomp_flag = trap_state_is_recompiled(trap_state);
1709  // Re-encode the state from its decoded components.
1710  int decoded_state = 0;
1711  if (reason_is_recorded_per_bytecode(reason) || reason == Reason_many)
1712    decoded_state = trap_state_add_reason(decoded_state, reason);
1713  if (recomp_flag)
1714    decoded_state = trap_state_set_recompiled(decoded_state, recomp_flag);
1715  // If the state re-encodes properly, format it symbolically.
1716  // Because this routine is used for debugging and diagnostics,
1717  // be robust even if the state is a strange value.
1718  size_t len;
1719  if (decoded_state != trap_state) {
1720    // Random buggy state that doesn't decode??
1721    len = jio_snprintf(buf, buflen, "#%d", trap_state);
1722  } else {
1723    len = jio_snprintf(buf, buflen, "%s%s",
1724                       trap_reason_name(reason),
1725                       recomp_flag ? " recompiled" : "");
1726  }
1727  if (len >= buflen)
1728    buf[buflen-1] = '\0';
1729  return buf;
1730}
1731
1732
1733//--------------------------------statics--------------------------------------
1734Deoptimization::DeoptAction Deoptimization::_unloaded_action
1735  = Deoptimization::Action_reinterpret;
1736const char* Deoptimization::_trap_reason_name[Reason_LIMIT] = {
1737  // Note:  Keep this in sync. with enum DeoptReason.
1738  "none",
1739  "null_check",
1740  "null_assert",
1741  "range_check",
1742  "class_check",
1743  "array_check",
1744  "intrinsic",
1745  "bimorphic",
1746  "unloaded",
1747  "uninitialized",
1748  "unreached",
1749  "unhandled",
1750  "constraint",
1751  "div0_check",
1752  "age",
1753  "predicate"
1754};
1755const char* Deoptimization::_trap_action_name[Action_LIMIT] = {
1756  // Note:  Keep this in sync. with enum DeoptAction.
1757  "none",
1758  "maybe_recompile",
1759  "reinterpret",
1760  "make_not_entrant",
1761  "make_not_compilable"
1762};
1763
1764const char* Deoptimization::trap_reason_name(int reason) {
1765  if (reason == Reason_many)  return "many";
1766  if ((uint)reason < Reason_LIMIT)
1767    return _trap_reason_name[reason];
1768  static char buf[20];
1769  sprintf(buf, "reason%d", reason);
1770  return buf;
1771}
1772const char* Deoptimization::trap_action_name(int action) {
1773  if ((uint)action < Action_LIMIT)
1774    return _trap_action_name[action];
1775  static char buf[20];
1776  sprintf(buf, "action%d", action);
1777  return buf;
1778}
1779
1780// This is used for debugging and diagnostics, including hotspot.log output.
1781const char* Deoptimization::format_trap_request(char* buf, size_t buflen,
1782                                                int trap_request) {
1783  jint unloaded_class_index = trap_request_index(trap_request);
1784  const char* reason = trap_reason_name(trap_request_reason(trap_request));
1785  const char* action = trap_action_name(trap_request_action(trap_request));
1786  size_t len;
1787  if (unloaded_class_index < 0) {
1788    len = jio_snprintf(buf, buflen, "reason='%s' action='%s'",
1789                       reason, action);
1790  } else {
1791    len = jio_snprintf(buf, buflen, "reason='%s' action='%s' index='%d'",
1792                       reason, action, unloaded_class_index);
1793  }
1794  if (len >= buflen)
1795    buf[buflen-1] = '\0';
1796  return buf;
1797}
1798
1799juint Deoptimization::_deoptimization_hist
1800        [Deoptimization::Reason_LIMIT]
1801    [1 + Deoptimization::Action_LIMIT]
1802        [Deoptimization::BC_CASE_LIMIT]
1803  = {0};
1804
1805enum {
1806  LSB_BITS = 8,
1807  LSB_MASK = right_n_bits(LSB_BITS)
1808};
1809
1810void Deoptimization::gather_statistics(DeoptReason reason, DeoptAction action,
1811                                       Bytecodes::Code bc) {
1812  assert(reason >= 0 && reason < Reason_LIMIT, "oob");
1813  assert(action >= 0 && action < Action_LIMIT, "oob");
1814  _deoptimization_hist[Reason_none][0][0] += 1;  // total
1815  _deoptimization_hist[reason][0][0]      += 1;  // per-reason total
1816  juint* cases = _deoptimization_hist[reason][1+action];
1817  juint* bc_counter_addr = NULL;
1818  juint  bc_counter      = 0;
1819  // Look for an unused counter, or an exact match to this BC.
1820  if (bc != Bytecodes::_illegal) {
1821    for (int bc_case = 0; bc_case < BC_CASE_LIMIT; bc_case++) {
1822      juint* counter_addr = &cases[bc_case];
1823      juint  counter = *counter_addr;
1824      if ((counter == 0 && bc_counter_addr == NULL)
1825          || (Bytecodes::Code)(counter & LSB_MASK) == bc) {
1826        // this counter is either free or is already devoted to this BC
1827        bc_counter_addr = counter_addr;
1828        bc_counter = counter | bc;
1829      }
1830    }
1831  }
1832  if (bc_counter_addr == NULL) {
1833    // Overflow, or no given bytecode.
1834    bc_counter_addr = &cases[BC_CASE_LIMIT-1];
1835    bc_counter = (*bc_counter_addr & ~LSB_MASK);  // clear LSB
1836  }
1837  *bc_counter_addr = bc_counter + (1 << LSB_BITS);
1838}
1839
1840jint Deoptimization::total_deoptimization_count() {
1841  return _deoptimization_hist[Reason_none][0][0];
1842}
1843
1844jint Deoptimization::deoptimization_count(DeoptReason reason) {
1845  assert(reason >= 0 && reason < Reason_LIMIT, "oob");
1846  return _deoptimization_hist[reason][0][0];
1847}
1848
1849void Deoptimization::print_statistics() {
1850  juint total = total_deoptimization_count();
1851  juint account = total;
1852  if (total != 0) {
1853    ttyLocker ttyl;
1854    if (xtty != NULL)  xtty->head("statistics type='deoptimization'");
1855    tty->print_cr("Deoptimization traps recorded:");
1856    #define PRINT_STAT_LINE(name, r) \
1857      tty->print_cr("  %4d (%4.1f%%) %s", (int)(r), ((r) * 100.0) / total, name);
1858    PRINT_STAT_LINE("total", total);
1859    // For each non-zero entry in the histogram, print the reason,
1860    // the action, and (if specifically known) the type of bytecode.
1861    for (int reason = 0; reason < Reason_LIMIT; reason++) {
1862      for (int action = 0; action < Action_LIMIT; action++) {
1863        juint* cases = _deoptimization_hist[reason][1+action];
1864        for (int bc_case = 0; bc_case < BC_CASE_LIMIT; bc_case++) {
1865          juint counter = cases[bc_case];
1866          if (counter != 0) {
1867            char name[1*K];
1868            Bytecodes::Code bc = (Bytecodes::Code)(counter & LSB_MASK);
1869            if (bc_case == BC_CASE_LIMIT && (int)bc == 0)
1870              bc = Bytecodes::_illegal;
1871            sprintf(name, "%s/%s/%s",
1872                    trap_reason_name(reason),
1873                    trap_action_name(action),
1874                    Bytecodes::is_defined(bc)? Bytecodes::name(bc): "other");
1875            juint r = counter >> LSB_BITS;
1876            tty->print_cr("  %40s: " UINT32_FORMAT " (%.1f%%)", name, r, (r * 100.0) / total);
1877            account -= r;
1878          }
1879        }
1880      }
1881    }
1882    if (account != 0) {
1883      PRINT_STAT_LINE("unaccounted", account);
1884    }
1885    #undef PRINT_STAT_LINE
1886    if (xtty != NULL)  xtty->tail("statistics");
1887  }
1888}
1889#else // COMPILER2 || SHARK
1890
1891
1892// Stubs for C1 only system.
1893bool Deoptimization::trap_state_is_recompiled(int trap_state) {
1894  return false;
1895}
1896
1897const char* Deoptimization::trap_reason_name(int reason) {
1898  return "unknown";
1899}
1900
1901void Deoptimization::print_statistics() {
1902  // no output
1903}
1904
1905void
1906Deoptimization::update_method_data_from_interpreter(methodDataHandle trap_mdo, int trap_bci, int reason) {
1907  // no udpate
1908}
1909
1910int Deoptimization::trap_state_has_reason(int trap_state, int reason) {
1911  return 0;
1912}
1913
1914void Deoptimization::gather_statistics(DeoptReason reason, DeoptAction action,
1915                                       Bytecodes::Code bc) {
1916  // no update
1917}
1918
1919const char* Deoptimization::format_trap_state(char* buf, size_t buflen,
1920                                              int trap_state) {
1921  jio_snprintf(buf, buflen, "#%d", trap_state);
1922  return buf;
1923}
1924
1925#endif // COMPILER2 || SHARK
1926