hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/GenerateOopMap.java
changeset 10251 71b8938a2821
parent 8921 14bfe81f2a9d
child 13282 9872915dd78d
equal deleted inserted replaced
10250:0794cd144834 10251:71b8938a2821
   567       case Bytecodes._invokestatic:
   567       case Bytecodes._invokestatic:
   568       case Bytecodes._invokeinterface:
   568       case Bytecodes._invokeinterface:
   569       case Bytecodes._invokedynamic:
   569       case Bytecodes._invokedynamic:
   570         // FIXME: print signature of referenced method (need more
   570         // FIXME: print signature of referenced method (need more
   571         // accessors in ConstantPool and ConstantPoolCache)
   571         // accessors in ConstantPool and ConstantPoolCache)
   572         int idx = currentBC.getIndexBig();
   572         int idx = currentBC.hasIndexU4() ? currentBC.getIndexU4() : currentBC.getIndexU2();
   573         tty.print(" idx " + idx);
   573         tty.print(" idx " + idx);
   574         /*
   574         /*
   575           int idx = currentBC.getIndexBig();
   575           int idx = currentBC.getIndexU2();
   576           ConstantPool cp       = method().getConstants();
   576           ConstantPool cp       = method().getConstants();
   577           int nameAndTypeIdx    = cp.name_and_type_ref_index_at(idx);
   577           int nameAndTypeIdx    = cp.name_and_type_ref_index_at(idx);
   578           int signatureIdx      = cp.signature_ref_index_at(nameAndTypeIdx);
   578           int signatureIdx      = cp.signature_ref_index_at(nameAndTypeIdx);
   579           Symbol* signature     = cp.symbol_at(signatureIdx);
   579           Symbol* signature     = cp.symbol_at(signatureIdx);
   580           tty.print("%s", signature.as_C_string());
   580           tty.print("%s", signature.as_C_string());
   607       case Bytecodes._invokestatic:
   607       case Bytecodes._invokestatic:
   608       case Bytecodes._invokeinterface:
   608       case Bytecodes._invokeinterface:
   609       case Bytecodes._invokedynamic:
   609       case Bytecodes._invokedynamic:
   610         // FIXME: print signature of referenced method (need more
   610         // FIXME: print signature of referenced method (need more
   611         // accessors in ConstantPool and ConstantPoolCache)
   611         // accessors in ConstantPool and ConstantPoolCache)
   612         int idx = currentBC.getIndexBig();
   612         int idx = currentBC.hasIndexU4() ? currentBC.getIndexU4() : currentBC.getIndexU2();
   613         tty.print(" idx " + idx);
   613         tty.print(" idx " + idx);
   614         /*
   614         /*
   615           int idx = currentBC.getIndexBig();
   615           int idx = currentBC.getIndexU2();
   616           constantPoolOop cp    = method().constants();
   616           constantPoolOop cp    = method().constants();
   617           int nameAndTypeIdx    = cp.name_and_type_ref_index_at(idx);
   617           int nameAndTypeIdx    = cp.name_and_type_ref_index_at(idx);
   618           int signatureIdx      = cp.signature_ref_index_at(nameAndTypeIdx);
   618           int signatureIdx      = cp.signature_ref_index_at(nameAndTypeIdx);
   619           Symbol* signature     = cp.symbol_at(signatureIdx);
   619           Symbol* signature     = cp.symbol_at(signatureIdx);
   620           tty.print("%s", signature.as_C_string());
   620           tty.print("%s", signature.as_C_string());
  1116 
  1116 
  1117   /** Sets the current state to be the state after executing the
  1117   /** Sets the current state to be the state after executing the
  1118       current instruction, starting in the current state. */
  1118       current instruction, starting in the current state. */
  1119   void  interp1                             (BytecodeStream itr) {
  1119   void  interp1                             (BytecodeStream itr) {
  1120     if (DEBUG) {
  1120     if (DEBUG) {
  1121       System.err.println(" - bci " + itr.bci());
  1121       System.err.println(" - bci " + itr.bci() + " " + itr.code());
       
  1122       printCurrentState(System.err, itr, false);
  1122     }
  1123     }
  1123 
  1124 
  1124     //    if (TraceNewOopMapGeneration) {
  1125     //    if (TraceNewOopMapGeneration) {
  1125     //      print_current_state(tty, itr, TraceNewOopMapGenerationDetailed);
  1126     //      print_current_state(tty, itr, TraceNewOopMapGenerationDetailed);
  1126     //    }
  1127     //    }
  1177     case Bytecodes._dconst_0:
  1178     case Bytecodes._dconst_0:
  1178     case Bytecodes._dconst_1:          ppush(vvCTS);               break;
  1179     case Bytecodes._dconst_1:          ppush(vvCTS);               break;
  1179 
  1180 
  1180     case Bytecodes._ldc2_w:            ppush(vvCTS);               break;
  1181     case Bytecodes._ldc2_w:            ppush(vvCTS);               break;
  1181 
  1182 
  1182     case Bytecodes._ldc:               doLdc(itr.getIndex(), itr.bci());    break;
  1183     case Bytecodes._ldc:               doLdc(itr.bci());           break;
  1183     case Bytecodes._ldc_w:             doLdc(itr.getIndexBig(), itr.bci());break;
  1184     case Bytecodes._ldc_w:             doLdc(itr.bci());           break;
  1184 
  1185 
  1185     case Bytecodes._iload:
  1186     case Bytecodes._iload:
  1186     case Bytecodes._fload:             ppload(vCTS, itr.getIndex()); break;
  1187     case Bytecodes._fload:             ppload(vCTS, itr.getIndex()); break;
  1187 
  1188 
  1188     case Bytecodes._lload:
  1189     case Bytecodes._lload:
  1370     case Bytecodes._if_acmpne:         ppop(rrCTS);                 break;
  1371     case Bytecodes._if_acmpne:         ppop(rrCTS);                 break;
  1371 
  1372 
  1372     case Bytecodes._jsr:               doJsr(itr.dest());          break;
  1373     case Bytecodes._jsr:               doJsr(itr.dest());          break;
  1373     case Bytecodes._jsr_w:             doJsr(itr.dest_w());        break;
  1374     case Bytecodes._jsr_w:             doJsr(itr.dest_w());        break;
  1374 
  1375 
  1375     case Bytecodes._getstatic:         doField(true,  true,
  1376     case Bytecodes._getstatic:         doField(true,  true,  itr.getIndexU2Cpcache(), itr.bci()); break;
  1376                                                itr.getIndexBig(),
  1377     case Bytecodes._putstatic:         doField(false, true,  itr.getIndexU2Cpcache(), itr.bci()); break;
  1377                                                itr.bci()); break;
  1378     case Bytecodes._getfield:          doField(true,  false, itr.getIndexU2Cpcache(), itr.bci()); break;
  1378     case Bytecodes._putstatic:         doField(false, true,  itr.getIndexBig(), itr.bci()); break;
  1379     case Bytecodes._putfield:          doField(false, false, itr.getIndexU2Cpcache(), itr.bci()); break;
  1379     case Bytecodes._getfield:          doField(true,  false, itr.getIndexBig(), itr.bci()); break;
       
  1380     case Bytecodes._putfield:          doField(false, false, itr.getIndexBig(), itr.bci()); break;
       
  1381 
  1380 
  1382     case Bytecodes._invokevirtual:
  1381     case Bytecodes._invokevirtual:
  1383     case Bytecodes._invokespecial:     doMethod(false, false, itr.getIndexBig(), itr.bci()); break;
  1382     case Bytecodes._invokespecial:     doMethod(false, false, itr.getIndexU2Cpcache(), itr.bci()); break;
  1384     case Bytecodes._invokestatic:      doMethod(true,  false, itr.getIndexBig(), itr.bci()); break;
  1383     case Bytecodes._invokestatic:      doMethod(true,  false, itr.getIndexU2Cpcache(), itr.bci()); break;
  1385     case Bytecodes._invokedynamic:     doMethod(false, true,  itr.getIndexBig(), itr.bci()); break;
  1384     case Bytecodes._invokedynamic:     doMethod(true,  false, itr.getIndexU4(),        itr.bci()); break;
  1386     case Bytecodes._invokeinterface:   doMethod(false, true,  itr.getIndexBig(), itr.bci()); break;
  1385     case Bytecodes._invokeinterface:   doMethod(false,  true, itr.getIndexU2Cpcache(), itr.bci()); break;
  1387     case Bytecodes._newarray:
  1386     case Bytecodes._newarray:
  1388     case Bytecodes._anewarray:         ppNewRef(vCTS, itr.bci()); break;
  1387     case Bytecodes._anewarray:         ppNewRef(vCTS, itr.bci()); break;
  1389     case Bytecodes._checkcast:         doCheckcast(); break;
  1388     case Bytecodes._checkcast:         doCheckcast(); break;
  1390     case Bytecodes._arraylength:
  1389     case Bytecodes._arraylength:
  1391     case Bytecodes._instanceof:        pp(rCTS, vCTS); break;
  1390     case Bytecodes._instanceof:        pp(rCTS, vCTS); break;
  1663       }
  1662       }
  1664       push(actual[idx]);
  1663       push(actual[idx]);
  1665     }
  1664     }
  1666   }
  1665   }
  1667 
  1666 
  1668   void  doLdc                               (int idx, int bci) {
  1667   void  doLdc                               (int bci) {
       
  1668     BytecodeLoadConstant ldc = BytecodeLoadConstant.at(_method, bci);
  1669     ConstantPool  cp  = method().getConstants();
  1669     ConstantPool  cp  = method().getConstants();
  1670     ConstantTag   tag = cp.getTagAt(idx);
  1670     BasicType     bt = ldc.resultType();
  1671     CellTypeState cts = (tag.isString() || tag.isUnresolvedString() ||
  1671     CellTypeState cts = (bt == BasicType.T_OBJECT) ? CellTypeState.makeLineRef(bci) : valCTS;
  1672                          tag.isKlass() || tag.isUnresolvedKlass())
       
  1673                           ? CellTypeState.makeLineRef(bci)
       
  1674                           : valCTS;
       
  1675     ppush1(cts);
  1672     ppush1(cts);
  1676   }
  1673   }
  1677 
  1674 
  1678   void  doAstore                            (int idx) {
  1675   void  doAstore                            (int idx) {
  1679     CellTypeState r_or_p = pop();
  1676     CellTypeState r_or_p = pop();
  1727   }
  1724   }
  1728 
  1725 
  1729   void  doMethod                            (boolean is_static, boolean is_interface, int idx, int bci) {
  1726   void  doMethod                            (boolean is_static, boolean is_interface, int idx, int bci) {
  1730     // Dig up signature for field in constant pool
  1727     // Dig up signature for field in constant pool
  1731     ConstantPool cp       = _method.getConstants();
  1728     ConstantPool cp       = _method.getConstants();
  1732     int nameAndTypeIdx    = cp.getTagAt(idx).isNameAndType() ? idx : cp.getNameAndTypeRefIndexAt(idx);
  1729     Symbol signature      = cp.getSignatureRefAt(idx);
  1733     int signatureIdx      = cp.getSignatureRefIndexAt(nameAndTypeIdx);
       
  1734     Symbol signature      = cp.getSymbolAt(signatureIdx);
       
  1735 
       
  1736     if (DEBUG) {
       
  1737       System.err.println("doMethod: signature = " + signature.asString() + ", idx = " + idx +
       
  1738                          ", nameAndTypeIdx = " + nameAndTypeIdx + ", signatureIdx = " + signatureIdx +
       
  1739                          ", bci = " + bci);
       
  1740     }
       
  1741 
  1730 
  1742     // Parse method signature
  1731     // Parse method signature
  1743     CellTypeStateList out = new CellTypeStateList(4);
  1732     CellTypeStateList out = new CellTypeStateList(4);
  1744     CellTypeStateList in  = new CellTypeStateList(MAXARGSIZE+1);   // Includes result
  1733     CellTypeStateList in  = new CellTypeStateList(MAXARGSIZE+1);   // Includes result
  1745     ComputeCallStack cse  = new ComputeCallStack(signature);
  1734     ComputeCallStack cse  = new ComputeCallStack(signature);