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

Side by Side Diff: src/serialize.h

Issue 387343002: Fix up internalized strings after deserializing user code. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: remove TODO Created 6 years, 5 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 | Annotate | Revision Log
OLDNEW
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/compiler.h" 8 #include "src/compiler.h"
9 #include "src/hashmap.h" 9 #include "src/hashmap.h"
10 #include "src/heap-profiler.h" 10 #include "src/heap-profiler.h"
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 void DeserializePartial(Isolate* isolate, Object** root); 245 void DeserializePartial(Isolate* isolate, Object** root);
246 246
247 void set_reservation(int space_number, int reservation) { 247 void set_reservation(int space_number, int reservation) {
248 ASSERT(space_number >= 0); 248 ASSERT(space_number >= 0);
249 ASSERT(space_number <= LAST_SPACE); 249 ASSERT(space_number <= LAST_SPACE);
250 reservations_[space_number] = reservation; 250 reservations_[space_number] = reservation;
251 } 251 }
252 252
253 void FlushICacheForNewCodeObjects(); 253 void FlushICacheForNewCodeObjects();
254 254
255 // Call this to indicate that the serialized data represents user code.
256 // There are some more wiring up required in this case.
257 void ExpectSerializedCode() { deserialize_code_ = true; }
258
255 private: 259 private:
256 virtual void VisitPointers(Object** start, Object** end); 260 virtual void VisitPointers(Object** start, Object** end);
257 261
258 virtual void VisitRuntimeEntry(RelocInfo* rinfo) { 262 virtual void VisitRuntimeEntry(RelocInfo* rinfo) {
259 UNREACHABLE(); 263 UNREACHABLE();
260 } 264 }
261 265
262 // Allocation sites are present in the snapshot, and must be linked into 266 // Allocation sites are present in the snapshot, and must be linked into
263 // a list at deserialization time. 267 // a list at deserialization time.
264 void RelinkAllocationSite(AllocationSite* site); 268 void RelinkAllocationSite(AllocationSite* site);
265 269
266 // Fills in some heap data in an area from start to end (non-inclusive). The 270 // Fills in some heap data in an area from start to end (non-inclusive). The
267 // space id is used for the write barrier. The object_address is the address 271 // space id is used for the write barrier. The object_address is the address
268 // of the object we are writing into, or NULL if we are not writing into an 272 // of the object we are writing into, or NULL if we are not writing into an
269 // object, i.e. if we are writing a series of tagged values that are not on 273 // object, i.e. if we are writing a series of tagged values that are not on
270 // the heap. 274 // the heap.
271 void ReadChunk( 275 void ReadChunk(
272 Object** start, Object** end, int space, Address object_address); 276 Object** start, Object** end, int space, Address object_address);
273 void ReadObject(int space_number, Object** write_back); 277 void ReadObject(int space_number, Object** write_back);
274 278
279 HeapObject* ProcessObjectFromSerializedCode(HeapObject* obj);
280
275 // This routine both allocates a new object, and also keeps 281 // This routine both allocates a new object, and also keeps
276 // track of where objects have been allocated so that we can 282 // track of where objects have been allocated so that we can
277 // fix back references when deserializing. 283 // fix back references when deserializing.
278 Address Allocate(int space_index, int size) { 284 Address Allocate(int space_index, int size) {
279 Address address = high_water_[space_index]; 285 Address address = high_water_[space_index];
280 high_water_[space_index] = address + size; 286 high_water_[space_index] = address + size;
281 return address; 287 return address;
282 } 288 }
283 289
284 // This returns the address of an object that has been described in the 290 // This returns the address of an object that has been described in the
285 // snapshot as being offset bytes back in a particular space. 291 // snapshot as being offset bytes back in a particular space.
286 HeapObject* GetAddressFromEnd(int space) { 292 HeapObject* GetAddressFromEnd(int space) {
287 int offset = source_->GetInt(); 293 int offset = source_->GetInt();
288 offset <<= kObjectAlignmentBits; 294 offset <<= kObjectAlignmentBits;
289 return HeapObject::FromAddress(high_water_[space] - offset); 295 return HeapObject::FromAddress(high_water_[space] - offset);
290 } 296 }
291 297
292 // Cached current isolate. 298 // Cached current isolate.
293 Isolate* isolate_; 299 Isolate* isolate_;
300 bool deserialize_code_;
294 301
295 SnapshotByteSource* source_; 302 SnapshotByteSource* source_;
296 // This is the address of the next object that will be allocated in each 303 // This is the address of the next object that will be allocated in each
297 // space. It is used to calculate the addresses of back-references. 304 // space. It is used to calculate the addresses of back-references.
298 Address high_water_[LAST_SPACE + 1]; 305 Address high_water_[LAST_SPACE + 1];
299 306
300 int reservations_[LAST_SPACE + 1]; 307 int reservations_[LAST_SPACE + 1];
301 static const intptr_t kUninitializedReservation = -1; 308 static const intptr_t kUninitializedReservation = -1;
302 309
303 ExternalReferenceDecoder* external_reference_decoder_; 310 ExternalReferenceDecoder* external_reference_decoder_;
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
628 static const int kVersionHashOffset = 0; 635 static const int kVersionHashOffset = 0;
629 static const int kReservationsOffset = 1; 636 static const int kReservationsOffset = 1;
630 static const int kHeaderEntries = 8; 637 static const int kHeaderEntries = 8;
631 638
632 ScriptData* script_data_; 639 ScriptData* script_data_;
633 bool owns_script_data_; 640 bool owns_script_data_;
634 }; 641 };
635 } } // namespace v8::internal 642 } } // namespace v8::internal
636 643
637 #endif // V8_SERIALIZE_H_ 644 #endif // V8_SERIALIZE_H_
OLDNEW
« no previous file with comments | « src/objects.cc ('k') | src/serialize.cc » ('j') | test/cctest/test-serialize.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698