Index: src/disassembler.cc |
=================================================================== |
--- src/disassembler.cc (revision 303) |
+++ src/disassembler.cc (working copy) |
@@ -197,55 +197,72 @@ |
out.AddPadding(' ', kRelocInfoPosition); |
} |
- if (is_position(relocinfo.rmode())) { |
- out.AddFormatted(" ;; debug: statement %d", relocinfo.data()); |
- } else if (relocinfo.rmode() == embedded_object) { |
+ RelocMode rmode = relocinfo.rmode(); |
+ if (is_position(rmode)) { |
+ if (is_statement_position(rmode)) { |
+ out.AddFormatted(" ;; debug: statement %d", relocinfo.data()); |
+ } else { |
+ out.AddFormatted(" ;; debug: position %d", relocinfo.data()); |
+ } |
+ } else if (rmode == embedded_object) { |
HeapStringAllocator allocator; |
StringStream accumulator(&allocator); |
relocinfo.target_object()->ShortPrint(&accumulator); |
SmartPointer<char> obj_name = accumulator.ToCString(); |
out.AddFormatted(" ;; object: %s", *obj_name); |
- } else if (relocinfo.rmode() == external_reference) { |
+ } else if (rmode == external_reference) { |
const char* reference_name = |
ref_encoder.NameOfAddress(*relocinfo.target_reference_address()); |
out.AddFormatted(" ;; external reference (%s)", reference_name); |
- } else { |
- out.AddFormatted(" ;; %s", |
- RelocInfo::RelocModeName(relocinfo.rmode())); |
- if (is_code_target(relocinfo.rmode())) { |
- Code* code = Debug::GetCodeTarget(relocinfo.target_address()); |
- Code::Kind kind = code->kind(); |
- if (kind == Code::STUB) { |
- // Reverse lookup required as the minor key cannot be retrieved |
- // from the code object. |
- Object* obj = Heap::code_stubs()->SlowReverseLookup(code); |
- if (obj != Heap::undefined_value()) { |
- ASSERT(obj->IsSmi()); |
- // Get the STUB key and extract major and minor key. |
- uint32_t key = Smi::cast(obj)->value(); |
- uint32_t minor_key = CodeStub::MinorKeyFromKey(key); |
- ASSERT(code->major_key() == CodeStub::MajorKeyFromKey(key)); |
- out.AddFormatted(" (%s, %s, ", |
- Code::Kind2String(kind), |
- CodeStub::MajorName(code->major_key())); |
- switch (code->major_key()) { |
- case CodeStub::CallFunction: |
- out.AddFormatted("argc = %d)", minor_key); |
- break; |
- case CodeStub::Runtime: { |
- const char* name = |
- RuntimeStub::GetNameFromMinorKey(minor_key); |
- out.AddFormatted("%s)", name); |
- break; |
- } |
- default: |
- out.AddFormatted("minor: %d)", minor_key); |
+ } else if (is_code_target(rmode)) { |
+ out.AddFormatted(" ;; code:"); |
+ if (rmode == js_construct_call) { |
+ out.AddFormatted(" constructor,"); |
+ } |
+ Code* code = Debug::GetCodeTarget(relocinfo.target_address()); |
+ Code::Kind kind = code->kind(); |
+ if (code->is_inline_cache_stub()) { |
+ if (rmode == code_target_context) { |
+ out.AddFormatted(" contextual,"); |
+ } |
+ InlineCacheState ic_state = code->ic_state(); |
+ out.AddFormatted(" %s, %s", Code::Kind2String(kind), |
+ Code::ICState2String(ic_state)); |
+ if (kind == Code::CALL_IC) { |
+ out.AddFormatted(", argc = %d", code->arguments_count()); |
+ } |
+ } else if (kind == Code::STUB) { |
+ // Reverse lookup required as the minor key cannot be retrieved |
+ // from the code object. |
+ Object* obj = Heap::code_stubs()->SlowReverseLookup(code); |
+ if (obj != Heap::undefined_value()) { |
+ ASSERT(obj->IsSmi()); |
+ // Get the STUB key and extract major and minor key. |
+ uint32_t key = Smi::cast(obj)->value(); |
+ uint32_t minor_key = CodeStub::MinorKeyFromKey(key); |
+ ASSERT(code->major_key() == CodeStub::MajorKeyFromKey(key)); |
+ out.AddFormatted(" %s, %s, ", |
+ Code::Kind2String(kind), |
+ CodeStub::MajorName(code->major_key())); |
+ switch (code->major_key()) { |
+ case CodeStub::CallFunction: |
+ out.AddFormatted("argc = %d", minor_key); |
+ break; |
+ case CodeStub::Runtime: { |
+ const char* name = |
+ RuntimeStub::GetNameFromMinorKey(minor_key); |
+ out.AddFormatted("%s", name); |
+ break; |
} |
+ default: |
+ out.AddFormatted("minor: %d", minor_key); |
} |
- } else { |
- out.AddFormatted(" (%s)", Code::Kind2String(kind)); |
} |
+ } else { |
+ out.AddFormatted(" %s", Code::Kind2String(kind)); |
} |
+ } else { |
+ out.AddFormatted(" ;; %s", RelocInfo::RelocModeName(rmode)); |
} |
} |
out.AddString("\n"); |