// Copyright 2022 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef V8_SANDBOX_EXTERNAL_ENTITY_TABLE_H_ #define V8_SANDBOX_EXTERNAL_ENTITY_TABLE_H_ #include <set> #include "include/v8-platform.h" #include "include/v8config.h" #include "src/base/atomicops.h" #include "src/base/memory.h" #include "src/base/platform/mutex.h" #include "src/common/code-memory-access.h" #include "src/common/globals.h" #include "src/common/segmented-table.h" #ifdef V8_COMPRESS_POINTERS namespace v8 { namespace internal { class Isolate; /** * A thread-safe table with a fixed maximum size for storing references to * objects located outside of the sandbox. * * An external entity table provides the basic mechanisms to ensure * safe access to objects located outside the sandbox, but referenced * from within it. When an external entity table is used, objects located * inside the sandbox reference outside objects through indices into the table. * * The ExternalEntityTable class should be seen an an incomplete class that * needs to be extended by a concrete implementation class, such as the * ExternalPointerTable class, as it is lacking some functionality. In * particular, while the ExternalEntityTable implements basic table memory * management as well as entry allocation routines, it does not implement any * logic for reclaiming entries such as garbage collection. This must be done * by the child classes. * * For the purpose of memory management, the table is partitioned into Segments * (for example 64kb memory chunks) that are grouped together in "Spaces". All * segments in a space share a freelist, and so entry allocation and garbage * collection happen on the level of spaces. */ template <typename Entry, size_t size> class V8_EXPORT_PRIVATE ExternalEntityTable : public SegmentedTable<Entry, size> { … }; } // namespace internal } // namespace v8 #endif // V8_COMPRESS_POINTERS #endif // V8_SANDBOX_EXTERNAL_ENTITY_TABLE_H_