hotspot/src/share/vm/compiler/disassembler.cpp
changeset 9630 d6419e4395e3
parent 8921 14bfe81f2a9d
child 10017 34ddce3361b7
equal deleted inserted replaced
9629:1f4dc6af5ad8 9630:d6419e4395e3
   281         desc = StubCodeDesc::desc_for(adr + frame::pc_return_offset);
   281         desc = StubCodeDesc::desc_for(adr + frame::pc_return_offset);
   282       if (desc != NULL) {
   282       if (desc != NULL) {
   283         st->print("Stub::%s", desc->name());
   283         st->print("Stub::%s", desc->name());
   284         if (desc->begin() != adr)
   284         if (desc->begin() != adr)
   285           st->print("%+d 0x%p",adr - desc->begin(), adr);
   285           st->print("%+d 0x%p",adr - desc->begin(), adr);
   286         else if (WizardMode) st->print(" " INTPTR_FORMAT, adr);
   286         else if (WizardMode) st->print(" " PTR_FORMAT, adr);
   287         return;
   287         return;
   288       }
   288       }
   289       st->print("Stub::<unknown> " INTPTR_FORMAT, adr);
   289       st->print("Stub::<unknown> " PTR_FORMAT, adr);
   290       return;
   290       return;
   291     }
   291     }
   292 
   292 
   293     BarrierSet* bs = Universe::heap()->barrier_set();
   293     BarrierSet* bs = Universe::heap()->barrier_set();
   294     if (bs->kind() == BarrierSet::CardTableModRef &&
   294     if (bs->kind() == BarrierSet::CardTableModRef &&
   312       }
   312       }
   313       return;
   313       return;
   314     }
   314     }
   315   }
   315   }
   316 
   316 
   317   // Fall through to a simple numeral.
   317   // Fall through to a simple (hexadecimal) numeral.
   318   st->print(INTPTR_FORMAT, (intptr_t)adr);
   318   st->print(PTR_FORMAT, adr);
   319 }
   319 }
   320 
   320 
   321 void decode_env::print_insn_labels() {
   321 void decode_env::print_insn_labels() {
   322   address p = cur_insn();
   322   address p = cur_insn();
   323   outputStream* st = output();
   323   outputStream* st = output();
   324   CodeBlob* cb = _code;
   324   CodeBlob* cb = _code;
   325   if (cb != NULL) {
   325   if (cb != NULL) {
   326     cb->print_block_comment(st, p);
   326     cb->print_block_comment(st, p);
   327   }
   327   }
   328   if (_print_pc) {
   328   if (_print_pc) {
   329     st->print("  " INTPTR_FORMAT ": ", (intptr_t) p);
   329     st->print("  " PTR_FORMAT ": ", p);
   330   }
   330   }
   331 }
   331 }
   332 
   332 
   333 void decode_env::print_insn_bytes(address pc, address pc_limit) {
   333 void decode_env::print_insn_bytes(address pc, address pc_limit) {
   334   outputStream* st = output();
   334   outputStream* st = output();
   430 
   430 
   431 
   431 
   432 void Disassembler::decode(CodeBlob* cb, outputStream* st) {
   432 void Disassembler::decode(CodeBlob* cb, outputStream* st) {
   433   if (!load_library())  return;
   433   if (!load_library())  return;
   434   decode_env env(cb, st);
   434   decode_env env(cb, st);
   435   env.output()->print_cr("Decoding CodeBlob " INTPTR_FORMAT, cb);
   435   env.output()->print_cr("Decoding CodeBlob " PTR_FORMAT, cb);
   436   env.decode_instructions(cb->code_begin(), cb->code_end());
   436   env.decode_instructions(cb->code_begin(), cb->code_end());
   437 }
   437 }
   438 
   438 
   439 
   439 
   440 void Disassembler::decode(address start, address end, outputStream* st) {
   440 void Disassembler::decode(address start, address end, outputStream* st) {
   444 }
   444 }
   445 
   445 
   446 void Disassembler::decode(nmethod* nm, outputStream* st) {
   446 void Disassembler::decode(nmethod* nm, outputStream* st) {
   447   if (!load_library())  return;
   447   if (!load_library())  return;
   448   decode_env env(nm, st);
   448   decode_env env(nm, st);
   449   env.output()->print_cr("Decoding compiled method " INTPTR_FORMAT ":", nm);
   449   env.output()->print_cr("Decoding compiled method " PTR_FORMAT ":", nm);
   450   env.output()->print_cr("Code:");
   450   env.output()->print_cr("Code:");
   451 
   451 
   452 #ifdef SHARK
   452 #ifdef SHARK
   453   SharkEntry* entry = (SharkEntry *) nm->code_begin();
   453   SharkEntry* entry = (SharkEntry *) nm->code_begin();
   454   unsigned char* p   = entry->code_start();
   454   unsigned char* p   = entry->code_start();
   476   if (nm->consts_size() > 0) {
   476   if (nm->consts_size() > 0) {
   477     nm->print_nmethod_labels(env.output(), nm->consts_begin());
   477     nm->print_nmethod_labels(env.output(), nm->consts_begin());
   478     int offset = 0;
   478     int offset = 0;
   479     for (address p = nm->consts_begin(); p < nm->consts_end(); p += 4, offset += 4) {
   479     for (address p = nm->consts_begin(); p < nm->consts_end(); p += 4, offset += 4) {
   480       if ((offset % 8) == 0) {
   480       if ((offset % 8) == 0) {
   481         env.output()->print_cr("  " INTPTR_FORMAT " (offset: %4d): " PTR32_FORMAT "   " PTR64_FORMAT, (intptr_t) p, offset, *((int32_t*) p), *((int64_t*) p));
   481         env.output()->print_cr("  " PTR_FORMAT " (offset: %4d): " PTR32_FORMAT "   " PTR64_FORMAT, p, offset, *((int32_t*) p), *((int64_t*) p));
   482       } else {
   482       } else {
   483         env.output()->print_cr("  " INTPTR_FORMAT " (offset: %4d): " PTR32_FORMAT,                    (intptr_t) p, offset, *((int32_t*) p));
   483         env.output()->print_cr("  " PTR_FORMAT " (offset: %4d): " PTR32_FORMAT,                    p, offset, *((int32_t*) p));
   484       }
   484       }
   485     }
   485     }
   486   }
   486   }
   487 
   487 
   488   env.decode_instructions(p, end);
   488   env.decode_instructions(p, end);