libv8-node 18.19.1.0-aarch64-linux-musl → 19.9.0.0-aarch64-linux-musl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/lib/libv8/node/version.rb +3 -3
  3. data/vendor/v8/aarch64-linux-musl/libv8/obj/libv8_monolith.a +0 -0
  4. data/vendor/v8/include/cppgc/common.h +0 -1
  5. data/vendor/v8/include/cppgc/cross-thread-persistent.h +7 -8
  6. data/vendor/v8/include/cppgc/heap-consistency.h +46 -3
  7. data/vendor/v8/include/cppgc/heap-handle.h +43 -0
  8. data/vendor/v8/include/cppgc/heap-statistics.h +2 -2
  9. data/vendor/v8/include/cppgc/heap.h +3 -7
  10. data/vendor/v8/include/cppgc/internal/api-constants.h +11 -1
  11. data/vendor/v8/include/cppgc/internal/base-page-handle.h +45 -0
  12. data/vendor/v8/include/cppgc/internal/caged-heap-local-data.h +40 -8
  13. data/vendor/v8/include/cppgc/internal/caged-heap.h +61 -0
  14. data/vendor/v8/include/cppgc/internal/gc-info.h +0 -1
  15. data/vendor/v8/include/cppgc/internal/member-storage.h +236 -0
  16. data/vendor/v8/include/cppgc/internal/name-trait.h +21 -6
  17. data/vendor/v8/include/cppgc/internal/persistent-node.h +11 -13
  18. data/vendor/v8/include/cppgc/internal/pointer-policies.h +28 -7
  19. data/vendor/v8/include/cppgc/internal/write-barrier.h +143 -101
  20. data/vendor/v8/include/cppgc/liveness-broker.h +8 -7
  21. data/vendor/v8/include/cppgc/member.h +364 -89
  22. data/vendor/v8/include/cppgc/name-provider.h +4 -4
  23. data/vendor/v8/include/cppgc/persistent.h +5 -9
  24. data/vendor/v8/include/cppgc/platform.h +2 -2
  25. data/vendor/v8/include/cppgc/sentinel-pointer.h +1 -1
  26. data/vendor/v8/include/cppgc/trace-trait.h +4 -0
  27. data/vendor/v8/include/cppgc/type-traits.h +9 -0
  28. data/vendor/v8/include/cppgc/visitor.h +89 -57
  29. data/vendor/v8/include/v8-callbacks.h +19 -5
  30. data/vendor/v8/include/v8-context.h +13 -8
  31. data/vendor/v8/include/v8-cppgc.h +12 -0
  32. data/vendor/v8/include/v8-date.h +5 -0
  33. data/vendor/v8/include/v8-embedder-heap.h +8 -3
  34. data/vendor/v8/include/v8-exception.h +1 -1
  35. data/vendor/v8/include/v8-fast-api-calls.h +46 -32
  36. data/vendor/v8/include/v8-function.h +8 -0
  37. data/vendor/v8/include/v8-initialization.h +23 -49
  38. data/vendor/v8/include/v8-inspector.h +13 -7
  39. data/vendor/v8/include/v8-internal.h +328 -123
  40. data/vendor/v8/include/v8-isolate.h +27 -42
  41. data/vendor/v8/include/v8-local-handle.h +5 -5
  42. data/vendor/v8/include/v8-locker.h +0 -11
  43. data/vendor/v8/include/v8-maybe.h +24 -1
  44. data/vendor/v8/include/v8-message.h +2 -4
  45. data/vendor/v8/include/v8-metrics.h +20 -38
  46. data/vendor/v8/include/v8-microtask-queue.h +1 -1
  47. data/vendor/v8/include/v8-object.h +8 -15
  48. data/vendor/v8/include/v8-persistent-handle.h +0 -2
  49. data/vendor/v8/include/v8-platform.h +54 -25
  50. data/vendor/v8/include/v8-primitive.h +8 -8
  51. data/vendor/v8/include/v8-profiler.h +84 -22
  52. data/vendor/v8/include/v8-regexp.h +2 -1
  53. data/vendor/v8/include/v8-script.h +62 -6
  54. data/vendor/v8/include/v8-template.h +13 -76
  55. data/vendor/v8/include/v8-unwinder-state.h +4 -4
  56. data/vendor/v8/include/v8-util.h +2 -4
  57. data/vendor/v8/include/v8-value-serializer.h +46 -23
  58. data/vendor/v8/include/v8-version.h +3 -3
  59. data/vendor/v8/include/v8-wasm.h +5 -62
  60. data/vendor/v8/include/v8-weak-callback-info.h +0 -7
  61. data/vendor/v8/include/v8config.h +280 -13
  62. metadata +6 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e56a9ffb69e9cdefdd4968e68da725dfe71a356880843a10b2e4138dd9ddf8cc
4
- data.tar.gz: bdc14c18bf52c6daaa2f343b39e8416b80eaf0e52187020113a758a9d0845b76
3
+ metadata.gz: 932114f32ad45eaf298597e5344d80067b93c1c085ec056807767e42349f3f9f
4
+ data.tar.gz: 42b82c4938461a1b9bf4f2773f34833f439018da503a74931dd9e8550ab2c38b
5
5
  SHA512:
6
- metadata.gz: 63c66106efe72e632e4cf8c6f1ebdaa31cfe7eb6e16715e74948d602f11e1302a7762befa2dae2800d75a05f41134ae4831fbc59a6a85ee4d8db17e6d757ae12
7
- data.tar.gz: 4c62a093650ea06022ce1664b9fe6f1e4f878c520955efa9ffce875cce5f8bcc2118ba2f65eedc8ab22679ad1b7aeddf00a60f6febedef8a3adc25ed697efae4
6
+ metadata.gz: 82ff1ba3067c5829b6e0a0c833be719caf022a4da4c41bf1ecf19421ccdbcbaeb3df9955f082eacb64aae32688d9294897359dbc8c03510b8b0bed12c517cb53
7
+ data.tar.gz: b71cf3e32b7a28d179d9412267e66f615c59764ed84c078e2f237ab2ef9a37dc5a7a5f832805857df32068743acbbd85356eab638b5280d5e08d4beebb9144da
@@ -1,7 +1,7 @@
1
1
  module Libv8; end
2
2
 
3
3
  module Libv8::Node
4
- VERSION = '18.19.1.0'.freeze
5
- NODE_VERSION = '18.19.1'.freeze
6
- LIBV8_VERSION = '10.2.154.26'.freeze # from v8/include/v8-version.h
4
+ VERSION = '19.9.0.0'.freeze
5
+ NODE_VERSION = '19.9.0'.freeze
6
+ LIBV8_VERSION = '10.8.168.25'.freeze # from v8/include/v8-version.h
7
7
  end
@@ -5,7 +5,6 @@
5
5
  #ifndef INCLUDE_CPPGC_COMMON_H_
6
6
  #define INCLUDE_CPPGC_COMMON_H_
7
7
 
8
- // TODO(chromium:1056170): Remove dependency on v8.
9
8
  #include "v8config.h" // NOLINT(build/include_directory)
10
9
 
11
10
  namespace cppgc {
@@ -120,7 +120,7 @@ class BasicCrossThreadPersistent final : public CrossThreadPersistentBase,
120
120
  if (!IsValid(raw)) return;
121
121
  PersistentRegionLock guard;
122
122
  CrossThreadPersistentRegion& region = this->GetPersistentRegion(raw);
123
- SetNode(region.AllocateNode(this, &Trace));
123
+ SetNode(region.AllocateNode(this, &TraceAsRoot));
124
124
  this->CheckPointer(raw);
125
125
  }
126
126
 
@@ -138,7 +138,7 @@ class BasicCrossThreadPersistent final : public CrossThreadPersistentBase,
138
138
  : CrossThreadPersistentBase(raw), LocationPolicy(loc) {
139
139
  if (!IsValid(raw)) return;
140
140
  CrossThreadPersistentRegion& region = this->GetPersistentRegion(raw);
141
- SetNode(region.AllocateNode(this, &Trace));
141
+ SetNode(region.AllocateNode(this, &TraceAsRoot));
142
142
  this->CheckPointer(raw);
143
143
  }
144
144
 
@@ -349,9 +349,8 @@ class BasicCrossThreadPersistent final : public CrossThreadPersistentBase,
349
349
  return ptr && ptr != kSentinelPointer;
350
350
  }
351
351
 
352
- static void Trace(Visitor* v, const void* ptr) {
353
- const auto* handle = static_cast<const BasicCrossThreadPersistent*>(ptr);
354
- v->TraceRoot(*handle, handle->Location());
352
+ static void TraceAsRoot(RootVisitor& root_visitor, const void* ptr) {
353
+ root_visitor.Trace(*static_cast<const BasicCrossThreadPersistent*>(ptr));
355
354
  }
356
355
 
357
356
  void AssignUnsafe(T* ptr) {
@@ -378,7 +377,7 @@ class BasicCrossThreadPersistent final : public CrossThreadPersistentBase,
378
377
  SetValue(ptr);
379
378
  if (!IsValid(ptr)) return;
380
379
  PersistentRegionLock guard;
381
- SetNode(this->GetPersistentRegion(ptr).AllocateNode(this, &Trace));
380
+ SetNode(this->GetPersistentRegion(ptr).AllocateNode(this, &TraceAsRoot));
382
381
  this->CheckPointer(ptr);
383
382
  }
384
383
 
@@ -398,7 +397,7 @@ class BasicCrossThreadPersistent final : public CrossThreadPersistentBase,
398
397
  }
399
398
  SetValue(ptr);
400
399
  if (!IsValid(ptr)) return;
401
- SetNode(this->GetPersistentRegion(ptr).AllocateNode(this, &Trace));
400
+ SetNode(this->GetPersistentRegion(ptr).AllocateNode(this, &TraceAsRoot));
402
401
  this->CheckPointer(ptr);
403
402
  }
404
403
 
@@ -416,7 +415,7 @@ class BasicCrossThreadPersistent final : public CrossThreadPersistentBase,
416
415
  return static_cast<T*>(const_cast<void*>(GetValueFromGC()));
417
416
  }
418
417
 
419
- friend class cppgc::Visitor;
418
+ friend class internal::RootVisitor;
420
419
  };
421
420
 
422
421
  template <typename T, typename LocationPolicy, typename CheckingPolicy>
@@ -9,6 +9,7 @@
9
9
 
10
10
  #include "cppgc/internal/write-barrier.h"
11
11
  #include "cppgc/macros.h"
12
+ #include "cppgc/member.h"
12
13
  #include "cppgc/trace-trait.h"
13
14
  #include "v8config.h" // NOLINT(build/include_directory)
14
15
 
@@ -47,6 +48,29 @@ class HeapConsistency final {
47
48
  return internal::WriteBarrier::GetWriteBarrierType(slot, value, params);
48
49
  }
49
50
 
51
+ /**
52
+ * Gets the required write barrier type for a specific write. This override is
53
+ * only used for all the BasicMember types.
54
+ *
55
+ * \param slot Slot containing the pointer to the object. The slot itself
56
+ * must reside in an object that has been allocated using
57
+ * `MakeGarbageCollected()`.
58
+ * \param value The pointer to the object held via `BasicMember`.
59
+ * \param params Parameters that may be used for actual write barrier calls.
60
+ * Only filled if return value indicates that a write barrier is needed. The
61
+ * contents of the `params` are an implementation detail.
62
+ * \returns whether a write barrier is needed and which barrier to invoke.
63
+ */
64
+ template <typename T, typename WeaknessTag, typename WriteBarrierPolicy,
65
+ typename CheckingPolicy>
66
+ static V8_INLINE WriteBarrierType GetWriteBarrierType(
67
+ const internal::BasicMember<T, WeaknessTag, WriteBarrierPolicy,
68
+ CheckingPolicy>& value,
69
+ WriteBarrierParams& params) {
70
+ return internal::WriteBarrier::GetWriteBarrierType(
71
+ value.GetRawSlot(), value.GetRawStorage(), params);
72
+ }
73
+
50
74
  /**
51
75
  * Gets the required write barrier type for a specific write.
52
76
  *
@@ -146,7 +170,25 @@ class HeapConsistency final {
146
170
  */
147
171
  static V8_INLINE void GenerationalBarrier(const WriteBarrierParams& params,
148
172
  const void* slot) {
149
- internal::WriteBarrier::GenerationalBarrier(params, slot);
173
+ internal::WriteBarrier::GenerationalBarrier<
174
+ internal::WriteBarrier::GenerationalBarrierType::kPreciseSlot>(params,
175
+ slot);
176
+ }
177
+
178
+ /**
179
+ * Generational barrier for maintaining consistency when running with multiple
180
+ * generations. This version is used when slot contains uncompressed pointer.
181
+ *
182
+ * \param params The parameters retrieved from `GetWriteBarrierType()`.
183
+ * \param slot Uncompressed slot containing the direct pointer to the object.
184
+ * The slot itself must reside in an object that has been allocated using
185
+ * `MakeGarbageCollected()`.
186
+ */
187
+ static V8_INLINE void GenerationalBarrierForUncompressedSlot(
188
+ const WriteBarrierParams& params, const void* uncompressed_slot) {
189
+ internal::WriteBarrier::GenerationalBarrier<
190
+ internal::WriteBarrier::GenerationalBarrierType::
191
+ kPreciseUncompressedSlot>(params, uncompressed_slot);
150
192
  }
151
193
 
152
194
  /**
@@ -158,8 +200,9 @@ class HeapConsistency final {
158
200
  */
159
201
  static V8_INLINE void GenerationalBarrierForSourceObject(
160
202
  const WriteBarrierParams& params, const void* inner_pointer) {
161
- internal::WriteBarrier::GenerationalBarrierForSourceObject(params,
162
- inner_pointer);
203
+ internal::WriteBarrier::GenerationalBarrier<
204
+ internal::WriteBarrier::GenerationalBarrierType::kImpreciseSlot>(
205
+ params, inner_pointer);
163
206
  }
164
207
 
165
208
  private:
@@ -0,0 +1,43 @@
1
+ // Copyright 2022 the V8 project authors. All rights reserved.
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+
5
+ #ifndef INCLUDE_CPPGC_HEAP_HANDLE_H_
6
+ #define INCLUDE_CPPGC_HEAP_HANDLE_H_
7
+
8
+ #include "v8config.h" // NOLINT(build/include_directory)
9
+
10
+ namespace cppgc {
11
+
12
+ namespace internal {
13
+ class HeapBase;
14
+ class WriteBarrierTypeForCagedHeapPolicy;
15
+ class WriteBarrierTypeForNonCagedHeapPolicy;
16
+ } // namespace internal
17
+
18
+ /**
19
+ * Opaque handle used for additional heap APIs.
20
+ */
21
+ class HeapHandle {
22
+ private:
23
+ HeapHandle() = default;
24
+
25
+ V8_INLINE bool is_incremental_marking_in_progress() const {
26
+ return is_incremental_marking_in_progress_;
27
+ }
28
+
29
+ V8_INLINE bool is_young_generation_enabled() const {
30
+ return is_young_generation_enabled_;
31
+ }
32
+
33
+ bool is_incremental_marking_in_progress_ = false;
34
+ bool is_young_generation_enabled_ = false;
35
+
36
+ friend class internal::HeapBase;
37
+ friend class internal::WriteBarrierTypeForCagedHeapPolicy;
38
+ friend class internal::WriteBarrierTypeForNonCagedHeapPolicy;
39
+ };
40
+
41
+ } // namespace cppgc
42
+
43
+ #endif // INCLUDE_CPPGC_HEAP_HANDLE_H_
@@ -56,7 +56,7 @@ struct HeapStatistics final {
56
56
  /** Amount of memory actually used on the page. */
57
57
  size_t used_size_bytes = 0;
58
58
  /** Statistics for object allocated on the page. Filled only when
59
- * NameProvider::HideInternalNames() is false. */
59
+ * NameProvider::SupportsCppClassNamesAsObjectNames() is true. */
60
60
  std::vector<ObjectStatsEntry> object_statistics;
61
61
  };
62
62
 
@@ -98,7 +98,7 @@ struct HeapStatistics final {
98
98
 
99
99
  /** Overall committed amount of memory for the heap. */
100
100
  size_t committed_size_bytes = 0;
101
- /** Resident amount of memory help by the heap. */
101
+ /** Resident amount of memory held by the heap. */
102
102
  size_t resident_size_bytes = 0;
103
103
  /** Amount of memory actually used on the heap. */
104
104
  size_t used_size_bytes = 0;
@@ -21,6 +21,7 @@
21
21
  namespace cppgc {
22
22
 
23
23
  class AllocationHandle;
24
+ class HeapHandle;
24
25
 
25
26
  /**
26
27
  * Implementation details of cppgc. Those details are considered internal and
@@ -31,11 +32,6 @@ namespace internal {
31
32
  class Heap;
32
33
  } // namespace internal
33
34
 
34
- /**
35
- * Used for additional heap APIs.
36
- */
37
- class HeapHandle;
38
-
39
35
  class V8_EXPORT Heap {
40
36
  public:
41
37
  /**
@@ -59,7 +55,7 @@ class V8_EXPORT Heap {
59
55
  };
60
56
 
61
57
  /**
62
- * Specifies supported marking types
58
+ * Specifies supported marking types.
63
59
  */
64
60
  enum class MarkingType : uint8_t {
65
61
  /**
@@ -79,7 +75,7 @@ class V8_EXPORT Heap {
79
75
  };
80
76
 
81
77
  /**
82
- * Specifies supported sweeping types
78
+ * Specifies supported sweeping types.
83
79
  */
84
80
  enum class SweepingType : uint8_t {
85
81
  /**
@@ -32,12 +32,22 @@ static constexpr uint16_t kFullyConstructedBitMask = uint16_t{1};
32
32
 
33
33
  static constexpr size_t kPageSize = size_t{1} << 17;
34
34
 
35
+ #if defined(V8_TARGET_ARCH_ARM64) && defined(V8_OS_MACOS)
36
+ constexpr size_t kGuardPageSize = 0;
37
+ #else
38
+ constexpr size_t kGuardPageSize = 4096;
39
+ #endif
40
+
35
41
  static constexpr size_t kLargeObjectSizeThreshold = kPageSize / 2;
36
42
 
37
43
  #if defined(CPPGC_CAGED_HEAP)
44
+ #if defined(CPPGC_2GB_CAGE)
45
+ constexpr size_t kCagedHeapReservationSize = static_cast<size_t>(2) * kGB;
46
+ #else // !defined(CPPGC_2GB_CAGE)
38
47
  constexpr size_t kCagedHeapReservationSize = static_cast<size_t>(4) * kGB;
48
+ #endif // !defined(CPPGC_2GB_CAGE)
39
49
  constexpr size_t kCagedHeapReservationAlignment = kCagedHeapReservationSize;
40
- #endif
50
+ #endif // defined(CPPGC_CAGED_HEAP)
41
51
 
42
52
  static constexpr size_t kDefaultAlignment = sizeof(void*);
43
53
 
@@ -0,0 +1,45 @@
1
+ // Copyright 2022 the V8 project authors. All rights reserved.
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+
5
+ #ifndef INCLUDE_CPPGC_INTERNAL_BASE_PAGE_HANDLE_H_
6
+ #define INCLUDE_CPPGC_INTERNAL_BASE_PAGE_HANDLE_H_
7
+
8
+ #include "cppgc/heap-handle.h"
9
+ #include "cppgc/internal/api-constants.h"
10
+ #include "cppgc/internal/logging.h"
11
+ #include "v8config.h" // NOLINT(build/include_directory)
12
+
13
+ namespace cppgc {
14
+ namespace internal {
15
+
16
+ // The class is needed in the header to allow for fast access to HeapHandle in
17
+ // the write barrier.
18
+ class BasePageHandle {
19
+ public:
20
+ static V8_INLINE BasePageHandle* FromPayload(void* payload) {
21
+ return reinterpret_cast<BasePageHandle*>(
22
+ (reinterpret_cast<uintptr_t>(payload) &
23
+ ~(api_constants::kPageSize - 1)) +
24
+ api_constants::kGuardPageSize);
25
+ }
26
+ static V8_INLINE const BasePageHandle* FromPayload(const void* payload) {
27
+ return FromPayload(const_cast<void*>(payload));
28
+ }
29
+
30
+ HeapHandle& heap_handle() { return heap_handle_; }
31
+ const HeapHandle& heap_handle() const { return heap_handle_; }
32
+
33
+ protected:
34
+ explicit BasePageHandle(HeapHandle& heap_handle) : heap_handle_(heap_handle) {
35
+ CPPGC_DCHECK(reinterpret_cast<uintptr_t>(this) % api_constants::kPageSize ==
36
+ api_constants::kGuardPageSize);
37
+ }
38
+
39
+ HeapHandle& heap_handle_;
40
+ };
41
+
42
+ } // namespace internal
43
+ } // namespace cppgc
44
+
45
+ #endif // INCLUDE_CPPGC_INTERNAL_BASE_PAGE_HANDLE_H_
@@ -10,46 +10,76 @@
10
10
  #include <cstdint>
11
11
 
12
12
  #include "cppgc/internal/api-constants.h"
13
+ #include "cppgc/internal/caged-heap.h"
13
14
  #include "cppgc/internal/logging.h"
14
15
  #include "cppgc/platform.h"
15
16
  #include "v8config.h" // NOLINT(build/include_directory)
16
17
 
18
+ #if __cpp_lib_bitopts
19
+ #include <bit>
20
+ #endif // __cpp_lib_bitopts
21
+
22
+ #if defined(CPPGC_CAGED_HEAP)
23
+
17
24
  namespace cppgc {
18
25
  namespace internal {
19
26
 
20
27
  class HeapBase;
28
+ class HeapBaseHandle;
21
29
 
22
30
  #if defined(CPPGC_YOUNG_GENERATION)
23
31
 
24
32
  // AgeTable is the bytemap needed for the fast generation check in the write
25
- // barrier. AgeTable contains entries that correspond to 512 bytes memory
33
+ // barrier. AgeTable contains entries that correspond to 4096 bytes memory
26
34
  // regions (cards). Each entry in the table represents generation of the objects
27
35
  // that reside on the corresponding card (young, old or mixed).
28
- class AgeTable final {
36
+ class V8_EXPORT AgeTable final {
29
37
  static constexpr size_t kRequiredSize = 1 * api_constants::kMB;
30
38
  static constexpr size_t kAllocationGranularity =
31
39
  api_constants::kAllocationGranularity;
32
40
 
33
41
  public:
42
+ // Represents age of the objects living on a single card.
34
43
  enum class Age : uint8_t { kOld, kYoung, kMixed };
44
+ // When setting age for a range, consider or ignore ages of the adjacent
45
+ // cards.
46
+ enum class AdjacentCardsPolicy : uint8_t { kConsider, kIgnore };
35
47
 
36
48
  static constexpr size_t kCardSizeInBytes =
37
- (api_constants::kCagedHeapReservationSize / kAllocationGranularity) /
38
- kRequiredSize;
49
+ api_constants::kCagedHeapReservationSize / kRequiredSize;
39
50
 
40
51
  void SetAge(uintptr_t cage_offset, Age age) {
41
52
  table_[card(cage_offset)] = age;
42
53
  }
54
+
43
55
  V8_INLINE Age GetAge(uintptr_t cage_offset) const {
44
56
  return table_[card(cage_offset)];
45
57
  }
46
58
 
47
- void Reset(PageAllocator* allocator);
59
+ void SetAgeForRange(uintptr_t cage_offset_begin, uintptr_t cage_offset_end,
60
+ Age age, AdjacentCardsPolicy adjacent_cards_policy);
61
+
62
+ Age GetAgeForRange(uintptr_t cage_offset_begin,
63
+ uintptr_t cage_offset_end) const;
64
+
65
+ void ResetForTesting();
48
66
 
49
67
  private:
50
68
  V8_INLINE size_t card(uintptr_t offset) const {
51
69
  constexpr size_t kGranularityBits =
70
+ #if __cpp_lib_bitopts
71
+ std::countr_zero(static_cast<uint32_t>(kCardSizeInBytes));
72
+ #elif V8_HAS_BUILTIN_CTZ
52
73
  __builtin_ctz(static_cast<uint32_t>(kCardSizeInBytes));
74
+ #else //! V8_HAS_BUILTIN_CTZ
75
+ // Hardcode and check with assert.
76
+ #if defined(CPPGC_2GB_CAGE)
77
+ 11;
78
+ #else // !defined(CPPGC_2GB_CAGE)
79
+ 12;
80
+ #endif // !defined(CPPGC_2GB_CAGE)
81
+ #endif // !V8_HAS_BUILTIN_CTZ
82
+ static_assert((1 << kGranularityBits) == kCardSizeInBytes);
53
83
  const size_t entry = offset >> kGranularityBits;
54
84
  CPPGC_DCHECK(table_.size() > entry);
55
85
  return entry;
@@ -64,10 +94,10 @@ static_assert(sizeof(AgeTable) == 1 * api_constants::kMB,
64
94
  #endif // CPPGC_YOUNG_GENERATION
65
95
 
66
96
  struct CagedHeapLocalData final {
67
- CagedHeapLocalData(HeapBase&, PageAllocator&);
97
+ V8_INLINE static CagedHeapLocalData& Get() {
98
+ return *reinterpret_cast<CagedHeapLocalData*>(CagedHeapBase::GetBase());
99
+ }
68
100
 
69
- bool is_incremental_marking_in_progress = false;
70
- HeapBase& heap_base;
71
101
  #if defined(CPPGC_YOUNG_GENERATION)
72
102
  AgeTable age_table;
73
103
  #endif
@@ -76,4 +106,6 @@ struct CagedHeapLocalData final {
76
106
  } // namespace internal
77
107
  } // namespace cppgc
78
108
 
109
+ #endif // defined(CPPGC_CAGED_HEAP)
110
+
79
111
  #endif // INCLUDE_CPPGC_INTERNAL_CAGED_HEAP_LOCAL_DATA_H_
@@ -0,0 +1,61 @@
1
+ // Copyright 2022 the V8 project authors. All rights reserved.
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+
5
+ #ifndef INCLUDE_CPPGC_INTERNAL_CAGED_HEAP_H_
6
+ #define INCLUDE_CPPGC_INTERNAL_CAGED_HEAP_H_
7
+
8
+ #include <climits>
9
+ #include <cstddef>
10
+
11
+ #include "cppgc/internal/api-constants.h"
12
+ #include "cppgc/internal/base-page-handle.h"
13
+ #include "v8config.h" // NOLINT(build/include_directory)
14
+
15
+ #if defined(CPPGC_CAGED_HEAP)
16
+
17
+ namespace cppgc {
18
+ namespace internal {
19
+
20
+ class V8_EXPORT CagedHeapBase {
21
+ public:
22
+ V8_INLINE static uintptr_t OffsetFromAddress(const void* address) {
23
+ return reinterpret_cast<uintptr_t>(address) &
24
+ (api_constants::kCagedHeapReservationAlignment - 1);
25
+ }
26
+
27
+ V8_INLINE static bool IsWithinCage(const void* address) {
28
+ CPPGC_DCHECK(g_heap_base_);
29
+ return (reinterpret_cast<uintptr_t>(address) &
30
+ ~(api_constants::kCagedHeapReservationAlignment - 1)) ==
31
+ g_heap_base_;
32
+ }
33
+
34
+ V8_INLINE static bool AreWithinCage(const void* addr1, const void* addr2) {
35
+ #if defined(CPPGC_2GB_CAGE)
36
+ static constexpr size_t kHalfWordShift = sizeof(uint32_t) * CHAR_BIT - 1;
37
+ #else //! defined(CPPGC_2GB_CAGE)
38
+ static constexpr size_t kHalfWordShift = sizeof(uint32_t) * CHAR_BIT;
39
+ #endif //! defined(CPPGC_2GB_CAGE)
40
+ static_assert((static_cast<size_t>(1) << kHalfWordShift) ==
41
+ api_constants::kCagedHeapReservationSize);
42
+ CPPGC_DCHECK(g_heap_base_);
43
+ return !(((reinterpret_cast<uintptr_t>(addr1) ^ g_heap_base_) |
44
+ (reinterpret_cast<uintptr_t>(addr2) ^ g_heap_base_)) >>
45
+ kHalfWordShift);
46
+ }
47
+
48
+ V8_INLINE static uintptr_t GetBase() { return g_heap_base_; }
49
+
50
+ private:
51
+ friend class CagedHeap;
52
+
53
+ static uintptr_t g_heap_base_;
54
+ };
55
+
56
+ } // namespace internal
57
+ } // namespace cppgc
58
+
59
+ #endif // defined(CPPGC_CAGED_HEAP)
60
+
61
+ #endif // INCLUDE_CPPGC_INTERNAL_CAGED_HEAP_H_
@@ -48,7 +48,6 @@ struct V8_EXPORT EnsureGCInfoIndexTrait final {
48
48
  static GCInfoIndex EnsureGCInfoIndexNonPolymorphic(std::atomic<GCInfoIndex>&,
49
49
  TraceCallback,
50
50
  FinalizationCallback,
51
-
52
51
  NameCallback);
53
52
  static GCInfoIndex EnsureGCInfoIndexNonPolymorphic(std::atomic<GCInfoIndex>&,
54
53
  TraceCallback,