Skip to content

Commit 31e3bbe

Browse files
committed
[JSC] Introduce NativeCallee
https://bugs.webkit.org/show_bug.cgi?id=260366 rdar://114050102 Reviewed by Keith Miller. This patch adds NativeCallee abstraction, which is old Wasm::Callee, but now usable for non-wasm ones. And Wasm::Callee inherits this NativeCallee. The reason of extracting NativeCallee is that we would like to use this special Callee for non wasm, in particular our new handler IC's code. This allows us to do appropriate unwinding even though we create a new CallFrame for handler IC code. * Source/JavaScriptCore/CMakeLists.txt: * Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj: * Source/JavaScriptCore/Sources.txt: * Source/JavaScriptCore/bytecode/CodeBlock.cpp: (JSC::CodeBlock::noticeIncomingCall): * Source/JavaScriptCore/bytecode/Repatch.cpp: (JSC::linkMonomorphicCall): (JSC::linkVirtualFor): (JSC::linkPolymorphicCall): (JSC::webAssemblyOwner): Deleted. * Source/JavaScriptCore/debugger/DebuggerCallFrame.cpp: (JSC::DebuggerCallFrame::scope): (JSC::DebuggerCallFrame::thisValue const): (JSC::DebuggerCallFrame::evaluateWithScopeExtension): (JSC::DebuggerCallFrame::sourceIDForCallFrame): * Source/JavaScriptCore/dfg/DFGDoesGCCheck.cpp: (JSC::DFG::DoesGCCheck::verifyCanGC): * Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp: (Inspector::functionName): * Source/JavaScriptCore/interpreter/CallFrame.cpp: (JSC::CallFrame::bytecodeIndex const): (JSC::CallFrame::globalObjectOfClosestCodeBlock): (JSC::CallFrame::friendlyFunctionName): (JSC::CallFrame::dump const): (JSC::CallFrame::convertToStackOverflowFrame): (JSC::CallFrame::lexicalGlobalObjectFromNativeCallee const): (JSC::CallFrame::codeOwnerCellSlow const): (JSC::CallFrame::lexicalGlobalObjectFromWasmCallee const): Deleted. * Source/JavaScriptCore/interpreter/CallFrame.h: * Source/JavaScriptCore/interpreter/CallFrameInlines.h: (JSC::CallFrame::guaranteedJSValueCallee const): (JSC::CallFrame::jsCallee const): (JSC::CallFrame::codeBlock const): (JSC::CallFrame::lexicalGlobalObject const): (JSC::CallFrame::wasmInstance const): (JSC::CallFrame::codeOwnerCell const): (JSC::CallFrame::isStackOverflowFrame const): (JSC::CallFrame::isNativeCalleeFrame const): (JSC::CallFrame::isWasmFrame const): Deleted. * Source/JavaScriptCore/interpreter/CalleeBits.h: (JSC::CalleeBits::boxWasm): (JSC::CalleeBits::isNativeCallee const): (JSC::CalleeBits::isCell const): (JSC::CalleeBits::asCell const): (JSC::CalleeBits::asNativeCallee const): (JSC::CalleeBits::isWasm const): Deleted. (JSC::CalleeBits::asWasmCallee const): Deleted. * Source/JavaScriptCore/interpreter/Interpreter.cpp: (JSC::GetStackTraceFunctor::operator() const): (JSC::UnwindFunctor::operator() const): (JSC::UnwindFunctor::notifyDebuggerOfUnwinding): (JSC::Interpreter::unwind): * Source/JavaScriptCore/interpreter/ShadowChicken.cpp: (JSC::ShadowChicken::update): * Source/JavaScriptCore/interpreter/StackVisitor.cpp: (JSC::StackVisitor::readFrame): (JSC::StackVisitor::readNonInlinedFrame): (JSC::StackVisitor::readInlinableNativeCalleeFrame): (JSC::StackVisitor::Frame::codeType const): (JSC::StackVisitor::Frame::calleeSaveRegistersForUnwinding): (JSC::StackVisitor::Frame::isImplementationVisibilityPrivate const): (JSC::StackVisitor::readInlinableWasmFrame): Deleted. * Source/JavaScriptCore/interpreter/StackVisitor.h: (JSC::StackVisitor::Frame::isNativeFrame const): (JSC::StackVisitor::Frame::isInlinedDFGFrame const): (JSC::StackVisitor::Frame::isNativeCalleeFrame const): (JSC::StackVisitor::Frame::wasmFunctionIndexOrName): (JSC::StackVisitor::Frame::isWasmFrame const): Deleted. * Source/JavaScriptCore/jit/JITExceptions.cpp: (JSC::genericUnwind): * Source/JavaScriptCore/jit/JITOperations.cpp: (JSC::JSC_DEFINE_JIT_OPERATION): * Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.cpp: (JSC::PolymorphicCallStubRoutine::PolymorphicCallStubRoutine): * Source/JavaScriptCore/jsc.cpp: (JSC_DEFINE_HOST_FUNCTION): * Source/JavaScriptCore/llint/InPlaceInterpreter.asm: * Source/JavaScriptCore/llint/LowLevelInterpreter.asm: * Source/JavaScriptCore/llint/WebAssembly.asm: * Source/JavaScriptCore/runtime/ArrayConstructor.cpp: (JSC::isArraySlowInline): * Source/JavaScriptCore/runtime/Error.cpp: (JSC::FindFirstCallerFrameWithCodeblockFunctor::operator() const): * Source/JavaScriptCore/runtime/InitializeThreading.cpp: (JSC::initialize): * Source/JavaScriptCore/runtime/JSCJSValue.h: * Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp: (JSC::getCallerCodeBlock): * Source/JavaScriptCore/runtime/NativeCallee.cpp: Copied from Source/JavaScriptCore/wasm/WasmCalleeRegistry.cpp. (JSC::NativeCallee::NativeCallee): (JSC::NativeCallee::dump const): (JSC::NativeCallee::operator delete): * Source/JavaScriptCore/runtime/NativeCallee.h: Copied from Source/JavaScriptCore/wasm/WasmCalleeRegistry.cpp. (JSC::NativeCallee::category const): (JSC::NativeCallee::implementationVisibility const): * Source/JavaScriptCore/runtime/NativeCalleeRegistry.cpp: Renamed from Source/JavaScriptCore/wasm/WasmCalleeRegistry.cpp. (JSC::NativeCalleeRegistry::initialize): (JSC::NativeCalleeRegistry::singleton): * Source/JavaScriptCore/runtime/NativeCalleeRegistry.h: Renamed from Source/JavaScriptCore/wasm/WasmCalleeRegistry.h. (JSC::NativeCalleeRegistry::WTF_RETURNS_LOCK): (JSC::NativeCalleeRegistry::registerCallee): (JSC::NativeCalleeRegistry::unregisterCallee): (JSC::NativeCalleeRegistry::WTF_REQUIRES_LOCK): (JSC::NativeCalleeRegistry::addPCToCodeOriginMap): * Source/JavaScriptCore/runtime/SamplingProfiler.cpp: (JSC::FrameWalker::recordJITFrame): (JSC::FrameWalker::resetAtMachineFrame): (JSC::SamplingProfiler::takeSample): (JSC::SamplingProfiler::processUnverifiedStackTraces): * Source/JavaScriptCore/runtime/VM.cpp: (JSC::VM::throwException): * Source/JavaScriptCore/runtime/VMInlines.h: (JSC::VM::topJSCallFrame const): * Source/JavaScriptCore/runtime/VMTraps.cpp: (JSC::VMTraps::invalidateCodeBlocksOnStack): * Source/JavaScriptCore/tools/JSDollarVM.cpp: (JSC::JSC_DEFINE_HOST_FUNCTION): * Source/JavaScriptCore/tools/VMInspector.cpp: (JSC::VMInspector::dumpRegisters): * Source/JavaScriptCore/wasm/WasmAirIRGenerator32_64.cpp: (JSC::Wasm::buildEntryBufferForCatch32): (JSC::Wasm::emitCatchPrologueShared): * Source/JavaScriptCore/wasm/WasmAirIRGeneratorBase.h: (JSC::Wasm::ExpressionType>::AirIRGeneratorBase): * Source/JavaScriptCore/wasm/WasmBBQJIT.cpp: (JSC::Wasm::BBQJIT::addTopLevel): (JSC::Wasm::BBQJIT::addLoopOSREntrypoint): * Source/JavaScriptCore/wasm/WasmBBQPlan.cpp: (JSC::Wasm::BBQPlan::work): (JSC::Wasm::BBQPlan::initializeCallees): * Source/JavaScriptCore/wasm/WasmCallee.cpp: (JSC::Wasm::Callee::Callee): (JSC::Wasm::Callee::destroy): (JSC::Wasm::JITCallee::setEntrypoint): (JSC::Wasm::WasmToJSCallee::WasmToJSCallee): (JSC::Wasm::IPIntCallee::setEntrypoint): (JSC::Wasm::LLIntCallee::setEntrypoint): (JSC::Wasm::Callee::operator delete): Deleted. * Source/JavaScriptCore/wasm/WasmCallee.h: (JSC::Wasm::Callee::compilationMode const): (JSC::Wasm::Callee::implementationVisibility const): Deleted. * Source/JavaScriptCore/wasm/WasmCompilationMode.h: * Source/JavaScriptCore/wasm/WasmFaultSignalHandler.cpp: (JSC::Wasm::trapHandler): * Source/JavaScriptCore/wasm/WasmIPIntPlan.cpp: (JSC::Wasm::IPIntPlan::didCompleteCompilation): * Source/JavaScriptCore/wasm/WasmIRGeneratorHelpers.h: (JSC::Wasm::buildEntryBufferForCatch): * Source/JavaScriptCore/wasm/WasmLLIntPlan.cpp: (JSC::Wasm::LLIntPlan::didCompleteCompilation): * Source/JavaScriptCore/wasm/WasmOMGPlan.cpp: (JSC::Wasm::OMGPlan::work): * Source/JavaScriptCore/wasm/WasmOperations.cpp: (JSC::Wasm::JSC_DEFINE_JIT_OPERATION): * Source/JavaScriptCore/wasm/WasmSlowPaths.cpp: (JSC::LLInt::WASM_IPINT_EXTERN_CPP_DECL): * Source/JavaScriptCore/wasm/WasmThunks.cpp: (JSC::Wasm::catchInWasmThunkGenerator): * Source/JavaScriptCore/wasm/js/JSToWasm.cpp: (JSC::Wasm::createJSToWasmWrapper): * Source/JavaScriptCore/wasm/js/WasmToJS.cpp: (JSC::Wasm::wasmToJS): * Source/JavaScriptCore/wasm/js/WebAssemblyFunction.cpp: (JSC::WebAssemblyFunction::jsCallEntrypointSlow): Canonical link: https://commits.webkit.org/267071@main
1 parent 75237ef commit 31e3bbe

58 files changed

Lines changed: 538 additions & 308 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎Source/JavaScriptCore/CMakeLists.txt‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1169,6 +1169,7 @@ set(JavaScriptCore_PRIVATE_FRAMEWORK_HEADERS
11691169
runtime/MemoryStatistics.h
11701170
runtime/Microtask.h
11711171
runtime/ModuleProgramExecutable.h
1172+
runtime/NativeCallee.h
11721173
runtime/NativeExecutable.h
11731174
runtime/NativeFunction.h
11741175
runtime/NullGetterFunction.h

‎Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj‎

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1997,6 +1997,7 @@
19971997
E367062A2A2705DB00CF892F /* StringSplitCacheInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = E36706282A2705DB00CF892F /* StringSplitCacheInlines.h */; };
19981998
E367062B2A2705DB00CF892F /* StringSplitCache.h in Headers */ = {isa = PBXBuildFile; fileRef = E36706292A2705DB00CF892F /* StringSplitCache.h */; settings = {ATTRIBUTES = (Private, ); }; };
19991999
E36CC9472086314F0051FFD6 /* WasmCreationMode.h in Headers */ = {isa = PBXBuildFile; fileRef = E36CC9462086314F0051FFD6 /* WasmCreationMode.h */; settings = {ATTRIBUTES = (Private, ); }; };
2000+
E36D2BB82A8D9E5C001CF154 /* NativeCalleeRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = E36D2BB62A8D9E5B001CF154 /* NativeCalleeRegistry.h */; settings = {ATTRIBUTES = (Private, ); }; };
20002001
E36EDCE524F0975700E60DA2 /* Concurrency.h in Headers */ = {isa = PBXBuildFile; fileRef = E36EDCE424F0975700E60DA2 /* Concurrency.h */; settings = {ATTRIBUTES = (Private, ); }; };
20012002
E3711992253FA87F00BA69A0 /* Gate.h in Headers */ = {isa = PBXBuildFile; fileRef = E3711991253FA87E00BA69A0 /* Gate.h */; settings = {ATTRIBUTES = (Private, ); }; };
20022003
E374166E26912BC700C80789 /* ObjectConstructorInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = E374166D26912BC700C80789 /* ObjectConstructorInlines.h */; };
@@ -2072,7 +2073,7 @@
20722073
E3F23A811ECF13FA00978D99 /* SnippetParams.h in Headers */ = {isa = PBXBuildFile; fileRef = E3F23A7C1ECF13E500978D99 /* SnippetParams.h */; settings = {ATTRIBUTES = (Private, ); }; };
20732074
E3F23A821ECF13FE00978D99 /* Snippet.h in Headers */ = {isa = PBXBuildFile; fileRef = E3F23A7B1ECF13E500978D99 /* Snippet.h */; settings = {ATTRIBUTES = (Private, ); }; };
20742075
E3F429BD2A41742F00C5FEFF /* AirOptimizePairedLoadStore.h in Headers */ = {isa = PBXBuildFile; fileRef = E3F429BB2A41742700C5FEFF /* AirOptimizePairedLoadStore.h */; };
2075-
E3FB853A22F3667B008F90ED /* WasmCalleeRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = E3FB853822F36674008F90ED /* WasmCalleeRegistry.h */; };
2076+
E3F52B2B2A8D9BB70080E92D /* NativeCallee.h in Headers */ = {isa = PBXBuildFile; fileRef = E3F52B292A8D9BB60080E92D /* NativeCallee.h */; settings = {ATTRIBUTES = (Private, ); }; };
20762077
E3FCCB642310A90D00238E72 /* ConstructorKind.h in Headers */ = {isa = PBXBuildFile; fileRef = E3FCCB632310A90D00238E72 /* ConstructorKind.h */; settings = {ATTRIBUTES = (Private, ); }; };
20772078
E3FF75331D9CEA1800C7E16D /* DOMJITGetterSetter.h in Headers */ = {isa = PBXBuildFile; fileRef = E3FF752F1D9CEA1200C7E16D /* DOMJITGetterSetter.h */; settings = {ATTRIBUTES = (Private, ); }; };
20782079
E49DC16C12EF294E00184A1F /* SourceProviderCache.h in Headers */ = {isa = PBXBuildFile; fileRef = E49DC15112EF272200184A1F /* SourceProviderCache.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -5617,6 +5618,8 @@
56175618
E36706292A2705DB00CF892F /* StringSplitCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StringSplitCache.h; sourceTree = "<group>"; };
56185619
E36B480123E9573800E4A66E /* UnlinkedCodeBlockGenerator.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = UnlinkedCodeBlockGenerator.cpp; sourceTree = "<group>"; };
56195620
E36CC9462086314F0051FFD6 /* WasmCreationMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WasmCreationMode.h; sourceTree = "<group>"; };
5621+
E36D2BB62A8D9E5B001CF154 /* NativeCalleeRegistry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NativeCalleeRegistry.h; sourceTree = "<group>"; };
5622+
E36D2BB72A8D9E5B001CF154 /* NativeCalleeRegistry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NativeCalleeRegistry.cpp; sourceTree = "<group>"; };
56205623
E36EDCE424F0975700E60DA2 /* Concurrency.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Concurrency.h; sourceTree = "<group>"; };
56215624
E3711991253FA87E00BA69A0 /* Gate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Gate.h; sourceTree = "<group>"; };
56225625
E374166D26912BC700C80789 /* ObjectConstructorInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjectConstructorInlines.h; sourceTree = "<group>"; };
@@ -5744,8 +5747,8 @@
57445747
E3F23A7E1ECF13E500978D99 /* SnippetSlowPathCalls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SnippetSlowPathCalls.h; sourceTree = "<group>"; };
57455748
E3F429BB2A41742700C5FEFF /* AirOptimizePairedLoadStore.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AirOptimizePairedLoadStore.h; path = b3/air/AirOptimizePairedLoadStore.h; sourceTree = "<group>"; };
57465749
E3F429BC2A41742700C5FEFF /* AirOptimizePairedLoadStore.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AirOptimizePairedLoadStore.cpp; path = b3/air/AirOptimizePairedLoadStore.cpp; sourceTree = "<group>"; };
5747-
E3FB853822F36674008F90ED /* WasmCalleeRegistry.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WasmCalleeRegistry.h; sourceTree = "<group>"; };
5748-
E3FB853922F36674008F90ED /* WasmCalleeRegistry.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = WasmCalleeRegistry.cpp; sourceTree = "<group>"; };
5750+
E3F52B292A8D9BB60080E92D /* NativeCallee.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NativeCallee.h; sourceTree = "<group>"; };
5751+
E3F52B2A2A8D9BB70080E92D /* NativeCallee.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NativeCallee.cpp; sourceTree = "<group>"; };
57495752
E3FC25102256ECF400583518 /* DoublePredictionFuzzerAgent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DoublePredictionFuzzerAgent.cpp; sourceTree = "<group>"; };
57505753
E3FC25112256ECF400583518 /* DoublePredictionFuzzerAgent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DoublePredictionFuzzerAgent.h; sourceTree = "<group>"; };
57515754
E3FCCB632310A90D00238E72 /* ConstructorKind.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConstructorKind.h; sourceTree = "<group>"; };
@@ -7621,8 +7624,6 @@
76217624
525C0DD81E935847002184CD /* WasmCallee.h */,
76227625
526AC4B41E977C5D003500E1 /* WasmCalleeGroup.cpp */,
76237626
526AC4B51E977C5D003500E1 /* WasmCalleeGroup.h */,
7624-
E3FB853922F36674008F90ED /* WasmCalleeRegistry.cpp */,
7625-
E3FB853822F36674008F90ED /* WasmCalleeRegistry.h */,
76267627
53FD04D11D7AB187003287D3 /* WasmCallingConvention.cpp */,
76277628
53FD04D21D7AB187003287D3 /* WasmCallingConvention.h */,
76287629
E35C88C42984F411005A3CDA /* WasmCallsiteCollection.cpp */,
@@ -8438,6 +8439,10 @@
84388439
276B39052A71D2B300252F4E /* ModuleProgramExecutableInlines.h */,
84398440
CE27A3D723759BAC0089605E /* NarrowingNumberPredictionFuzzerAgent.cpp */,
84408441
CE27A3D823759BAC0089605E /* NarrowingNumberPredictionFuzzerAgent.h */,
8442+
E3F52B2A2A8D9BB70080E92D /* NativeCallee.cpp */,
8443+
E3F52B292A8D9BB60080E92D /* NativeCallee.h */,
8444+
E36D2BB72A8D9E5B001CF154 /* NativeCalleeRegistry.cpp */,
8445+
E36D2BB62A8D9E5B001CF154 /* NativeCalleeRegistry.h */,
84418446
BC02E9080E1839DB000F9297 /* NativeErrorConstructor.cpp */,
84428447
BC02E9090E1839DB000F9297 /* NativeErrorConstructor.h */,
84438448
276B38FD2A71D2B200252F4E /* NativeErrorConstructorInlines.h */,
@@ -11329,6 +11334,8 @@
1132911334
A79D3ED9C5064DD0A8466A3A /* ModuleScopeData.h in Headers */,
1133011335
0F1FB3991E1F65FB00A9BE50 /* MutatorScheduler.h in Headers */,
1133111336
0FA762071DB9243300B7A2FD /* MutatorState.h in Headers */,
11337+
E3F52B2B2A8D9BB70080E92D /* NativeCallee.h in Headers */,
11338+
E36D2BB82A8D9E5C001CF154 /* NativeCalleeRegistry.h in Headers */,
1133211339
BC02E9110E1839DB000F9297 /* NativeErrorConstructor.h in Headers */,
1133311340
276B39152A71D2B600252F4E /* NativeErrorConstructorInlines.h in Headers */,
1133411341
BC02E9130E1839DB000F9297 /* NativeErrorPrototype.h in Headers */,
@@ -11706,7 +11713,6 @@
1170611713
37AAC093279F1BFC00D64842 /* WasmBranchHintsSectionParser.h in Headers */,
1170711714
525C0DDA1E935847002184CD /* WasmCallee.h in Headers */,
1170811715
526AC4B71E977C5D003500E1 /* WasmCalleeGroup.h in Headers */,
11709-
E3FB853A22F3667B008F90ED /* WasmCalleeRegistry.h in Headers */,
1171011716
53FD04D41D7AB291003287D3 /* WasmCallingConvention.h in Headers */,
1171111717
E34D4FAA2984F25B00CE5F9F /* WasmCallsiteCollection.h in Headers */,
1171211718
E337B967224324EA0093A820 /* WasmCapabilities.h in Headers */,

‎Source/JavaScriptCore/Sources.txt‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -972,6 +972,8 @@ runtime/MemoryMode.cpp
972972
runtime/MemoryStatistics.cpp
973973
runtime/ModuleProgramExecutable.cpp
974974
runtime/NarrowingNumberPredictionFuzzerAgent.cpp
975+
runtime/NativeCallee.cpp
976+
runtime/NativeCalleeRegistry.cpp
975977
runtime/NativeErrorConstructor.cpp
976978
runtime/NativeErrorPrototype.cpp
977979
runtime/NativeExecutable.cpp
@@ -1109,7 +1111,6 @@ wasm/WasmBinding.cpp
11091111
wasm/WasmBranchHintsSectionParser.cpp
11101112
wasm/WasmCallee.cpp
11111113
wasm/WasmCalleeGroup.cpp
1112-
wasm/WasmCalleeRegistry.cpp
11131114
wasm/WasmCallingConvention.cpp
11141115
wasm/WasmCompilationMode.cpp
11151116
wasm/WasmContext.cpp

‎Source/JavaScriptCore/bytecode/CodeBlock.cpp‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2358,7 +2358,8 @@ void CodeBlock::noticeIncomingCall(CallFrame* callerFrame)
23582358
{
23592359
RELEASE_ASSERT(!m_isJettisoned);
23602360

2361-
CodeBlock* callerCodeBlock = callerFrame->isWasmFrame() ? nullptr : callerFrame->codeBlock();
2361+
auto* owner = callerFrame->codeOwnerCell();
2362+
CodeBlock* callerCodeBlock = jsDynamicCast<CodeBlock*>(owner);
23622363

23632364
dataLogLnIf(Options::verboseCallLink(), "Noticing call link from ", pointerDump(callerCodeBlock), " to ", *this);
23642365

‎Source/JavaScriptCore/bytecode/Repatch.cpp‎

Lines changed: 11 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -89,18 +89,6 @@ static void linkSlowFor(VM& vm, CallLinkInfo& callLinkInfo)
8989
linkSlowPathTo(vm, callLinkInfo, virtualThunk);
9090
}
9191

92-
static JSCell* webAssemblyOwner(CallFrame* callFrame)
93-
{
94-
#if ENABLE(WEBASSEMBLY)
95-
// Each WebAssembly.Instance shares the stubs from their WebAssembly.Module, which are therefore the appropriate owner.
96-
return jsCast<JSWebAssemblyInstance*>(callFrame->wasmInstance()->owner())->module();
97-
#else
98-
UNUSED_PARAM(callFrame);
99-
RELEASE_ASSERT_NOT_REACHED();
100-
return nullptr;
101-
#endif // ENABLE(WEBASSEMBLY)
102-
}
103-
10492
void linkMonomorphicCall(
10593
VM& vm, CallFrame* callFrame, CallLinkInfo& callLinkInfo, CodeBlock* calleeCodeBlock,
10694
JSObject* callee, CodePtr<JSEntryPtrTag> codePtr)
@@ -109,18 +97,8 @@ void linkMonomorphicCall(
10997

11098
CallFrame* callerFrame = callFrame->callerFrame();
11199

112-
// WebAssembly -> JS stubs don't have a valid CodeBlock.
113-
CodeBlock* callerCodeBlock = nullptr;
114-
JSCell* owner = nullptr;
115-
if (callerFrame->isWasmFrame()) {
116-
// When calling this from Wasm, callee is Wasm::Callee.
117-
owner = webAssemblyOwner(callerFrame);
118-
} else {
119-
// Our caller must have a cell for a callee.
120-
ASSERT(callerFrame->callee().isCell());
121-
callerCodeBlock = callerFrame->codeBlock();
122-
owner = callerCodeBlock;
123-
}
100+
JSCell* owner = callerFrame->codeOwnerCell();
101+
CodeBlock* callerCodeBlock = jsDynamicCast<CodeBlock*>(owner); // WebAssembly -> JS stubs don't have a valid CodeBlock.
124102
ASSERT(owner);
125103

126104
ASSERT(!callLinkInfo.isLinked());
@@ -1711,10 +1689,8 @@ static void linkVirtualFor(VM& vm, CallFrame* callFrame, CallLinkInfo& callLinkI
17111689
{
17121690
CallFrame* callerFrame = callFrame->callerFrame();
17131691

1714-
// WebAssembly -> JS stubs don't have a valid CodeBlock.
1715-
CodeBlock* callerCodeBlock = nullptr;
1716-
if (!callerFrame->isWasmFrame())
1717-
callerCodeBlock = callerFrame->codeBlock();
1692+
JSCell* owner = callerFrame->codeOwnerCell();
1693+
CodeBlock* callerCodeBlock = jsDynamicCast<CodeBlock*>(owner); // WebAssembly -> JS stubs don't have a valid CodeBlock.
17181694

17191695
dataLogLnIf(shouldDumpDisassemblyFor(callerCodeBlock),
17201696
"Linking virtual call at ", FullCodeOrigin(callerCodeBlock, callerCodeBlock ? callerFrame->codeOrigin() : CodeOrigin { }));
@@ -1747,19 +1723,14 @@ void linkPolymorphicCall(JSGlobalObject* globalObject, CallFrame* callFrame, Cal
17471723
return;
17481724
}
17491725

1750-
// WebAssembly -> JS stubs don't have a valid CodeBlock.
1751-
CodeBlock* callerCodeBlock = nullptr;
1752-
JSCell* owner = nullptr;
1753-
bool isWebAssembly = callerFrame->isWasmFrame();
1754-
if (isWebAssembly) {
1755-
// When calling this from Wasm, callee is Wasm::Callee.
1756-
owner = webAssemblyOwner(callerFrame);
1757-
} else {
1758-
// Our caller must have a cell for a callee.
1759-
callerCodeBlock = callerFrame->codeBlock();
1760-
owner = callerCodeBlock;
1761-
}
1726+
JSCell* owner = callerFrame->codeOwnerCell();
1727+
CodeBlock* callerCodeBlock = jsDynamicCast<CodeBlock*>(owner); // WebAssembly -> JS stubs don't have a valid CodeBlock.
17621728
ASSERT(owner);
1729+
#if ENABLE(WEBASSEMBLY)
1730+
bool isWebAssembly = owner->inherits<JSWebAssemblyModule>();
1731+
#else
1732+
bool isWebAssembly = false;
1733+
#endif
17631734

17641735
CallVariantList list;
17651736
if (PolymorphicCallStubRoutine* stub = callLinkInfo.stub())

‎Source/JavaScriptCore/debugger/DebuggerCallFrame.cpp‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ DebuggerScope* DebuggerCallFrame::scope(VM& vm)
149149

150150
if (!m_scope) {
151151
JSScope* scope;
152-
CodeBlock* codeBlock = m_validMachineFrame->isWasmFrame() ? nullptr : m_validMachineFrame->codeBlock();
152+
CodeBlock* codeBlock = m_validMachineFrame->isNativeCalleeFrame() ? nullptr : m_validMachineFrame->codeBlock();
153153
if (isTailDeleted())
154154
scope = m_shadowChickenFrame.scope;
155155
else if (codeBlock && codeBlock->scopeRegister().isValid())
@@ -192,7 +192,7 @@ JSValue DebuggerCallFrame::thisValue(VM& vm) const
192192
codeBlock = m_shadowChickenFrame.codeBlock;
193193
} else {
194194
thisValue = m_validMachineFrame->thisValue();
195-
codeBlock = m_validMachineFrame->isWasmFrame() ? nullptr : m_validMachineFrame->codeBlock();
195+
codeBlock = m_validMachineFrame->isNativeCalleeFrame() ? nullptr : m_validMachineFrame->codeBlock();
196196
}
197197

198198
if (!thisValue)
@@ -219,7 +219,7 @@ JSValue DebuggerCallFrame::evaluateWithScopeExtension(VM& vm, const String& scri
219219
if (debuggerCallFrame->isTailDeleted())
220220
codeBlock = debuggerCallFrame->m_shadowChickenFrame.codeBlock;
221221
else
222-
codeBlock = callFrame->isWasmFrame() ? nullptr : callFrame->codeBlock();
222+
codeBlock = callFrame->isNativeCalleeFrame() ? nullptr : callFrame->codeBlock();
223223
}
224224

225225
if (callFrame && codeBlock)
@@ -318,7 +318,7 @@ SourceID DebuggerCallFrame::sourceIDForCallFrame(CallFrame* callFrame)
318318
{
319319
if (!callFrame)
320320
return noSourceID;
321-
if (callFrame->isWasmFrame())
321+
if (callFrame->isNativeCalleeFrame())
322322
return noSourceID;
323323
CodeBlock* codeBlock = callFrame->codeBlock();
324324
if (!codeBlock)

‎Source/JavaScriptCore/dfg/DFGDoesGCCheck.cpp‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ void DoesGCCheck::verifyCanGC(VM& vm)
6969

7070
CallFrame* callFrame = vm.topCallFrame;
7171
if (callFrame) {
72-
if (!callFrame->isWasmFrame())
72+
if (!callFrame->isNativeCalleeFrame())
7373
dataLogLn(" in ", callFrame->codeBlock());
7474
VMInspector::dumpStack(&vm, callFrame);
7575
}

‎Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -685,7 +685,7 @@ static String functionName(JSC::CodeBlock& codeBlock)
685685

686686
static String functionName(JSC::CallFrame* callFrame)
687687
{
688-
if (callFrame->isWasmFrame())
688+
if (callFrame->isNativeCalleeFrame())
689689
return nullString();
690690

691691
if (auto* codeBlock = callFrame->codeBlock())

‎Source/JavaScriptCore/interpreter/CallFrame.cpp‎

Lines changed: 52 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@
3131
#include "InlineCallFrame.h"
3232
#include "JSCInlines.h"
3333
#include "JSWebAssemblyInstance.h"
34+
#include "JSWebAssemblyModule.h"
3435
#include "LLIntPCRanges.h"
36+
#include "NativeCallee.h"
3537
#include "VMEntryRecord.h"
3638
#include "VMEntryScopeInlines.h"
3739
#include "WasmContext.h"
@@ -120,7 +122,7 @@ unsigned CallFrame::callSiteBitsAsBytecodeOffset() const
120122

121123
BytecodeIndex CallFrame::bytecodeIndex() const
122124
{
123-
if (callee().isWasm())
125+
if (callee().isNativeCallee())
124126
return callSiteIndex().bytecodeIndex();
125127
if (!codeBlock())
126128
return BytecodeIndex(0);
@@ -229,7 +231,8 @@ JSGlobalObject* CallFrame::globalObjectOfClosestCodeBlock(VM& vm, CallFrame* cal
229231
// rdar://83691438
230232
JSGlobalObject* globalObject = nullptr;
231233
StackVisitor::visit(callFrame, vm, [&](StackVisitor& visitor) {
232-
if (visitor->isWasmFrame()) {
234+
// Note that this is OK for InlineCache Callee.
235+
if (visitor->isNativeCalleeFrame()) {
233236
globalObject = visitor->callFrame()->lexicalGlobalObject(vm);
234237
return IterationStatus::Done;
235238
}
@@ -251,7 +254,7 @@ JSGlobalObject* CallFrame::globalObjectOfClosestCodeBlock(VM& vm, CallFrame* cal
251254

252255
String CallFrame::friendlyFunctionName()
253256
{
254-
if (this->isWasmFrame())
257+
if (this->isNativeCalleeFrame())
255258
return emptyString();
256259

257260
CodeBlock* codeBlock = this->codeBlock();
@@ -277,14 +280,23 @@ String CallFrame::friendlyFunctionName()
277280

278281
void CallFrame::dump(PrintStream& out) const
279282
{
280-
if (this->isWasmFrame()) {
283+
if (this->isNativeCalleeFrame()) {
284+
auto* nativeCallee = callee().asNativeCallee();
285+
switch (nativeCallee->category()) {
286+
case NativeCallee::Category::Wasm: {
281287
#if ENABLE(WEBASSEMBLY)
282-
Wasm::Callee* wasmCallee = callee().asWasmCallee();
283-
out.print(Wasm::makeString(wasmCallee->indexOrName()), " [", Wasm::makeString(wasmCallee->compilationMode()), "]");
284-
out.print("(Wasm::Instance: ", RawPointer(wasmInstance()), ")");
288+
auto* wasmCallee = static_cast<Wasm::Callee*>(nativeCallee);
289+
out.print(Wasm::makeString(wasmCallee->indexOrName()), " [", Wasm::makeString(wasmCallee->compilationMode()), "]");
290+
out.print("(Wasm::Instance: ", RawPointer(wasmInstance()), ")");
285291
#else
286-
out.print(RawPointer(returnPCForInspection()));
292+
out.print(RawPointer(returnPCForInspection()));
287293
#endif
294+
break;
295+
}
296+
case NativeCallee::Category::InlineCache:
297+
out.print(RawPointer(returnPCForInspection()));
298+
break;
299+
}
288300
return;
289301
}
290302

@@ -336,7 +348,7 @@ void CallFrame::convertToStackOverflowFrame(VM& vm, CodeBlock* codeBlockToKeepAl
336348
CallFrame* throwOriginFrame = this;
337349
do {
338350
throwOriginFrame = throwOriginFrame->callerFrame(entryFrame);
339-
} while (throwOriginFrame && throwOriginFrame->callee().isWasm());
351+
} while (throwOriginFrame && throwOriginFrame->callee().isNativeCallee());
340352

341353
JSObject* originCallee = throwOriginFrame ? throwOriginFrame->jsCallee() : vmEntryRecord(vm.topEntryFrame)->callee();
342354
JSObject* stackOverflowCallee = originCallee->globalObject()->stackOverflowFrameCallee();
@@ -346,12 +358,40 @@ void CallFrame::convertToStackOverflowFrame(VM& vm, CodeBlock* codeBlockToKeepAl
346358
setArgumentCountIncludingThis(0);
347359
}
348360

349-
#if ENABLE(WEBASSEMBLY)
350-
JSGlobalObject* CallFrame::lexicalGlobalObjectFromWasmCallee(VM&) const
361+
JSGlobalObject* CallFrame::lexicalGlobalObjectFromNativeCallee(VM& vm) const
351362
{
352-
return wasmInstance()->globalObject();
363+
auto* nativeCallee = callee().asNativeCallee();
364+
switch (nativeCallee->category()) {
365+
case NativeCallee::Category::Wasm: {
366+
#if ENABLE(WEBASSEMBLY)
367+
return wasmInstance()->globalObject();
368+
#else
369+
return nullptr;
370+
#endif
371+
}
372+
case NativeCallee::Category::InlineCache: {
373+
return callerFrame()->lexicalGlobalObject(vm);
374+
}
375+
}
376+
return nullptr;
353377
}
378+
379+
JSCell* CallFrame::codeOwnerCellSlow() const
380+
{
381+
auto* nativeCallee = callee().asNativeCallee();
382+
switch (nativeCallee->category()) {
383+
case NativeCallee::Category::Wasm: {
384+
#if ENABLE(WEBASSEMBLY)
385+
return jsCast<JSWebAssemblyInstance*>(wasmInstance()->owner())->module();
386+
#else
387+
return nullptr;
354388
#endif
389+
}
390+
case NativeCallee::Category::InlineCache:
391+
return callerFrame()->codeOwnerCell();
392+
}
393+
return nullptr;
394+
}
355395

356396
bool isFromJSCode(void* returnAddress)
357397
{

0 commit comments

Comments
 (0)