| Index: runtime/vm/disassembler.cc
|
| diff --git a/runtime/vm/disassembler.cc b/runtime/vm/disassembler.cc
|
| index 986b9b2e48895ffb41e54b18d3e49c54800403b7..99b13ce4bb29afcd9145c2ad30e11701a15c51f2 100644
|
| --- a/runtime/vm/disassembler.cc
|
| +++ b/runtime/vm/disassembler.cc
|
| @@ -7,14 +7,17 @@
|
| #include "vm/assembler.h"
|
| #include "vm/globals.h"
|
| #include "vm/il_printer.h"
|
| +#include "vm/instructions.h"
|
| #include "vm/json_stream.h"
|
| #include "vm/log.h"
|
| #include "vm/os.h"
|
| +#include "vm/code_patcher.h"
|
|
|
|
|
| namespace dart {
|
|
|
| -void DisassembleToStdout::ConsumeInstruction(char* hex_buffer,
|
| +void DisassembleToStdout::ConsumeInstruction(const Code& code,
|
| + char* hex_buffer,
|
| intptr_t hex_size,
|
| char* human_buffer,
|
| intptr_t human_size,
|
| @@ -41,18 +44,26 @@ void DisassembleToStdout::Print(const char* format, ...) {
|
| }
|
|
|
|
|
| -void DisassembleToJSONStream::ConsumeInstruction(char* hex_buffer,
|
| +void DisassembleToJSONStream::ConsumeInstruction(const Code& code,
|
| + char* hex_buffer,
|
| intptr_t hex_size,
|
| char* human_buffer,
|
| intptr_t human_size,
|
| uword pc) {
|
| - // Instructions are represented as three consecutive values in a JSON array.
|
| - // All three are strings. The first is the address of the instruction,
|
| - // the second is the hex string of the code, and the final is a human
|
| - // readable string.
|
| + // Instructions are represented as four consecutive values in a JSON array.
|
| + // The first is the address of the instruction, the second is the hex string,
|
| + // of the code, and the third is a human readable string, and the fourth is
|
| + // the object loaded by the instruction.
|
| jsarr_.AddValueF("%" Pp "", pc);
|
| jsarr_.AddValue(hex_buffer);
|
| jsarr_.AddValue(human_buffer);
|
| +
|
| + Object& object = Object::Handle();
|
| + if (DecodeLoadObjectFromPoolOrThread(pc, code, &object)) {
|
| + jsarr_.AddValue(object);
|
| + } else {
|
| + jsarr_.AddValueNull(); // Not a reference to null.
|
| + }
|
| }
|
|
|
|
|
| @@ -71,12 +82,12 @@ void DisassembleToJSONStream::Print(const char* format, ...) {
|
| p[i] = ' ';
|
| }
|
| }
|
| - // Instructions are represented as three consecutive values in a JSON array.
|
| - // All three are strings. Comments only use the third slot. See above comment
|
| - // for more information.
|
| - jsarr_.AddValue("");
|
| - jsarr_.AddValue("");
|
| + // Instructions are represented as four consecutive values in a JSON array.
|
| + // Comments only use the third slot. See above comment for more information.
|
| + jsarr_.AddValueNull();
|
| + jsarr_.AddValueNull();
|
| jsarr_.AddValue(p);
|
| + jsarr_.AddValueNull();
|
| free(p);
|
| }
|
|
|
| @@ -158,7 +169,8 @@ void Disassembler::Disassemble(uword start,
|
| human_buffer,
|
| sizeof(human_buffer),
|
| &instruction_length, pc);
|
| - formatter->ConsumeInstruction(hex_buffer,
|
| + formatter->ConsumeInstruction(code,
|
| + hex_buffer,
|
| sizeof(hex_buffer),
|
| human_buffer,
|
| sizeof(human_buffer),
|
|
|