Loading js/src/gc/GCInternals.h +1 −0 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ #include "jscntxt.h" #include "gc/RelocationOverlay.h" #include "gc/Zone.h" #include "vm/HelperThreads.h" #include "vm/Runtime.h" Loading js/src/gc/Nursery-inl.h +1 −0 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ #include "jscntxt.h" #include "gc/Heap.h" #include "gc/RelocationOverlay.h" #include "gc/Zone.h" #include "js/TracingAPI.h" #include "vm/Runtime.h" Loading js/src/gc/RelocationOverlay.h 0 → 100644 +75 −0 Original line number Diff line number Diff line /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- * vim: set ts=8 sts=4 et sw=4 tw=99: * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /* * GC-internal definition of relocation overlay used while moving cells. */ #ifndef gc_RelocationOverlay_h #define gc_RelocationOverlay_h #include "mozilla/Assertions.h" #include <stdint.h> namespace js { namespace gc { struct Cell; /* * This structure overlays a Cell that has been moved and provides a way to find * its new location. It's used during generational and compacting GC. */ class RelocationOverlay { /* The low bit is set so this should never equal a normal pointer. */ static const uintptr_t Relocated = uintptr_t(0xbad0bad1); /* Set to Relocated when moved. */ uintptr_t magic_; /* The location |this| was moved to. */ Cell* newLocation_; /* A list entry to track all relocated things. */ RelocationOverlay* next_; public: static RelocationOverlay* fromCell(Cell* cell) { return reinterpret_cast<RelocationOverlay*>(cell); } bool isForwarded() const { return magic_ == Relocated; } Cell* forwardingAddress() const { MOZ_ASSERT(isForwarded()); return newLocation_; } void forwardTo(Cell* cell); RelocationOverlay*& nextRef() { MOZ_ASSERT(isForwarded()); return next_; } RelocationOverlay* next() const { MOZ_ASSERT(isForwarded()); return next_; } static bool isCellForwarded(Cell* cell) { return fromCell(cell)->isForwarded(); } }; } // namespace gc } // namespace js #endif /* gc_RelocationOverlay_h */ js/src/jsgc.h +0 −49 Original line number Diff line number Diff line Loading @@ -138,55 +138,6 @@ namespace gc { void MergeCompartments(JSCompartment* source, JSCompartment* target); /* * This structure overlays a Cell in the Nursery and re-purposes its memory * for managing the Nursery collection process. */ class RelocationOverlay { /* The low bit is set so this should never equal a normal pointer. */ static const uintptr_t Relocated = uintptr_t(0xbad0bad1); /* Set to Relocated when moved. */ uintptr_t magic_; /* The location |this| was moved to. */ Cell* newLocation_; /* A list entry to track all relocated things. */ RelocationOverlay* next_; public: static RelocationOverlay* fromCell(Cell* cell) { return reinterpret_cast<RelocationOverlay*>(cell); } bool isForwarded() const { return magic_ == Relocated; } Cell* forwardingAddress() const { MOZ_ASSERT(isForwarded()); return newLocation_; } void forwardTo(Cell* cell); RelocationOverlay*& nextRef() { MOZ_ASSERT(isForwarded()); return next_; } RelocationOverlay* next() const { MOZ_ASSERT(isForwarded()); return next_; } static bool isCellForwarded(Cell* cell) { return fromCell(cell)->isForwarded(); } }; // Functions for checking and updating GC thing pointers that might have been // moved by compacting GC. Overloads are also provided that work with Values. // Loading js/src/jsgcinlines.h +1 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ #include "mozilla/Maybe.h" #include "gc/GCTrace.h" #include "gc/RelocationOverlay.h" #include "gc/Zone.h" #include "gc/ArenaList-inl.h" Loading Loading
js/src/gc/GCInternals.h +1 −0 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ #include "jscntxt.h" #include "gc/RelocationOverlay.h" #include "gc/Zone.h" #include "vm/HelperThreads.h" #include "vm/Runtime.h" Loading
js/src/gc/Nursery-inl.h +1 −0 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ #include "jscntxt.h" #include "gc/Heap.h" #include "gc/RelocationOverlay.h" #include "gc/Zone.h" #include "js/TracingAPI.h" #include "vm/Runtime.h" Loading
js/src/gc/RelocationOverlay.h 0 → 100644 +75 −0 Original line number Diff line number Diff line /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- * vim: set ts=8 sts=4 et sw=4 tw=99: * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /* * GC-internal definition of relocation overlay used while moving cells. */ #ifndef gc_RelocationOverlay_h #define gc_RelocationOverlay_h #include "mozilla/Assertions.h" #include <stdint.h> namespace js { namespace gc { struct Cell; /* * This structure overlays a Cell that has been moved and provides a way to find * its new location. It's used during generational and compacting GC. */ class RelocationOverlay { /* The low bit is set so this should never equal a normal pointer. */ static const uintptr_t Relocated = uintptr_t(0xbad0bad1); /* Set to Relocated when moved. */ uintptr_t magic_; /* The location |this| was moved to. */ Cell* newLocation_; /* A list entry to track all relocated things. */ RelocationOverlay* next_; public: static RelocationOverlay* fromCell(Cell* cell) { return reinterpret_cast<RelocationOverlay*>(cell); } bool isForwarded() const { return magic_ == Relocated; } Cell* forwardingAddress() const { MOZ_ASSERT(isForwarded()); return newLocation_; } void forwardTo(Cell* cell); RelocationOverlay*& nextRef() { MOZ_ASSERT(isForwarded()); return next_; } RelocationOverlay* next() const { MOZ_ASSERT(isForwarded()); return next_; } static bool isCellForwarded(Cell* cell) { return fromCell(cell)->isForwarded(); } }; } // namespace gc } // namespace js #endif /* gc_RelocationOverlay_h */
js/src/jsgc.h +0 −49 Original line number Diff line number Diff line Loading @@ -138,55 +138,6 @@ namespace gc { void MergeCompartments(JSCompartment* source, JSCompartment* target); /* * This structure overlays a Cell in the Nursery and re-purposes its memory * for managing the Nursery collection process. */ class RelocationOverlay { /* The low bit is set so this should never equal a normal pointer. */ static const uintptr_t Relocated = uintptr_t(0xbad0bad1); /* Set to Relocated when moved. */ uintptr_t magic_; /* The location |this| was moved to. */ Cell* newLocation_; /* A list entry to track all relocated things. */ RelocationOverlay* next_; public: static RelocationOverlay* fromCell(Cell* cell) { return reinterpret_cast<RelocationOverlay*>(cell); } bool isForwarded() const { return magic_ == Relocated; } Cell* forwardingAddress() const { MOZ_ASSERT(isForwarded()); return newLocation_; } void forwardTo(Cell* cell); RelocationOverlay*& nextRef() { MOZ_ASSERT(isForwarded()); return next_; } RelocationOverlay* next() const { MOZ_ASSERT(isForwarded()); return next_; } static bool isCellForwarded(Cell* cell) { return fromCell(cell)->isForwarded(); } }; // Functions for checking and updating GC thing pointers that might have been // moved by compacting GC. Overloads are also provided that work with Values. // Loading
js/src/jsgcinlines.h +1 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ #include "mozilla/Maybe.h" #include "gc/GCTrace.h" #include "gc/RelocationOverlay.h" #include "gc/Zone.h" #include "gc/ArenaList-inl.h" Loading