Reviewers: Weiliang,
Message:
PTAL.
Description:
X87: Serializer: serialize internal references via object visitor.
port 7c149afb6c875b1c53723384459dc14a0e961927 (r27275).
original commit message:
Serializer: serialize internal references via object visitor.
BUG=
Please review this at https://codereview.chromium.org/1029793002/
Base URL: https://chromium.googlesource.com/v8/v8.git@master
Affected files (+19, -5 lines):
M src/x87/assembler-x87.h
M src/x87/assembler-x87-inl.h
Index: src/x87/assembler-x87-inl.h
diff --git a/src/x87/assembler-x87-inl.h b/src/x87/assembler-x87-inl.h
index
95cc26e9cbcfb4180e57d0ca5a06293063010f6d..800ead2803c2a430f488133e2fd088d2a8b111c2
100644
--- a/src/x87/assembler-x87-inl.h
+++ b/src/x87/assembler-x87-inl.h
@@ -167,9 +167,9 @@ Address RelocInfo::target_internal_reference() {
}
-void RelocInfo::set_target_internal_reference(Address target) {
+Address RelocInfo::target_internal_reference_address() {
DCHECK(rmode_ == INTERNAL_REFERENCE);
- Memory::Address_at(pc_) = target;
+ return reinterpret_cast<Address>(pc_);
}
@@ -281,7 +281,8 @@ Object** RelocInfo::call_object_address() {
void RelocInfo::WipeOut() {
- if (IsEmbeddedObject(rmode_) || IsExternalReference(rmode_)) {
+ if (IsEmbeddedObject(rmode_) || IsExternalReference(rmode_) ||
+ IsInternalReference(rmode_)) {
Memory::Address_at(pc_) = NULL;
} else if (IsCodeTarget(rmode_) || IsRuntimeEntry(rmode_)) {
// Effectively write zero into the relocation.
@@ -313,7 +314,8 @@ void RelocInfo::Visit(Isolate* isolate, ObjectVisitor*
visitor) {
visitor->VisitCell(this);
} else if (mode == RelocInfo::EXTERNAL_REFERENCE) {
visitor->VisitExternalReference(this);
- CpuFeatures::FlushICache(pc_, sizeof(Address));
+ } else if (mode == RelocInfo::INTERNAL_REFERENCE) {
+ visitor->VisitInternalReference(this);
} else if (RelocInfo::IsCodeAgeSequence(mode)) {
visitor->VisitCodeAgeSequence(this);
} else if (((RelocInfo::IsJSReturn(mode) &&
@@ -340,7 +342,8 @@ void RelocInfo::Visit(Heap* heap) {
StaticVisitor::VisitCell(heap, this);
} else if (mode == RelocInfo::EXTERNAL_REFERENCE) {
StaticVisitor::VisitExternalReference(this);
- CpuFeatures::FlushICache(pc_, sizeof(Address));
+ } else if (mode == RelocInfo::INTERNAL_REFERENCE) {
+ StaticVisitor::VisitInternalReference(this);
} else if (RelocInfo::IsCodeAgeSequence(mode)) {
StaticVisitor::VisitCodeAgeSequence(heap, this);
} else if (heap->isolate()->debug()->has_break_points() &&
@@ -529,6 +532,12 @@ void Assembler::emit_near_disp(Label* L) {
}
+void Assembler::deserialization_set_target_internal_reference_at(
+ Address pc, Address target, RelocInfo::Mode mode) {
+ Memory::Address_at(pc) = target;
+}
+
+
void Operand::set_modrm(int mod, Register rm) {
DCHECK((mod & -4) == 0);
buf_[0] = mod << 6 | rm.code();
Index: src/x87/assembler-x87.h
diff --git a/src/x87/assembler-x87.h b/src/x87/assembler-x87.h
index
2fb46e1e6d43aec1cc380e15d2209e36f656fff7..ee2edcaa7d9b726043df4556921470bf14d92f42
100644
--- a/src/x87/assembler-x87.h
+++ b/src/x87/assembler-x87.h
@@ -530,6 +530,11 @@ class Assembler : public AssemblerBase {
set_target_address_at(instruction_payload, code, target);
}
+ // This sets the internal reference at the pc.
+ inline static void deserialization_set_target_internal_reference_at(
+ Address pc, Address target,
+ RelocInfo::Mode mode = RelocInfo::INTERNAL_REFERENCE);
+
static const int kSpecialTargetSize = kPointerSize;
// Distance between the address of the code target in the call
instruction
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.