From 8e1ece2573058c01ab123f8202ef9a254bc0ebdb Mon Sep 17 00:00:00 2001 From: "hpayer@chromium.org" Date: Tue, 15 Jul 2014 12:22:38 +0000 Subject: [PATCH] Revert "Remove failure tag.". TBR=mstarzinger@chromium.org Review URL: https://codereview.chromium.org/398473002 git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@22409 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/globals.h | 9 +++++++++ src/spaces.h | 18 +++++++++++++++--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/globals.h b/src/globals.h index 86a23835d9..871164eaef 100644 --- a/src/globals.h +++ b/src/globals.h @@ -216,6 +216,12 @@ const int kCodeAlignmentBits = 5; const intptr_t kCodeAlignment = 1 << kCodeAlignmentBits; const intptr_t kCodeAlignmentMask = kCodeAlignment - 1; +// Tag information for Failure. +// TODO(yangguo): remove this from space owner calculation. +const int kFailureTag = 3; +const int kFailureTagSize = 2; +const intptr_t kFailureTagMask = (1 << kFailureTagSize) - 1; + // Zap-value: The value used for zapping dead objects. // Should be a recognizable hex value tagged as a failure. @@ -531,6 +537,9 @@ enum StateTag { #define HAS_SMI_TAG(value) \ ((reinterpret_cast(value) & kSmiTagMask) == kSmiTag) +#define HAS_FAILURE_TAG(value) \ + ((reinterpret_cast(value) & kFailureTagMask) == kFailureTag) + // OBJECT_POINTER_ALIGN returns the value aligned as a HeapObject pointer #define OBJECT_POINTER_ALIGN(value) \ (((value) + kObjectAlignmentMask) & ~kObjectAlignmentMask) diff --git a/src/spaces.h b/src/spaces.h index a3cc737784..efed18ec6d 100644 --- a/src/spaces.h +++ b/src/spaces.h @@ -312,11 +312,20 @@ class MemoryChunk { } Space* owner() const { - return owner_; + if ((reinterpret_cast(owner_) & kFailureTagMask) == + kFailureTag) { + return reinterpret_cast(reinterpret_cast(owner_) - + kFailureTag); + } else { + return NULL; + } } void set_owner(Space* space) { - owner_ = space; + ASSERT((reinterpret_cast(space) & kFailureTagMask) == 0); + owner_ = reinterpret_cast
(space) + kFailureTag; + ASSERT((reinterpret_cast(owner_) & kFailureTagMask) == + kFailureTag); } base::VirtualMemory* reserved_memory() { @@ -682,7 +691,10 @@ class MemoryChunk { // If the chunk needs to remember its memory reservation, it is stored here. base::VirtualMemory reservation_; - Space* owner_; + // The identity of the owning space. This is tagged as a failure pointer, but + // no failure can be in an object, so this can be distinguished from any entry + // in a fixed array. + Address owner_; Heap* heap_; // Used by the store buffer to keep track of which pages to mark scan-on- // scavenge.