Reviewers: Benedikt Meurer,
Description:
Removed RelocInfo::target_object_address() and reconstructed_obj_ptr_.
Depends on https://codereview.chromium.org/46583006/ and has similar
reasoning
behind it.
Please review this at https://codereview.chromium.org/50413004/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files (+6, -43 lines):
M src/arm/assembler-arm-inl.h
M src/assembler.h
M src/ia32/assembler-ia32-inl.h
M src/mark-compact.cc
M src/mips/assembler-mips-inl.h
M src/objects.cc
M src/serialize.cc
M src/x64/assembler-x64-inl.h
Index: src/arm/assembler-arm-inl.h
diff --git a/src/arm/assembler-arm-inl.h b/src/arm/assembler-arm-inl.h
index
7b246ac7cc10a5fa5e25af3ff0eb9e4323d1ce32..9a83a42e4714894c347ffab4cb4b26d09d620b12
100644
--- a/src/arm/assembler-arm-inl.h
+++ b/src/arm/assembler-arm-inl.h
@@ -137,16 +137,6 @@ Handle<Object>
RelocInfo::target_object_handle(Assembler* origin) {
}
-Object** RelocInfo::target_object_address() {
- // Provide a "natural pointer" to the embedded object,
- // which can be de-referenced during heap iteration.
- ASSERT(IsCodeTarget(rmode_) || rmode_ == EMBEDDED_OBJECT);
- reconstructed_obj_ptr_ =
- reinterpret_cast<Object*>(Assembler::target_pointer_at(pc_));
- return &reconstructed_obj_ptr_;
-}
-
-
void RelocInfo::set_target_object(Object* target, WriteBarrierMode mode) {
ASSERT(IsCodeTarget(rmode_) || rmode_ == EMBEDDED_OBJECT);
ASSERT(!target->IsConsString());
Index: src/assembler.h
diff --git a/src/assembler.h b/src/assembler.h
index
cf5396ae7d3920b4c0c4c0561f6a1249e1ab0fa8..11087da8c37a91d115c2ac9a32d2f2fee9002840
100644
--- a/src/assembler.h
+++ b/src/assembler.h
@@ -390,7 +390,6 @@ class RelocInfo BASE_EMBEDDED {
WriteBarrierMode mode =
UPDATE_WRITE_BARRIER));
INLINE(Object* target_object());
INLINE(Handle<Object> target_object_handle(Assembler* origin));
- INLINE(Object** target_object_address());
INLINE(void set_target_object(Object* target,
WriteBarrierMode mode =
UPDATE_WRITE_BARRIER));
INLINE(Address target_runtime_entry(Assembler* origin));
@@ -486,12 +485,6 @@ class RelocInfo BASE_EMBEDDED {
double data64_;
};
Code* host_;
- // Code and Embedded Object pointers on some platforms are stored split
- // across two consecutive 32-bit instructions. Heap management
- // routines expect to access these pointers indirectly. The following
- // location provides a place for these pointers to exist naturally
- // when accessed via the Iterator.
- Object* reconstructed_obj_ptr_;
// External-reference pointers are also split across instruction-pairs
// on some platforms, but are accessed via indirect pointers. This
location
// provides a place for that pointer to exist naturally. Its address
Index: src/ia32/assembler-ia32-inl.h
diff --git a/src/ia32/assembler-ia32-inl.h b/src/ia32/assembler-ia32-inl.h
index
509658e15590fd36938bcee895cb7ea6eccd0ccd..00f7a633fad92c74e9f0d8dc48ef1797606cd38b
100644
--- a/src/ia32/assembler-ia32-inl.h
+++ b/src/ia32/assembler-ia32-inl.h
@@ -125,12 +125,6 @@ Handle<Object>
RelocInfo::target_object_handle(Assembler* origin) {
}
-Object** RelocInfo::target_object_address() {
- ASSERT(IsCodeTarget(rmode_) || rmode_ == EMBEDDED_OBJECT);
- return &Memory::Object_at(pc_);
-}
-
-
void RelocInfo::set_target_object(Object* target, WriteBarrierMode mode) {
ASSERT(IsCodeTarget(rmode_) || rmode_ == EMBEDDED_OBJECT);
ASSERT(!target->IsConsString());
Index: src/mark-compact.cc
diff --git a/src/mark-compact.cc b/src/mark-compact.cc
index
b75ddb382b1d1638e6ab8b89a7af137386e3277d..4aff0d3cb46603a3734845d3b7c61faab2438fb9
100644
--- a/src/mark-compact.cc
+++ b/src/mark-compact.cc
@@ -93,7 +93,8 @@ class VerifyMarkingVisitor: public ObjectVisitor {
ASSERT(rinfo->rmode() == RelocInfo::EMBEDDED_OBJECT);
if (!Code::IsWeakEmbeddedObject(rinfo->host()->kind(),
rinfo->target_object())) {
- VisitPointer(rinfo->target_object_address());
+ Object* p = rinfo->target_object();
+ VisitPointer(&p);
}
}
Index: src/mips/assembler-mips-inl.h
diff --git a/src/mips/assembler-mips-inl.h b/src/mips/assembler-mips-inl.h
index
d095037b5140c97467a95296e15f7d6bbe159686..b430b1f0525983e9356f04787c349e6420f7c951
100644
--- a/src/mips/assembler-mips-inl.h
+++ b/src/mips/assembler-mips-inl.h
@@ -190,16 +190,6 @@ Handle<Object>
RelocInfo::target_object_handle(Assembler* origin) {
}
-Object** RelocInfo::target_object_address() {
- // Provide a "natural pointer" to the embedded object,
- // which can be de-referenced during heap iteration.
- ASSERT(IsCodeTarget(rmode_) || rmode_ == EMBEDDED_OBJECT);
- reconstructed_obj_ptr_ =
- reinterpret_cast<Object*>(Assembler::target_address_at(pc_));
- return &reconstructed_obj_ptr_;
-}
-
-
void RelocInfo::set_target_object(Object* target, WriteBarrierMode mode) {
ASSERT(IsCodeTarget(rmode_) || rmode_ == EMBEDDED_OBJECT);
ASSERT(!target->IsConsString());
Index: src/objects.cc
diff --git a/src/objects.cc b/src/objects.cc
index
459a5a90c3339aa6b1160dc1f879e929556074b9..65ff378b31f29d5896fe86549f82dd8dc69ce74c
100644
--- a/src/objects.cc
+++ b/src/objects.cc
@@ -10317,7 +10317,8 @@ void ObjectVisitor::VisitDebugTarget(RelocInfo*
rinfo) {
void ObjectVisitor::VisitEmbeddedPointer(RelocInfo* rinfo) {
ASSERT(rinfo->rmode() == RelocInfo::EMBEDDED_OBJECT);
- VisitPointer(rinfo->target_object_address());
+ Object* p = rinfo->target_object();
+ VisitPointer(&p);
}
Index: src/serialize.cc
diff --git a/src/serialize.cc b/src/serialize.cc
index
f350ce5fda9488496f424a7ce6ec65e9ad35b87d..130fbee72e9469ea59f050f554f02dc9ec7759fd
100644
--- a/src/serialize.cc
+++ b/src/serialize.cc
@@ -1668,12 +1668,12 @@ void
Serializer::ObjectSerializer::VisitPointers(Object** start,
void Serializer::ObjectSerializer::VisitEmbeddedPointer(RelocInfo* rinfo) {
- Object** current = rinfo->target_object_address();
+ Object* current = rinfo->target_object();
int skip = OutputRawData(rinfo->target_address_address(),
kCanReturnSkipInsteadOfSkipping);
HowToCode representation = rinfo->IsCodedSpecially() ? kFromCode :
kPlain;
- serializer_->SerializeObject(*current, representation, kStartOfObject,
skip);
+ serializer_->SerializeObject(current, representation, kStartOfObject,
skip);
bytes_processed_so_far_ += rinfo->target_address_size();
}
Index: src/x64/assembler-x64-inl.h
diff --git a/src/x64/assembler-x64-inl.h b/src/x64/assembler-x64-inl.h
index
1f47c89ce7091a5271b9557f0a72c673bf86e0ea..f4ee4e652f298dba67ee0a2f1b051bafe5a046d9
100644
--- a/src/x64/assembler-x64-inl.h
+++ b/src/x64/assembler-x64-inl.h
@@ -303,12 +303,6 @@ Handle<Object>
RelocInfo::target_object_handle(Assembler* origin) {
}
-Object** RelocInfo::target_object_address() {
- ASSERT(IsCodeTarget(rmode_) || rmode_ == EMBEDDED_OBJECT);
- return reinterpret_cast<Object**>(pc_);
-}
-
-
Address RelocInfo::target_reference() {
ASSERT(rmode_ == RelocInfo::EXTERNAL_REFERENCE);
return Memory::Address_at(pc_);
--
--
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/groups/opt_out.