src/share/vm/compiler/disassembler.cpp

changeset 1590
4e6abf09f540
parent 535
c7c777385a15
child 1907
c18cbe5936b8
equal deleted inserted replaced
1588:bea7a22a6f79 1590:4e6abf09f540
149 void end_insn(address pc) { 149 void end_insn(address pc) {
150 address pc0 = cur_insn(); 150 address pc0 = cur_insn();
151 outputStream* st = output(); 151 outputStream* st = output();
152 if (_print_bytes && pc > pc0) 152 if (_print_bytes && pc > pc0)
153 print_insn_bytes(pc0, pc); 153 print_insn_bytes(pc0, pc);
154 if (_nm != NULL) 154 if (_nm != NULL) {
155 _nm->print_code_comment_on(st, COMMENT_COLUMN, pc0, pc); 155 _nm->print_code_comment_on(st, COMMENT_COLUMN, pc0, pc);
156 // this calls reloc_string_for which calls oop::print_value_on
157 }
156 158
157 // Output pc bucket ticks if we have any 159 // Output pc bucket ticks if we have any
158 if (total_ticks() != 0) { 160 if (total_ticks() != 0) {
159 address bucket_pc = FlatProfiler::bucket_start_for(pc); 161 address bucket_pc = FlatProfiler::bucket_start_for(pc);
160 if (bucket_pc != NULL && bucket_pc > pc0 && bucket_pc <= pc) { 162 if (bucket_pc != NULL && bucket_pc > pc0 && bucket_pc <= pc) {
271 } 273 }
272 274
273 oop obj; 275 oop obj;
274 if (_nm != NULL 276 if (_nm != NULL
275 && (obj = _nm->embeddedOop_at(cur_insn())) != NULL 277 && (obj = _nm->embeddedOop_at(cur_insn())) != NULL
276 && (address) obj == adr) { 278 && (address) obj == adr
279 && Universe::heap()->is_in(obj)
280 && Universe::heap()->is_in(obj->klass())) {
281 julong c = st->count();
277 obj->print_value_on(st); 282 obj->print_value_on(st);
283 if (st->count() == c) {
284 // No output. (Can happen in product builds.)
285 st->print("(a %s)", Klass::cast(obj->klass())->external_name());
286 }
278 return; 287 return;
279 } 288 }
280 } 289 }
281 290
282 // Fall through to a simple numeral. 291 // Fall through to a simple numeral.
284 } 293 }
285 294
286 void decode_env::print_insn_labels() { 295 void decode_env::print_insn_labels() {
287 address p = cur_insn(); 296 address p = cur_insn();
288 outputStream* st = output(); 297 outputStream* st = output();
289 nmethod* nm = _nm;
290 if (nm != NULL) {
291 if (p == nm->entry_point()) st->print_cr("[Entry Point]");
292 if (p == nm->verified_entry_point()) st->print_cr("[Verified Entry Point]");
293 if (p == nm->exception_begin()) st->print_cr("[Exception Handler]");
294 if (p == nm->stub_begin()) st->print_cr("[Stub Code]");
295 if (p == nm->consts_begin()) st->print_cr("[Constants]");
296 }
297 CodeBlob* cb = _code; 298 CodeBlob* cb = _code;
298 if (cb != NULL) { 299 if (cb != NULL) {
299 cb->print_block_comment(st, (intptr_t)(p - cb->instructions_begin())); 300 cb->print_block_comment(st, p);
300 } 301 }
301 if (_print_pc) { 302 if (_print_pc) {
302 st->print(" " INTPTR_FORMAT ": ", (intptr_t) p); 303 st->print(" " INTPTR_FORMAT ": ", (intptr_t) p);
303 } 304 }
304 } 305 }

mercurial