summaryrefslogtreecommitdiff
path: root/deps/v8/src/builtins/builtins.cc
diff options
context:
space:
mode:
authorMichaël Zasso <targos@protonmail.com>2022-01-29 08:33:07 +0100
committerMichaël Zasso <targos@protonmail.com>2022-02-02 17:23:18 +0100
commit974ab4060fe3eff74dc0a62a5a27d516738f4c55 (patch)
tree30fbcca796ca5cc7b4abf917e716e2b02899cb7a /deps/v8/src/builtins/builtins.cc
parent4318b2348dbcd5003e0c4a14b5fe378cceec3c81 (diff)
downloadnode-new-974ab4060fe3eff74dc0a62a5a27d516738f4c55.tar.gz
deps: update V8 to 9.8.177.9
PR-URL: https://github.com/nodejs/node/pull/41610 Reviewed-By: Jiawen Geng <technicalcute@gmail.com> Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: Darshan Sen <raisinten@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Diffstat (limited to 'deps/v8/src/builtins/builtins.cc')
-rw-r--r--deps/v8/src/builtins/builtins.cc48
1 files changed, 46 insertions, 2 deletions
diff --git a/deps/v8/src/builtins/builtins.cc b/deps/v8/src/builtins/builtins.cc
index af1e7490b0..561bca4307 100644
--- a/deps/v8/src/builtins/builtins.cc
+++ b/deps/v8/src/builtins/builtins.cc
@@ -107,7 +107,7 @@ void Builtins::TearDown() { initialized_ = false; }
const char* Builtins::Lookup(Address pc) {
// Off-heap pc's can be looked up through binary search.
- Builtin builtin = InstructionStream::TryLookupCode(isolate_, pc);
+ Builtin builtin = OffHeapInstructionStream::TryLookupCode(isolate_, pc);
if (Builtins::IsBuiltinId(builtin)) return name(builtin);
// May be called during initialization (disassembler).
@@ -194,6 +194,39 @@ Handle<Code> Builtins::code_handle(Builtin builtin) {
return Handle<Code>(location);
}
+FullObjectSlot Builtins::builtin_code_data_container_slot(Builtin builtin) {
+ CHECK(V8_EXTERNAL_CODE_SPACE_BOOL);
+ Address* location =
+ &isolate_->builtin_code_data_container_table()[Builtins::ToInt(builtin)];
+ return FullObjectSlot(location);
+}
+
+void Builtins::set_codet(Builtin builtin, CodeT code) {
+ CHECK(V8_EXTERNAL_CODE_SPACE_BOOL);
+ // TODO(v8:11880): add DCHECK_EQ(builtin, code.builtin_id()); once CodeT
+ // has respective field.
+ DCHECK(Internals::HasHeapObjectTag(code.ptr()));
+ // The given builtin may be uninitialized thus we cannot check its type here.
+ isolate_->builtin_code_data_container_table()[Builtins::ToInt(builtin)] =
+ code.ptr();
+}
+
+CodeT Builtins::codet(Builtin builtin) {
+ Address* table = V8_EXTERNAL_CODE_SPACE_BOOL
+ ? isolate_->builtin_code_data_container_table()
+ : isolate_->builtin_table();
+ Address ptr = table[Builtins::ToInt(builtin)];
+ return CodeT::cast(Object(ptr));
+}
+
+Handle<CodeT> Builtins::codet_handle(Builtin builtin) {
+ Address* table = V8_EXTERNAL_CODE_SPACE_BOOL
+ ? isolate_->builtin_code_data_container_table()
+ : isolate_->builtin_table();
+ Address* location = &table[Builtins::ToInt(builtin)];
+ return Handle<CodeT>(location);
+}
+
// static
int Builtins::GetStackParameterCount(Builtin builtin) {
DCHECK(Builtins::KindOf(builtin) == TFJ);
@@ -296,6 +329,17 @@ bool Builtins::IsBuiltinHandle(Handle<HeapObject> maybe_code,
return true;
}
+bool Builtins::IsBuiltinCodeDataContainerHandle(Handle<HeapObject> maybe_code,
+ Builtin* builtin) const {
+ Address* handle_location = maybe_code.location();
+ Address* builtins_table = isolate_->builtin_code_data_container_table();
+ if (handle_location < builtins_table) return false;
+ Address* builtins_table_end = &builtins_table[Builtins::kBuiltinCount];
+ if (handle_location >= builtins_table_end) return false;
+ *builtin = FromInt(static_cast<int>(handle_location - builtins_table));
+ return true;
+}
+
// static
bool Builtins::IsIsolateIndependentBuiltin(const Code code) {
const Builtin builtin = code.builtin_id();
@@ -373,7 +417,7 @@ class OffHeapTrampolineGenerator {
FrameScope scope(&masm_, StackFrame::NO_FRAME_TYPE);
if (type == TrampolineType::kJump) {
masm_.CodeEntry();
- masm_.JumpToInstructionStream(off_heap_entry);
+ masm_.JumpToOffHeapInstructionStream(off_heap_entry);
} else {
DCHECK_EQ(type, TrampolineType::kAbort);
masm_.Trap();