aboutsummaryrefslogtreecommitdiff
path: root/deps/v8
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8')
-rw-r--r--deps/v8/include/v8.h7
-rw-r--r--deps/v8/src/api.cc5
-rw-r--r--deps/v8/src/snapshot/snapshot-common.cc4
-rw-r--r--deps/v8/src/snapshot/snapshot.h3
-rw-r--r--deps/v8/test/cctest/test-serialize.cc2
5 files changed, 19 insertions, 2 deletions
diff --git a/deps/v8/include/v8.h b/deps/v8/include/v8.h
index 1edcf81189..d8141d3b41 100644
--- a/deps/v8/include/v8.h
+++ b/deps/v8/include/v8.h
@@ -8609,6 +8609,13 @@ class V8_EXPORT Isolate {
class V8_EXPORT StartupData {
public:
+ /**
+ * Whether the data created can be rehashed and and the hash seed can be
+ * recomputed when deserialized.
+ * Only valid for StartupData returned by SnapshotCreator::CreateBlob().
+ */
+ bool CanBeRehashed() const;
+
const char* data;
int raw_size;
};
diff --git a/deps/v8/src/api.cc b/deps/v8/src/api.cc
index 4fe3daf9a6..98f75217cf 100644
--- a/deps/v8/src/api.cc
+++ b/deps/v8/src/api.cc
@@ -887,6 +887,11 @@ StartupData SnapshotCreator::CreateBlob(
return result;
}
+bool StartupData::CanBeRehashed() const {
+ DCHECK(i::Snapshot::VerifyChecksum(this));
+ return i::Snapshot::ExtractRehashability(this);
+}
+
void V8::SetDcheckErrorHandler(DcheckErrorCallback that) {
v8::base::SetDcheckFunction(that);
}
diff --git a/deps/v8/src/snapshot/snapshot-common.cc b/deps/v8/src/snapshot/snapshot-common.cc
index 09532aafa0..271317836c 100644
--- a/deps/v8/src/snapshot/snapshot-common.cc
+++ b/deps/v8/src/snapshot/snapshot-common.cc
@@ -229,7 +229,9 @@ uint32_t Snapshot::ExtractContextOffset(const v8::StartupData* data,
bool Snapshot::ExtractRehashability(const v8::StartupData* data) {
CHECK_LT(kRehashabilityOffset, static_cast<uint32_t>(data->raw_size));
- return GetHeaderValue(data, kRehashabilityOffset) != 0;
+ uint32_t rehashability = GetHeaderValue(data, kRehashabilityOffset);
+ CHECK_IMPLIES(rehashability != 0, rehashability == 1);
+ return rehashability != 0;
}
namespace {
diff --git a/deps/v8/src/snapshot/snapshot.h b/deps/v8/src/snapshot/snapshot.h
index 9ac556bc61..3f50f1060e 100644
--- a/deps/v8/src/snapshot/snapshot.h
+++ b/deps/v8/src/snapshot/snapshot.h
@@ -87,11 +87,12 @@ class Snapshot : public AllStatic {
static bool SnapshotIsValid(const v8::StartupData* snapshot_blob);
#endif // DEBUG
+ static bool ExtractRehashability(const v8::StartupData* data);
+
private:
static uint32_t ExtractNumContexts(const v8::StartupData* data);
static uint32_t ExtractContextOffset(const v8::StartupData* data,
uint32_t index);
- static bool ExtractRehashability(const v8::StartupData* data);
static Vector<const byte> ExtractStartupData(const v8::StartupData* data);
static Vector<const byte> ExtractReadOnlyData(const v8::StartupData* data);
static Vector<const byte> ExtractContextData(const v8::StartupData* data,
diff --git a/deps/v8/test/cctest/test-serialize.cc b/deps/v8/test/cctest/test-serialize.cc
index 972b1ca772..878ff9168e 100644
--- a/deps/v8/test/cctest/test-serialize.cc
+++ b/deps/v8/test/cctest/test-serialize.cc
@@ -3709,6 +3709,7 @@ UNINITIALIZED_TEST(ReinitializeHashSeedNotRehashable) {
}
blob =
creator.CreateBlob(v8::SnapshotCreator::FunctionCodeHandling::kClear);
+ CHECK(!blob.CanBeRehashed());
}
i::FLAG_hash_seed = 1337;
@@ -3774,6 +3775,7 @@ UNINITIALIZED_TEST(ReinitializeHashSeedRehashable) {
}
blob =
creator.CreateBlob(v8::SnapshotCreator::FunctionCodeHandling::kClear);
+ CHECK(blob.CanBeRehashed());
}
i::FLAG_hash_seed = 1337;