From 974ab4060fe3eff74dc0a62a5a27d516738f4c55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Zasso?= Date: Sat, 29 Jan 2022 08:33:07 +0100 Subject: deps: update V8 to 9.8.177.9 PR-URL: https://github.com/nodejs/node/pull/41610 Reviewed-By: Jiawen Geng Reviewed-By: Antoine du Hamel Reviewed-By: Darshan Sen Reviewed-By: Colin Ihrig --- deps/v8/src/builtins/builtins.cc | 48 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) (limited to 'deps/v8/src/builtins/builtins.cc') 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 Builtins::code_handle(Builtin builtin) { return Handle(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 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(location); +} + // static int Builtins::GetStackParameterCount(Builtin builtin) { DCHECK(Builtins::KindOf(builtin) == TFJ); @@ -296,6 +329,17 @@ bool Builtins::IsBuiltinHandle(Handle maybe_code, return true; } +bool Builtins::IsBuiltinCodeDataContainerHandle(Handle 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(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(); -- cgit v1.2.1