Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(205)

Unified Diff: src/disassembler.cc

Issue 2912063002: Revert of [arm] Share constant pool entries in snapshot. (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/code-stubs.cc ('k') | src/heap/heap.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/disassembler.cc
diff --git a/src/disassembler.cc b/src/disassembler.cc
index 8f0f758e6d9e8d6201df827a13eb68fb71ddb0ef..6c0542ec90369a4da54c140611bbcc446171806b 100644
--- a/src/disassembler.cc
+++ b/src/disassembler.cc
@@ -73,96 +73,6 @@
static const int kOutBufferSize = 2048 + String::kMaxShortPrintLength;
static const int kRelocInfoPosition = 57;
-
-static void PrintRelocInfo(StringBuilder* out, Isolate* isolate,
- const ExternalReferenceEncoder& ref_encoder,
- std::ostream* os, RelocInfo* relocinfo,
- bool first_reloc_info = true) {
- // Indent the printing of the reloc info.
- if (first_reloc_info) {
- // The first reloc info is printed after the disassembled instruction.
- out->AddPadding(' ', kRelocInfoPosition - out->position());
- } else {
- // Additional reloc infos are printed on separate lines.
- DumpBuffer(os, out);
- out->AddPadding(' ', kRelocInfoPosition);
- }
-
- RelocInfo::Mode rmode = relocinfo->rmode();
- if (rmode == RelocInfo::DEOPT_SCRIPT_OFFSET) {
- out->AddFormatted(" ;; debug: deopt position, script offset '%d'",
- static_cast<int>(relocinfo->data()));
- } else if (rmode == RelocInfo::DEOPT_INLINING_ID) {
- out->AddFormatted(" ;; debug: deopt position, inlining id '%d'",
- static_cast<int>(relocinfo->data()));
- } else if (rmode == RelocInfo::DEOPT_REASON) {
- DeoptimizeReason reason = static_cast<DeoptimizeReason>(relocinfo->data());
- out->AddFormatted(" ;; debug: deopt reason '%s'",
- DeoptimizeReasonToString(reason));
- } else if (rmode == RelocInfo::DEOPT_ID) {
- out->AddFormatted(" ;; debug: deopt index %d",
- static_cast<int>(relocinfo->data()));
- } else if (rmode == RelocInfo::EMBEDDED_OBJECT) {
- HeapStringAllocator allocator;
- StringStream accumulator(&allocator);
- relocinfo->target_object()->ShortPrint(&accumulator);
- std::unique_ptr<char[]> obj_name = accumulator.ToCString();
- out->AddFormatted(" ;; object: %s", obj_name.get());
- } else if (rmode == RelocInfo::EXTERNAL_REFERENCE) {
- const char* reference_name = ref_encoder.NameOfAddress(
- isolate, relocinfo->target_external_reference());
- out->AddFormatted(" ;; external reference (%s)", reference_name);
- } else if (RelocInfo::IsCodeTarget(rmode)) {
- out->AddFormatted(" ;; code:");
- Code* code = Code::GetCodeFromTargetAddress(relocinfo->target_address());
- Code::Kind kind = code->kind();
- if (code->is_inline_cache_stub()) {
- out->AddFormatted(" %s", Code::Kind2String(kind));
- if (kind == Code::BINARY_OP_IC || kind == Code::TO_BOOLEAN_IC ||
- kind == Code::COMPARE_IC) {
- InlineCacheState ic_state = IC::StateFromCode(code);
- out->AddFormatted(" %s", Code::ICState2String(ic_state));
- }
- } else if (kind == Code::STUB || kind == Code::HANDLER) {
- // Get the STUB key and extract major and minor key.
- uint32_t key = code->stub_key();
- uint32_t minor_key = CodeStub::MinorKeyFromKey(key);
- CodeStub::Major major_key = CodeStub::GetMajorKey(code);
- DCHECK(major_key == CodeStub::MajorKeyFromKey(key));
- out->AddFormatted(" %s, %s, ", Code::Kind2String(kind),
- CodeStub::MajorName(major_key));
- out->AddFormatted("minor: %d", minor_key);
- } else {
- out->AddFormatted(" %s", Code::Kind2String(kind));
- }
- if (rmode == RelocInfo::CODE_TARGET_WITH_ID) {
- out->AddFormatted(" (id = %d)", static_cast<int>(relocinfo->data()));
- }
- } else if (RelocInfo::IsRuntimeEntry(rmode) &&
- isolate->deoptimizer_data() != nullptr) {
- // A runtime entry reloinfo might be a deoptimization bailout->
- Address addr = relocinfo->target_address();
- int id =
- Deoptimizer::GetDeoptimizationId(isolate, addr, Deoptimizer::EAGER);
- if (id == Deoptimizer::kNotDeoptimizationEntry) {
- id = Deoptimizer::GetDeoptimizationId(isolate, addr, Deoptimizer::LAZY);
- if (id == Deoptimizer::kNotDeoptimizationEntry) {
- id = Deoptimizer::GetDeoptimizationId(isolate, addr, Deoptimizer::SOFT);
- if (id == Deoptimizer::kNotDeoptimizationEntry) {
- out->AddFormatted(" ;; %s", RelocInfo::RelocModeName(rmode));
- } else {
- out->AddFormatted(" ;; soft deoptimization bailout %d", id);
- }
- } else {
- out->AddFormatted(" ;; lazy deoptimization bailout %d", id);
- }
- } else {
- out->AddFormatted(" ;; deoptimization bailout %d", id);
- }
- } else {
- out->AddFormatted(" ;; %s", RelocInfo::RelocModeName(rmode));
- }
-}
static int DecodeIt(Isolate* isolate, std::ostream* os,
const V8NameConverter& converter, byte* begin, byte* end) {
@@ -252,32 +162,97 @@
// Put together the reloc info
RelocInfo relocinfo(pcs[i], rmodes[i], datas[i], converter.code());
- bool first_reloc_info = (i == 0);
- PrintRelocInfo(&out, isolate, ref_encoder, os, &relocinfo,
- first_reloc_info);
- }
-
- // If this is a constant pool load and we haven't found any RelocInfo
- // already, check if we can find some RelocInfo for the target address in
- // the constant pool.
- if (pcs.is_empty() && converter.code() != nullptr) {
- RelocInfo dummy_rinfo(prev_pc, RelocInfo::NONE32, 0, nullptr);
- if (dummy_rinfo.IsInConstantPool()) {
- byte* constant_pool_entry_address =
- dummy_rinfo.constant_pool_entry_address();
- RelocIterator* it = new RelocIterator(converter.code());
- while (!it->done()) {
- if (it->rinfo()->IsInConstantPool() &&
- (it->rinfo()->constant_pool_entry_address() ==
- constant_pool_entry_address)) {
- PrintRelocInfo(&out, isolate, ref_encoder, os, it->rinfo());
- break;
+ // Indent the printing of the reloc info.
+ if (i == 0) {
+ // The first reloc info is printed after the disassembled instruction.
+ out.AddPadding(' ', kRelocInfoPosition - out.position());
+ } else {
+ // Additional reloc infos are printed on separate lines.
+ DumpBuffer(os, &out);
+ out.AddPadding(' ', kRelocInfoPosition);
+ }
+
+ RelocInfo::Mode rmode = relocinfo.rmode();
+ if (rmode == RelocInfo::DEOPT_SCRIPT_OFFSET) {
+ out.AddFormatted(" ;; debug: deopt position, script offset '%d'",
+ static_cast<int>(relocinfo.data()));
+ } else if (rmode == RelocInfo::DEOPT_INLINING_ID) {
+ out.AddFormatted(" ;; debug: deopt position, inlining id '%d'",
+ static_cast<int>(relocinfo.data()));
+ } else if (rmode == RelocInfo::DEOPT_REASON) {
+ DeoptimizeReason reason =
+ static_cast<DeoptimizeReason>(relocinfo.data());
+ out.AddFormatted(" ;; debug: deopt reason '%s'",
+ DeoptimizeReasonToString(reason));
+ } else if (rmode == RelocInfo::DEOPT_ID) {
+ out.AddFormatted(" ;; debug: deopt index %d",
+ static_cast<int>(relocinfo.data()));
+ } else if (rmode == RelocInfo::EMBEDDED_OBJECT) {
+ HeapStringAllocator allocator;
+ StringStream accumulator(&allocator);
+ relocinfo.target_object()->ShortPrint(&accumulator);
+ std::unique_ptr<char[]> obj_name = accumulator.ToCString();
+ out.AddFormatted(" ;; object: %s", obj_name.get());
+ } else if (rmode == RelocInfo::EXTERNAL_REFERENCE) {
+ const char* reference_name = ref_encoder.NameOfAddress(
+ isolate, relocinfo.target_external_reference());
+ out.AddFormatted(" ;; external reference (%s)", reference_name);
+ } else if (RelocInfo::IsCodeTarget(rmode)) {
+ out.AddFormatted(" ;; code:");
+ Code* code = Code::GetCodeFromTargetAddress(relocinfo.target_address());
+ Code::Kind kind = code->kind();
+ if (code->is_inline_cache_stub()) {
+ out.AddFormatted(" %s", Code::Kind2String(kind));
+ if (kind == Code::BINARY_OP_IC || kind == Code::TO_BOOLEAN_IC ||
+ kind == Code::COMPARE_IC) {
+ InlineCacheState ic_state = IC::StateFromCode(code);
+ out.AddFormatted(" %s", Code::ICState2String(ic_state));
}
- it->next();
- }
- }
- }
-
+ } else if (kind == Code::STUB || kind == Code::HANDLER) {
+ // Get the STUB key and extract major and minor key.
+ uint32_t key = code->stub_key();
+ uint32_t minor_key = CodeStub::MinorKeyFromKey(key);
+ CodeStub::Major major_key = CodeStub::GetMajorKey(code);
+ DCHECK(major_key == CodeStub::MajorKeyFromKey(key));
+ out.AddFormatted(" %s, %s, ", Code::Kind2String(kind),
+ CodeStub::MajorName(major_key));
+ out.AddFormatted("minor: %d", minor_key);
+ } else {
+ out.AddFormatted(" %s", Code::Kind2String(kind));
+ }
+ if (rmode == RelocInfo::CODE_TARGET_WITH_ID) {
+ out.AddFormatted(" (id = %d)", static_cast<int>(relocinfo.data()));
+ }
+ } else if (RelocInfo::IsRuntimeEntry(rmode) &&
+ isolate->deoptimizer_data() != NULL) {
+ // A runtime entry reloinfo might be a deoptimization bailout.
+ Address addr = relocinfo.target_address();
+ int id = Deoptimizer::GetDeoptimizationId(isolate,
+ addr,
+ Deoptimizer::EAGER);
+ if (id == Deoptimizer::kNotDeoptimizationEntry) {
+ id = Deoptimizer::GetDeoptimizationId(isolate,
+ addr,
+ Deoptimizer::LAZY);
+ if (id == Deoptimizer::kNotDeoptimizationEntry) {
+ id = Deoptimizer::GetDeoptimizationId(isolate,
+ addr,
+ Deoptimizer::SOFT);
+ if (id == Deoptimizer::kNotDeoptimizationEntry) {
+ out.AddFormatted(" ;; %s", RelocInfo::RelocModeName(rmode));
+ } else {
+ out.AddFormatted(" ;; soft deoptimization bailout %d", id);
+ }
+ } else {
+ out.AddFormatted(" ;; lazy deoptimization bailout %d", id);
+ }
+ } else {
+ out.AddFormatted(" ;; deoptimization bailout %d", id);
+ }
+ } else {
+ out.AddFormatted(" ;; %s", RelocInfo::RelocModeName(rmode));
+ }
+ }
DumpBuffer(os, &out);
}
« no previous file with comments | « src/code-stubs.cc ('k') | src/heap/heap.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698