Index: src/serialize.cc |
diff --git a/src/serialize.cc b/src/serialize.cc |
index 1d33f4f0623e3a38f2f46247b06a6e64eb93f60b..c10f66244bf5a85fd01bee0b7175273496df25f4 100644 |
--- a/src/serialize.cc |
+++ b/src/serialize.cc |
@@ -1048,6 +1048,7 @@ void Deserializer::ReadData(Object** current, Object** limit, int source_space, |
break; |
} |
+ case kInternalReferenceEncoded: |
case kInternalReference: { |
// Internal reference address is not encoded via skip, but by offset |
// from code entry. |
@@ -1059,7 +1060,13 @@ void Deserializer::ReadData(Object** current, Object** limit, int source_space, |
DCHECK(0 <= target_offset && target_offset <= code->instruction_size()); |
Address pc = code->entry() + pc_offset; |
Address target = code->entry() + target_offset; |
- Assembler::deserialization_set_target_internal_reference_at(pc, target); |
+ if (data == kInternalReference) { |
+ Assembler::deserialization_set_target_internal_reference_at(pc, |
+ target); |
+ } else { |
+ Assembler::deserialization_set_target_internal_reference_encoded_at( |
+ pc, target); |
+ } |
break; |
} |
@@ -1827,7 +1834,9 @@ void Serializer::ObjectSerializer::VisitInternalReference(RelocInfo* rinfo) { |
pc_offset <= Code::cast(object_)->instruction_size()); |
DCHECK(0 <= target_offset && |
target_offset <= Code::cast(object_)->instruction_size()); |
- sink_->Put(kInternalReference, "InternalRef"); |
+ rinfo->rmode() == RelocInfo::INTERNAL_REFERENCE |
yangguo
2015/03/19 19:16:33
Please do not use a tertiary operator like this. I
balazs.kilvady
2015/03/20 11:14:42
Done.
|
+ ? sink_->Put(kInternalReference, "InternalRef") |
+ : sink_->Put(kInternalReferenceEncoded, "InternalRefEnc"); |
sink_->PutInt(static_cast<uintptr_t>(pc_offset), "internal ref address"); |
sink_->PutInt(static_cast<uintptr_t>(target_offset), "internal ref value"); |
} |