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

Side by Side Diff: src/snapshot/code-serializer.cc

Issue 2237883002: [serializer] checksum a larger part of the code snapshot. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: . Created 4 years, 4 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 unified diff | Download patch
« no previous file with comments | « src/snapshot/code-serializer.h ('k') | src/snapshot/deserializer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/snapshot/code-serializer.h" 5 #include "src/snapshot/code-serializer.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "src/code-stubs.h" 9 #include "src/code-stubs.h"
10 #include "src/log.h" 10 #include "src/log.h"
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 SetMagicNumber(cs->isolate()); 308 SetMagicNumber(cs->isolate());
309 SetHeaderValue(kVersionHashOffset, Version::Hash()); 309 SetHeaderValue(kVersionHashOffset, Version::Hash());
310 SetHeaderValue(kSourceHashOffset, cs->source_hash()); 310 SetHeaderValue(kSourceHashOffset, cs->source_hash());
311 SetHeaderValue(kCpuFeaturesOffset, 311 SetHeaderValue(kCpuFeaturesOffset,
312 static_cast<uint32_t>(CpuFeatures::SupportedFeatures())); 312 static_cast<uint32_t>(CpuFeatures::SupportedFeatures()));
313 SetHeaderValue(kFlagHashOffset, FlagList::Hash()); 313 SetHeaderValue(kFlagHashOffset, FlagList::Hash());
314 SetHeaderValue(kNumReservationsOffset, reservations.length()); 314 SetHeaderValue(kNumReservationsOffset, reservations.length());
315 SetHeaderValue(kNumCodeStubKeysOffset, num_stub_keys); 315 SetHeaderValue(kNumCodeStubKeysOffset, num_stub_keys);
316 SetHeaderValue(kPayloadLengthOffset, payload->length()); 316 SetHeaderValue(kPayloadLengthOffset, payload->length());
317 317
318 Checksum checksum(payload->ToConstVector());
319 SetHeaderValue(kChecksum1Offset, checksum.a());
320 SetHeaderValue(kChecksum2Offset, checksum.b());
321
322 // Copy reservation chunk sizes. 318 // Copy reservation chunk sizes.
323 CopyBytes(data_ + kHeaderSize, reinterpret_cast<byte*>(reservations.begin()), 319 CopyBytes(data_ + kHeaderSize, reinterpret_cast<byte*>(reservations.begin()),
324 reservation_size); 320 reservation_size);
325 321
326 // Copy code stub keys. 322 // Copy code stub keys.
327 CopyBytes(data_ + kHeaderSize + reservation_size, 323 CopyBytes(data_ + kHeaderSize + reservation_size,
328 reinterpret_cast<byte*>(stub_keys->begin()), stub_keys_size); 324 reinterpret_cast<byte*>(stub_keys->begin()), stub_keys_size);
329 325
330 memset(data_ + payload_offset, 0, padded_payload_offset - payload_offset); 326 memset(data_ + payload_offset, 0, padded_payload_offset - payload_offset);
331 327
332 // Copy serialized data. 328 // Copy serialized data.
333 CopyBytes(data_ + padded_payload_offset, payload->begin(), 329 CopyBytes(data_ + padded_payload_offset, payload->begin(),
334 static_cast<size_t>(payload->length())); 330 static_cast<size_t>(payload->length()));
331
332 Checksum checksum(DataWithoutHeader());
333 SetHeaderValue(kChecksum1Offset, checksum.a());
334 SetHeaderValue(kChecksum2Offset, checksum.b());
335 } 335 }
336 336
337 SerializedCodeData::SanityCheckResult SerializedCodeData::SanityCheck( 337 SerializedCodeData::SanityCheckResult SerializedCodeData::SanityCheck(
338 Isolate* isolate, uint32_t expected_source_hash) const { 338 Isolate* isolate, uint32_t expected_source_hash) const {
339 uint32_t magic_number = GetMagicNumber(); 339 uint32_t magic_number = GetMagicNumber();
340 if (magic_number != ComputeMagicNumber(isolate)) return MAGIC_NUMBER_MISMATCH; 340 if (magic_number != ComputeMagicNumber(isolate)) return MAGIC_NUMBER_MISMATCH;
341 uint32_t version_hash = GetHeaderValue(kVersionHashOffset); 341 uint32_t version_hash = GetHeaderValue(kVersionHashOffset);
342 uint32_t source_hash = GetHeaderValue(kSourceHashOffset); 342 uint32_t source_hash = GetHeaderValue(kSourceHashOffset);
343 uint32_t cpu_features = GetHeaderValue(kCpuFeaturesOffset); 343 uint32_t cpu_features = GetHeaderValue(kCpuFeaturesOffset);
344 uint32_t flags_hash = GetHeaderValue(kFlagHashOffset); 344 uint32_t flags_hash = GetHeaderValue(kFlagHashOffset);
345 uint32_t c1 = GetHeaderValue(kChecksum1Offset); 345 uint32_t c1 = GetHeaderValue(kChecksum1Offset);
346 uint32_t c2 = GetHeaderValue(kChecksum2Offset); 346 uint32_t c2 = GetHeaderValue(kChecksum2Offset);
347 if (version_hash != Version::Hash()) return VERSION_MISMATCH; 347 if (version_hash != Version::Hash()) return VERSION_MISMATCH;
348 if (source_hash != expected_source_hash) return SOURCE_MISMATCH; 348 if (source_hash != expected_source_hash) return SOURCE_MISMATCH;
349 if (cpu_features != static_cast<uint32_t>(CpuFeatures::SupportedFeatures())) { 349 if (cpu_features != static_cast<uint32_t>(CpuFeatures::SupportedFeatures())) {
350 return CPU_FEATURES_MISMATCH; 350 return CPU_FEATURES_MISMATCH;
351 } 351 }
352 if (flags_hash != FlagList::Hash()) return FLAGS_MISMATCH; 352 if (flags_hash != FlagList::Hash()) return FLAGS_MISMATCH;
353 if (!Checksum(Payload()).Check(c1, c2)) return CHECKSUM_MISMATCH; 353 if (!Checksum(DataWithoutHeader()).Check(c1, c2)) return CHECKSUM_MISMATCH;
354 return CHECK_SUCCESS; 354 return CHECK_SUCCESS;
355 } 355 }
356 356
357 uint32_t SerializedCodeData::SourceHash(Handle<String> source) { 357 uint32_t SerializedCodeData::SourceHash(Handle<String> source) {
358 return source->length(); 358 return source->length();
359 } 359 }
360 360
361 // Return ScriptData object and relinquish ownership over it to the caller. 361 // Return ScriptData object and relinquish ownership over it to the caller.
362 ScriptData* SerializedCodeData::GetScriptData() { 362 ScriptData* SerializedCodeData::GetScriptData() {
363 DCHECK(owns_data_); 363 DCHECK(owns_data_);
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
405 *rejection_result = scd.SanityCheck(isolate, expected_source_hash); 405 *rejection_result = scd.SanityCheck(isolate, expected_source_hash);
406 if (*rejection_result != CHECK_SUCCESS) { 406 if (*rejection_result != CHECK_SUCCESS) {
407 cached_data->Reject(); 407 cached_data->Reject();
408 return SerializedCodeData(nullptr, 0); 408 return SerializedCodeData(nullptr, 0);
409 } 409 }
410 return scd; 410 return scd;
411 } 411 }
412 412
413 } // namespace internal 413 } // namespace internal
414 } // namespace v8 414 } // namespace v8
OLDNEW
« no previous file with comments | « src/snapshot/code-serializer.h ('k') | src/snapshot/deserializer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698