| Index: src/snapshot/serializer-common.cc
|
| diff --git a/src/snapshot/serializer-common.cc b/src/snapshot/serializer-common.cc
|
| index 89aabdf263b3e70534a3c248ab9002134edbb88d..e3037b6d4d1034257a9748eca984f000741a2f4e 100644
|
| --- a/src/snapshot/serializer-common.cc
|
| +++ b/src/snapshot/serializer-common.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "src/snapshot/serializer-common.h"
|
|
|
| +#include "src/deoptimizer.h"
|
| #include "src/external-reference-table.h"
|
| #include "src/ic/stub-cache.h"
|
| #include "src/list-inl.h"
|
| @@ -12,7 +13,8 @@
|
| namespace v8 {
|
| namespace internal {
|
|
|
| -ExternalReferenceEncoder::ExternalReferenceEncoder(Isolate* isolate) {
|
| +ExternalReferenceEncoder::ExternalReferenceEncoder(Isolate* isolate)
|
| + : isolate_(isolate) {
|
| map_ = isolate->external_reference_map();
|
| #ifdef DEBUG
|
| table_ = ExternalReferenceTable::instance(isolate);
|
| @@ -34,6 +36,18 @@ ExternalReferenceEncoder::ExternalReferenceEncoder(Isolate* isolate) {
|
| uint32_t ExternalReferenceEncoder::Encode(Address address) const {
|
| Maybe<uint32_t> maybe_index = map_->Get(address);
|
| if (maybe_index.IsNothing()) {
|
| + int id =
|
| + Deoptimizer::GetDeoptimizationId(isolate_, address, Deoptimizer::EAGER);
|
| + if (id != Deoptimizer::kNotDeoptimizationEntry)
|
| + return id | ExternalReferenceTable::kEagerDeoptFlag;
|
| + id = Deoptimizer::GetDeoptimizationId(isolate_, address, Deoptimizer::LAZY);
|
| + if (id != Deoptimizer::kNotDeoptimizationEntry)
|
| + return id | ExternalReferenceTable::kLazyDeoptFlag;
|
| + id = Deoptimizer::GetDeoptimizationId(isolate_, address, Deoptimizer::SOFT);
|
| + if (id != Deoptimizer::kNotDeoptimizationEntry)
|
| + return id | ExternalReferenceTable::kSoftDeoptFlag;
|
| + }
|
| + if (maybe_index.IsNothing()) {
|
| void* addr = address;
|
| v8::base::OS::PrintError("Unknown external reference %p.\n", addr);
|
| v8::base::OS::PrintError("%s", ExternalReferenceTable::ResolveSymbol(addr));
|
|
|