diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2009-09-23 14:49:51 +0200 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2009-09-23 14:49:51 +0200 |
commit | 2df13c73103d4bd95a5f4fec741e0ed2f17852f1 (patch) | |
tree | 138f3c8e1d03a67cc564dfec4ad90093cf70e410 /deps/v8/src/serialize.cc | |
parent | be3dddeec9c970f5cc81b672a4cf034d917d450c (diff) | |
download | node-2df13c73103d4bd95a5f4fec741e0ed2f17852f1.tar.gz |
Upgrade v8 to 1.3.13
Diffstat (limited to 'deps/v8/src/serialize.cc')
-rw-r--r-- | deps/v8/src/serialize.cc | 38 |
1 files changed, 26 insertions, 12 deletions
diff --git a/deps/v8/src/serialize.cc b/deps/v8/src/serialize.cc index c89476241..b6a9d9434 100644 --- a/deps/v8/src/serialize.cc +++ b/deps/v8/src/serialize.cc @@ -935,6 +935,15 @@ class ReferenceUpdater: public ObjectVisitor { } } + virtual void VisitCodeTarget(RelocInfo* rinfo) { + ASSERT(RelocInfo::IsCodeTarget(rinfo->rmode())); + Code* target = Code::GetCodeFromTargetAddress(rinfo->target_address()); + Address encoded_target = serializer_->GetSavedAddress(target); + offsets_.Add(rinfo->target_address_address() - obj_address_); + addresses_.Add(encoded_target); + } + + virtual void VisitExternalReferences(Address* start, Address* end) { for (Address* p = start; p < end; ++p) { uint32_t code = reference_encoder_->Encode(*p); @@ -1093,6 +1102,14 @@ void Serializer::VisitPointers(Object** start, Object** end) { } +void Serializer::VisitCodeTarget(RelocInfo* rinfo) { + ASSERT(RelocInfo::IsCodeTarget(rinfo->rmode())); + Code* target = Code::GetCodeFromTargetAddress(rinfo->target_address()); + bool serialized; + Encode(target, &serialized); +} + + class GlobalHandlesRetriever: public ObjectVisitor { public: explicit GlobalHandlesRetriever(List<Object**>* handles) @@ -1255,10 +1272,7 @@ Address Serializer::PutObject(HeapObject* obj) { SaveAddress(obj, addr); if (type == CODE_TYPE) { - Code* code = Code::cast(obj); - // Ensure Code objects contain Object pointers, not Addresses. - code->ConvertICTargetsFromAddressToObject(); - LOG(CodeMoveEvent(code->address(), addr)); + LOG(CodeMoveEvent(obj->address(), addr)); } // Write out the object prologue: type, size, and simulated address of obj. @@ -1290,12 +1304,6 @@ Address Serializer::PutObject(HeapObject* obj) { } #endif - if (type == CODE_TYPE) { - Code* code = Code::cast(obj); - // Convert relocations from Object* to Address in Code objects - code->ConvertICTargetsFromObjectToAddress(); - } - objects_++; return addr; } @@ -1422,6 +1430,14 @@ void Deserializer::VisitPointers(Object** start, Object** end) { } +void Deserializer::VisitCodeTarget(RelocInfo* rinfo) { + ASSERT(RelocInfo::IsCodeTarget(rinfo->rmode())); + Address encoded_address = reinterpret_cast<Address>(rinfo->target_object()); + Code* target_object = reinterpret_cast<Code*>(Resolve(encoded_address)); + rinfo->set_target_address(target_object->instruction_start()); +} + + void Deserializer::VisitExternalReferences(Address* start, Address* end) { for (Address* p = start; p < end; ++p) { uint32_t code = static_cast<uint32_t>(reinterpret_cast<uintptr_t>(*p)); @@ -1617,8 +1633,6 @@ Object* Deserializer::GetObject() { if (type == CODE_TYPE) { Code* code = Code::cast(obj); - // Convert relocations from Object* to Address in Code objects - code->ConvertICTargetsFromObjectToAddress(); LOG(CodeMoveEvent(a, code->address())); } objects_++; |