Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit b8e264d

Browse filesBrowse files
authored
src: tag v8 aligned pointer slots with embedder data type tags
PR-URL: #60602 Fixes: #60589 Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Juan José Arboleda <soyjuanarbol@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
1 parent ca91969 commit b8e264d
Copy full SHA for b8e264d

18 files changed

+120-58Lines changed: 120 additions & 58 deletions
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎src/README.md‎

Copy file name to clipboardExpand all lines: src/README.md
+4-4Lines changed: 4 additions & 4 deletions
  • Display the source diff
  • Display the rich diff
Original file line numberDiff line numberDiff line change
@@ -126,10 +126,10 @@ Typical ways of working with internal fields are:
126126
* `obj->GetInternalField(i)` to get a JavaScript value from an internal field.
127127
* `obj->SetInternalField(i, v)` to store a JavaScript value in an
128128
internal field.
129-
* `obj->GetAlignedPointerFromInternalField(i)` to get a `void*` pointer from an
130-
internal field.
131-
* `obj->SetAlignedPointerInInternalField(i, p)` to store a `void*` pointer in an
132-
internal field.
129+
* `obj->GetAlignedPointerFromInternalField(i, EmbedderDataTag::kDefault)` to get
130+
a `void*` pointer from an internal field.
131+
* `obj->SetAlignedPointerInInternalField(i, p, EmbedderDataTag::kDefault)` to store
132+
a `void*` pointer in an internal field.
133133

134134
[`Context`][]s provide the same feature under the name “embedder data”.
135135

Collapse file

‎src/base_object-inl.h‎

Copy file name to clipboardExpand all lines: src/base_object-inl.h
+10-6Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -74,30 +74,34 @@ bool BaseObject::IsBaseObject(IsolateData* isolate_data,
7474
return false;
7575
}
7676

77-
uint16_t* ptr = static_cast<uint16_t*>(
78-
obj->GetAlignedPointerFromInternalField(BaseObject::kEmbedderType));
77+
uint16_t* ptr =
78+
static_cast<uint16_t*>(obj->GetAlignedPointerFromInternalField(
79+
BaseObject::kEmbedderType, EmbedderDataTag::kEmbedderType));
7980
return ptr == isolate_data->embedder_id_for_non_cppgc();
8081
}
8182

8283
void BaseObject::TagBaseObject(IsolateData* isolate_data,
8384
v8::Local<v8::Object> object) {
8485
DCHECK_GE(object->InternalFieldCount(), BaseObject::kInternalFieldCount);
8586
object->SetAlignedPointerInInternalField(
86-
BaseObject::kEmbedderType, isolate_data->embedder_id_for_non_cppgc());
87+
BaseObject::kEmbedderType,
88+
isolate_data->embedder_id_for_non_cppgc(),
89+
EmbedderDataTag::kEmbedderType);
8790
}
8891

8992
void BaseObject::SetInternalFields(IsolateData* isolate_data,
9093
v8::Local<v8::Object> object,
9194
void* slot) {
9295
TagBaseObject(isolate_data, object);
93-
object->SetAlignedPointerInInternalField(BaseObject::kSlot, slot);
96+
object->SetAlignedPointerInInternalField(
97+
BaseObject::kSlot, slot, EmbedderDataTag::kDefault);
9498
}
9599

96100
BaseObject* BaseObject::FromJSObject(v8::Local<v8::Value> value) {
97101
v8::Local<v8::Object> obj = value.As<v8::Object>();
98102
DCHECK_GE(obj->InternalFieldCount(), BaseObject::kInternalFieldCount);
99-
return static_cast<BaseObject*>(
100-
obj->GetAlignedPointerFromInternalField(BaseObject::kSlot));
103+
return static_cast<BaseObject*>(obj->GetAlignedPointerFromInternalField(
104+
BaseObject::kSlot, EmbedderDataTag::kDefault));
101105
}
102106

103107
template <typename T>
Collapse file

‎src/base_object.cc‎

Copy file name to clipboardExpand all lines: src/base_object.cc
+2-1Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ BaseObject::~BaseObject() {
4545

4646
{
4747
HandleScope handle_scope(realm()->isolate());
48-
object()->SetAlignedPointerInInternalField(BaseObject::kSlot, nullptr);
48+
object()->SetAlignedPointerInInternalField(
49+
BaseObject::kSlot, nullptr, EmbedderDataTag::kDefault);
4950
}
5051
}
5152

Collapse file

‎src/base_object.h‎

Copy file name to clipboardExpand all lines: src/base_object.h
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include <type_traits> // std::remove_reference
2828
#include "base_object_types.h"
2929
#include "memory_tracker.h"
30+
#include "node_v8_embedder.h"
3031
#include "util.h"
3132
#include "v8.h"
3233

Collapse file

‎src/cppgc_helpers-inl.h‎

Copy file name to clipboardExpand all lines: src/cppgc_helpers-inl.h
+6-3Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@ void CppgcMixin::Wrap(T* ptr, Realm* realm, v8::Local<v8::Object> obj) {
1919
v8::Object::Wrap<v8::CppHeapPointerTag::kDefaultTag>(isolate, obj, wrappable);
2020
// Keep the layout consistent with BaseObjects.
2121
obj->SetAlignedPointerInInternalField(
22-
kEmbedderType, realm->isolate_data()->embedder_id_for_cppgc());
23-
obj->SetAlignedPointerInInternalField(kSlot, ptr);
22+
kEmbedderType,
23+
realm->isolate_data()->embedder_id_for_cppgc(),
24+
EmbedderDataTag::kEmbedderType);
25+
obj->SetAlignedPointerInInternalField(kSlot, ptr, EmbedderDataTag::kDefault);
2426
realm->TrackCppgcWrapper(ptr);
2527
}
2628

@@ -41,7 +43,8 @@ T* CppgcMixin::Unwrap(v8::Local<v8::Object> obj) {
4143
if (obj->InternalFieldCount() != T::kInternalFieldCount) {
4244
return nullptr;
4345
}
44-
T* ptr = static_cast<T*>(obj->GetAlignedPointerFromInternalField(T::kSlot));
46+
T* ptr = static_cast<T*>(obj->GetAlignedPointerFromInternalField(
47+
T::kSlot, EmbedderDataTag::kDefault));
4548
return ptr;
4649
}
4750

Collapse file

‎src/env-inl.h‎

Copy file name to clipboardExpand all lines: src/env-inl.h
+2-3Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -196,9 +196,8 @@ inline Environment* Environment::GetCurrent(v8::Local<v8::Context> context) {
196196
if (!ContextEmbedderTag::IsNodeContext(context)) [[unlikely]] {
197197
return nullptr;
198198
}
199-
return static_cast<Environment*>(
200-
context->GetAlignedPointerFromEmbedderData(
201-
ContextEmbedderIndex::kEnvironment));
199+
return static_cast<Environment*>(context->GetAlignedPointerFromEmbedderData(
200+
ContextEmbedderIndex::kEnvironment, EmbedderDataTag::kPerContextData));
202201
}
203202

204203
inline Environment* Environment::GetCurrent(
Collapse file

‎src/env.cc‎

Copy file name to clipboardExpand all lines: src/env.cc
+14-6Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -674,12 +674,16 @@ void Environment::AssignToContext(Local<v8::Context> context,
674674
Realm* realm,
675675
const ContextInfo& info) {
676676
context->SetAlignedPointerInEmbedderData(ContextEmbedderIndex::kEnvironment,
677-
this);
678-
context->SetAlignedPointerInEmbedderData(ContextEmbedderIndex::kRealm, realm);
677+
this,
678+
EmbedderDataTag::kPerContextData);
679+
context->SetAlignedPointerInEmbedderData(
680+
ContextEmbedderIndex::kRealm, realm, EmbedderDataTag::kPerContextData);
679681

680682
// ContextifyContexts will update this to a pointer to the native object.
681683
context->SetAlignedPointerInEmbedderData(
682-
ContextEmbedderIndex::kContextifyContext, nullptr);
684+
ContextEmbedderIndex::kContextifyContext,
685+
nullptr,
686+
EmbedderDataTag::kPerContextData);
683687

684688
// This must not be done before other context fields are initialized.
685689
ContextEmbedderTag::TagNodeContext(context);
@@ -695,11 +699,15 @@ void Environment::AssignToContext(Local<v8::Context> context,
695699
void Environment::UnassignFromContext(Local<v8::Context> context) {
696700
if (!context.IsEmpty()) {
697701
context->SetAlignedPointerInEmbedderData(ContextEmbedderIndex::kEnvironment,
698-
nullptr);
702+
nullptr,
703+
EmbedderDataTag::kPerContextData);
699704
context->SetAlignedPointerInEmbedderData(ContextEmbedderIndex::kRealm,
700-
nullptr);
705+
nullptr,
706+
EmbedderDataTag::kPerContextData);
701707
context->SetAlignedPointerInEmbedderData(
702-
ContextEmbedderIndex::kContextifyContext, nullptr);
708+
ContextEmbedderIndex::kContextifyContext,
709+
nullptr,
710+
EmbedderDataTag::kPerContextData);
703711
}
704712
UntrackContext(context);
705713
}
Collapse file

‎src/histogram.cc‎

Copy file name to clipboardExpand all lines: src/histogram.cc
+8-5Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,8 @@ HistogramBase::HistogramBase(
136136
MakeWeak();
137137
wrap->SetAlignedPointerInInternalField(
138138
HistogramImpl::InternalFields::kImplField,
139-
static_cast<HistogramImpl*>(this));
139+
static_cast<HistogramImpl*>(this),
140+
EmbedderDataTag::kDefault);
140141
}
141142

142143
HistogramBase::HistogramBase(
@@ -148,7 +149,8 @@ HistogramBase::HistogramBase(
148149
MakeWeak();
149150
wrap->SetAlignedPointerInInternalField(
150151
HistogramImpl::InternalFields::kImplField,
151-
static_cast<HistogramImpl*>(this));
152+
static_cast<HistogramImpl*>(this),
153+
EmbedderDataTag::kDefault);
152154
}
153155

154156
void HistogramBase::MemoryInfo(MemoryTracker* tracker) const {
@@ -362,7 +364,8 @@ IntervalHistogram::IntervalHistogram(
362364
MakeWeak();
363365
wrap->SetAlignedPointerInInternalField(
364366
HistogramImpl::InternalFields::kImplField,
365-
static_cast<HistogramImpl*>(this));
367+
static_cast<HistogramImpl*>(this),
368+
EmbedderDataTag::kDefault);
366369
uv_timer_init(env->event_loop(), &timer_);
367370
}
368371

@@ -600,8 +603,8 @@ double HistogramImpl::FastGetPercentile(Local<Value> receiver,
600603
HistogramImpl* HistogramImpl::FromJSObject(Local<Value> value) {
601604
auto obj = value.As<Object>();
602605
DCHECK_GE(obj->InternalFieldCount(), HistogramImpl::kInternalFieldCount);
603-
return static_cast<HistogramImpl*>(
604-
obj->GetAlignedPointerFromInternalField(HistogramImpl::kImplField));
606+
return static_cast<HistogramImpl*>(obj->GetAlignedPointerFromInternalField(
607+
HistogramImpl::kImplField, EmbedderDataTag::kDefault));
605608
}
606609

607610
std::unique_ptr<worker::TransferData>
Collapse file

‎src/js_udp_wrap.cc‎

Copy file name to clipboardExpand all lines: src/js_udp_wrap.cc
+3-2Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,9 @@ JSUDPWrap::JSUDPWrap(Environment* env, Local<Object> obj)
5555
: AsyncWrap(env, obj, PROVIDER_JSUDPWRAP) {
5656
MakeWeak();
5757

58-
obj->SetAlignedPointerInInternalField(
59-
kUDPWrapBaseField, static_cast<UDPWrapBase*>(this));
58+
obj->SetAlignedPointerInInternalField(kUDPWrapBaseField,
59+
static_cast<UDPWrapBase*>(this),
60+
EmbedderDataTag::kDefault);
6061
}
6162

6263
int JSUDPWrap::RecvStart() {
Collapse file

‎src/node_context_data.h‎

Copy file name to clipboardExpand all lines: src/node_context_data.h
+5-2Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
55

6+
#include "node_v8_embedder.h"
67
#include "util.h"
78
#include "v8.h"
89

@@ -135,7 +136,8 @@ class ContextEmbedderTag {
135136
// context.
136137
context->SetAlignedPointerInEmbedderData(
137138
ContextEmbedderIndex::kContextTag,
138-
ContextEmbedderTag::kNodeContextTagPtr);
139+
ContextEmbedderTag::kNodeContextTagPtr,
140+
EmbedderDataTag::kPerContextData);
139141
}
140142

141143
static inline bool IsNodeContext(v8::Local<v8::Context> context) {
@@ -147,7 +149,8 @@ class ContextEmbedderTag {
147149
return false;
148150
}
149151
if (context->GetAlignedPointerFromEmbedderData(
150-
ContextEmbedderIndex::kContextTag) !=
152+
ContextEmbedderIndex::kContextTag,
153+
EmbedderDataTag::kPerContextData) !=
151154
ContextEmbedderTag::kNodeContextTagPtr) [[unlikely]] {
152155
return false;
153156
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.