hotspot/src/share/vm/interpreter/bytecodeTracer.cpp
changeset 8076 96d498ec7ae1
parent 7913 dd096a83bdbb
child 9116 9bc44be338d6
equal deleted inserted replaced
8075:582dd25571b2 8076:96d498ec7ae1
   186 void BytecodeTracer::trace(methodHandle method, address bcp, outputStream* st) {
   186 void BytecodeTracer::trace(methodHandle method, address bcp, outputStream* st) {
   187   ttyLocker ttyl;  // 5065316: keep the following output coherent
   187   ttyLocker ttyl;  // 5065316: keep the following output coherent
   188   _closure->trace(method, bcp, st);
   188   _closure->trace(method, bcp, st);
   189 }
   189 }
   190 
   190 
   191 void print_symbol(symbolOop sym, outputStream* st) {
   191 void print_symbol(Symbol* sym, outputStream* st) {
   192   char buf[40];
   192   char buf[40];
   193   int len = sym->utf8_length();
   193   int len = sym->utf8_length();
   194   if (len >= (int)sizeof(buf)) {
   194   if (len >= (int)sizeof(buf)) {
   195     st->print_cr(" %s...[%d]", sym->as_C_string(buf, sizeof(buf)), len);
   195     st->print_cr(" %s...[%d]", sym->as_C_string(buf, sizeof(buf)), len);
   196   } else {
   196   } else {
   203   if (value == NULL) {
   203   if (value == NULL) {
   204     st->print_cr(" NULL");
   204     st->print_cr(" NULL");
   205   } else if (java_lang_String::is_instance(value)) {
   205   } else if (java_lang_String::is_instance(value)) {
   206     EXCEPTION_MARK;
   206     EXCEPTION_MARK;
   207     Handle h_value (THREAD, value);
   207     Handle h_value (THREAD, value);
   208     symbolHandle sym = java_lang_String::as_symbol(h_value, CATCH);
   208     Symbol* sym = java_lang_String::as_symbol(h_value, CATCH);
   209     print_symbol(sym(), st);
   209     print_symbol(sym, st);
   210   } else if (value->is_symbol()) {
   210     sym->decrement_refcount();
   211     print_symbol(symbolOop(value), st);
       
   212   } else {
   211   } else {
   213     st->print_cr(" " PTR_FORMAT, (intptr_t) value);
   212     st->print_cr(" " PTR_FORMAT, (intptr_t) value);
   214   }
   213   }
   215 }
   214 }
   216 
   215 
   314     st->print(" <Object>");
   313     st->print(" <Object>");
   315     print_oop(constants->object_at(i), st);
   314     print_oop(constants->object_at(i), st);
   316   } else if (tag.is_method_type()) {
   315   } else if (tag.is_method_type()) {
   317     int i2 = constants->method_type_index_at(i);
   316     int i2 = constants->method_type_index_at(i);
   318     st->print(" <MethodType> %d", i2);
   317     st->print(" <MethodType> %d", i2);
   319     print_oop(constants->symbol_at(i2), st);
   318     print_symbol(constants->symbol_at(i2), st);
   320   } else if (tag.is_method_handle()) {
   319   } else if (tag.is_method_handle()) {
   321     int kind = constants->method_handle_ref_kind_at(i);
   320     int kind = constants->method_handle_ref_kind_at(i);
   322     int i2 = constants->method_handle_index_at(i);
   321     int i2 = constants->method_handle_index_at(i);
   323     st->print(" <MethodHandle of kind %d>", kind, i2);
   322     st->print(" <MethodHandle of kind %d>", kind, i2);
   324     print_field_or_method(-i, i2, st);
   323     print_field_or_method(-i, i2, st);
   352   default:
   351   default:
   353     st->print_cr(" bad tag=%d at %d", tag.value(), i);
   352     st->print_cr(" bad tag=%d at %d", tag.value(), i);
   354     return;
   353     return;
   355   }
   354   }
   356 
   355 
   357   symbolOop name = constants->uncached_name_ref_at(i);
   356   Symbol* name = constants->uncached_name_ref_at(i);
   358   symbolOop signature = constants->uncached_signature_ref_at(i);
   357   Symbol* signature = constants->uncached_signature_ref_at(i);
   359   const char* sep = (tag.is_field() ? "/" : "");
   358   const char* sep = (tag.is_field() ? "/" : "");
   360   if (has_klass) {
   359   if (has_klass) {
   361     symbolOop klass = constants->klass_name_at(constants->uncached_klass_ref_index_at(i));
   360     Symbol* klass = constants->klass_name_at(constants->uncached_klass_ref_index_at(i));
   362     st->print_cr(" %d <%s.%s%s%s> ", i, klass->as_C_string(), name->as_C_string(), sep, signature->as_C_string());
   361     st->print_cr(" %d <%s.%s%s%s> ", i, klass->as_C_string(), name->as_C_string(), sep, signature->as_C_string());
   363   } else {
   362   } else {
   364     if (tag.is_invoke_dynamic()) {
   363     if (tag.is_invoke_dynamic()) {
   365       int bsm = constants->invoke_dynamic_bootstrap_method_ref_index_at(i);
   364       int bsm = constants->invoke_dynamic_bootstrap_method_ref_index_at(i);
   366       st->print(" bsm=%d", bsm);
   365       st->print(" bsm=%d", bsm);
   436       }
   435       }
   437       break;
   436       break;
   438     case Bytecodes::_anewarray: {
   437     case Bytecodes::_anewarray: {
   439         int klass_index = get_index_u2();
   438         int klass_index = get_index_u2();
   440         constantPoolOop constants = method()->constants();
   439         constantPoolOop constants = method()->constants();
   441         symbolOop name = constants->klass_name_at(klass_index);
   440         Symbol* name = constants->klass_name_at(klass_index);
   442         st->print_cr(" %s ", name->as_C_string());
   441         st->print_cr(" %s ", name->as_C_string());
   443       }
   442       }
   444       break;
   443       break;
   445     case Bytecodes::_multianewarray: {
   444     case Bytecodes::_multianewarray: {
   446         int klass_index = get_index_u2();
   445         int klass_index = get_index_u2();
   447         int nof_dims = get_index_u1();
   446         int nof_dims = get_index_u1();
   448         constantPoolOop constants = method()->constants();
   447         constantPoolOop constants = method()->constants();
   449         symbolOop name = constants->klass_name_at(klass_index);
   448         Symbol* name = constants->klass_name_at(klass_index);
   450         st->print_cr(" %s %d", name->as_C_string(), nof_dims);
   449         st->print_cr(" %s %d", name->as_C_string(), nof_dims);
   451       }
   450       }
   452       break;
   451       break;
   453 
   452 
   454     case Bytecodes::_ifeq:
   453     case Bytecodes::_ifeq:
   550     case Bytecodes::_new:
   549     case Bytecodes::_new:
   551     case Bytecodes::_checkcast:
   550     case Bytecodes::_checkcast:
   552     case Bytecodes::_instanceof:
   551     case Bytecodes::_instanceof:
   553       { int i = get_index_u2();
   552       { int i = get_index_u2();
   554         constantPoolOop constants = method()->constants();
   553         constantPoolOop constants = method()->constants();
   555         symbolOop name = constants->klass_name_at(i);
   554         Symbol* name = constants->klass_name_at(i);
   556         st->print_cr(" %d <%s>", i, name->as_C_string());
   555         st->print_cr(" %d <%s>", i, name->as_C_string());
   557       }
   556       }
   558       break;
   557       break;
   559 
   558 
   560     case Bytecodes::_wide:
   559     case Bytecodes::_wide: