| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 #ifndef V8_SERIALIZE_H_ | 5 #ifndef V8_SERIALIZE_H_ |
| 6 #define V8_SERIALIZE_H_ | 6 #define V8_SERIALIZE_H_ |
| 7 | 7 |
| 8 #include "src/hashmap.h" | 8 #include "src/hashmap.h" |
| 9 #include "src/heap-profiler.h" | 9 #include "src/heap-profiler.h" |
| 10 #include "src/isolate.h" | 10 #include "src/isolate.h" |
| (...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 300 | 300 |
| 301 // No reservation for large object space necessary. | 301 // No reservation for large object space necessary. |
| 302 static const int kNumberOfPreallocatedSpaces = LO_SPACE; | 302 static const int kNumberOfPreallocatedSpaces = LO_SPACE; |
| 303 static const int kNumberOfSpaces = LAST_SPACE + 1; | 303 static const int kNumberOfSpaces = LAST_SPACE + 1; |
| 304 | 304 |
| 305 protected: | 305 protected: |
| 306 // Where the pointed-to object can be found: | 306 // Where the pointed-to object can be found: |
| 307 enum Where { | 307 enum Where { |
| 308 kNewObject = 0, // Object is next in snapshot. | 308 kNewObject = 0, // Object is next in snapshot. |
| 309 // 1-7 One per space. | 309 // 1-7 One per space. |
| 310 // 0x8 Unused. | 310 // 0x8 Used by misc. See below. |
| 311 kRootArray = 0x9, // Object is found in root array. | 311 kRootArray = 0x9, // Object is found in root array. |
| 312 kPartialSnapshotCache = 0xa, // Object is in the cache. | 312 kPartialSnapshotCache = 0xa, // Object is in the cache. |
| 313 kExternalReference = 0xb, // Pointer to an external reference. | 313 kExternalReference = 0xb, // Pointer to an external reference. |
| 314 kSkip = 0xc, // Skip n bytes. | 314 kSkip = 0xc, // Skip n bytes. |
| 315 kBuiltin = 0xd, // Builtin code object. | 315 kBuiltin = 0xd, // Builtin code object. |
| 316 kAttachedReference = 0xe, // Object is described in an attached list. | 316 kAttachedReference = 0xe, // Object is described in an attached list. |
| 317 // 0xf Used by misc. See below. | 317 // 0xf Used by misc. See below. |
| 318 kBackref = 0x10, // Object is described relative to end. | 318 kBackref = 0x10, // Object is described relative to end. |
| 319 // 0x11-0x17 One per space. | 319 // 0x11-0x17 One per space. |
| 320 kBackrefWithSkip = 0x18, // Object is described relative to end. | 320 kBackrefWithSkip = 0x18, // Object is described relative to end. |
| (...skipping 27 matching lines...) Expand all Loading... |
| 348 // Misc. | 348 // Misc. |
| 349 // Raw data to be copied from the snapshot. This byte code does not advance | 349 // Raw data to be copied from the snapshot. This byte code does not advance |
| 350 // the current pointer, which is used for code objects, where we write the | 350 // the current pointer, which is used for code objects, where we write the |
| 351 // entire code in one memcpy, then fix up stuff with kSkip and other byte | 351 // entire code in one memcpy, then fix up stuff with kSkip and other byte |
| 352 // codes that overwrite data. | 352 // codes that overwrite data. |
| 353 static const int kRawData = 0x20; | 353 static const int kRawData = 0x20; |
| 354 // Some common raw lengths: 0x21-0x3f. | 354 // Some common raw lengths: 0x21-0x3f. |
| 355 // These autoadvance the current pointer. | 355 // These autoadvance the current pointer. |
| 356 static const int kOnePointerRawData = 0x21; | 356 static const int kOnePointerRawData = 0x21; |
| 357 | 357 |
| 358 // Internal reference encoded as relative offset. |
| 359 static const int kInternalReference = 0x08; |
| 360 |
| 361 // 0x48, 0x88 and 0xc8 are unused. |
| 362 |
| 358 static const int kVariableRepeat = 0x60; | 363 static const int kVariableRepeat = 0x60; |
| 359 // 0x61-0x6f Repeat last word | 364 // 0x61-0x6f Repeat last word |
| 360 static const int kFixedRepeat = 0x61; | 365 static const int kFixedRepeat = 0x61; |
| 361 static const int kFixedRepeatBase = kFixedRepeat - 1; | 366 static const int kFixedRepeatBase = kFixedRepeat - 1; |
| 362 static const int kLastFixedRepeat = 0x6f; | 367 static const int kLastFixedRepeat = 0x6f; |
| 363 static const int kMaxFixedRepeats = kLastFixedRepeat - kFixedRepeatBase; | 368 static const int kMaxFixedRepeats = kLastFixedRepeat - kFixedRepeatBase; |
| 364 static int CodeForRepeats(int repeats) { | 369 static int CodeForRepeats(int repeats) { |
| 365 DCHECK(repeats >= 1 && repeats <= kMaxFixedRepeats); | 370 DCHECK(repeats >= 1 && repeats <= kMaxFixedRepeats); |
| 366 return kFixedRepeatBase + repeats; | 371 return kFixedRepeatBase + repeats; |
| 367 } | 372 } |
| (...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 619 sink_(sink), | 624 sink_(sink), |
| 620 reference_representation_(how_to_code + where_to_point), | 625 reference_representation_(how_to_code + where_to_point), |
| 621 bytes_processed_so_far_(0), | 626 bytes_processed_so_far_(0), |
| 622 code_object_(o->IsCode()), | 627 code_object_(o->IsCode()), |
| 623 code_has_been_output_(false) { } | 628 code_has_been_output_(false) { } |
| 624 void Serialize(); | 629 void Serialize(); |
| 625 void VisitPointers(Object** start, Object** end); | 630 void VisitPointers(Object** start, Object** end); |
| 626 void VisitEmbeddedPointer(RelocInfo* target); | 631 void VisitEmbeddedPointer(RelocInfo* target); |
| 627 void VisitExternalReference(Address* p); | 632 void VisitExternalReference(Address* p); |
| 628 void VisitExternalReference(RelocInfo* rinfo); | 633 void VisitExternalReference(RelocInfo* rinfo); |
| 634 void VisitInternalReference(RelocInfo* rinfo); |
| 629 void VisitCodeTarget(RelocInfo* target); | 635 void VisitCodeTarget(RelocInfo* target); |
| 630 void VisitCodeEntry(Address entry_address); | 636 void VisitCodeEntry(Address entry_address); |
| 631 void VisitCell(RelocInfo* rinfo); | 637 void VisitCell(RelocInfo* rinfo); |
| 632 void VisitRuntimeEntry(RelocInfo* reloc); | 638 void VisitRuntimeEntry(RelocInfo* reloc); |
| 633 // Used for seralizing the external strings that hold the natives source. | 639 // Used for seralizing the external strings that hold the natives source. |
| 634 void VisitExternalOneByteString( | 640 void VisitExternalOneByteString( |
| 635 v8::String::ExternalOneByteStringResource** resource); | 641 v8::String::ExternalOneByteStringResource** resource); |
| 636 // We can't serialize a heap with external two byte strings. | 642 // We can't serialize a heap with external two byte strings. |
| 637 void VisitExternalTwoByteString( | 643 void VisitExternalTwoByteString( |
| 638 v8::String::ExternalStringResource** resource) { | 644 v8::String::ExternalStringResource** resource) { |
| (...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 969 kNumInternalizedStringsOffset + kInt32Size; | 975 kNumInternalizedStringsOffset + kInt32Size; |
| 970 static const int kNumCodeStubKeysOffset = kNumReservationsOffset + kInt32Size; | 976 static const int kNumCodeStubKeysOffset = kNumReservationsOffset + kInt32Size; |
| 971 static const int kPayloadLengthOffset = kNumCodeStubKeysOffset + kInt32Size; | 977 static const int kPayloadLengthOffset = kNumCodeStubKeysOffset + kInt32Size; |
| 972 static const int kChecksum1Offset = kPayloadLengthOffset + kInt32Size; | 978 static const int kChecksum1Offset = kPayloadLengthOffset + kInt32Size; |
| 973 static const int kChecksum2Offset = kChecksum1Offset + kInt32Size; | 979 static const int kChecksum2Offset = kChecksum1Offset + kInt32Size; |
| 974 static const int kHeaderSize = kChecksum2Offset + kInt32Size; | 980 static const int kHeaderSize = kChecksum2Offset + kInt32Size; |
| 975 }; | 981 }; |
| 976 } } // namespace v8::internal | 982 } } // namespace v8::internal |
| 977 | 983 |
| 978 #endif // V8_SERIALIZE_H_ | 984 #endif // V8_SERIALIZE_H_ |
| OLD | NEW |