--- a/hotspot/src/share/vm/compiler/disassembler.cpp Mon Oct 19 15:48:13 2015 -0400
+++ b/hotspot/src/share/vm/compiler/disassembler.cpp Wed Oct 21 16:38:48 2015 -0400
@@ -56,8 +56,6 @@
#include "shark/sharkEntry.hpp"
#endif
-PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
-
void* Disassembler::_library = NULL;
bool Disassembler::_tried_to_load_library = false;
@@ -337,16 +335,19 @@
if (Universe::is_fully_initialized()) {
if (StubRoutines::contains(adr)) {
StubCodeDesc* desc = StubCodeDesc::desc_for(adr);
- if (desc == NULL)
+ if (desc == NULL) {
desc = StubCodeDesc::desc_for(adr + frame::pc_return_offset);
+ }
if (desc != NULL) {
st->print("Stub::%s", desc->name());
- if (desc->begin() != adr)
- st->print("%+d 0x%p",adr - desc->begin(), adr);
- else if (WizardMode) st->print(" " PTR_FORMAT, adr);
+ if (desc->begin() != adr) {
+ st->print(INTX_FORMAT_W(+) " " PTR_FORMAT, adr - desc->begin(), p2i(adr));
+ } else if (WizardMode) {
+ st->print(" " PTR_FORMAT, p2i(adr));
+ }
return;
}
- st->print("Stub::<unknown> " PTR_FORMAT, adr);
+ st->print("Stub::<unknown> " PTR_FORMAT, p2i(adr));
return;
}
@@ -354,13 +355,13 @@
if (bs->is_a(BarrierSet::CardTableModRef) &&
adr == (address)(barrier_set_cast<CardTableModRefBS>(bs)->byte_map_base)) {
st->print("word_map_base");
- if (WizardMode) st->print(" " INTPTR_FORMAT, (intptr_t)adr);
+ if (WizardMode) st->print(" " INTPTR_FORMAT, p2i(adr));
return;
}
}
// Fall through to a simple (hexadecimal) numeral.
- st->print(PTR_FORMAT, adr);
+ st->print(PTR_FORMAT, p2i(adr));
}
void decode_env::print_insn_labels() {
@@ -372,7 +373,7 @@
}
_strings.print_block_comment(st, (intptr_t)(p - _start));
if (_print_pc) {
- st->print(" " PTR_FORMAT ": ", p);
+ st->print(" " PTR_FORMAT ": ", p2i(p));
}
}
@@ -393,13 +394,16 @@
address pc1 = pc + perline;
if (pc1 > pc_limit) pc1 = pc_limit;
for (; pc < pc1; pc += incr) {
- if (pc == pc0)
+ if (pc == pc0) {
st->print(BYTES_COMMENT);
- else if ((uint)(pc - pc0) % sizeof(int) == 0)
+ } else if ((uint)(pc - pc0) % sizeof(int) == 0) {
st->print(" "); // put out a space on word boundaries
- if (incr == sizeof(int))
- st->print("%08lx", *(int*)pc);
- else st->print("%02x", (*pc)&0xFF);
+ }
+ if (incr == sizeof(int)) {
+ st->print("%08x", *(int*)pc);
+ } else {
+ st->print("%02x", (*pc)&0xFF);
+ }
}
st->cr();
}
@@ -494,8 +498,14 @@
void Disassembler::decode(CodeBlob* cb, outputStream* st) {
if (!load_library()) return;
+ if (cb->is_nmethod()) {
+ decode((nmethod*)cb, st);
+ return;
+ }
decode_env env(cb, st);
- env.output()->print_cr("Decoding CodeBlob " PTR_FORMAT, cb);
+ env.output()->print_cr("----------------------------------------------------------------------");
+ env.output()->print_cr("%s", cb->name());
+ env.output()->print_cr(" at [" PTR_FORMAT ", " PTR_FORMAT "] " JLONG_FORMAT " bytes", p2i(cb->code_begin()), p2i(cb->code_end()), ((jlong)(cb->code_end() - cb->code_begin())) * sizeof(unsigned char*));
env.decode_instructions(cb->code_begin(), cb->code_end());
}
@@ -508,8 +518,7 @@
void Disassembler::decode(nmethod* nm, outputStream* st) {
if (!load_library()) return;
decode_env env(nm, st);
- env.output()->print_cr("Decoding compiled method " PTR_FORMAT ":", nm);
- env.output()->print_cr("Code:");
+ env.output()->print_cr("----------------------------------------------------------------------");
#ifdef SHARK
SharkEntry* entry = (SharkEntry *) nm->code_begin();
@@ -520,6 +529,21 @@
unsigned char* end = nm->code_end();
#endif // SHARK
+ nm->method()->method_holder()->name()->print_symbol_on(env.output());
+ env.output()->print(".");
+ nm->method()->name()->print_symbol_on(env.output());
+ nm->method()->signature()->print_symbol_on(env.output());
+#if INCLUDE_JVMCI
+ {
+ char buffer[O_BUFLEN];
+ char* jvmciName = nm->jvmci_installed_code_name(buffer, O_BUFLEN);
+ if (jvmciName != NULL) {
+ env.output()->print(" (%s)", jvmciName);
+ }
+ }
+#endif
+ env.output()->print_cr(" [" PTR_FORMAT ", " PTR_FORMAT "] " JLONG_FORMAT " bytes", p2i(p), p2i(end), ((jlong)(end - p)));
+
// If there has been profiling, print the buckets.
if (FlatProfiler::bucket_start_for(p) != NULL) {
unsigned char* p1 = p;
@@ -540,9 +564,9 @@
int offset = 0;
for (address p = nm->consts_begin(); p < nm->consts_end(); p += 4, offset += 4) {
if ((offset % 8) == 0) {
- env.output()->print_cr(" " PTR_FORMAT " (offset: %4d): " PTR32_FORMAT " " PTR64_FORMAT, p, offset, *((int32_t*) p), *((int64_t*) p));
+ env.output()->print_cr(" " PTR_FORMAT " (offset: %4d): " PTR32_FORMAT " " PTR64_FORMAT, p2i(p), offset, *((int32_t*) p), *((int64_t*) p));
} else {
- env.output()->print_cr(" " PTR_FORMAT " (offset: %4d): " PTR32_FORMAT, p, offset, *((int32_t*) p));
+ env.output()->print_cr(" " PTR_FORMAT " (offset: %4d): " PTR32_FORMAT, p2i(p), offset, *((int32_t*) p));
}
}
}