summaryrefslogtreecommitdiffstats
path: root/src/disassembler.cc
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2011-11-30 16:03:39 +0000
committerBen Murdoch <benm@google.com>2011-12-02 17:28:02 +0000
commit69a99ed0b2b2ef69d393c371b03db3a98aaf880e (patch)
tree6438154d0f3ab526b9206f8860fa4db5cf073c11 /src/disassembler.cc
parent3fb3ca8c7ca439d408449a395897395c0faae8d1 (diff)
downloadandroid_external_v8-69a99ed0b2b2ef69d393c371b03db3a98aaf880e.tar.gz
android_external_v8-69a99ed0b2b2ef69d393c371b03db3a98aaf880e.tar.bz2
android_external_v8-69a99ed0b2b2ef69d393c371b03db3a98aaf880e.zip
Upgrade to V8 3.5
Merge V8 3.5.10.24 Simple merge required updates to makefiles only. Bug: 5688872 Change-Id: I0acdb9a1a53919d84e9a7525308e8371739d2f06
Diffstat (limited to 'src/disassembler.cc')
-rw-r--r--src/disassembler.cc36
1 files changed, 22 insertions, 14 deletions
diff --git a/src/disassembler.cc b/src/disassembler.cc
index 368c3a89..79076d6a 100644
--- a/src/disassembler.cc
+++ b/src/disassembler.cc
@@ -97,14 +97,17 @@ const char* V8NameConverter::NameInCode(byte* addr) const {
}
-static void DumpBuffer(FILE* f, char* buff) {
+static void DumpBuffer(FILE* f, StringBuilder* out) {
if (f == NULL) {
- PrintF("%s", buff);
+ PrintF("%s\n", out->Finalize());
} else {
- fprintf(f, "%s", buff);
+ fprintf(f, "%s\n", out->Finalize());
}
+ out->Reset();
}
+
+
static const int kOutBufferSize = 2048 + String::kMaxShortPrintLength;
static const int kRelocInfoPosition = 57;
@@ -119,6 +122,7 @@ static int DecodeIt(FILE* f,
v8::internal::EmbeddedVector<char, 128> decode_buffer;
v8::internal::EmbeddedVector<char, kOutBufferSize> out_buffer;
+ StringBuilder out(out_buffer.start(), out_buffer.length());
byte* pc = begin;
disasm::Disassembler d(converter);
RelocIterator* it = NULL;
@@ -181,17 +185,12 @@ static int DecodeIt(FILE* f,
}
}
- StringBuilder out(out_buffer.start(), out_buffer.length());
-
// Comments.
for (int i = 0; i < comments.length(); i++) {
- out.AddFormatted(" %s\n", comments[i]);
+ out.AddFormatted(" %s", comments[i]);
+ DumpBuffer(f, &out);
}
- // Write out comments, resets outp so that we can format the next line.
- DumpBuffer(f, out.Finalize());
- out.Reset();
-
// Instruction address and instruction offset.
out.AddFormatted("%p %4d ", prev_pc, prev_pc - begin);
@@ -209,7 +208,7 @@ static int DecodeIt(FILE* f,
out.AddPadding(' ', kRelocInfoPosition - out.position());
} else {
// Additional reloc infos are printed on separate lines.
- out.AddFormatted("\n");
+ DumpBuffer(f, &out);
out.AddPadding(' ', kRelocInfoPosition);
}
@@ -299,9 +298,18 @@ static int DecodeIt(FILE* f,
out.AddFormatted(" ;; %s", RelocInfo::RelocModeName(rmode));
}
}
- out.AddString("\n");
- DumpBuffer(f, out.Finalize());
- out.Reset();
+ DumpBuffer(f, &out);
+ }
+
+ // Emit comments following the last instruction (if any).
+ if (it != NULL) {
+ for ( ; !it->done(); it->next()) {
+ if (RelocInfo::IsComment(it->rinfo()->rmode())) {
+ out.AddFormatted(" %s",
+ reinterpret_cast<const char*>(it->rinfo()->data()));
+ DumpBuffer(f, &out);
+ }
+ }
}
delete it;